From 0e4e36c454a724bcdc27a6460bf2c52ee15158f9 Mon Sep 17 00:00:00 2001 From: StevenRS11 Date: Tue, 14 Jan 2014 13:40:27 -0500 Subject: [PATCH] Gateway generation now emulates old functionality --- .../world/gateways/BaseGateway.java | 12 +++----- .../world/gateways/GatewayBlockFilter.java | 17 ++++++++-- .../world/gateways/GatewayTwoPillars.java | 29 +++++++++++++++++- .../schematics/gateways/twoPillars.schematic | Bin 244 -> 268 bytes 4 files changed, 47 insertions(+), 11 deletions(-) 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 358c01f..bd15b72 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/BaseGateway.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/BaseGateway.java @@ -33,7 +33,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); + filter = new GatewayBlockFilter((short) mod_pocketDim.dimensionalDoor.blockID, + (short) mod_pocketDim.transientDoor.blockID,(short)mod_pocketDim.warpDoor.blockID); } /** @@ -65,13 +66,7 @@ public abstract class BaseGateway doorLocation = filter.getEntranceDoorLocation(); orientation = filter.getEntranceOrientation(); - schematic.copyToWorld(world, x-schematic.getWidth()+doorLocation.getX(), y-schematic.getHeight()+doorLocation.getY(), z-schematic.getLength()+doorLocation.getZ()); - - //TODO debug code to easily locate the rifts - for(int c = 0; c<240; c++) - { - world.setBlock(x, y+c, z,Block.glowStone.blockID); - } + schematic.copyToWorld(world, x-doorLocation.getX(), y+1-doorLocation.getY(), z-doorLocation.getZ()); } } catch (Exception e) @@ -123,6 +118,7 @@ public abstract class BaseGateway { return !surfaceGateway; } + public boolean isBiomeValid(BiomeGenBase biome) { return this.isBiomeSpecific||this.allowedBiomeNames.contains(biome.biomeName.toLowerCase()); 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 5098f94..b2249c0 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayBlockFilter.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayBlockFilter.java @@ -9,13 +9,15 @@ import StevenDimDoors.mod_pocketDim.schematic.SchematicFilter; public class GatewayBlockFilter extends SchematicFilter { private short dimensionalDoorID; + private int transientDoorID; + private int warpDoorID; private int entranceOrientation; private Schematic schematic; private Point3D entranceDoorLocation; - private int transientDoorID; + - public GatewayBlockFilter(short dimensionalDoorID,short transientDoorID) + public GatewayBlockFilter(short dimensionalDoorID,short transientDoorID,short warpDoorID) { super("GatewayEnteranceFinder"); this.dimensionalDoorID = dimensionalDoorID; @@ -23,6 +25,7 @@ public class GatewayBlockFilter extends SchematicFilter { this.entranceOrientation = 0; this.schematic = null; this.transientDoorID=transientDoorID; + this.warpDoorID=warpDoorID; } public int getEntranceOrientation() { @@ -66,6 +69,16 @@ public class GatewayBlockFilter extends SchematicFilter { return true; } } + if (blocks[index] == warpDoorID) + { + indexBelow = schematic.calculateIndexBelow(index); + if (indexBelow >= 0 && blocks[indexBelow] == warpDoorID) + { + entranceDoorLocation = schematic.calculatePoint(index); + entranceOrientation = (metadata[indexBelow] & 3); + return true; + } + } return false; } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayTwoPillars.java b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayTwoPillars.java index eda1b8e..90c0d76 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayTwoPillars.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayTwoPillars.java @@ -6,12 +6,13 @@ import StevenDimDoors.mod_pocketDim.DDProperties; import StevenDimDoors.mod_pocketDim.mod_pocketDim; import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack; import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper; +import net.minecraft.block.Block; import net.minecraft.world.World; public class GatewayTwoPillars extends BaseGateway { - private GatewayBlockFilter filter; + private static final int GATEWAY_RADIUS = 4; public GatewayTwoPillars(DDProperties properties) { @@ -27,7 +28,33 @@ public class GatewayTwoPillars extends BaseGateway @Override void generateRandomBits(World world, int x, int y, int z) { + final int blockID = Block.stoneBrick.blockID; + //Replace some of the ground around the gateway with bricks + for (int xc = -GATEWAY_RADIUS; xc <= GATEWAY_RADIUS; xc++) + { + for (int zc= -GATEWAY_RADIUS; zc <= GATEWAY_RADIUS; zc++) + { + //Check that the block is supported by an opaque block. + //This prevents us from building over a cliff, on the peak of a mountain, + //or the surface of the ocean or a frozen lake. + if (world.isBlockOpaqueCube(x + xc, y - 2, z + zc)) + { + //Randomly choose whether to place bricks or not. The math is designed so that the + //chances of placing a block decrease as we get farther from the gateway's center. + if (Math.abs(xc) + Math.abs(zc) < world.rand.nextInt(2) + 3) + { + //Place Stone Bricks + world.setBlock(x + xc, y - 1, z + zc, blockID, 0, 3); + } + else if (Math.abs(xc) + Math.abs(zc) < world.rand.nextInt(3) + 3) + { + //Place Cracked Stone Bricks + world.setBlock(x + xc, y - 1, z + zc, blockID, 2, 3); + } + } + } + } } } diff --git a/src/main/resources/schematics/gateways/twoPillars.schematic b/src/main/resources/schematics/gateways/twoPillars.schematic index bef07047f9190e0c3f91866df73a3f0edd4435da..75f538db2f88cdd17c5cd760d08ea224b9e076d6 100644 GIT binary patch literal 268 zcmV+n0rUPJiwFP!000000KHMmPQx$|9H-5zlmmPKU(!oyDmWB@1QKUAUd5}Xc9a;Y z<=6N*HYyD*>X|+4%&vFGBYT4UwY0R=fy)%*LI(|ChKmuMm)Qv){pK9m(ghAoojQ!= zPdZS`y6zCq>&EIF(>Jc^I5z3EGem4~GxYZbZwv2Rg=?$32Xc!p96mGdIK3qlKEv#m@Vz-g*)Hmdw+ePg=G9sZq`$fUMpc35mh<`Mp{+Ngc z6A_XXxhh!1De}27_q8uKot)jBym)$m=InoxN8-u`j3dPFY(!#|A{q8)SYv$*;eAN{ S!VkY#4*473(Z%sB0ssJ=#DKK` literal 244 zcmVENDG9_hPd3xUc1WnU z!|1KS=8XsX#nwU