SteamWar/BauSystem
Archiviert
13
0

Fernzünder #93

Manuell gemergt
YoyoNow hat 3 Commits von detonater nach master 2020-09-06 14:34:19 +02:00 zusammengeführt
6 geänderte Dateien mit 332 neuen und 153 gelöschten Zeilen
Nur Änderungen aus Commit ba2d321109 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -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");
}
}

Datei anzeigen

@ -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");
}
}

Datei anzeigen

@ -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);
}
} }
} }

Datei anzeigen

@ -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<>();

Datei anzeigen

@ -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,152 +58,27 @@ 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());
private 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:
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; break;
default: default:
if(block.getBlockData() instanceof Openable) { Detonator_12.handleSwitch(loc.getLocation());
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;
}
}
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getItem() == null) return; if (event.getItem() == null) return;
@ -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;
}
}
} }

Datei anzeigen

@ -31,3 +31,4 @@ commands:
aliases: wv aliases: wv
lockschem: lockschem:
detonator: detonator:
aliases: dt