From 800bbb814bc0cec699647d74664c4dd48a541b67 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 26 Dec 2016 02:19:22 +0100 Subject: [PATCH] Fixes #724 --- .../network/node/NetworkNodeConstructor.java | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java index 6f041d4b9..b208f387c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java @@ -23,6 +23,7 @@ import net.minecraft.dispenser.PositionImpl; import net.minecraft.entity.item.EntityFireworkRocket; import net.minecraft.init.Blocks; import net.minecraft.init.Items; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTUtil; @@ -122,6 +123,10 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable, state = Blocks.FLOWING_LAVA.getDefaultState(); } + if (!canPlace(front, state)) { + return; + } + holder.world().setBlockState(front, state, 1 | 2); } } @@ -130,6 +135,12 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable, } } + private boolean canPlace(BlockPos pos, IBlockState state) { + BlockEvent.PlaceEvent e = new BlockEvent.PlaceEvent(new BlockSnapshot(holder.world(), pos, state), holder.world().getBlockState(holder.pos()), FakePlayerFactory.getMinecraft((WorldServer) holder.world()), null); + + return !MinecraftForge.EVENT_BUS.post(e); + } + private void placeBlock() { BlockPos front = holder.pos().offset(holder.getDirection()); @@ -140,15 +151,29 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable, @SuppressWarnings("deprecation") IBlockState state = block.getBlock().getStateFromMeta(took.getMetadata()); - BlockEvent.PlaceEvent e = new BlockEvent.PlaceEvent(new BlockSnapshot(holder.world(), front, state), holder.world().getBlockState(holder.pos()), FakePlayerFactory.getMinecraft((WorldServer) holder.world()), null); - - if (MinecraftForge.EVENT_BUS.post(e)) { + if (!canPlace(front, state)) { return; } network.extractItem(itemFilters.getStackInSlot(0), 1, compare, false); - holder.world().setBlockState(front, state, 1 | 2); + if (item.getItem() instanceof ItemBlock) { + ((ItemBlock) item.getItem()).placeBlockAt( + took, + FakePlayerFactory.getMinecraft((WorldServer) holder.world()), + holder.world(), + front, + holder.getDirection(), + 0, + 0, + 0, + state + ); + } else { + holder.world().setBlockState(front, state, 1 | 2); + + state.getBlock().onBlockPlacedBy(holder.world(), front, state, FakePlayerFactory.getMinecraft((WorldServer) holder.world()), took); + } // From ItemBlock#onItemUse SoundType blockSound = block.getBlock().getSoundType(state, holder.world(), holder.pos(), null);