Fix piston retraction checking one block further than it needs to (#1036)
This commit is contained in:
parent
e4a666f8be
commit
a34a0fecab
|
|
@ -493,18 +493,18 @@ public class BlockEventHandler implements Listener
|
||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
||||||
public void onBlockPistonExtend(BlockPistonExtendEvent event)
|
public void onBlockPistonExtend(BlockPistonExtendEvent event)
|
||||||
{
|
{
|
||||||
onPistonEvent(event, event.getBlocks());
|
onPistonEvent(event, event.getBlocks(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prevent pistons pulling blocks into or out of claims.
|
// Prevent pistons pulling blocks into or out of claims.
|
||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
||||||
public void onBlockPistonRetract(BlockPistonRetractEvent event)
|
public void onBlockPistonRetract(BlockPistonRetractEvent event)
|
||||||
{
|
{
|
||||||
onPistonEvent(event, event.getBlocks());
|
onPistonEvent(event, event.getBlocks(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle piston push and pulls.
|
// Handle piston push and pulls.
|
||||||
private void onPistonEvent(BlockPistonEvent event, List<Block> blocks)
|
private void onPistonEvent(BlockPistonEvent event, List<Block> blocks, boolean isRetract)
|
||||||
{
|
{
|
||||||
PistonMode pistonMode = GriefPrevention.instance.config_pistonMovement;
|
PistonMode pistonMode = GriefPrevention.instance.config_pistonMovement;
|
||||||
// Return if piston movements are ignored.
|
// Return if piston movements are ignored.
|
||||||
|
|
@ -514,6 +514,11 @@ public class BlockEventHandler implements Listener
|
||||||
if (!GriefPrevention.instance.claimsEnabledForWorld(event.getBlock().getWorld())) return;
|
if (!GriefPrevention.instance.claimsEnabledForWorld(event.getBlock().getWorld())) return;
|
||||||
|
|
||||||
BlockFace direction = event.getDirection();
|
BlockFace direction = event.getDirection();
|
||||||
|
|
||||||
|
// Direction is always piston facing, correct for retraction.
|
||||||
|
if (isRetract)
|
||||||
|
direction = direction.getOppositeFace();
|
||||||
|
|
||||||
Block pistonBlock = event.getBlock();
|
Block pistonBlock = event.getBlock();
|
||||||
Claim pistonClaim = this.dataStore.getClaimAt(pistonBlock.getLocation(), false, null);
|
Claim pistonClaim = this.dataStore.getClaimAt(pistonBlock.getLocation(), false, null);
|
||||||
|
|
||||||
|
|
@ -583,7 +588,7 @@ public class BlockEventHandler implements Listener
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pushing down or pulling up is safe if all blocks are in line with the piston.
|
// Pushing down or pulling up is safe if all blocks are in line with the piston.
|
||||||
if (minX == maxX && minZ == maxZ && direction == (event instanceof BlockPistonExtendEvent ? BlockFace.DOWN : BlockFace.UP)) return;
|
if (minX == maxX && minZ == maxZ && direction == (isRetract ? BlockFace.UP : BlockFace.DOWN)) return;
|
||||||
|
|
||||||
// Fast mode: Use the intersection of a cuboid containing all blocks instead of individual locations.
|
// Fast mode: Use the intersection of a cuboid containing all blocks instead of individual locations.
|
||||||
if (pistonMode == PistonMode.EVERYWHERE_SIMPLE)
|
if (pistonMode == PistonMode.EVERYWHERE_SIMPLE)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user