Fernzünder #93
75
BauSystem_12/src/de/steamwar/bausystem/world/Detonator_12.java
Normale Datei
75
BauSystem_12/src/de/steamwar/bausystem/world/Detonator_12.java
Normale Datei
@ -0,0 +1,75 @@
|
|||||||
|
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");
|
||||||
|
}
|
||||||
|
}
|
135
BauSystem_15/src/de/steamwar/bausystem/world/Detonator_15.java
Normale Datei
135
BauSystem_15/src/de/steamwar/bausystem/world/Detonator_15.java
Normale Datei
@ -0,0 +1,135 @@
|
|||||||
|
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");
|
||||||
|
}
|
||||||
|
}
|
@ -4,19 +4,26 @@ import de.steamwar.bausystem.BauSystem;
|
|||||||
import de.steamwar.bausystem.Permission;
|
import de.steamwar.bausystem.Permission;
|
||||||
import de.steamwar.bausystem.world.Detonator;
|
import de.steamwar.bausystem.world.Detonator;
|
||||||
import de.steamwar.bausystem.world.Welt;
|
import de.steamwar.bausystem.world.Welt;
|
||||||
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
|
import net.md_5.bungee.api.chat.ClickEvent;
|
||||||
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class CommandDetonator implements CommandExecutor {
|
public class CommandDetonator implements CommandExecutor {
|
||||||
|
|
||||||
private void help(Player player) {
|
private void help(Player player) {
|
||||||
player.sendMessage("§8/§edetonator wand §8- §7Legt den Fernzünder ins Inventar");
|
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 detonate §8- §7Benutzt den Fernzünder");
|
||||||
player.sendMessage("§8/§edetonator reset §8- §7Löscht alle markierten Positionen");
|
player.sendMessage("§8/§edetonator reset §8- §7Löscht alle markierten Positionen");
|
||||||
player.sendMessage("§8/§edetonator add [Z] [Y] [Z] §8- §7Fügt den Block an der Coordinate hinzu");
|
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[]");
|
player.sendMessage("§7Optionale Parameter mit §8<>§7, Benötigte Parameter mit §8[]");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,6 +51,7 @@ public class CommandDetonator implements CommandExecutor {
|
|||||||
switch (args[0].toLowerCase()) {
|
switch (args[0].toLowerCase()) {
|
||||||
case "wand":
|
case "wand":
|
||||||
case "detonator":
|
case "detonator":
|
||||||
|
case "item":
|
||||||
player.getInventory().setItemInMainHand(Detonator.WAND);
|
player.getInventory().setItemInMainHand(Detonator.WAND);
|
||||||
player.updateInventory();
|
player.updateInventory();
|
||||||
break;
|
break;
|
||||||
@ -73,10 +81,68 @@ public class CommandDetonator implements CommandExecutor {
|
|||||||
player.sendMessage(BauSystem.PREFIX + "§cBitte gebe eine Valide Coordinate an!");
|
player.sendMessage(BauSystem.PREFIX + "§cBitte gebe eine Valide Coordinate an!");
|
||||||
}
|
}
|
||||||
break;
|
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!");
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
help(player);
|
help(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,11 @@ public class CommandDetonatorTabCompleter implements TabCompleter {
|
|||||||
private List<String> detonaterTabComplete(Player player, String[] args) {
|
private List<String> detonaterTabComplete(Player player, String[] args) {
|
||||||
List<String> tabComplete = new ArrayList<>();
|
List<String> tabComplete = new ArrayList<>();
|
||||||
tabComplete.add("wand");
|
tabComplete.add("wand");
|
||||||
tabComplete.add("detonate");
|
tabComplete.add("reset");
|
||||||
tabComplete.add("delete");
|
tabComplete.add("delete");
|
||||||
tabComplete.add("add");
|
tabComplete.add("add");
|
||||||
|
tabComplete.add("list");
|
||||||
|
tabComplete.add("tp");
|
||||||
|
|
||||||
if (args.length >= 2) {
|
if (args.length >= 2) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
|
@ -1,18 +1,11 @@
|
|||||||
package de.steamwar.bausystem.world;
|
package de.steamwar.bausystem.world;
|
||||||
|
|
||||||
import de.steamwar.bausystem.BauSystem;
|
import de.steamwar.core.Core;
|
||||||
import de.steamwar.bausystem.commands.CommandDetonator;
|
|
||||||
import net.md_5.bungee.api.ChatMessageType;
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
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.*;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -65,149 +58,24 @@ public class Detonator implements Listener {
|
|||||||
.equals(loc)).limit(1).collect(Collectors.toList()).get(0));
|
.equals(loc)).limit(1).collect(Collectors.toList()).get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<Loc> getLocations(Player player) {
|
||||||
|
return locs.get(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean containsPlayer(Player player) {
|
||||||
|
return locs.containsKey(player);
|
||||||
|
}
|
||||||
|
|
||||||
public void execute(Player 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)) {
|
for (Loc loc: locs.get(player)) {
|
||||||
handleSwitch(loc.getLocation());
|
switch(Core.getVersion()){
|
||||||
}
|
case 15:
|
||||||
}
|
Detonator_15.handleSwitch(loc.getLocation());
|
||||||
|
break;
|
||||||
private void handleSwitch(Location location) {
|
default:
|
||||||
Block block = location.getBlock();
|
Detonator_12.handleSwitch(loc.getLocation());
|
||||||
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:
|
|
||||||
Switch btn = (Switch) block.getBlockData();
|
|
||||||
Powerable btnpow = (Powerable) block.getBlockData();
|
|
||||||
btnpow.setPowered(true);
|
|
||||||
block.setBlockData(btnpow);
|
|
||||||
updateBlockface(block);
|
|
||||||
Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () -> {
|
|
||||||
btnpow.setPowered(false);
|
|
||||||
block.setBlockData(btnpow);
|
|
||||||
updateBlockface(block);
|
|
||||||
}, 30);
|
|
||||||
break;
|
|
||||||
case STONE_BUTTON:
|
|
||||||
case LEGACY_STONE_BUTTON:
|
|
||||||
Switch sbtn = (Switch) block.getBlockData();
|
|
||||||
Powerable sbtnpow = (Powerable) block.getBlockData();
|
|
||||||
sbtnpow.setPowered(true);
|
|
||||||
block.setBlockData(sbtnpow);
|
|
||||||
updateBlockface(block);
|
|
||||||
Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () -> {
|
|
||||||
sbtnpow.setPowered(false);
|
|
||||||
block.setBlockData(sbtnpow);
|
|
||||||
updateBlockface(block);
|
|
||||||
}, 20);
|
|
||||||
break;
|
|
||||||
case NOTE_BLOCK:
|
|
||||||
case LEGACY_NOTE_BLOCK:
|
|
||||||
NoteBlock noteBlock = (NoteBlock) block.getBlockData();
|
|
||||||
if(noteBlock.getNote().isSharped()) noteBlock.setNote(noteBlock.getNote().flattened());
|
|
||||||
else noteBlock.setNote(noteBlock.getNote().sharped());
|
|
||||||
block.setBlockData(noteBlock);
|
|
||||||
break;
|
|
||||||
case TRIPWIRE:
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
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:
|
|
||||||
Powerable pressureSensor = (Powerable) block.getBlockData();
|
|
||||||
pressureSensor.setPowered(true);
|
|
||||||
block.setBlockData(pressureSensor);
|
|
||||||
updateBlock(block.getRelative(BlockFace.DOWN));
|
|
||||||
Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () -> {
|
|
||||||
pressureSensor.setPowered(false);
|
|
||||||
block.setBlockData(pressureSensor);
|
|
||||||
updateBlock(block.getRelative(BlockFace.DOWN));
|
|
||||||
}, 20);
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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 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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -251,4 +119,36 @@ public class Detonator implements Listener {
|
|||||||
locs.remove(event.getPlayer());
|
locs.remove(event.getPlayer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,3 +31,4 @@ commands:
|
|||||||
aliases: wv
|
aliases: wv
|
||||||
lockschem:
|
lockschem:
|
||||||
detonator:
|
detonator:
|
||||||
|
aliases: dt
|
In neuem Issue referenzieren
Einen Benutzer sperren