From 3d04e9b9ccfbf4f0fd9510bbb48b2922bcde218a Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Sat, 3 Aug 2013 06:12:56 -0400 Subject: [PATCH] Made Rifts Check Block Hardness Made rifts check block hardness while replacing blocks so that we can avoid destroying strong or indestructible blocks from other mods. Updated references throughout the code to use a function in BlockRift for this purpose. --- .../mod_pocketDim/EventHookContainer.java | 13 ++- .../mod_pocketDim/blocks/BlockRift.java | 94 ++++++++++++------- .../mod_pocketDim/helpers/dimHelper.java | 19 ++-- .../mod_pocketDim/mod_pocketDim.java | 26 +---- .../ticking/RiftRegenerator.java | 26 ++--- 5 files changed, 92 insertions(+), 86 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/EventHookContainer.java b/StevenDimDoors/mod_pocketDim/EventHookContainer.java index aa41b8a..95742f3 100644 --- a/StevenDimDoors/mod_pocketDim/EventHookContainer.java +++ b/StevenDimDoors/mod_pocketDim/EventHookContainer.java @@ -58,16 +58,15 @@ public class EventHookContainer { for (LinkData link:dimHelper.instance.getDimData(world.provider.dimensionId).getLinksInDim()) { - if(linkCount>100) //TODO: Wtf? wouldn't this cause some links to not load on servers with several links? Not sure what's going on here. ~SenseiKiwi - { - break; - } - linkCount++; - int blocktoReplace = world.getBlockId(link.locXCoord, link.locYCoord, link.locZCoord); - if (!mod_pocketDim.blocksImmuneToRift.contains(blocktoReplace)) + if (!mod_pocketDim.blockRift.isBlockImmune(world, link.locXCoord, link.locYCoord, link.locZCoord)) { dimHelper.getWorld(link.locDimID).setBlock(link.locXCoord, link.locYCoord, link.locZCoord, properties.RiftBlockID); } + linkCount++; + if (linkCount >= 100) + { + break; + } } } catch(Exception e) diff --git a/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java b/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java index bad02c5..ac34bf2 100644 --- a/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java +++ b/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java @@ -1,7 +1,9 @@ package StevenDimDoors.mod_pocketDim.blocks; +import java.util.ArrayList; import java.util.Random; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; @@ -11,7 +13,6 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import StevenDimDoors.mod_pocketDim.DDProperties; -import StevenDimDoors.mod_pocketDim.PacketHandler; import StevenDimDoors.mod_pocketDim.TileEntityRift; import StevenDimDoors.mod_pocketDim.mod_pocketDim; import StevenDimDoors.mod_pocketDim.helpers.dimHelper; @@ -24,24 +25,41 @@ import cpw.mods.fml.relauncher.SideOnly; public class BlockRift extends BlockContainer { - private static DDProperties properties = null; + private static final float MIN_IMMUNE_HARDNESS = 200.0F; - public BlockRift(int i, int j, Material par2Material) + private final DDProperties properties; + private final ArrayList blocksImmuneToRift; + + public BlockRift(int i, int j, Material par2Material, DDProperties properties) { super(i, Material.air); - setTickRandomly(true); - // this.setCreativeTab(CreativeTabs.tabBlock); + this.setTickRandomly(true); this.setLightOpacity(14); - if (properties == null) - properties = DDProperties.instance(); + this.properties = properties; + this.blocksImmuneToRift = new ArrayList(); + this.blocksImmuneToRift.add(properties.FabricBlockID); + this.blocksImmuneToRift.add(properties.PermaFabricBlockID); + this.blocksImmuneToRift.add(properties.DimensionalDoorID); + this.blocksImmuneToRift.add(properties.WarpDoorID); + this.blocksImmuneToRift.add(properties.TransTrapdoorID); + this.blocksImmuneToRift.add(properties.UnstableDoorID); + this.blocksImmuneToRift.add(properties.RiftBlockID); + this.blocksImmuneToRift.add(properties.TransientDoorID); + this.blocksImmuneToRift.add(Block.blockIron.blockID); + this.blocksImmuneToRift.add(Block.blockDiamond.blockID); + this.blocksImmuneToRift.add(Block.blockEmerald.blockID); + this.blocksImmuneToRift.add(Block.blockGold.blockID); + this.blocksImmuneToRift.add(Block.blockLapis.blockID); } + @Override public void registerIcons(IconRegister par1IconRegister) { this.blockIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName2()); } //sends a packet informing the client that there is a link present so it renders properly. (when placed) + @Override public void onBlockAdded(World par1World, int par2, int par3, int par4) { try @@ -53,16 +71,18 @@ public class BlockRift extends BlockContainer e.printStackTrace(); } // this.updateTick(par1World, par2, par3, par4, new Random()); - } + + @Override public boolean isCollidable() { return false; } - + + @Override public void onBlockDestroyedByPlayer(World par1World, int par2, int par3, int par4, int par5) {} - + @Override public boolean isOpaqueCube() { return false; @@ -71,6 +91,7 @@ public class BlockRift extends BlockContainer /** * Returns whether this block is collideable based on the arguments passed in Args: blockMetaData, unknownFlag */ + @Override public boolean canCollideCheck(int par1, boolean par2) { @@ -81,11 +102,14 @@ public class BlockRift extends BlockContainer * Returns Returns true if the given side of this block type should be rendered (if it's solid or not), if the * adjacent block is at the given coordinates. Args: blockAccess, x, y, z, side */ + @Override public boolean isBlockSolid(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) { return true; } + //this doesnt do anything yet. + @Override public int getRenderType() { if(mod_pocketDim.isPlayerWearingGoogles) @@ -96,12 +120,12 @@ public class BlockRift extends BlockContainer return 8; } - @SideOnly(Side.CLIENT) - /** * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given * coordinates. Args: blockAccess, x, y, z, side */ + @Override + @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) { return true; @@ -111,21 +135,23 @@ public class BlockRift extends BlockContainer * Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been * cleared to be reused) */ + @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4) { return null; } + //function that regulates how many blocks it eats/ how fast it eates them. + @Override public void updateTick(World world, int x, int y, int z, Random random) { if(!world.isRemote&&dimHelper.instance.getLinkDataFromCoords(x, y, z, world.provider.dimensionId)!=null && properties.RiftGriefingEnabled) { TileEntityRift rift = (TileEntityRift) world.getBlockTileEntity(x, y, z); - if(rift.isNearRift) + if (rift.isNearRift) { - + //TODO: Fix this. Make it pretty. õ_õ ~SenseiKiwi int range=4; - float distance=range+range/4; int i=-range; int j=-range; @@ -137,7 +163,8 @@ public class BlockRift extends BlockContainer { while (k= MIN_IMMUNE_HARDNESS || blocksImmuneToRift.contains(block.blockID)); + } + return false; + } + + @Override public int idPicked(World par1World, int par2, int par3, int par4) { return 0; } + @Override public int idDropped(int par1, Random par2Random, int par3) { return 0; @@ -290,12 +323,7 @@ public class BlockRift extends BlockContainer @Override public TileEntity createNewTileEntity(World var1) - { - // TODO Auto-generated method stub return new TileEntityRift(); } - - - -} +} \ No newline at end of file diff --git a/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java b/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java index 1cdf6be..9f82048 100644 --- a/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java +++ b/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java @@ -42,7 +42,6 @@ import StevenDimDoors.mod_pocketDim.Point3D; import StevenDimDoors.mod_pocketDim.SchematicLoader; import StevenDimDoors.mod_pocketDim.TileEntityRift; import StevenDimDoors.mod_pocketDim.mod_pocketDim; -import StevenDimDoors.mod_pocketDim.dungeon.DungeonSchematic; import StevenDimDoors.mod_pocketDim.schematic.BlockRotator; import StevenDimDoors.mod_pocketDim.world.LimboProvider; import StevenDimDoors.mod_pocketDim.world.PocketProvider; @@ -272,16 +271,20 @@ public class dimHelper extends DimensionManager } this.generateDoor(world,linkData); + //FIXME: Why are we checking blockList.length? Not necessary. getBlockId() can't return an ID past the end of the block list. + //Plus even if the check is necessary, it's still wrong since it should be less than, not less than or equal to. if(Block.blocksList.length>=entity.worldObj.getBlockId(playerXCoord,playerYCoord+1,playerZCoord)&&!entity.worldObj.isAirBlock(playerXCoord,playerYCoord+1,playerZCoord)) { - if(Block.blocksList[entity.worldObj.getBlockId(playerXCoord,playerYCoord+1,playerZCoord)].isOpaqueCube()&&!mod_pocketDim.blocksImmuneToRift.contains(entity.worldObj.getBlockId(playerXCoord,playerYCoord+1,playerZCoord))) + if(Block.blocksList[entity.worldObj.getBlockId(playerXCoord,playerYCoord+1,playerZCoord)].isOpaqueCube() && + !mod_pocketDim.blockRift.isBlockImmune(entity.worldObj, playerXCoord+1,playerYCoord,playerZCoord)) { entity.worldObj.setBlock(playerXCoord,playerYCoord+1,playerZCoord,0); } } - if(Block.blocksList.length>=entity.worldObj.getBlockId(playerXCoord,playerYCoord,playerZCoord)&&!entity.worldObj.isAirBlock(playerXCoord,playerYCoord,playerZCoord)) + if (Block.blocksList.length >= entity.worldObj.getBlockId(playerXCoord,playerYCoord,playerZCoord)&&!entity.worldObj.isAirBlock(playerXCoord,playerYCoord,playerZCoord)) { - if(Block.blocksList[entity.worldObj.getBlockId(playerXCoord,playerYCoord,playerZCoord)].isOpaqueCube()&&!mod_pocketDim.blocksImmuneToRift.contains(entity.worldObj.getBlockId(playerXCoord,playerYCoord,playerZCoord))) + if(Block.blocksList[entity.worldObj.getBlockId(playerXCoord,playerYCoord,playerZCoord)].isOpaqueCube() && + !mod_pocketDim.blockRift.isBlockImmune(entity.worldObj, playerXCoord,playerYCoord,playerZCoord)) { entity.worldObj.setBlock(playerXCoord,playerYCoord,playerZCoord,0); } @@ -362,12 +365,12 @@ public class dimHelper extends DimensionManager link.isLocPocket=locationDimData.isPocket; locationDimData.addLinkToDim(link); - if(dimHelper.getWorld(link.locDimID)!=null) + World world = dimHelper.getWorld(link.locDimID); + if (world != null) { - int blocktoReplace = dimHelper.getWorld(link.locDimID).getBlockId(link.locXCoord, link.locYCoord, link.locZCoord); - if(!mod_pocketDim.blocksImmuneToRift.contains(blocktoReplace)) + if (!mod_pocketDim.blockRift.isBlockImmune(world, link.locXCoord, link.locYCoord, link.locZCoord)) { - dimHelper.getWorld(link.locDimID).setBlock(link.locXCoord, link.locYCoord, link.locZCoord, properties.RiftBlockID); + world.setBlock(link.locXCoord, link.locYCoord, link.locZCoord, properties.RiftBlockID); } } //Notifies other players that a link has been created. diff --git a/StevenDimDoors/mod_pocketDim/mod_pocketDim.java b/StevenDimDoors/mod_pocketDim/mod_pocketDim.java index 253ae39..b2ca95a 100644 --- a/StevenDimDoors/mod_pocketDim/mod_pocketDim.java +++ b/StevenDimDoors/mod_pocketDim/mod_pocketDim.java @@ -33,7 +33,6 @@ import StevenDimDoors.mod_pocketDim.commands.CommandPrintDimensionData; import StevenDimDoors.mod_pocketDim.commands.CommandPruneDimensions; import StevenDimDoors.mod_pocketDim.commands.CommandResetDungeons; import StevenDimDoors.mod_pocketDim.commands.CommandTeleportPlayer; -import StevenDimDoors.mod_pocketDim.helpers.BlockRotationHelper; import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper; import StevenDimDoors.mod_pocketDim.helpers.dimHelper; import StevenDimDoors.mod_pocketDim.items.ItemBlockDimWall; @@ -104,12 +103,12 @@ public class mod_pocketDim public static Block transientDoor; public static Block ExitDoor; public static Block chaosDoor; - public static Block blockRift; public static Block blockLimbo; public static Block dimDoor; public static Block blockDimWall; public static Block dimHatch; public static Block blockDimWallPerm; + public static BlockRift blockRift; public static Item itemRiftBlade; public static Item itemDimDoor; @@ -126,9 +125,7 @@ public class mod_pocketDim public static PlayerRespawnTracker tracker; public static HashMap> limboSpawnInventory = new HashMap>(); - - public static ArrayList blocksImmuneToRift = new ArrayList(); - + public static boolean hasInitDims = false; public static boolean isPlayerWearingGoogles = false; @@ -191,7 +188,7 @@ public class mod_pocketDim blockDimWall = (new BlockDimWall(properties.FabricBlockID, 0, Material.iron)).setLightValue(1.0F).setHardness(0.1F).setUnlocalizedName("blockDimWall"); blockDimWallPerm = (new BlockDimWallPerm(properties.PermaFabricBlockID, 0, Material.iron)).setLightValue(1.0F).setBlockUnbreakable().setResistance(6000000.0F).setUnlocalizedName("blockDimWallPerm"); ExitDoor = (new ExitDoor(properties.WarpDoorID, Material.wood)).setHardness(1.0F) .setUnlocalizedName("dimDoorWarp"); - blockRift = (new BlockRift(properties.RiftBlockID, 0, Material.air).setHardness(1.0F) .setUnlocalizedName("rift")); + blockRift = (BlockRift) (new BlockRift(properties.RiftBlockID, 0, Material.air, properties).setHardness(1.0F) .setUnlocalizedName("rift")); blockLimbo = (new BlockLimbo(properties.LimboBlockID, 15, Material.iron, properties.LimboDimensionID, decay).setHardness(.2F).setUnlocalizedName("BlockLimbo").setLightValue(.0F)); chaosDoor = (new ChaosDoor(properties.UnstableDoorID, Material.iron).setHardness(.2F).setUnlocalizedName("chaosDoor").setLightValue(.0F) ); dimDoor = (new dimDoor(properties.DimensionalDoorID, Material.iron)).setHardness(1.0F).setResistance(2000.0F) .setUnlocalizedName("dimDoor"); @@ -378,22 +375,7 @@ public class mod_pocketDim " y ", "yxy", " y ", 'x', mod_pocketDim.itemLinkSignature, 'y', mod_pocketDim.itemStableFabric }); } - - mod_pocketDim.blocksImmuneToRift.add(properties.FabricBlockID); - mod_pocketDim.blocksImmuneToRift.add(properties.PermaFabricBlockID); - mod_pocketDim.blocksImmuneToRift.add(properties.DimensionalDoorID); - mod_pocketDim.blocksImmuneToRift.add(properties.WarpDoorID); - mod_pocketDim.blocksImmuneToRift.add(properties.TransTrapdoorID); - mod_pocketDim.blocksImmuneToRift.add(properties.UnstableDoorID); - mod_pocketDim.blocksImmuneToRift.add(properties.RiftBlockID); - mod_pocketDim.blocksImmuneToRift.add(properties.TransientDoorID); - mod_pocketDim.blocksImmuneToRift.add(Block.blockIron.blockID); - mod_pocketDim.blocksImmuneToRift.add(Block.blockDiamond.blockID); - mod_pocketDim.blocksImmuneToRift.add(Block.blockEmerald.blockID); - mod_pocketDim.blocksImmuneToRift.add(Block.blockGold.blockID); - mod_pocketDim.blocksImmuneToRift.add(Block.blockLapis.blockID); - mod_pocketDim.blocksImmuneToRift.add(Block.bedrock.blockID); - + DungeonHelper.initialize(); proxy.loadTextures(); diff --git a/StevenDimDoors/mod_pocketDim/ticking/RiftRegenerator.java b/StevenDimDoors/mod_pocketDim/ticking/RiftRegenerator.java index c358dd1..386c73b 100644 --- a/StevenDimDoors/mod_pocketDim/ticking/RiftRegenerator.java +++ b/StevenDimDoors/mod_pocketDim/ticking/RiftRegenerator.java @@ -43,27 +43,21 @@ public class RiftRegenerator implements IRegularTickReceiver { //actually gets the random rift based on the size of the list link = (LinkData) dimHelper.instance.getRandomLinkData(true); - if(link!=null) + if (link != null) { + World world = dimHelper.getWorld(link.locDimID); - if (dimHelper.getWorld(link.locDimID)!=null) + if (world != null && !mod_pocketDim.blockRift.isBlockImmune(world, link.locXCoord, link.locYCoord, link.locZCoord)) { - World world = dimHelper.getWorld(link.locDimID); - - int blocktoReplace = world.getBlockId(link.locXCoord, link.locYCoord, link.locZCoord); - - if(!mod_pocketDim.blocksImmuneToRift.contains(blocktoReplace))//makes sure the rift doesn't replace a door or something + if (dimHelper.instance.getLinkDataFromCoords(link.locXCoord, link.locYCoord, link.locZCoord, link.locDimID) != null) { - if(dimHelper.instance.getLinkDataFromCoords(link.locXCoord, link.locYCoord, link.locZCoord, link.locDimID) != null) + world.setBlock(link.locXCoord, link.locYCoord, link.locZCoord, properties.RiftBlockID); + TileEntityRift rift = (TileEntityRift) world.getBlockTileEntity(link.locXCoord, link.locYCoord, link.locZCoord); + if (rift == null) { - dimHelper.getWorld(link.locDimID).setBlock(link.locXCoord, link.locYCoord, link.locZCoord, properties.RiftBlockID); - TileEntityRift rift = TileEntityRift.class.cast(dimHelper.getWorld(link.locDimID).getBlockTileEntity(link.locXCoord, link.locYCoord, link.locZCoord)); - if(rift == null) - { - dimHelper.getWorld(link.locDimID).setBlockTileEntity(link.locXCoord, link.locYCoord, link.locZCoord, new TileEntityRift()); - } - rift.hasGrownRifts=true; + dimHelper.getWorld(link.locDimID).setBlockTileEntity(link.locXCoord, link.locYCoord, link.locZCoord, new TileEntityRift()); } + rift.hasGrownRifts = true; } } } @@ -71,7 +65,7 @@ public class RiftRegenerator implements IRegularTickReceiver { } catch (Exception e) { - System.out.println("An exception occurred in RiftRegenerator.regenerate():"); + System.err.println("An exception occurred in RiftRegenerator.regenerate():"); e.printStackTrace(); } }