diff --git a/BauSystem_Main/src/de/steamwar/bausystem/utils/PlaceItemUtils.java b/BauSystem_Main/src/de/steamwar/bausystem/utils/PlaceItemUtils.java index 65b2b07c..0635b01a 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/utils/PlaceItemUtils.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/utils/PlaceItemUtils.java @@ -86,7 +86,6 @@ public class PlaceItemUtils { * @param playSound enables sound of placing */ public PlaceItemResult placeItem(Player player, ItemStack itemStack, Block against, BlockFace againstSide, EquipmentSlot hand, boolean force, boolean applyPhysics, boolean rotateAway, boolean playSound) { - // TODO: Place inside of player // If the ItemStack is null or air we cannot place it if (itemStack == null) return PlaceItemResult.NO_ITEM_HELD; if (itemStack.getType().isAir()) return PlaceItemResult.NO_ITEM_HELD; @@ -248,6 +247,23 @@ public class PlaceItemUtils { worldAccessor.set(blockState, blockLocation.getWorld()); } + if (blockData.getMaterial().isSolid()) { + for (Player p : Bukkit.getOnlinePlayers()) { + Location min = p.getLocation().add(-0.3, 0, -0.3); + Location max = p.getLocation().add(0.3, p.isSneaking() ? 1.5 : 1.8, 0.3); + + Location blockmin = block.getLocation(); + Location blockmax = block.getLocation().add(1.0, 1.0, 1.0); + if ( + max.getX() <= blockmin.getX() || min.getX() >= blockmax.getX() || + max.getY() <= blockmin.getY() || min.getY() >= blockmax.getY() || + max.getZ() <= blockmin.getZ() || min.getZ() >= blockmax.getZ() + ) { + return PlaceItemResult.NO_PLACE_INSIDE_PLAYER; + } + } + } + // Set the generated BlockData to the BlockState and update the world without physics blockState.setBlockData(blockData); blockState.update(true, false); @@ -471,6 +487,7 @@ public class PlaceItemUtils { NO_BUILD(false), NO_PLACE(false), NO_DOUBLE_HIGH_BLOCK_SPACE(false), + NO_PLACE_INSIDE_PLAYER(false), SUCCESS(true), ;