diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/dungeon/DungeonSchematic.java b/src/main/java/StevenDimDoors/mod_pocketDim/dungeon/DungeonSchematic.java index 84ff4a4a..6fc3a52d 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/dungeon/DungeonSchematic.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/dungeon/DungeonSchematic.java @@ -87,7 +87,6 @@ public class DungeonSchematic extends Schematic { public static DungeonSchematic readFromFile(File schematicFile) throws FileNotFoundException, InvalidSchematicException { - // TODO: fix resource leak return readFromStream(new FileInputStream(schematicFile)); } @@ -168,6 +167,7 @@ public class DungeonSchematic extends Schematic { mapping.put((short) properties.PermaFabricBlockID, STANDARD_ETERNAL_FABRIC_ID); mapping.put((short) properties.WarpDoorID, STANDARD_WARP_DOOR_ID); mapping.put((short) properties.DimensionalDoorID, STANDARD_DIMENSIONAL_DOOR_ID); + mapping.put((short) properties.TransientDoorID, STANDARD_TRANSIENT_DOOR_ID); return mapping; } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/schematic/Schematic.java b/src/main/java/StevenDimDoors/mod_pocketDim/schematic/Schematic.java index 230075ca..bc866feb 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/schematic/Schematic.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/schematic/Schematic.java @@ -378,7 +378,6 @@ public class Schematic { { for (dx = 0; dx < width; dx++) { - setBlockDirectly(world, x + dx, y + dy, z + dz, blocks[index], metadata[index]); index++; } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/tileentities/TileEntityRift.java b/src/main/java/StevenDimDoors/mod_pocketDim/tileentities/TileEntityRift.java index 5b5f14d0..442d4e1a 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/tileentities/TileEntityRift.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/tileentities/TileEntityRift.java @@ -36,6 +36,8 @@ public class TileEntityRift extends TileEntity private static final int MAX_ANCESTOR_LINKS = 3; private static final int ENDERMAN_SPAWNING_CHANCE = 1; private static final int MAX_ENDERMAN_SPAWNING_CHANCE = 32; + private static final int RIFT_SPREAD_CHANCE = 1; + private static final int MAX_RIFT_SPREAD_CHANCE = 256; private static Random random = new Random(); @@ -299,20 +301,13 @@ public class TileEntityRift extends TileEntity public void grow(DDProperties properties) { - if (worldObj.isRemote || hasGrownRifts || !properties.RiftSpreadEnabled || random.nextInt(5) == 0) + if (worldObj.isRemote || hasGrownRifts || !properties.RiftSpreadEnabled + || random.nextInt(MAX_RIFT_SPREAD_CHANCE) < RIFT_SPREAD_CHANCE) { return; } NewDimData dimension = PocketManager.getDimensionData(worldObj); - - if(random.nextInt(dimension.findRiftsInRange(this.worldObj, 5, xCoord, yCoord, zCoord).size()+1)<2) - { - if(random.nextInt(7)!=0) - { - return; - } - } DimLink link = dimension.getLink(xCoord, yCoord, zCoord); if (countAncestorLinks(link) > MAX_ANCESTOR_LINKS) @@ -320,8 +315,11 @@ public class TileEntityRift extends TileEntity return; } - //FIXME: This condition would prevent people from creating rooms of densely packed rifts... ~SenseiKiwi - if (updateNearestRift()) + // The probability of rifts trying to spread increases if more rifts are nearby + // Players should see rifts spread faster within clusters than at the edges of clusters + // Also, single rifts CANNOT spread. + int nearRifts = dimension.findRiftsInRange(this.worldObj, 5, xCoord, yCoord, zCoord).size(); + if (nearRifts == 0 || random.nextInt(nearRifts) == 0) { return; } @@ -343,7 +341,7 @@ public class TileEntityRift extends TileEntity { dimension.createChildLink(x, y, z, link); hasGrownRifts = true; - return; + break; } else { diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/BaseGateway.java b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/BaseGateway.java index deda6a09..58f6da7c 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/BaseGateway.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/BaseGateway.java @@ -54,9 +54,8 @@ public abstract class BaseGateway public BaseGateway(DDProperties properties) { - //not using DD properties because sometimes its IDS can be wrong, but require it so we dont init too early - filter = new GatewayBlockFilter((short) mod_pocketDim.dimensionalDoor.blockID, - (short) mod_pocketDim.transientDoor.blockID,(short)mod_pocketDim.warpDoor.blockID); + filter = new GatewayBlockFilter((short) properties.DimensionalDoorID, (short) properties.TransientDoorID, + (short) properties.WarpDoorID); } /** @@ -70,18 +69,23 @@ public abstract class BaseGateway { int orientation = 0; - if(this.hasSchematic()) + if (this.hasSchematic()) { Schematic schematic = this.getSchematicToBuild(world, x, y, z); schematic.applyFilter(filter); Point3D doorLocation = filter.getEntranceDoorLocation(); orientation = filter.getEntranceOrientation(); - - schematic.copyToWorld(world, x-doorLocation.getX(), y+1-doorLocation.getY(), z-doorLocation.getZ()); + + // I suspect that the location used below is wrong. Gateways should be placed vertically based on + // the Y position of the surface where they belong. I'm pretty sure including doorLocation.getY() + // messes up the calculation. ~SenseiKiwi + + //schematic.copyToWorld(world, x - doorLocation.getX(), y, z - doorLocation.getZ()); + schematic.copyToWorld(world, x - doorLocation.getX(), y + 1 - doorLocation.getY(), z - doorLocation.getZ()); } - this.generateRandomBits(world, x,y,z); + this.generateRandomBits(world, x, y, z); DimLink link = PocketManager.getDimensionData(world).createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation); PocketBuilder.generateSelectedDungeonPocket(link, mod_pocketDim.properties, this.getStartingDungeon(world.rand)); @@ -152,12 +156,11 @@ public abstract class BaseGateway public boolean isBiomeValid(BiomeGenBase biome) { - return !this.isBiomeSpecific||this.biomeNames.contains(biome.biomeName.toLowerCase()); + return !this.isBiomeSpecific || this.biomeNames.contains(biome.biomeName.toLowerCase()); } + public boolean hasSchematic() { - return this.schematicPaths!=null&&this.schematicPaths.size()>0; + return this.schematicPaths != null && !this.schematicPaths.isEmpty(); } - - } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayBlockFilter.java b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayBlockFilter.java index a8a7f31d..ed66c611 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayBlockFilter.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayBlockFilter.java @@ -15,17 +15,15 @@ public class GatewayBlockFilter extends SchematicFilter { private Schematic schematic; private Point3D entranceDoorLocation; - - - public GatewayBlockFilter(short dimensionalDoorID,short transientDoorID,short warpDoorID) + public GatewayBlockFilter(short dimensionalDoorID, short transientDoorID, short warpDoorID) { - super("GatewayEnteranceFinder"); - this.dimensionalDoorID = dimensionalDoorID; + super("GatewayEntranceFinder"); this.entranceDoorLocation = null; this.entranceOrientation = 0; this.schematic = null; - this.transientDoorID=transientDoorID; - this.warpDoorID=warpDoorID; + this.dimensionalDoorID = dimensionalDoorID; + this.transientDoorID = transientDoorID; + this.warpDoorID = warpDoorID; } public int getEntranceOrientation() { @@ -79,7 +77,6 @@ public class GatewayBlockFilter extends SchematicFilter { } } return false; - } @Override