From 9a9c02fa2598f1f025993686789c9e3bc10385db Mon Sep 17 00:00:00 2001 From: Choonster TheMage Date: Fri, 4 Nov 2016 05:53:12 +1100 Subject: [PATCH] Add hand argument to BlockEvent.PlaceEvent (#3221) (#3270) --- .../net/minecraft/item/ItemLilyPad.java.patch | 2 +- .../net/minecraftforge/common/ForgeHooks.java | 4 ++-- .../event/ForgeEventFactory.java | 24 +++++++++++++++++-- .../event/world/BlockEvent.java | 24 ++++++++++++++++--- 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/patches/minecraft/net/minecraft/item/ItemLilyPad.java.patch b/patches/minecraft/net/minecraft/item/ItemLilyPad.java.patch index 784e8a2963..75b8ed9794 100644 --- a/patches/minecraft/net/minecraft/item/ItemLilyPad.java.patch +++ b/patches/minecraft/net/minecraft/item/ItemLilyPad.java.patch @@ -7,7 +7,7 @@ + // special case for handling block placement with water lilies + net.minecraftforge.common.util.BlockSnapshot blocksnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(p_77659_2_, blockpos1); + p_77659_2_.func_175656_a(blockpos1, Blocks.field_150392_bi.func_176223_P()); -+ if (net.minecraftforge.event.ForgeEventFactory.onPlayerBlockPlace(p_77659_3_, blocksnapshot, net.minecraft.util.EnumFacing.UP).isCanceled()) ++ if (net.minecraftforge.event.ForgeEventFactory.onPlayerBlockPlace(p_77659_3_, blocksnapshot, net.minecraft.util.EnumFacing.UP, p_77659_4_).isCanceled()) + { + blocksnapshot.restore(true, false); + return new ActionResult(EnumActionResult.FAIL, p_77659_1_); diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index 290cf88ec5..6350107167 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -795,11 +795,11 @@ public class ForgeHooks } if (blockSnapshots.size() > 1) { - placeEvent = ForgeEventFactory.onPlayerMultiBlockPlace(player, blockSnapshots, side); + placeEvent = ForgeEventFactory.onPlayerMultiBlockPlace(player, blockSnapshots, side, hand); } else if (blockSnapshots.size() == 1) { - placeEvent = ForgeEventFactory.onPlayerBlockPlace(player, blockSnapshots.get(0), side); + placeEvent = ForgeEventFactory.onPlayerBlockPlace(player, blockSnapshots.get(0), side, hand); } if (placeEvent != null && (placeEvent.isCanceled())) diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 8f8043c14d..5aa9ee0f07 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -109,22 +109,42 @@ import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.fml.common.eventhandler.Event.Result; +import javax.annotation.Nullable; + public class ForgeEventFactory { + /** + * @deprecated Use {@link #onPlayerMultiBlockPlace(EntityPlayer, List, EnumFacing, EnumHand)} instead. + */ + @Deprecated public static MultiPlaceEvent onPlayerMultiBlockPlace(EntityPlayer player, List blockSnapshots, EnumFacing direction) + { + return onPlayerMultiBlockPlace(player, blockSnapshots, direction, null); + } + + public static MultiPlaceEvent onPlayerMultiBlockPlace(EntityPlayer player, List blockSnapshots, EnumFacing direction, @Nullable EnumHand hand) { BlockSnapshot snap = blockSnapshots.get(0); IBlockState placedAgainst = snap.getWorld().getBlockState(snap.getPos().offset(direction.getOpposite())); - MultiPlaceEvent event = new MultiPlaceEvent(blockSnapshots, placedAgainst, player); + MultiPlaceEvent event = new MultiPlaceEvent(blockSnapshots, placedAgainst, player, hand); MinecraftForge.EVENT_BUS.post(event); return event; } + /** + * @deprecated Use {@link #onPlayerBlockPlace(EntityPlayer, BlockSnapshot, EnumFacing, EnumHand)} instead. + */ + @Deprecated public static PlaceEvent onPlayerBlockPlace(EntityPlayer player, BlockSnapshot blockSnapshot, EnumFacing direction) + { + return onPlayerBlockPlace(player, blockSnapshot, direction, null); + } + + public static PlaceEvent onPlayerBlockPlace(EntityPlayer player, BlockSnapshot blockSnapshot, EnumFacing direction, @Nullable EnumHand hand) { IBlockState placedAgainst = blockSnapshot.getWorld().getBlockState(blockSnapshot.getPos().offset(direction.getOpposite())); - PlaceEvent event = new PlaceEvent(blockSnapshot, placedAgainst, player); + PlaceEvent event = new PlaceEvent(blockSnapshot, placedAgainst, player, hand); MinecraftForge.EVENT_BUS.post(event); return event; } diff --git a/src/main/java/net/minecraftforge/event/world/BlockEvent.java b/src/main/java/net/minecraftforge/event/world/BlockEvent.java index b5a33b92e6..6f4c769d40 100644 --- a/src/main/java/net/minecraftforge/event/world/BlockEvent.java +++ b/src/main/java/net/minecraftforge/event/world/BlockEvent.java @@ -27,6 +27,7 @@ import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Enchantments; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; @@ -37,6 +38,8 @@ import net.minecraftforge.fml.common.eventhandler.Event; import com.google.common.collect.ImmutableList; +import javax.annotation.Nullable; + public class BlockEvent extends Event { private static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("forge.debugBlockEvent", "false")); @@ -170,26 +173,36 @@ public class BlockEvent extends Event private final BlockSnapshot blockSnapshot; private final IBlockState placedBlock; private final IBlockState placedAgainst; + private final EnumHand hand; + @Deprecated public PlaceEvent(BlockSnapshot blockSnapshot, IBlockState placedAgainst, EntityPlayer player) { + this(blockSnapshot, placedAgainst, player, null); + } + + public PlaceEvent(BlockSnapshot blockSnapshot, IBlockState placedAgainst, EntityPlayer player, @Nullable EnumHand hand) { super(blockSnapshot.getWorld(), blockSnapshot.getPos(), blockSnapshot.getCurrentBlock()); this.player = player; - this.itemInHand = player.getHeldItemMainhand(); + this.itemInHand = player.getHeldItem(hand != null ? hand : EnumHand.MAIN_HAND); this.blockSnapshot = blockSnapshot; this.placedBlock = blockSnapshot.getCurrentBlock(); this.placedAgainst = placedAgainst; + this.hand = hand; if (DEBUG) { - System.out.printf("Created PlaceEvent - [PlacedBlock: %s ][PlacedAgainst: %s ][ItemStack: %s ][Player: %s ]\n", getPlacedBlock(), placedAgainst, getItemInHand(), player); + System.out.printf("Created PlaceEvent - [PlacedBlock: %s ][PlacedAgainst: %s ][ItemStack: %s ][Player: %s ][Hand: %s]\n", getPlacedBlock(), placedAgainst, getItemInHand(), player, hand); } } public EntityPlayer getPlayer() { return player; } + @Nullable public ItemStack getItemInHand() { return itemInHand; } public BlockSnapshot getBlockSnapshot() { return blockSnapshot; } public IBlockState getPlacedBlock() { return placedBlock; } public IBlockState getPlacedAgainst() { return placedAgainst; } + @Nullable + public EnumHand getHand() { return hand; } } /** @@ -204,9 +217,14 @@ public class BlockEvent extends Event { private final List blockSnapshots; + @Deprecated public MultiPlaceEvent(List blockSnapshots, IBlockState placedAgainst, EntityPlayer player) { - super(blockSnapshots.get(0), placedAgainst, player); + this(blockSnapshots, placedAgainst, player, null); + } + + public MultiPlaceEvent(List blockSnapshots, IBlockState placedAgainst, EntityPlayer player, @Nullable EnumHand hand) { + super(blockSnapshots.get(0), placedAgainst, player, hand); this.blockSnapshots = ImmutableList.copyOf(blockSnapshots); if (DEBUG) {