From 169856858c6d072c11feed68ff1354169a4d84cf Mon Sep 17 00:00:00 2001 From: Snownee Date: Wed, 9 Dec 2020 20:04:57 +0800 Subject: [PATCH] Fix piston hitbox is directional (#453, #489) --- .../structureMovement/TranslatingContraption.java | 3 ++- .../piston/PistonContraption.java | 15 +++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/TranslatingContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/TranslatingContraption.java index 58d77be16..062be299c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/TranslatingContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/TranslatingContraption.java @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.components.structureMovement; +import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -16,7 +17,7 @@ public abstract class TranslatingContraption extends Contraption { public Set getColliders(World world, Direction movementDirection) { if (getBlocks() == null) - return null; + return Collections.EMPTY_SET; if (cachedColliders == null || cachedColliderDirection != movementDirection) { cachedColliders = new HashSet<>(); cachedColliderDirection = movementDirection; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java index 9c67056ee..33041f493 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java @@ -53,9 +53,14 @@ public class PistonContraption extends TranslatingContraption { public boolean assemble(World world, BlockPos pos) { if (!collectExtensions(world, pos, orientation)) return false; + int count = blocks.size(); if (!searchMovedStructure(world, anchor, retract ? orientation.getOpposite() : orientation)) return false; - bounds = bounds.union(pistonExtensionCollisionBox); + if (blocks.size() == count) { // no new blocks added + bounds = pistonExtensionCollisionBox; + } else { + bounds = bounds.union(pistonExtensionCollisionBox); + } startMoving(world); return true; } @@ -112,8 +117,10 @@ public class PistonContraption extends TranslatingContraption { anchor = pos.offset(direction, initialExtensionProgress + 1); extensionLength = extensionsInBack + extensionsInFront; initialExtensionProgress = extensionsInFront; - pistonExtensionCollisionBox = new AxisAlignedBB(end.offset(direction, -extensionsInFront) - .subtract(anchor)); + pistonExtensionCollisionBox = new AxisAlignedBB( + BlockPos.ZERO.offset(direction, -1), + BlockPos.ZERO.offset(direction, -extensionLength - 1)).expand(1, + 1, 1); if (extensionLength == 0) return false; @@ -124,7 +131,7 @@ public class PistonContraption extends TranslatingContraption { BlockPos relPos = pole.pos.offset(direction, -extensionsInFront); BlockPos localPos = relPos.subtract(anchor); getBlocks().put(localPos, new BlockInfo(localPos, pole.state, null)); - pistonExtensionCollisionBox = pistonExtensionCollisionBox.union(new AxisAlignedBB(localPos)); + //pistonExtensionCollisionBox = pistonExtensionCollisionBox.union(new AxisAlignedBB(localPos)); } return true;