diff --git a/BauSystem_12/src/de/steamwar/bausystem/world/AutoLoader_12.java b/BauSystem_12/src/de/steamwar/bausystem/world/AutoLoader_12.java
index c011c17..ce874dd 100644
--- a/BauSystem_12/src/de/steamwar/bausystem/world/AutoLoader_12.java
+++ b/BauSystem_12/src/de/steamwar/bausystem/world/AutoLoader_12.java
@@ -19,11 +19,14 @@
package de.steamwar.bausystem.world;
+import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
+import org.bukkit.block.BlockState;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.material.Tripwire;
class AutoLoader_12 {
@@ -47,11 +50,11 @@ class AutoLoader_12 {
block.setData((byte)(block.getData() | 8));
else
block.setData((byte)(block.getData() & -9));
- }else if(material == Material.STONE_PLATE || material == Material.WOOD_PLATE){
- if(active)
- block.setData((byte)1);
+ }else if(material == Material.STONE_PLATE || material == Material.WOOD_PLATE) {
+ if (active)
+ block.setData((byte) 1);
else
- block.setData((byte)0);
+ block.setData((byte) 0);
}else{
return false;
}
@@ -60,32 +63,28 @@ class AutoLoader_12 {
}
@SuppressWarnings("deprecation")
- static void onPlayerInteract(IAutoLoader loader, PlayerInteractEvent event){
- if(event.getAction() == Action.RIGHT_CLICK_BLOCK){
- Block block = event.getClickedBlock();
- Material material = block.getType();
- if(material == Material.LEVER){
- if((block.getData() & 8) == 8) {
- new IAutoLoader.RedstoneActivation(loader, block.getLocation(), loader.getLastActivation(), false);
- loader.print("§eHebel zurückgesetzt", true);
- }else{
- new IAutoLoader.RedstoneActivation(loader, block.getLocation(), 1, true);
- loader.print("§eHebel betätigt", true);
- }
- }else if(material == Material.STONE_BUTTON){
- new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 20);
- loader.print("§eKnopf betätigt", true);
- }else if(material == Material.WOOD_BUTTON){
- new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 30);
- loader.print("§eKnopf betätigt", true);
- }
- }else if(event.getAction() == Action.PHYSICAL){
- Block block = event.getClickedBlock();
- Material material = block.getType();
- if(material == Material.STONE_PLATE || material == Material.WOOD_PLATE){
- new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 20);
- loader.print("§eDruckplatte betätigt", true);
+ static Detoloader onPlayerInteractLoader(PlayerInteractEvent event){
+ Block block = event.getClickedBlock();
+ Material material = block.getType();
+ if(material == Material.LEVER){
+ if((block.getData() & 8) == 8) {
+ return new Detoloader("Hebel", 0).setActiv(false);
+ }else{
+ return new Detoloader("Hebel", 0).setActiv(true);
}
+ }else if(material == Material.STONE_BUTTON){
+ return new Detoloader("Knopf", 20);
+ }else if(material == Material.WOOD_BUTTON){
+ return new Detoloader("Knopf", 30);
+ }else if (material == Material.NOTE_BLOCK) {
+ return new Detoloader("Noteblock", 1);
+ }else if(material == Material.STONE_PLATE || material == Material.WOOD_PLATE){
+ return new Detoloader("Druckplatte", 20);
}
+ return new Detoloader("§eUnbekannter Block betätigt (nicht aufgenommen)", 0).setAddBack(false);
+ }
+
+ static boolean getLever(Block block) {
+ return (block.getData() & 8) == 8;
}
}
diff --git a/BauSystem_12/src/de/steamwar/bausystem/world/Detonator_12.java b/BauSystem_12/src/de/steamwar/bausystem/world/Detonator_12.java
deleted file mode 100644
index 0d5bd29..0000000
--- a/BauSystem_12/src/de/steamwar/bausystem/world/Detonator_12.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package de.steamwar.bausystem.world;
-
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.block.Block;
-import org.bukkit.block.NoteBlock;
-import org.bukkit.craftbukkit.v1_12_R1.block.CraftNoteBlock;
-import org.bukkit.material.*;
-import org.bukkit.plugin.Plugin;
-
-public class Detonator_12 {
-
- public static void handleSwitch(Location location) {
- Block block = location.getBlock();
- switch (block.getType()) {
- case WOOD_BUTTON:
- handleButton(block, 30);
- break;
- case STONE_BUTTON:
- handleButton(block, 20);
- break;
- case LEVER:
- handleLever(block);
- break;
- case NOTE_BLOCK:
- handleNoteBlock(block);
- break;
- case TRIPWIRE:
- handleTripWire(block);
- break;
- }
- }
-
- private static void handleButton(Block block, int delay) {
- Button btnpow = new Button(block.getType(), block.getData());
- btnpow.setPowered(true);
- block.setData(btnpow.getData());
- updateBlock(block);
- Bukkit.getScheduler().runTaskLater(getPlugin(), () -> {
- btnpow.setPowered(false);
- block.setData(btnpow.getData());
- updateBlock(block);
- }, delay);
- }
-
- private static void handleNoteBlock(Block block) {
- NoteBlock noteBlock = new CraftNoteBlock(block);
- if(!noteBlock.getNote().isSharped()) noteBlock.setNote(noteBlock.getNote().sharped());
- else noteBlock.setNote(noteBlock.getNote().flattened());
- block.setData(noteBlock.getRawData());
- updateBlock(block);
- }
-
- private static void handleLever(Block block) {
- Lever lever = new Lever(block.getType(), block.getData());
- lever.setPowered(!lever.isPowered());
- block.setData(lever.getData());
- updateBlock(block);
- }
-
- private static void handleTripWire(Block block) {
- Tripwire tripwire = new Tripwire(block.getType().getId(), block.getData());
- tripwire.setActivated(!tripwire.isActivated());
- block.setData(tripwire.getData());
- updateBlock(block);
- }
-
- static void updateBlock(Block block) {
- block.getState().update(true);
- }
-
- private static Plugin getPlugin() {
- return Bukkit.getPluginManager().getPlugin("BauSystem");
- }
-}
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 c361a75..11ff749 100644
--- a/BauSystem_15/src/de/steamwar/bausystem/world/AutoLoader_15.java
+++ b/BauSystem_15/src/de/steamwar/bausystem/world/AutoLoader_15.java
@@ -29,6 +29,9 @@ import org.bukkit.block.data.type.Switch;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
+import javax.annotation.Detainted;
+import javax.annotation.Nullable;
+
class AutoLoader_15 {
private AutoLoader_15() {
@@ -64,10 +67,12 @@ class AutoLoader_15 {
relative = block.getRelative(BlockFace.UP);
break;
default:
- relative = block.getRelative(swtch.getFacing());
+ relative = block.getRelative(swtch.getFacing().getOppositeFace());
break;
}
updateBlock(relative);
+ }else if(block.getType() == Material.TRIPWIRE) {
+ updateBlock(block);
}
return true;
}
@@ -78,37 +83,38 @@ class AutoLoader_15 {
block.setBlockData(data, true);
}
- static void onPlayerInteract(IAutoLoader loader, PlayerInteractEvent event) {
- if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.PHYSICAL)
- return;
+ static Detoloader onPlayerInteractLoader(PlayerInteractEvent event) {
Block block = event.getClickedBlock();
assert block != null;
BlockData data = block.getBlockData();
if (!(data instanceof Powerable))
- return;
+ return new Detoloader("§eUnbekannter Block betätigt (nicht aufgenommen)", -1).setAddBack(false);
Powerable powerable = (Powerable) data;
Material material = block.getType();
if (material == Material.LEVER) {
if (powerable.isPowered()) {
- new IAutoLoader.RedstoneActivation(loader, block.getLocation(), loader.getLastActivation(), false);
- loader.print("§eHebel zurückgesetzt", true);
+ return new Detoloader("Hebel", 0).setActiv(false);
} else {
- new IAutoLoader.RedstoneActivation(loader, block.getLocation(), 1, true);
- loader.print("§eHebel betätigt", true);
+ return new Detoloader("Hebel", 0).setActiv(true);
}
} else if (material == Material.STONE_BUTTON) {
- new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 20);
- loader.print("§eKnopf betätigt", true);
+ return new Detoloader("Knopf", 20);
} else if (material.name().contains("PRESSURE_PLATE")){
- new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 20);
- loader.print("§eDruckplatte betätigt", true);
+ return new Detoloader("Druckplatte", 20);
} else if (material.name().contains("BUTTON")) {
- new IAutoLoader.TemporaryActivation(loader, block.getLocation(), 30);
- loader.print("§eKnopf betätigt", true);
+ return new Detoloader("Knopf", 30);
+ }else if (material == Material.NOTE_BLOCK) {
+ return new Detoloader("Noteblock", 1);
+ }else if (material.name().equals("TRIPWIRE")) {
+ return new Detoloader("Tripwire", 20);
} else {
- loader.print("§eUnbekannter Block betätigt (nicht aufgenommen)", false);
+ return new Detoloader("§eUnbekannter Block betätigt", 0).setAddBack(false);
}
}
+
+ static boolean getLever(Block block) {
+ return ((Powerable)block.getBlockData()).isPowered();
+ }
}
diff --git a/BauSystem_15/src/de/steamwar/bausystem/world/Detonator_15.java b/BauSystem_15/src/de/steamwar/bausystem/world/Detonator_15.java
deleted file mode 100644
index 8a01274..0000000
--- a/BauSystem_15/src/de/steamwar/bausystem/world/Detonator_15.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package de.steamwar.bausystem.world;
-
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-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.NoteBlock;
-import org.bukkit.block.data.type.Switch;
-import org.bukkit.block.data.type.Tripwire;
-import org.bukkit.plugin.Plugin;
-
-public class Detonator_15 {
-
- public static void handleSwitch(Location location) {
- Block block = location.getBlock();
- switch (block.getType()) {
- case OAK_BUTTON:
- case BIRCH_BUTTON:
- case ACACIA_BUTTON:
- case DARK_OAK_BUTTON:
- case JUNGLE_BUTTON:
- case SPRUCE_BUTTON:
- case LEGACY_WOOD_BUTTON:
- handleButton(block, 30);
- break;
- case STONE_BUTTON:
- case LEGACY_STONE_BUTTON:
- handleButton(block, 20);
- break;
- case NOTE_BLOCK:
- case LEGACY_NOTE_BLOCK:
- handleNoteBlock(block);
- break;
- case TRIPWIRE:
- handleTripWire(block);
- break;
- case ACACIA_PRESSURE_PLATE:
- case BIRCH_PRESSURE_PLATE:
- case DARK_OAK_PRESSURE_PLATE:
- case HEAVY_WEIGHTED_PRESSURE_PLATE:
- case JUNGLE_PRESSURE_PLATE:
- case LIGHT_WEIGHTED_PRESSURE_PLATE:
- case OAK_PRESSURE_PLATE:
- case SPRUCE_PRESSURE_PLATE:
- case STONE_PRESSURE_PLATE:
- handlePressurePlate(block);
- break;
- default:
- if(block.getBlockData() instanceof Openable) {
- Openable openable = (Openable) block.getBlockData();
- openable.setOpen(!openable.isOpen());
- block.setBlockData(openable);
- } else if(block.getBlockData() instanceof Powerable) {
- Powerable powerable = (Powerable) block.getBlockData();
- powerable.setPowered(!powerable.isPowered());
- block.setBlockData(powerable);
- updateBlockface(block);
- }
- }
- }
-
- private static void handleButton(Block block, int delay) {
- Powerable btnpow = (Powerable) block.getBlockData();
- btnpow.setPowered(true);
- block.setBlockData(btnpow);
- updateBlockface(block);
- Bukkit.getScheduler().runTaskLater(getPlugin(), () -> {
- btnpow.setPowered(false);
- block.setBlockData(btnpow);
- updateBlockface(block);
- }, delay);
- }
-
- private static void handleNoteBlock(Block block) {
- NoteBlock noteBlock = (NoteBlock) block.getBlockData();
- if(!noteBlock.getNote().isSharped()) noteBlock.setNote(noteBlock.getNote().sharped());
- else noteBlock.setNote(noteBlock.getNote().flattened());
- block.setBlockData(noteBlock);
- }
-
- private static void handleTripWire(Block block) {
- Tripwire tripwire = (Tripwire) block.getBlockData();
- if(tripwire.isAttached()) {
- tripwire.setPowered(!tripwire.isPowered());
- block.setBlockData(tripwire);
- updateBlock(block);
- } else {
- tripwire.setPowered(!tripwire.isPowered());
- block.setBlockData(tripwire);
- }
- }
-
- private static void handlePressurePlate(Block block) {
- Powerable pressureSensor = (Powerable) block.getBlockData();
- pressureSensor.setPowered(true);
- block.setBlockData(pressureSensor);
- updateBlock(block.getRelative(BlockFace.DOWN));
- Bukkit.getScheduler().runTaskLater(getPlugin(), () -> {
- pressureSensor.setPowered(false);
- block.setBlockData(pressureSensor);
- updateBlock(block.getRelative(BlockFace.DOWN));
- }, 20);
- }
-
- static void updateBlock(Block block) {
- BlockData data = block.getBlockData();
- block.setType(Material.BARRIER, true);
- block.setBlockData(data, true);
- }
-
- static void updateBlockface(Block block) {
- Block relativebtn;
- if (!(block.getBlockData() instanceof Switch)) return;
- switch (((Switch) block.getBlockData()).getFace()) {
- case FLOOR:
- relativebtn = block.getRelative(BlockFace.DOWN);
- break;
- case CEILING:
- relativebtn = block.getRelative(BlockFace.UP);
- break;
- default:
- relativebtn = block.getRelative(((Switch) block.getBlockData()).getFacing());
- break;
- }
- updateBlock(relativebtn);
- }
-
- private static Plugin getPlugin() {
- return Bukkit.getPluginManager().getPlugin("BauSystem");
- }
-}
diff --git a/BauSystem_API/src/de/steamwar/bausystem/world/Detoloader.java b/BauSystem_API/src/de/steamwar/bausystem/world/Detoloader.java
new file mode 100644
index 0000000..5f588e0
--- /dev/null
+++ b/BauSystem_API/src/de/steamwar/bausystem/world/Detoloader.java
@@ -0,0 +1,63 @@
+/*
+ This file is a part of the SteamWar software.
+
+ Copyright (C) 2020 SteamWar.de-Serverteam
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+package de.steamwar.bausystem.world;
+
+public class Detoloader {
+
+ String message;
+ int activation;
+ boolean activ, addBack = true, useActive = false;
+
+ public Detoloader(String message, int activation) {
+ this.message = message;
+ this.activation = activation;
+ }
+
+ public String getBlock() {
+ return message;
+ }
+
+ public void setBlock(String message) {
+ this.message = message;
+ }
+
+ public int getActivation() {
+ return activation;
+ }
+
+ public boolean isActiv() {
+ return activ;
+ }
+
+ public Detoloader setActiv(boolean activ) {
+ useActive = true;
+ this.activ = activ;
+ return this;
+ }
+
+ public boolean isAddBack() {
+ return addBack;
+ }
+
+ public Detoloader setAddBack(boolean addBack) {
+ this.addBack = addBack;
+ return this;
+ }
+}
diff --git a/BauSystem_API/src/de/steamwar/bausystem/world/IDetonator.java b/BauSystem_API/src/de/steamwar/bausystem/world/IDetonator.java
new file mode 100644
index 0000000..138e581
--- /dev/null
+++ b/BauSystem_API/src/de/steamwar/bausystem/world/IDetonator.java
@@ -0,0 +1,60 @@
+/*
+ This file is a part of the SteamWar software.
+
+ Copyright (C) 2020 SteamWar.de-Serverteam
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+package de.steamwar.bausystem.world;
+
+import net.md_5.bungee.api.ChatMessageType;
+import net.md_5.bungee.api.chat.TextComponent;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+import java.util.Set;
+
+abstract class IDetonator {
+
+
+ abstract Set getLocations();
+ abstract boolean setRedstone(Location location, boolean active);
+ abstract Player getPlayer();
+ abstract void execute();
+
+
+
+ void print(String message, boolean withSize){
+ if(withSize)
+ getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message + " §8" + getLocations().size()));
+ else
+ getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message));
+ }
+
+ static class DetonatorActivation {
+
+ int activation = -1;
+ Location location;
+
+ public DetonatorActivation(Location location) {
+ this.location = location;
+ }
+
+ public DetonatorActivation(int activation, Location location) {
+ this.activation = activation;
+ this.location = location;
+ }
+ }
+}
diff --git a/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java b/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java
index c54c742..4291ad0 100644
--- a/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java
+++ b/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java
@@ -121,7 +121,6 @@ public class BauSystem extends JavaPlugin implements Listener {
Bukkit.getPluginManager().registerEvents(new RegionListener(), this);
Bukkit.getPluginManager().registerEvents(new BauScoreboard(), this);
Bukkit.getPluginManager().registerEvents(new TraceListener(), this);
- Bukkit.getPluginManager().registerEvents(new Detonator(), this);
Bukkit.getPluginManager().registerEvents(new ClipboardListener(), this);
new AFKStopper();
TNTTracer.init();
@@ -161,6 +160,8 @@ public class BauSystem extends JavaPlugin implements Listener {
if (Core.getVersion() == 15)
Bukkit.getWorlds().get(0).setGameRule(GameRule.REDUCED_DEBUG_INFO, false);
+ if (p.getInventory().contains(Detonator.WAND))
+ Detonator.getDetonator(p);
}
@EventHandler
diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandDetonator.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandDetonator.java
index 749ef9c..181b946 100644
--- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandDetonator.java
+++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandDetonator.java
@@ -1,3 +1,22 @@
+/*
+ This file is a part of the SteamWar software.
+
+ Copyright (C) 2020 SteamWar.de-Serverteam
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
package de.steamwar.bausystem.commands;
import de.steamwar.bausystem.BauSystem;
@@ -21,10 +40,6 @@ public class CommandDetonator implements CommandExecutor {
player.sendMessage("§8/§edetonator wand §8- §7Legt den Fernzünder ins Inventar");
player.sendMessage("§8/§edetonator detonate §8- §7Benutzt den Fernzünder");
player.sendMessage("§8/§edetonator reset §8- §7Löscht alle markierten Positionen");
- player.sendMessage("§8/§edetonator add [X] [Y] [Z] §8- §7Fügt den Block an der Coordinate hinzu");
- player.sendMessage("§8/§edetonator list §8- §7Zeigt dir alle Punkte an");
- player.sendMessage("§8/§edetonator tp [Punkt] §8- §7Teleportiert dich zu dem Punkt");
- player.sendMessage("§7Optionale Parameter mit §8<>§7, Benötigte Parameter mit §8[]");
}
private boolean permissionCheck(Player player) {
@@ -54,72 +69,17 @@ public class CommandDetonator implements CommandExecutor {
case "item":
player.getInventory().setItemInMainHand(Detonator.WAND);
player.updateInventory();
+ Detonator.getDetonator(player);
break;
case "delete":
case "reset":
case "remove":
- Detonator.INSTANCE.deleteLocations(player);
+ Detonator.deleteDetonator(player);
break;
case "detonate":
case "click":
case "use":
- Detonator.INSTANCE.execute(player);
- break;
- case "add":
- case "location":
- case "loc":
- if (args.length >= 4) {
- try {
- int x = Integer.parseInt(args[1]);
- int y = Integer.parseInt(args[2]);
- int z = Integer.parseInt(args[3]);
- Detonator.INSTANCE.addLocation(player, new Location(player.getWorld(), x, y, z), true);
- }catch (NumberFormatException e){
- player.sendMessage(BauSystem.PREFIX + "§cBitte gebe eine valide Coordinate an!");
- }
- }else {
- player.sendMessage(BauSystem.PREFIX + "§cBitte gebe eine valide Coordinate an!");
- }
- break;
- case "list":
- case "show":
- if(!Detonator.INSTANCE.containsPlayer(player) ||
- Detonator.INSTANCE.getLocations(player).isEmpty()) {
- player.sendMessage(BauSystem.PREFIX + "§cDu hast keine Punkte!");
- }else {
- player.sendMessage(BauSystem.PREFIX + "§7Deine Punkte:");
- int i = 0;
- for (Detonator.Loc loc: Detonator.INSTANCE.getLocations(player)) {
- i++;
- sendTxtCmd(player, ChatMessageType.SYSTEM, newTxtCmd("§ePunkt " + i + "§8: §7[" + loc.getCords()[0]+ ", " + loc.getCords()[1] +
- ", " + loc.getCords()[2] + "]", "/detonator tp " + i));
- }
- }
- break;
- case "tp":
- case "teleport":
- if(!Detonator.INSTANCE.containsPlayer(player) ||
- Detonator.INSTANCE.getLocations(player).isEmpty()) {
- player.sendMessage(BauSystem.PREFIX + "§cDu hast keine Punkte!");
- return true;
- }
- if(args.length <= 1) {
- player.sendMessage(BauSystem.PREFIX + "§cNicht genug Argumente!");
- return true;
- }
-
- try {
- int i = Integer.parseInt(args[1]);
- if(Detonator.INSTANCE.getLocations(player).size() <= i || i > 0) {
- player.teleport(player.getLocation().zero().add(new ArrayList<>(Detonator.INSTANCE.getLocations(player)).get(i-1).getLocation()
- .add(0.5, 0, 0.5)));
- TextComponent.fromLegacyText("§aTeleportiert zu Punkt: " + args[1]);
- }else {
- player.sendMessage(BauSystem.PREFIX + "§cBitte gebe eine valide Punkt ein!");
- }
- }catch (NumberFormatException e) {
- player.sendMessage(BauSystem.PREFIX + "§cBitte gebe eine valide Zahl ein!");
- }
+ Detonator.getDetonator(player).execute();
break;
default:
help(player);
@@ -127,22 +87,4 @@ public class CommandDetonator implements CommandExecutor {
return true;
}
-
- public static TextComponent newTxtCmd(String txt, String cmd) {
- TextComponent tc = new TextComponent();
- tc.setText(txt);
- tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, cmd));
- return tc;
- }
-
- public static void sendTxtCmd(Player p, ChatMessageType chatMessageType ,TextComponent... tcs) {
- TextComponent[] var5 = tcs;
- int var4 = tcs.length;
-
- for(int var3 = 0; var3 < var4; ++var3) {
- TextComponent textComponent = var5[var3];
- p.spigot().sendMessage(chatMessageType, textComponent);
- }
-
- }
}
diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandDetonatorTabCompleter.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandDetonatorTabCompleter.java
index afddb42..fb57e72 100644
--- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandDetonatorTabCompleter.java
+++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandDetonatorTabCompleter.java
@@ -1,3 +1,22 @@
+/*
+ This file is a part of the SteamWar software.
+
+ Copyright (C) 2020 SteamWar.de-Serverteam
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
package de.steamwar.bausystem.commands;
import org.bukkit.command.Command;
@@ -20,8 +39,6 @@ public class CommandDetonatorTabCompleter implements TabCompleter {
List tabComplete = new ArrayList<>();
tabComplete.add("wand");
tabComplete.add("reset");
- tabComplete.add("delete");
- tabComplete.add("add");
tabComplete.add("list");
tabComplete.add("tp");
diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/AutoLoader.java b/BauSystem_Main/src/de/steamwar/bausystem/world/AutoLoader.java
index d484af5..fe8787a 100644
--- a/BauSystem_Main/src/de/steamwar/bausystem/world/AutoLoader.java
+++ b/BauSystem_Main/src/de/steamwar/bausystem/world/AutoLoader.java
@@ -28,6 +28,7 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
+import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerQuitEvent;
@@ -155,16 +156,31 @@ public class AutoLoader extends IAutoLoader implements Listener {
//BlockRedstoneEvent?
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event){
+ if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.PHYSICAL)
+ return;
+
if(!setup || !event.getPlayer().equals(player))
return;
+ Detoloader detoloader = null;
switch(Core.getVersion()){
case 15:
- AutoLoader_15.onPlayerInteract(this, event);
+ detoloader = AutoLoader_15.onPlayerInteractLoader(event);
break;
default:
- AutoLoader_12.onPlayerInteract(this, event);
+ detoloader = AutoLoader_12.onPlayerInteractLoader(event);
+
}
+ if(detoloader == null) return;
+ if(detoloader.useActive)
+ new IAutoLoader.RedstoneActivation(this, event.getClickedBlock().getLocation()
+ , detoloader.getActivation() == 0 ? getLastActivation() : detoloader.getActivation()
+ , detoloader.isActiv());
+ else
+ new IAutoLoader.TemporaryActivation(this, event.getClickedBlock().getLocation()
+ , detoloader.getActivation());
+ print(detoloader.addBack ? "§e" + detoloader.getBlock() + " betätigt" :
+ detoloader.getBlock(), detoloader.addBack);
}
@EventHandler
diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/Detonator.java b/BauSystem_Main/src/de/steamwar/bausystem/world/Detonator.java
index 5f410a1..a17b174 100644
--- a/BauSystem_Main/src/de/steamwar/bausystem/world/Detonator.java
+++ b/BauSystem_Main/src/de/steamwar/bausystem/world/Detonator.java
@@ -1,5 +1,25 @@
+/*
+ This file is a part of the SteamWar software.
+
+ Copyright (C) 2020 SteamWar.de-Serverteam
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
package de.steamwar.bausystem.world;
+import de.steamwar.bausystem.BauSystem;
import de.steamwar.core.Core;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
@@ -18,15 +38,16 @@ import org.bukkit.inventory.meta.ItemMeta;
import java.util.*;
import java.util.stream.Collectors;
-public class Detonator implements Listener {
-
- private final Map> locs;
+public class Detonator extends IDetonator implements Listener {
- public static Detonator INSTANCE;
- public static ItemStack WAND;
+ public static final ItemStack WAND;
+ private static final Map players = new HashMap<>();
- public Detonator() {
- locs = new HashMap<>();
+ private final Set locs = new HashSet<>();
+ private final Player player;
+
+
+ static {
WAND = new ItemStack(Material.TRIPWIRE_HOOK, 1);
ItemMeta im = WAND.getItemMeta();
@@ -38,76 +59,98 @@ public class Detonator implements Listener {
im.setLore(lorelist);
WAND.setItemMeta(im);
- INSTANCE = this;
}
- public void addLocation(Player player, Location location, boolean shift) {
- if(!shift) locs.get(player).clear();
- locs.get(player).add(new Loc(location.getBlockX(),
- location.getBlockY(),
- location.getBlockZ()));
+ public static Detonator getDetonator(Player player){
+ if(!players.containsKey(player))
+ return new Detonator(player);
+ return players.get(player);
}
- public void deleteLocations(Player player) {
- if(locs.containsKey(player)) locs.remove(player);
+ public Detonator(Player player) {
+ this.player = player;
+ Bukkit.getPluginManager().registerEvents(this, BauSystem.getPlugin());
+ players.put(player, this);
}
- public void deleteLocation(Player player, Location location) {
- if(locs.get(player).stream().filter(loc -> loc.equals(Loc.getFromLocation(location))).count() >= 1)
- locs.get(player).remove(locs.get(player).stream().filter(loc -> Loc.getFromLocation(location)
- .equals(loc)).limit(1).collect(Collectors.toList()).get(0));
+ public static void deleteDetonator(Player player) {
+ players.remove(player);
}
- public Set getLocations(Player player) {
- return locs.get(player);
- }
+ @Override
+ public void execute() {
+ player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§a" + locs.size() + " Punkt(e) ausgelöst!"));
+ for (DetonatorActivation activation: getLocations()) {
- public boolean containsPlayer(Player player) {
- return locs.containsKey(player);
- }
-
- public void execute(Player player) {
- player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§a" + locs.get(player).size() + " Punkt(e) ausgelöst!"));
- for (Loc loc: locs.get(player)) {
- switch(Core.getVersion()){
+ Boolean powered;
+ if(activation.activation == -1) switch (Core.getVersion()) {
case 15:
- Detonator_15.handleSwitch(loc.getLocation());
+ powered = AutoLoader_15.getLever(activation.location.getBlock());
+ AutoLoader_15.setRedstone(activation.location, !powered);
break;
default:
- Detonator_12.handleSwitch(loc.getLocation());
+ 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:
+ AutoLoader_12.setRedstone(activation.location, true);
+ Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () ->
+ AutoLoader_12.setRedstone(activation.location, false), activation.activation);
}
}
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
+ if(!event.getPlayer().equals(player))
+ return;
if (event.getItem() == null) return;
if (event.getItem().isSimilar(WAND)) {
event.setCancelled(true);
- if(!locs.containsKey(event.getPlayer())) locs.put(event.getPlayer(), new HashSet<>());
switch (event.getAction()) {
case LEFT_CLICK_BLOCK:
- Location location = event.getClickedBlock().getLocation();
- if (event.getPlayer().isSneaking()){
- if(locs.get(event.getPlayer()).stream().filter(loc -> loc.equals(Loc.getFromLocation(location)))
- .count() >= 1) {
- deleteLocation(event.getPlayer(), location);
- event.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent
- .fromLegacyText("§cPunkt entfernt!"));
- }else {
- addLocation(event.getPlayer(), location, true);
- event.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent
- .fromLegacyText("§aPunkt hinzugefügt!"));
- }
- } else {
- addLocation(event.getPlayer(), location, false);
- event.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent
- .fromLegacyText("§aPunkt gesetzt!"));
+ Detoloader detoloader = null;
+ switch(Core.getVersion()){
+ case 15:
+ detoloader = AutoLoader_15.onPlayerInteractLoader(event);
+ break;
+ default:
+ detoloader = AutoLoader_12.onPlayerInteractLoader(event);
+
}
- break;
+ if(detoloader == null) return;
+
+ if(event.getPlayer().isSneaking()) {
+ if(locs.stream().filter(detonatorActivation -> detonatorActivation.location.equals(event.getClickedBlock().getLocation())).collect(Collectors.toList()).size() == 1) {
+ locs.forEach(detonatorActivation -> {
+ if(detonatorActivation.location.equals(event.getClickedBlock().getLocation())) locs.remove(detonatorActivation);
+ });
+ }else {
+ if(detoloader.getActivation() == 0) {
+ locs.add(new DetonatorActivation(event.getClickedBlock().getLocation()));
+ }else {
+ locs.add(new DetonatorActivation(detoloader.getActivation(), event.getClickedBlock().getLocation()));
+ }
+ }
+ }else {
+ locs.clear();
+ if(detoloader.getActivation() == 0) {
+ locs.add(new DetonatorActivation(event.getClickedBlock().getLocation()));
+ }else {
+ locs.add(new DetonatorActivation(detoloader.getActivation(), event.getClickedBlock().getLocation()));
+ }
+ }
+ print(detoloader.addBack ? "§e" + detoloader.getBlock() + " hinzugefügt" :
+ detoloader.getBlock(), detoloader.addBack);
+ break;
case RIGHT_CLICK_AIR:
case RIGHT_CLICK_BLOCK:
- execute(event.getPlayer());
+ execute();
break;
}
}
@@ -115,40 +158,26 @@ public class Detonator implements Listener {
@EventHandler(ignoreCancelled = true)
public void onPlayerQuit(PlayerQuitEvent event) {
- if(locs.containsKey(event.getPlayer())) {
- locs.remove(event.getPlayer());
+ players.remove(event.getPlayer());
+ }
+
+ @Override
+ Set getLocations() {
+ return locs;
+ }
+
+ @Override
+ boolean setRedstone(Location location, boolean active) {
+ switch(Core.getVersion()){
+ case 15:
+ return AutoLoader_15.setRedstone(location, active);
+ default:
+ return AutoLoader_12.setRedstone(location, active);
}
}
- public static class Loc {
-
- private final int x;
- private final int y;
- private final int z;
-
- public Loc(int x, int y, int z) {
- this.x = x;
- this.y = y;
- this.z = z;
- }
-
- public int[] getCords() {
- return new int[] {x, y, z};
- }
-
- public Location getLocation() {
- return new Location(Bukkit.getWorlds().get(0), x, y, z);
- }
-
- public static Loc getFromLocation(Location location) {
- return new Loc(location.getBlockX(), location.getBlockY(), location.getBlockZ());
- }
-
- @Override
- public boolean equals(Object o) {
- if(!(o instanceof Loc)) return false;
- Loc loc = (Loc) o;
- return loc.getCords()[0] == x && loc.getCords()[1] == y && loc.getCords()[2] == z;
- }
+ @Override
+ Player getPlayer() {
+ return player;
}
}