From 51505cf34ad731261f6fa1a4e5438f0a76cb1697 Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Sat, 21 Jul 2018 03:22:11 +0200 Subject: [PATCH] Better rollback of doors --- src/main/java/de/diddiz/LogBlock/WorldEditor.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/diddiz/LogBlock/WorldEditor.java b/src/main/java/de/diddiz/LogBlock/WorldEditor.java index 8f11909..f4c736a 100644 --- a/src/main/java/de/diddiz/LogBlock/WorldEditor.java +++ b/src/main/java/de/diddiz/LogBlock/WorldEditor.java @@ -8,9 +8,11 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; import org.bukkit.block.Sign; +import org.bukkit.block.data.Bisected.Half; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.type.Bed; import org.bukkit.block.data.type.Bed.Part; +import org.bukkit.block.data.type.Door; import org.bukkit.block.data.type.Piston; import org.bukkit.block.data.type.PistonHead; import org.bukkit.block.data.type.TechnicalPiston.Type; @@ -194,6 +196,8 @@ public class WorldEditor implements Runnable { throw new WorldEditorException("Not enough space left in " + block.getType(), block.getLocation()); } } + } else if (!block.getBlockData().equals(replacedBlock)) { + block.setBlockData(replacedBlock); } else { return PerformResult.NO_ACTION; } @@ -208,7 +212,7 @@ public class WorldEditor implements Runnable { } block.setBlockData(replacedBlock); BlockData newData = block.getBlockData(); - + final Material curtype = block.getType(); if (signtext != null && (curtype == Material.SIGN || curtype == Material.WALL_SIGN)) { final Sign sign = (Sign) block.getState(); @@ -230,6 +234,14 @@ public class WorldEditor implements Runnable { bed2.setPart(bed.getPart() == Part.HEAD ? Part.FOOT : Part.HEAD); secBlock.setBlockData(bed2); } + } else if (newData instanceof Door) { + final Door door = (Door) newData; + final Block secBlock = door.getHalf() == Half.TOP ? block.getRelative(BlockFace.DOWN) : block.getRelative(BlockFace.UP); + if (secBlock.isEmpty()) { + Door door2 = (Door) door.clone(); + door2.setHalf(door.getHalf() == Half.TOP ? Half.BOTTOM : Half.TOP); + secBlock.setBlockData(door2); + } } else if ((curtype == Material.PISTON || curtype == Material.STICKY_PISTON)) { Piston piston = (Piston) newData; if (piston.isExtended()) {