From cce90ce8fd2abb9591681ac257b0778ff214cadb Mon Sep 17 00:00:00 2001 From: WayofTime Date: Tue, 24 Jun 2014 21:08:29 -0400 Subject: [PATCH] File creation and first crack at default .zip folder --- .../AlchemicalWizardry.java | 49 ++++- .../common/demonVillage/BlockSet.java | 42 +++- .../demonVillage/BuildingSchematic.java | 16 +- .../common/demonVillage/DemonBuilding.java | 55 +++++ .../common/demonVillage/GridSpaceHolder.java | 3 + .../rituals/RitualEffectItemSuction.java | 5 +- .../common/tileEntity/TEDemonPortal.java | 205 +++++++++++++----- .../schematics/building/buildings.zip | Bin 0 -> 766 bytes 8 files changed, 310 insertions(+), 65 deletions(-) create mode 100644 1.7.2/main/resources/assets/alchemicalwizardry/schematics/building/buildings.zip diff --git a/1.7.2/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/1.7.2/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index 62edf13c..d773cb1a 100644 --- a/1.7.2/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/1.7.2/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -1,8 +1,12 @@ package WayofTime.alchemicalWizardry; import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; import joshie.alchemicalWizardy.ShapedBloodOrbRecipe; import joshie.alchemicalWizardy.ShapelessBloodOrbRecipe; @@ -236,9 +240,50 @@ public class AlchemicalWizardry @EventHandler public void preInit(FMLPreInitializationEvent event) { - (new File("config/BloodMagic/schematics")).mkdirs(); + File bmDirectory = new File("config/BloodMagic/schematics"); - TEDemonPortal.loadBuildingList(); + if(!bmDirectory.exists() && bmDirectory.mkdirs()) + { + try + { + InputStream in = AlchemicalWizardry.class.getResourceAsStream("/assets/alchemicalwizardry/schematics/building/buildings.zip"); + System.out.println("none yet!"); + if(in != null) + { + System.out.println("I have found a zip!"); + ZipInputStream zipStream = new ZipInputStream(in); + ZipEntry entry = null; + + int extractCount = 0; + + while((entry = zipStream.getNextEntry()) != null) + { + File file = new File(bmDirectory, entry.getName()); + if(file.exists() && file.length() > 3L) + { + continue; + } + FileOutputStream out = new FileOutputStream(file); + + byte[] buffer = new byte[8192]; + int len; + while((len = zipStream.read(buffer)) != -1) + { + out.write(buffer, 0, len); + } + out.close(); + + extractCount++; + } + } + } + catch(Exception e) + { + + } + } + + TEDemonPortal.loadBuildingList(); MinecraftForge.EVENT_BUS.register(new LifeBucketHandler()); BloodMagicConfiguration.init(new File(event.getModConfigurationDirectory(), "AWWayofTime.cfg")); diff --git a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BlockSet.java b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BlockSet.java index 17800940..008ef748 100644 --- a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BlockSet.java +++ b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BlockSet.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import net.minecraft.block.Block; +import net.minecraft.block.BlockStairs; import net.minecraft.init.Blocks; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -41,6 +42,45 @@ public class BlockSet { metadata[i] = meta; } + if(block instanceof BlockStairs) + { + int[] northSet = new int[]{2,3,0,1}; + int[] eastSet = new int[]{1,0,2,3}; + int[] southSet = new int[]{3,2,1,0}; + int[] westSet = new int[]{0,1,3,2}; + int[] northUpSet = new int[]{6,7,4,5}; + int[] eastUpSet = new int[]{5,4,6,7}; + int[] southUpSet = new int[]{7,6,5,4}; + int[] westUpSet = new int[]{4,5,7,6}; + + switch(meta) + { + case 0: + metadata = westSet; + break; + case 1: + metadata = eastSet; + break; + case 2: + metadata = northSet; + break; + case 3: + metadata = southSet; + break; + case 4: + metadata = westUpSet; + break; + case 5: + metadata = eastUpSet; + break; + case 6: + metadata = northUpSet; + break; + case 7: + metadata = southUpSet; + break; + } + } } public List getPositions() @@ -121,7 +161,7 @@ public class BlockSet break; case SOUTH: xOff *= -1; - yOff *= -1; + zOff *= -1; break; case WEST: int temp = zOff; diff --git a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BuildingSchematic.java b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BuildingSchematic.java index ec58a6b0..4aa032f3 100644 --- a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BuildingSchematic.java +++ b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/BuildingSchematic.java @@ -11,6 +11,8 @@ import WayofTime.alchemicalWizardry.common.Int3; public class BuildingSchematic { public String name; + public int doorX; + public int doorZ; public List blockList; public BuildingSchematic() @@ -22,6 +24,8 @@ public class BuildingSchematic { this.name = name; blockList = new ArrayList(); + this.doorX = 0; + this.doorZ = 0; } public void addBlockWithMeta(Block block, int meta, int xOffset, int yOffset, int zOffset) @@ -58,11 +62,19 @@ public class BuildingSchematic { int gridX = (int)((coords.xCoord+2*Math.signum(coords.xCoord))/5); int gridZ = (int)((coords.zCoord+2*Math.signum(coords.zCoord))/5); - - holder.setGridSpace(gridX, gridZ, new GridSpace()); + + holder.setGridSpace(gridX, gridZ, new GridSpace(GridSpace.HOUSE,0)); } } return holder; } + + public Int3 getGridSpotOfDoor() + { + int gridX = (int)((doorX+2*Math.signum(doorX))/5); + int gridZ = (int)((doorZ+2*Math.signum(doorZ))/5); + + return new Int3(gridX, 0, gridZ); + } } \ No newline at end of file diff --git a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonBuilding.java b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonBuilding.java index f6b85f7c..97e5b8c2 100644 --- a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonBuilding.java +++ b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/DemonBuilding.java @@ -2,6 +2,7 @@ package WayofTime.alchemicalWizardry.common.demonVillage; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import WayofTime.alchemicalWizardry.common.Int3; public class DemonBuilding { @@ -9,6 +10,7 @@ public class DemonBuilding public GridSpaceHolder area; public int buildingTier; public int type; + public Int3 doorGridSpace; public DemonBuilding(BuildingSchematic schematic) { @@ -16,6 +18,7 @@ public class DemonBuilding this.type = 0; this.buildingTier = 0; this.area = this.createGSHForSchematic(schematic); + this.doorGridSpace = schematic.getGridSpotOfDoor(); } public String getName() @@ -42,4 +45,56 @@ public class DemonBuilding { return scheme.createGSH(); } + + public Int3 getDoorSpace(ForgeDirection dir) + { + int x = 0; + int z = 0; + switch(dir) + { + case SOUTH: + x = -doorGridSpace.xCoord; + z = -doorGridSpace.zCoord; + break; + case WEST: + x = doorGridSpace.zCoord; + z = -doorGridSpace.xCoord; + break; + case EAST: + x = -doorGridSpace.zCoord; + z = doorGridSpace.xCoord; + break; + default: + x = doorGridSpace.xCoord; + z = doorGridSpace.zCoord; + break; + } + + return new Int3(x, 0, z); + } + + public Int3 getGridOffsetFromRoad(ForgeDirection sideOfRoad, int yLevel) + { + Int3 doorSpace = this.getDoorSpace(sideOfRoad); + int x = doorSpace.xCoord; + int z = doorSpace.zCoord; + + switch(sideOfRoad) + { + case SOUTH: + z++; + break; + case EAST: + x++; + break; + case WEST: + x--; + break; + default: + z--; + break; + } + + return new Int3(x, yLevel, z); + } } diff --git a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/GridSpaceHolder.java b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/GridSpaceHolder.java index a0cd2cb1..a667d542 100644 --- a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/GridSpaceHolder.java +++ b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/demonVillage/GridSpaceHolder.java @@ -144,6 +144,7 @@ public class GridSpaceHolder { if(master != null) { + System.out.println("negXRadius: " + negXRadius + " posXRadius: " + posXRadius + " negZRadius: " + negZRadius + " posZRadius: " + posZRadius); for(int i=-negXRadius; i<=posXRadius; i++) { for(int j=-negZRadius; j<=posZRadius; j++) @@ -154,6 +155,8 @@ public class GridSpaceHolder continue; } + System.out.println("x: " + i + " z: " + j); + int xOff = 0; int zOff = 0; diff --git a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemSuction.java b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemSuction.java index b42896b4..24915f1c 100644 --- a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemSuction.java +++ b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemSuction.java @@ -97,7 +97,7 @@ public class RitualEffectItemSuction extends RitualEffect copyStack.stackSize = 0; } else { - if (itemStack.getItem().equals(copyStack.getItem())) + if (itemStack.getItem().equals(copyStack.getItem()) && itemStack.getItemDamage() == copyStack.getItemDamage()) { int itemSize = itemStack.stackSize; int copySize = copyStack.stackSize; @@ -125,8 +125,7 @@ public class RitualEffectItemSuction extends RitualEffect if (copyStack.stackSize > 0) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.4, y + 2, z + 0.5, copyStack)); - //flag=true; + itemEntity.getEntityItem().stackSize = copyStack.stackSize; } } } diff --git a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEDemonPortal.java b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEDemonPortal.java index 70ad21b0..1b9d794b 100644 --- a/1.7.2/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEDemonPortal.java +++ b/1.7.2/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEDemonPortal.java @@ -8,6 +8,7 @@ import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Random; @@ -720,6 +721,10 @@ public class TEDemonPortal extends TileEntity public void rightClickBlock(EntityPlayer player, int side) { //this.testGson(); + if(worldObj.isRemote) + { + return; + } Int3 roadMarker = this.getNextRoadMarker(); this.initialize(); @@ -758,38 +763,153 @@ public class TEDemonPortal extends TileEntity int length = 5; - Int3 space = findEmptySpaceNearRoad(dir, 3*(rand.nextInt(negXRadius + negZRadius + posXRadius + posZRadius))+1, 2); + boolean newProtocol = true; - int x = space.xCoord; - int z = space.zCoord; - int yLevel = space.yCoord; - - GridSpace newSpace = this.getGridSpace(x, z); - if(!newSpace.isEmpty()) + if(newProtocol) { - return; - } - - if(yLevel == -1) - { - return; - } - - GridSpaceHolder grid = this.createGSH(); - - ForgeDirection chosenDirection = ForgeDirection.NORTH; - - for(DemonBuilding build : TEDemonPortal.buildingList) - { - if(build.isValid(grid, x, z, chosenDirection)) + Int3 space = this.findRoadSpaceFromDirection(dir, 1*(rand.nextInt(negXRadius + negZRadius + posXRadius + posZRadius))+1); + + int x = space.xCoord; + int z = space.zCoord; + int yLevel = space.yCoord; + + System.out.println("Road space - x: " + x + " z: " + z); + + GridSpaceHolder grid = this.createGSH(); + + if(!this.getGridSpace(x, z).isRoadSegment()) { - build.buildAll(worldObj, xCoord + x*5, yLevel, zCoord + z*5, chosenDirection); - build.setAllGridSpaces(x, z, yLevel, chosenDirection, GridSpace.HOUSE, grid); - this.loadGSH(grid); + return; } + + List directions = new ArrayList(); + + for(int i=2; i<6; i++) + { + ForgeDirection testDir = ForgeDirection.getOrientation(i); + if(this.getGridSpace(x + testDir.offsetX, z + testDir.offsetZ).isEmpty()) + { + directions.add(testDir); + } + } + + if(directions.isEmpty()) + { + return; + } + + HashMap> schemMap = new HashMap(); + + for(ForgeDirection nextDir : directions) + { + for(DemonBuilding build : TEDemonPortal.buildingList) + { + Int3 offsetSpace = build.getGridOffsetFromRoad(nextDir, yLevel); + int xOff = offsetSpace.xCoord; + int zOff = offsetSpace.zCoord; + + if(build.isValid(grid, x + xOff, z + zOff, nextDir.getOpposite())) + { + System.out.println("This one is valid! Direction: " + nextDir.toString()); + if(schemMap.containsKey(nextDir)) + { + schemMap.get(nextDir).add(build); + }else + { + schemMap.put(nextDir, new ArrayList()); + schemMap.get(nextDir).add(build); + } + }else + { + System.out.println("This ISN'T valid!"); + } + } + } + + if(schemMap.keySet().isEmpty()) + { + return; + } + + ForgeDirection chosenDirection = (ForgeDirection) schemMap.keySet().toArray()[new Random().nextInt(schemMap.keySet().size())]; + DemonBuilding build = schemMap.get(chosenDirection).get(new Random().nextInt(schemMap.get(chosenDirection).size())); + + Int3 offsetSpace = build.getGridOffsetFromRoad(chosenDirection, yLevel); + int xOff = offsetSpace.xCoord; + int zOff = offsetSpace.zCoord; + +// System.out.println("xOff: " + xOff + " zOff: " + zOff + " Direction: " + chosenDirection.toString()); + + build.buildAll(worldObj, xCoord + (x + xOff)*5, yLevel, zCoord + (z + zOff)*5, chosenDirection.getOpposite()); + build.setAllGridSpaces(x + xOff, yLevel, z + zOff, chosenDirection.getOpposite(), GridSpace.HOUSE, grid); + this.loadGSH(grid); + }else + { + Int3 space = findEmptySpaceNearRoad(dir, 3*(rand.nextInt(negXRadius + negZRadius + posXRadius + posZRadius))+1, 2); + + int x = space.xCoord; + int z = space.zCoord; + int yLevel = space.yCoord; + + GridSpace newSpace = this.getGridSpace(x, z); + if(!newSpace.isEmpty()) + { + return; + } + + if(yLevel == -1) + { + return; + } + + GridSpaceHolder grid = this.createGSH(); + + ForgeDirection chosenDirection = ForgeDirection.NORTH; + + HashMap> bigList = new HashMap(); + + for(DemonBuilding build : TEDemonPortal.buildingList) + { + for(int i=2; i<6; i++) + { + chosenDirection = ForgeDirection.getOrientation(i); + System.out.println("" + chosenDirection.toString()); + if(build.isValid(grid, x, z, chosenDirection)) + { + System.out.println("Valid!"); + if(bigList.containsKey(chosenDirection)) + { + bigList.get(chosenDirection).add(build); + }else + { + bigList.put(chosenDirection, new ArrayList()); + bigList.get(chosenDirection).add(build); + } + } + } + } + + chosenDirection = ForgeDirection.getOrientation(new Random().nextInt(4) + 2); //Change to favour a direction with a road nearby + + List buildingList = bigList.get(chosenDirection); + DemonBuilding build; + + if(buildingList != null && buildingList.size() > 0) + { + build = buildingList.get(new Random().nextInt(buildingList.size())); + }else + { + return; + } + //TODO: Finish the selection algorythm + //TODO: Should favour those directions that have a road right next to them. + + build.buildAll(worldObj, xCoord + x*5, yLevel, zCoord + z*5, chosenDirection); + build.setAllGridSpaces(x, z, yLevel, chosenDirection, GridSpace.HOUSE, grid); + this.loadGSH(grid); + + System.out.println("X: " + x + " Z: " + z + " Direction: " + chosenDirection.toString()); } - - System.out.println("X: " + x + " Z: " + z + " Direction: " + dir.toString()); } public int findNearestRoadYLevel(int xCoord, int zCoord, int maxDistance) @@ -815,36 +935,7 @@ public class TEDemonPortal extends TileEntity return -1; } - - public void testGson() - { - boolean write = true; - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String json = gson.toJson(new BuildingSchematic()); - try { - if(write) - { - Writer writer = new FileWriter("config/test3.json"); - writer.write(json); - writer.close(); - } - { - BufferedReader br = new BufferedReader(new FileReader("config/test3.json")); - BuildingSchematic schema = gson.fromJson(br, BuildingSchematic.class); - String newJson = gson.toJson(schema); - Writer writer = new FileWriter("config/test4.json"); - writer.write(newJson); - writer.close(); - } - { - - } - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - + public void createRoad(int xi, int yi, int zi, ForgeDirection dir, int length, boolean doesNotDrop) { int curX = xi; diff --git a/1.7.2/main/resources/assets/alchemicalwizardry/schematics/building/buildings.zip b/1.7.2/main/resources/assets/alchemicalwizardry/schematics/building/buildings.zip new file mode 100644 index 0000000000000000000000000000000000000000..795c759598afbd61eb01e1a1a274c1dd9bd29dc7 GIT binary patch literal 766 zcmWIWW@Zs#U|`^2IOKfYWk&Jqk9AB843U})4E#V*T? zZyUwhY<-`ve`b=^omQ(HfwT83wq)PvO_M(79k{eK>d95}3t7fd@t?}#L{gPse#kJH z6aVe=oI>67EE8yJtX8FwnFBZQ|>6YNi zVE(jmegpgbJpc{>Fw?o95