File creation and first crack at default .zip folder

This commit is contained in:
WayofTime 2014-06-24 21:08:29 -04:00
parent 74206f1dd9
commit cce90ce8fd
8 changed files with 310 additions and 65 deletions

View file

@ -1,8 +1,12 @@
package WayofTime.alchemicalWizardry; package WayofTime.alchemicalWizardry;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import joshie.alchemicalWizardy.ShapedBloodOrbRecipe; import joshie.alchemicalWizardy.ShapedBloodOrbRecipe;
import joshie.alchemicalWizardy.ShapelessBloodOrbRecipe; import joshie.alchemicalWizardy.ShapelessBloodOrbRecipe;
@ -236,9 +240,50 @@ public class AlchemicalWizardry
@EventHandler @EventHandler
public void preInit(FMLPreInitializationEvent event) 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()); MinecraftForge.EVENT_BUS.register(new LifeBucketHandler());
BloodMagicConfiguration.init(new File(event.getModConfigurationDirectory(), "AWWayofTime.cfg")); BloodMagicConfiguration.init(new File(event.getModConfigurationDirectory(), "AWWayofTime.cfg"));

View file

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockStairs;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
@ -41,6 +42,45 @@ public class BlockSet
{ {
metadata[i] = meta; 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<Int3> getPositions() public List<Int3> getPositions()
@ -121,7 +161,7 @@ public class BlockSet
break; break;
case SOUTH: case SOUTH:
xOff *= -1; xOff *= -1;
yOff *= -1; zOff *= -1;
break; break;
case WEST: case WEST:
int temp = zOff; int temp = zOff;

View file

@ -11,6 +11,8 @@ import WayofTime.alchemicalWizardry.common.Int3;
public class BuildingSchematic public class BuildingSchematic
{ {
public String name; public String name;
public int doorX;
public int doorZ;
public List<BlockSet> blockList; public List<BlockSet> blockList;
public BuildingSchematic() public BuildingSchematic()
@ -22,6 +24,8 @@ public class BuildingSchematic
{ {
this.name = name; this.name = name;
blockList = new ArrayList(); blockList = new ArrayList();
this.doorX = 0;
this.doorZ = 0;
} }
public void addBlockWithMeta(Block block, int meta, int xOffset, int yOffset, int zOffset) 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 gridX = (int)((coords.xCoord+2*Math.signum(coords.xCoord))/5);
int gridZ = (int)((coords.zCoord+2*Math.signum(coords.zCoord))/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; 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);
}
} }

View file

@ -2,6 +2,7 @@ package WayofTime.alchemicalWizardry.common.demonVillage;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import WayofTime.alchemicalWizardry.common.Int3;
public class DemonBuilding public class DemonBuilding
{ {
@ -9,6 +10,7 @@ public class DemonBuilding
public GridSpaceHolder area; public GridSpaceHolder area;
public int buildingTier; public int buildingTier;
public int type; public int type;
public Int3 doorGridSpace;
public DemonBuilding(BuildingSchematic schematic) public DemonBuilding(BuildingSchematic schematic)
{ {
@ -16,6 +18,7 @@ public class DemonBuilding
this.type = 0; this.type = 0;
this.buildingTier = 0; this.buildingTier = 0;
this.area = this.createGSHForSchematic(schematic); this.area = this.createGSHForSchematic(schematic);
this.doorGridSpace = schematic.getGridSpotOfDoor();
} }
public String getName() public String getName()
@ -42,4 +45,56 @@ public class DemonBuilding
{ {
return scheme.createGSH(); 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);
}
} }

View file

@ -144,6 +144,7 @@ public class GridSpaceHolder
{ {
if(master != null) if(master != null)
{ {
System.out.println("negXRadius: " + negXRadius + " posXRadius: " + posXRadius + " negZRadius: " + negZRadius + " posZRadius: " + posZRadius);
for(int i=-negXRadius; i<=posXRadius; i++) for(int i=-negXRadius; i<=posXRadius; i++)
{ {
for(int j=-negZRadius; j<=posZRadius; j++) for(int j=-negZRadius; j<=posZRadius; j++)
@ -154,6 +155,8 @@ public class GridSpaceHolder
continue; continue;
} }
System.out.println("x: " + i + " z: " + j);
int xOff = 0; int xOff = 0;
int zOff = 0; int zOff = 0;

View file

@ -97,7 +97,7 @@ public class RitualEffectItemSuction extends RitualEffect
copyStack.stackSize = 0; copyStack.stackSize = 0;
} else } else
{ {
if (itemStack.getItem().equals(copyStack.getItem())) if (itemStack.getItem().equals(copyStack.getItem()) && itemStack.getItemDamage() == copyStack.getItemDamage())
{ {
int itemSize = itemStack.stackSize; int itemSize = itemStack.stackSize;
int copySize = copyStack.stackSize; int copySize = copyStack.stackSize;
@ -125,8 +125,7 @@ public class RitualEffectItemSuction extends RitualEffect
if (copyStack.stackSize > 0) if (copyStack.stackSize > 0)
{ {
world.spawnEntityInWorld(new EntityItem(world, x + 0.4, y + 2, z + 0.5, copyStack)); itemEntity.getEntityItem().stackSize = copyStack.stackSize;
//flag=true;
} }
} }
} }

View file

@ -8,6 +8,7 @@ import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.Writer; import java.io.Writer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
@ -720,6 +721,10 @@ public class TEDemonPortal extends TileEntity
public void rightClickBlock(EntityPlayer player, int side) public void rightClickBlock(EntityPlayer player, int side)
{ {
//this.testGson(); //this.testGson();
if(worldObj.isRemote)
{
return;
}
Int3 roadMarker = this.getNextRoadMarker(); Int3 roadMarker = this.getNextRoadMarker();
this.initialize(); this.initialize();
@ -758,38 +763,153 @@ public class TEDemonPortal extends TileEntity
int length = 5; int length = 5;
Int3 space = findEmptySpaceNearRoad(dir, 3*(rand.nextInt(negXRadius + negZRadius + posXRadius + posZRadius))+1, 2); boolean newProtocol = true;
int x = space.xCoord; if(newProtocol)
int z = space.zCoord;
int yLevel = space.yCoord;
GridSpace newSpace = this.getGridSpace(x, z);
if(!newSpace.isEmpty())
{ {
return; Int3 space = this.findRoadSpaceFromDirection(dir, 1*(rand.nextInt(negXRadius + negZRadius + posXRadius + posZRadius))+1);
}
int x = space.xCoord;
if(yLevel == -1) int z = space.zCoord;
{ int yLevel = space.yCoord;
return;
} System.out.println("Road space - x: " + x + " z: " + z);
GridSpaceHolder grid = this.createGSH(); GridSpaceHolder grid = this.createGSH();
ForgeDirection chosenDirection = ForgeDirection.NORTH; if(!this.getGridSpace(x, z).isRoadSegment())
for(DemonBuilding build : TEDemonPortal.buildingList)
{
if(build.isValid(grid, x, z, chosenDirection))
{ {
build.buildAll(worldObj, xCoord + x*5, yLevel, zCoord + z*5, chosenDirection); return;
build.setAllGridSpaces(x, z, yLevel, chosenDirection, GridSpace.HOUSE, grid);
this.loadGSH(grid);
} }
List<ForgeDirection> 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<ForgeDirection, List<DemonBuilding>> 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<ForgeDirection,List<DemonBuilding>> 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<DemonBuilding> 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) public int findNearestRoadYLevel(int xCoord, int zCoord, int maxDistance)
@ -815,36 +935,7 @@ public class TEDemonPortal extends TileEntity
return -1; 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) public void createRoad(int xi, int yi, int zi, ForgeDirection dir, int length, boolean doesNotDrop)
{ {
int curX = xi; int curX = xi;