From 71b8a5027835678a4e9e389825ea1858393ecae8 Mon Sep 17 00:00:00 2001 From: stfwi Date: Sun, 23 May 2021 10:16:59 +0200 Subject: [PATCH] Block Placer: Measure circumventing external placement prevention. --- gradle.properties | 2 +- meta/update.json | 3 ++- readme.md | 2 ++ .../java/wile/engineersdecor/blocks/EdPlacer.java | 13 ++++++++++--- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 4c717c5..17ab2dd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ version_minecraft=1.16.4 version_forge_minecraft=1.16.4-35.1.10 version_fml_mappings=20201028-1.16.3 version_jei=1.16.4:7.6.1.63 -version_engineersdecor=1.1.14-b1 +version_engineersdecor=1.1.14-b2 diff --git a/meta/update.json b/meta/update.json index e5f1a12..ecd8ea6 100644 --- a/meta/update.json +++ b/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.16.4": { + "1.1.14-b2": "[F] Block Placer: Attempt circumventing external placement prevention.", "1.1.14-b1": "[F] Fixed Fluid Barrel container item definition (issue #178, thx Wormbo).", "1.1.13": "[R] Release build v1.1.13.\n[A] Added debug logging feature.", "1.1.13-b2": "[F] Fixed explosion resistance values for standard blocks.\n[F] Sandstone Ornated Clinker loot table fixed (ty czbuendel, Valen).", @@ -37,6 +38,6 @@ }, "promos": { "1.16.4-recommended": "1.1.13", - "1.16.4-latest": "1.1.14-b1" + "1.16.4-latest": "1.1.14-b2" } } \ No newline at end of file diff --git a/readme.md b/readme.md index 9fa269b..dfa1cbe 100644 --- a/readme.md +++ b/readme.md @@ -11,6 +11,8 @@ Mod sources for Minecraft version 1.16.x. ## Version history + - v1.1.14-b2 [F] Block Placer: Attempt circumventing external placement prevention. + - v1.1.14-b1 [F] Fixed Fluid Barrel container item definition (issue #178, thx Wormbo). - v1.1.13 [R] Release build v1.1.13. diff --git a/src/main/java/wile/engineersdecor/blocks/EdPlacer.java b/src/main/java/wile/engineersdecor/blocks/EdPlacer.java index a80f95c..7442161 100644 --- a/src/main/java/wile/engineersdecor/blocks/EdPlacer.java +++ b/src/main/java/wile/engineersdecor/blocks/EdPlacer.java @@ -9,6 +9,7 @@ package wile.engineersdecor.blocks; import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.fluid.Fluids; import net.minecraft.inventory.container.ClickType; import net.minecraft.util.math.vector.Vector3d; @@ -50,7 +51,6 @@ import net.minecraftforge.items.wrapper.SidedInvWrapper; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.fml.network.NetworkHooks; -import com.mojang.blaze3d.systems.RenderSystem; import wile.engineersdecor.libmc.detail.TooltipDisplay; import wile.engineersdecor.libmc.detail.TooltipDisplay.TipRange; import wile.engineersdecor.libmc.client.ContainerGui; @@ -537,11 +537,18 @@ public class EdPlacer placement_stack.setCount(1); ItemStack held = placer.getHeldItem(Hand.MAIN_HAND); placer.setHeldItem(Hand.MAIN_HAND, placement_stack); - use_context = new BlockItemUseContext(new ItemUseContext(placer, Hand.MAIN_HAND, new BlockRayTraceResult(new Vector3d(0.5,0,0.5), Direction.DOWN, placement_pos, false))); + List directions = new ArrayList<>(Arrays.asList(Direction.UP, facing.getOpposite())); + for(Direction d:Direction.values()) if(!directions.contains(d)) directions.add(d); + for(Direction d:directions) { + Vector3d v = Vector3d.copyCentered(placement_pos).subtract(Vector3d.copy(d.getDirectionVec())); + use_context = new BlockItemUseContext(new ItemUseContext(placer, Hand.MAIN_HAND, new BlockRayTraceResult(v, d, placement_pos, false))); + if(block.getStateForPlacement(use_context) == null) use_context = null; + if(use_context!=null) break; + } placer.setHeldItem(Hand.MAIN_HAND, held); } } - final BlockState placement_state = (use_context==null) ? (block.getDefaultState()) : (block.getStateForPlacement(use_context)); + BlockState placement_state = (use_context==null) ? (block.getDefaultState()) : (block.getStateForPlacement(use_context)); if(placement_state == null) { Auxiliaries.logDebug("Placer spit: No valid placement state for item " + item.getRegistryName().toString()); return spit_out(facing);