diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index c15f298162..ad4cbccfd6 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -30,6 +30,7 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.google.common.collect.Lists; import com.google.common.collect.Queues; import com.google.common.collect.Sets; import com.google.gson.Gson; @@ -811,7 +812,7 @@ public class ForgeHooks NBTTagCompound nbt = null; if (itemstack.getTagCompound() != null) { - nbt = (NBTTagCompound)itemstack.getTagCompound().copy(); + nbt = itemstack.getTagCompound().copy(); } if (!(itemstack.getItem() instanceof ItemBucket)) // if not bucket @@ -830,11 +831,11 @@ public class ForgeHooks NBTTagCompound newNBT = null; if (itemstack.getTagCompound() != null) { - newNBT = (NBTTagCompound)itemstack.getTagCompound().copy(); + newNBT = itemstack.getTagCompound().copy(); } - net.minecraftforge.event.world.BlockEvent.PlaceEvent placeEvent = null; + BlockEvent.PlaceEvent placeEvent = null; @SuppressWarnings("unchecked") - List blockSnapshots = (List)world.capturedBlockSnapshots.clone(); + List blockSnapshots = (List)world.capturedBlockSnapshots.clone(); world.capturedBlockSnapshots.clear(); // make sure to set pre-placement item data for event @@ -853,11 +854,11 @@ public class ForgeHooks placeEvent = ForgeEventFactory.onPlayerBlockPlace(player, blockSnapshots.get(0), side, hand); } - if (placeEvent != null && (placeEvent.isCanceled())) + if (placeEvent != null && placeEvent.isCanceled()) { ret = EnumActionResult.FAIL; // cancel placement // revert back all captured blocks - for (net.minecraftforge.common.util.BlockSnapshot blocksnapshot : blockSnapshots) + for (BlockSnapshot blocksnapshot : Lists.reverse(blockSnapshots)) { world.restoringBlockSnapshots = true; blocksnapshot.restore(true, false); diff --git a/src/test/java/net/minecraftforge/test/BlockPlaceEventTest.java b/src/test/java/net/minecraftforge/test/BlockPlaceEventTest.java new file mode 100644 index 0000000000..918c3d67e3 --- /dev/null +++ b/src/test/java/net/minecraftforge/test/BlockPlaceEventTest.java @@ -0,0 +1,26 @@ +package net.minecraftforge.test; + +import net.minecraft.init.Blocks; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +@Mod(modid = BlockPlaceEventTest.MOD_ID, name = "BlockPlaceEvent test mod", version = "1.0") +@Mod.EventBusSubscriber +public class BlockPlaceEventTest +{ + static final String MOD_ID = "block_place_event_test"; + static final boolean ENABLED = false; + + @SubscribeEvent + public static void onBlockPlaced(BlockEvent.PlaceEvent event) + { + if (!ENABLED) return; + + if (event.getPlacedBlock().getBlock() == Blocks.CHEST + && event.getPlacedAgainst().getBlock() != Blocks.DIAMOND_BLOCK) + { + event.setCanceled(true); + } + } +}