From c3beb4849982887eb78655073d14196679566d90 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 5 Jan 2016 15:26:24 -0800 Subject: [PATCH] Implement BlockStack in Teleposer related areas --- .../WayofTime/bloodmagic/api/BlockStack.java | 9 +++++++ .../bloodmagic/api/ItemStackWrapper.java | 5 ++++ .../bloodmagic/api/event/TeleposeEvent.java | 18 +++++-------- .../bloodmagic/tile/TileTeleposer.java | 26 +++++++++---------- .../bloodmagic/util/handler/EventHandler.java | 6 ++--- 5 files changed, 34 insertions(+), 30 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/api/BlockStack.java b/src/main/java/WayofTime/bloodmagic/api/BlockStack.java index c363fea3..839b8e06 100644 --- a/src/main/java/WayofTime/bloodmagic/api/BlockStack.java +++ b/src/main/java/WayofTime/bloodmagic/api/BlockStack.java @@ -3,6 +3,9 @@ package WayofTime.bloodmagic.api; import lombok.EqualsAndHashCode; import lombok.Getter; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.GameData; @Getter @@ -23,6 +26,12 @@ public class BlockStack this(block, 0); } + public static BlockStack getStackFromPos(World world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + return new BlockStack(state.getBlock(), state.getBlock().getMetaFromState(state)); + } + @Override public String toString() { diff --git a/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java b/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java index f85e7fc4..8e8c7323 100644 --- a/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java +++ b/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java @@ -43,6 +43,11 @@ public class ItemStackWrapper this(block, 1, 0); } + public ItemStackWrapper(BlockStack blockStack) + { + this(blockStack.getBlock(), 1, blockStack.getMeta()); + } + public static ItemStackWrapper getHolder(ItemStack stack) { return new ItemStackWrapper(stack.getItem(), stack.stackSize, stack.getItemDamage()); diff --git a/src/main/java/WayofTime/bloodmagic/api/event/TeleposeEvent.java b/src/main/java/WayofTime/bloodmagic/api/event/TeleposeEvent.java index 823cf27b..b5c4b438 100644 --- a/src/main/java/WayofTime/bloodmagic/api/event/TeleposeEvent.java +++ b/src/main/java/WayofTime/bloodmagic/api/event/TeleposeEvent.java @@ -1,6 +1,6 @@ package WayofTime.bloodmagic.api.event; -import net.minecraft.block.Block; +import WayofTime.bloodmagic.api.BlockStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.world.World; @@ -17,27 +17,21 @@ public class TeleposeEvent extends Event { public final World initalWorld; public final BlockPos initialBlockPos; - - public final Block initialBlock; - public final int initialMetadata; + public final BlockStack initialStack; public final World finalWorld; public final BlockPos finalBlockPos; + public final BlockStack finalStack; - public final Block finalBlock; - public final int finalMetadata; - - public TeleposeEvent(World initialWorld, BlockPos initialBlockPos, Block initialBlock, int initialMetadata, World finalWorld, BlockPos finalBlockPos, Block finalBlock, int finalMetadata) + public TeleposeEvent(World initialWorld, BlockPos initialBlockPos, World finalWorld, BlockPos finalBlockPos) { this.initalWorld = initialWorld; this.initialBlockPos = initialBlockPos; - this.initialBlock = initialBlock; - this.initialMetadata = initialMetadata; + this.initialStack = BlockStack.getStackFromPos(initialWorld, initialBlockPos); this.finalWorld = finalWorld; this.finalBlockPos = finalBlockPos; - this.finalBlock = finalBlock; - this.finalMetadata = finalMetadata; + this.finalStack = BlockStack.getStackFromPos(finalWorld, finalBlockPos); } public TileEntity getInitialTile() diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java b/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java index ae76cfb3..1a60eb76 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.tile; import java.util.Iterator; import java.util.List; +import WayofTime.bloodmagic.api.BlockStack; import net.minecraft.block.Block; import net.minecraft.block.BlockMobSpawner; import net.minecraft.block.BlockPortal; @@ -195,20 +196,17 @@ public class TileTeleposer extends TileInventory implements ITickable if (finalTile != null) finalTile.writeToNBT(finalTag); - Block initialBlock = initialWorld.getBlockState(initialPos).getBlock(); - Block finalBlock = finalWorld.getBlockState(finalPos).getBlock(); + BlockStack initialStack = BlockStack.getStackFromPos(initialWorld, initialPos); + BlockStack finalStack = BlockStack.getStackFromPos(finalWorld, finalPos); - if ((initialBlock.equals(Blocks.air) && finalBlock.equals(Blocks.air)) || (initialBlock instanceof BlockMobSpawner || finalBlock instanceof BlockMobSpawner || + if ((initialStack.getBlock().equals(Blocks.air) && finalStack.getBlock().equals(Blocks.air)) || (initialStack.getBlock() instanceof BlockMobSpawner || finalStack.getBlock() instanceof BlockMobSpawner || // caller instanceof TEDemonPortal ? false : - initialBlock instanceof BlockPortal || finalBlock instanceof BlockPortal)) + initialStack.getBlock() instanceof BlockPortal || finalStack.getBlock() instanceof BlockPortal)) { return false; } - int initialMeta = initialBlock.getMetaFromState(initialWorld.getBlockState(initialPos)); - int finalMeta = finalBlock.getMetaFromState(finalWorld.getBlockState(finalPos)); - - TeleposeEvent event = new TeleposeEvent(initialWorld, initialPos, initialBlock, initialMeta, finalWorld, finalPos, finalBlock, finalMeta); + TeleposeEvent event = new TeleposeEvent(initialWorld, initialPos, finalWorld, finalPos); if (MinecraftForge.EVENT_BUS.post(event)) return false; @@ -216,10 +214,10 @@ public class TileTeleposer extends TileInventory implements ITickable finalWorld.playSoundEffect(finalPos.getX(), finalPos.getY(), finalPos.getZ(), "mob.endermen.portal", 1.0F, 1.0F); //Finally, we get to do something! (CLEARING TILES) - if (finalBlock != null) - finalWorld.setTileEntity(finalPos, finalBlock.createTileEntity(finalWorld, finalWorld.getBlockState(finalPos))); - if (initialBlock != null) - initialWorld.setTileEntity(initialPos, initialBlock.createTileEntity(initialWorld, initialWorld.getBlockState(initialPos))); + if (finalStack.getBlock() != null) + finalWorld.setTileEntity(finalPos, finalStack.getBlock().createTileEntity(finalWorld, finalWorld.getBlockState(finalPos))); + if (initialStack.getBlock() != null) + initialWorld.setTileEntity(initialPos, initialStack.getBlock().createTileEntity(initialWorld, initialWorld.getBlockState(initialPos))); //TILES CLEARED IBlockState initialBlockState = initialWorld.getBlockState(initialPos); @@ -248,8 +246,8 @@ public class TileTeleposer extends TileInventory implements ITickable newTileFinal.setPos(initialPos); } - initialWorld.notifyNeighborsOfStateChange(initialPos, finalBlock); - finalWorld.notifyNeighborsOfStateChange(finalPos, initialBlock); + initialWorld.notifyNeighborsOfStateChange(initialPos, finalStack.getBlock()); + finalWorld.notifyNeighborsOfStateChange(finalPos, initialStack.getBlock()); return true; } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java index 0c926dfb..10ef5a89 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/EventHandler.java @@ -94,13 +94,11 @@ public class EventHandler @SubscribeEvent public void onTelepose(TeleposeEvent event) { - BlockStack initialBlock = new BlockStack(event.initialBlock, event.initialMetadata); - BlockStack finalBlock = new BlockStack(event.finalBlock, event.finalMetadata); - if (ConfigHandler.teleposerBlacklist.contains(initialBlock) || ConfigHandler.teleposerBlacklist.contains(finalBlock)) + if (ConfigHandler.teleposerBlacklist.contains(event.initialStack) || ConfigHandler.teleposerBlacklist.contains(event.finalStack)) event.setCanceled(true); - if (BloodMagicAPI.getTeleposerBlacklist().contains(initialBlock) || BloodMagicAPI.getTeleposerBlacklist().contains(finalBlock)) + if (BloodMagicAPI.getTeleposerBlacklist().contains(event.initialStack) || BloodMagicAPI.getTeleposerBlacklist().contains(event.finalStack)) event.setCanceled(true); }