Fixed bugs in real door system and added break protection for upper/lower of door
This commit is contained in:
parent
6d922f4f73
commit
0a69a63f3a
4 changed files with 68 additions and 6 deletions
|
@ -667,7 +667,7 @@ public class V10LiftCommand implements CommandExecutor {
|
|||
}
|
||||
}
|
||||
DataManager.addDoorEditPlayer(p.getUniqueId(), floor);
|
||||
sender.sendMessage(ChatColor.GREEN + "Now right-click on the door blocks! (If it are real blocks, click on the bottom block)");
|
||||
sender.sendMessage(ChatColor.GREEN + "Now right-click on the door blocks! (If it are real doors/gates, click on the bottom block)");
|
||||
sender.sendMessage(ChatColor.GREEN + "Then do /v10lift door to save it.");
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -3,10 +3,11 @@ package nl.SBDeveloper.V10Lift.Listeners;
|
|||
import nl.SBDeveloper.V10Lift.API.Objects.Floor;
|
||||
import nl.SBDeveloper.V10Lift.API.Objects.Lift;
|
||||
import nl.SBDeveloper.V10Lift.API.Objects.LiftBlock;
|
||||
import nl.SBDeveloper.V10Lift.API.Objects.LiftSign;
|
||||
import nl.SBDeveloper.V10Lift.Managers.DataManager;
|
||||
import nl.SBDeveloper.V10Lift.Utils.DoorUtil;
|
||||
import nl.SBDeveloper.V10Lift.V10LiftPlugin;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.Sign;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
@ -15,6 +16,7 @@ import org.bukkit.event.Listener;
|
|||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class BlockBreakListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
|
@ -41,6 +43,23 @@ public class BlockBreakListener implements Listener {
|
|||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
for (LiftBlock lb : f.getRealDoorBlocks()) {
|
||||
Location loc;
|
||||
if (lb.getMat().toString().contains("DOOR")) {
|
||||
loc = DoorUtil.getLowerLocationOfDoor(b);
|
||||
} else {
|
||||
loc = b.getLocation();
|
||||
}
|
||||
if (lb.getWorld().equals(Objects.requireNonNull(loc.getWorld(), "World is null at BlockBreakListener").getName())
|
||||
&& lb.getX() == loc.getBlockX()
|
||||
&& lb.getY() == loc.getBlockY()
|
||||
&& lb.getZ() == loc.getBlockZ()) {
|
||||
e.getPlayer().sendMessage(ChatColor.RED + "You can't do this! Remove the door first.");
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!(b.getState() instanceof Sign)) continue;
|
||||
|
|
|
@ -62,6 +62,7 @@ public class PlayerInteractListener implements Listener {
|
|||
for (LiftBlock lb : lift.getInputs()) {
|
||||
if (world.equals(lb.getWorld()) && x == lb.getX() && y == lb.getY() && z == lb.getZ()) {
|
||||
V10LiftPlugin.getAPI().addToQueue(entry.getKey(), lift.getFloors().get(lb.getFloor()), lb.getFloor());
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,19 @@
|
|||
package nl.SBDeveloper.V10Lift.Utils;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.data.Bisected;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class DoorUtil {
|
||||
|
||||
/* Gate codes sponsored by MrWouter <3 */
|
||||
@SuppressWarnings("deprecation")
|
||||
public static boolean openDoor(Block b) {
|
||||
public static boolean openDoor(@Nonnull Block b) {
|
||||
if (b.getType() == XMaterial.IRON_DOOR.parseMaterial()) XSound.BLOCK_IRON_DOOR_OPEN.playSound(b.getLocation());
|
||||
if (b.getType().toString().contains("DOOR") && b.getType() != XMaterial.IRON_DOOR.parseMaterial()) XSound.BLOCK_WOODEN_DOOR_OPEN.playSound(b.getLocation());
|
||||
if (b.getType().toString().contains("GATE")) XSound.BLOCK_FENCE_GATE_OPEN.playSound(b.getLocation());
|
||||
if (XMaterial.isNewVersion()) {
|
||||
org.bukkit.block.data.BlockData blockData = b.getBlockData();
|
||||
if (isOpenable(b)) {
|
||||
|
@ -36,8 +42,10 @@ public class DoorUtil {
|
|||
}
|
||||
|
||||
/* Gate codes sponsored by MrWouter <3 */
|
||||
@SuppressWarnings("deprecation")
|
||||
public static boolean closeDoor(Block b) {
|
||||
public static boolean closeDoor(@Nonnull Block b) {
|
||||
if (b.getType() == XMaterial.IRON_DOOR.parseMaterial()) XSound.BLOCK_IRON_DOOR_CLOSE.playSound(b.getLocation());
|
||||
if (b.getType().toString().contains("DOOR") && b.getType() != XMaterial.IRON_DOOR.parseMaterial()) XSound.BLOCK_WOODEN_DOOR_CLOSE.playSound(b.getLocation());
|
||||
if (b.getType().toString().contains("GATE")) XSound.BLOCK_FENCE_GATE_CLOSE.playSound(b.getLocation());
|
||||
if (XMaterial.isNewVersion()) {
|
||||
org.bukkit.block.data.BlockData blockData = b.getBlockData();
|
||||
if (isOpenable(b)) {
|
||||
|
@ -77,4 +85,38 @@ public class DoorUtil {
|
|||
}
|
||||
}
|
||||
|
||||
public static Location getLowerLocationOfDoor(@Nonnull Block block) {
|
||||
if (XMaterial.isNewVersion()) {
|
||||
org.bukkit.block.data.type.Door door = (org.bukkit.block.data.type.Door) block.getBlockData();
|
||||
Location lower;
|
||||
if (door.getHalf() == Bisected.Half.TOP) {
|
||||
lower = block.getLocation().subtract(0, 1, 0);
|
||||
} else {
|
||||
if (!door.isOpen()) {
|
||||
lower = block.getLocation().subtract(0, 1, 0);
|
||||
if (isOpenable(lower.getBlock()))
|
||||
return lower;
|
||||
else return block.getLocation();
|
||||
}
|
||||
lower = block.getLocation();
|
||||
}
|
||||
return lower;
|
||||
} else {
|
||||
org.bukkit.material.Door door = (org.bukkit.material.Door) block.getState().getData();
|
||||
Location lower;
|
||||
if (door.isTopHalf()) {
|
||||
lower = block.getLocation().subtract(0, 1, 0);
|
||||
} else {
|
||||
if (!door.isOpen()) {
|
||||
lower = block.getLocation().subtract(0, 1, 0);
|
||||
if (isOpenable(lower.getBlock()))
|
||||
return lower;
|
||||
else return block.getLocation();
|
||||
}
|
||||
lower = block.getLocation();
|
||||
}
|
||||
return lower;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue