From 2a1e4578d65b9293f7350a63e731db9541475b3c Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Tue, 5 Jan 2021 03:06:27 +0100 Subject: [PATCH] Fixing Detonator --- .../bausystem/world/AutoLoader_15.java | 7 ++ .../steamwar/bausystem/world/Detonator.java | 67 ++++++++++--------- 2 files changed, 43 insertions(+), 31 deletions(-) diff --git a/BauSystem_15/src/de/steamwar/bausystem/world/AutoLoader_15.java b/BauSystem_15/src/de/steamwar/bausystem/world/AutoLoader_15.java index 89fc7fa..8353ce9 100644 --- a/BauSystem_15/src/de/steamwar/bausystem/world/AutoLoader_15.java +++ b/BauSystem_15/src/de/steamwar/bausystem/world/AutoLoader_15.java @@ -24,6 +24,7 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Openable; import org.bukkit.block.data.Powerable; import org.bukkit.block.data.type.Switch; import org.bukkit.event.player.PlayerInteractEvent; @@ -52,6 +53,12 @@ class AutoLoader_15 { powerable.setPowered(active); block.setBlockData(powerable); + if(data instanceof Openable) { + Openable openable = (Openable) data; + openable.setOpen(active); + block.setBlockData(openable); + } + if (data instanceof Switch){ Switch swtch = (Switch) data; Block relative; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/Detonator.java b/BauSystem_Main/src/de/steamwar/bausystem/world/Detonator.java index bdb62b6..0a27f53 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/world/Detonator.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/world/Detonator.java @@ -20,13 +20,15 @@ package de.steamwar.bausystem.world; import de.steamwar.bausystem.BauSystem; -import de.steamwar.core.Core; +import de.steamwar.core.VersionedCallable; +import de.steamwar.core.VersionedRunnable; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -39,7 +41,7 @@ import java.util.stream.Collectors; public class Detonator implements Listener { public static final ItemStack WAND; - private static final Map players = new HashMap<>(); + private static final Map PLAYERS = new HashMap<>(); private final Set locs = new HashSet<>(); private final Player player; @@ -59,49 +61,49 @@ public class Detonator implements Listener { } public static Detonator getDetonator(Player player){ - if(!players.containsKey(player)) + if(!PLAYERS.containsKey(player)) return new Detonator(player); - return players.get(player); + return PLAYERS.get(player); } public Detonator(Player player) { this.player = player; Bukkit.getPluginManager().registerEvents(this, BauSystem.getPlugin()); - players.put(player, this); + PLAYERS.put(player, this); } public static void deleteDetonator(Player player) { - if(players.containsKey(player)) - players.remove(player); + HandlerList.unregisterAll(PLAYERS.remove(player)); } public void execute() { for (Detoloader.DetonatorActivation activation: getLocations()) { - Boolean powered; - if(activation.activation == -1) switch (Core.getVersion()) { - case 15: + if(activation.activation == -1) { + VersionedRunnable.call(new VersionedRunnable(() -> { + boolean powered = AutoLoader_12.getLever(activation.location.getBlock()); + AutoLoader_12.setRedstone(activation.location, !powered); + + }, 12), new VersionedRunnable(() -> { + boolean powered; try { powered = AutoLoader_15.getLever(activation.location.getBlock()); - }catch (ClassCastException e) { + } catch (ClassCastException e) { locs.remove(activation); return; } AutoLoader_15.setRedstone(activation.location, !powered); - break; - default: - powered = AutoLoader_12.getLever(activation.location.getBlock()); - AutoLoader_12.setRedstone(activation.location, !powered); - }else switch (Core.getVersion()) { - case 15: - AutoLoader_15.setRedstone(activation.location, true); - Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () -> - AutoLoader_15.setRedstone(activation.location, false), activation.activation); - break; - default: + }, 15)); + } else { + VersionedRunnable.call(new VersionedRunnable(() -> { AutoLoader_12.setRedstone(activation.location, true); Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () -> AutoLoader_12.setRedstone(activation.location, false), activation.activation); + }, 12), new VersionedRunnable(() -> { + AutoLoader_15.setRedstone(activation.location, true); + Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () -> + AutoLoader_15.setRedstone(activation.location, false), activation.activation); + }, 15)); } } player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§a" + locs.size() + " Punkt" + (locs.size() > 1 ? "e" : "") + " ausgelöst!")); @@ -116,16 +118,19 @@ public class Detonator implements Listener { event.setCancelled(true); switch (event.getAction()) { case LEFT_CLICK_BLOCK: - Detoloader detoloader; - switch(Core.getVersion()){ - case 15: - detoloader = AutoLoader_15.onPlayerInteractLoader(event); - break; - default: - detoloader = AutoLoader_12.onPlayerInteractLoader(event); + Detoloader detoloader = VersionedCallable.call( + new VersionedCallable<>(() -> + AutoLoader_12.onPlayerInteractLoader(event), 12), + new VersionedCallable<>(() -> + AutoLoader_15.onPlayerInteractLoader(event), 15)); + if(detoloader == null) { + return; + } else if (detoloader.activation == -1) { + print(detoloader.getBlock(), detoloader.addBack); + return; } - if(detoloader == null || detoloader.activation == -1) return; + if(event.getPlayer().isSneaking()) { if(locs.stream().filter(detonatorActivation -> detonatorActivation.location.equals(event.getClickedBlock().getLocation())).collect(Collectors.toList()).size() == 1) { @@ -151,7 +156,7 @@ public class Detonator implements Listener { print(detoloader.addBack ? "§e" + detoloader.getBlock() + " getsetzt" : detoloader.getBlock(), detoloader.addBack); } - break; + break; case RIGHT_CLICK_AIR: case RIGHT_CLICK_BLOCK: execute();