SteamWar/BauSystem
Archiviert
13
0

Merge pull request 'Fixing Detonator' (#158) from fixing_some_detonator into master

Reviewed-by: YoyoNow <jwsteam@nidido.de>
Dieser Commit ist enthalten in:
YoyoNow 2021-01-09 20:54:36 +01:00
Commit 8b1d8e5d40
4 geänderte Dateien mit 74 neuen und 60 gelöschten Zeilen

Datei anzeigen

@ -24,6 +24,7 @@ import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Openable;
import org.bukkit.block.data.Powerable; import org.bukkit.block.data.Powerable;
import org.bukkit.block.data.type.Switch; import org.bukkit.block.data.type.Switch;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
@ -48,11 +49,18 @@ class AutoLoader_15 {
if (!(data instanceof Powerable)) if (!(data instanceof Powerable))
return false; return false;
Powerable powerable = (Powerable) data; Powerable powerable = (Powerable) data;
powerable.setPowered(active); powerable.setPowered(active);
block.setBlockData(powerable); block.setBlockData(powerable);
if (data instanceof Switch){ if(data instanceof Openable) {
Openable openable = (Openable) data;
openable.setOpen(active);
block.setBlockData(openable);
}
if (data instanceof Switch) {
Switch swtch = (Switch) data; Switch swtch = (Switch) data;
Block relative; Block relative;
switch(swtch.getFace()){ switch(swtch.getFace()){
@ -67,7 +75,7 @@ class AutoLoader_15 {
break; break;
} }
updateBlock(relative); updateBlock(relative);
}else if(block.getType() == Material.TRIPWIRE) { } else if(block.getType() == Material.TRIPWIRE) {
updateBlock(block); updateBlock(block);
} }
return true; return true;
@ -90,11 +98,7 @@ class AutoLoader_15 {
Material material = block.getType(); Material material = block.getType();
if (material == Material.LEVER) { if (material == Material.LEVER) {
if (powerable.isPowered()) { return new Detoloader("Hebel", 0).setActive(!powerable.isPowered());
return new Detoloader("Hebel", 0).setActive(false);
} else {
return new Detoloader("Hebel", 0).setActive(true);
}
} else if (material == Material.STONE_BUTTON) { } else if (material == Material.STONE_BUTTON) {
return new Detoloader("Knopf", Detoloader.STONE_BUTTON); return new Detoloader("Knopf", Detoloader.STONE_BUTTON);
} else if (material.name().contains("PRESSURE_PLATE")){ } else if (material.name().contains("PRESSURE_PLATE")){
@ -111,6 +115,8 @@ class AutoLoader_15 {
} }
static boolean getLever(Block block) { static boolean getLever(Block block) {
return ((Powerable)block.getBlockData()).isPowered(); if(!(block.getBlockData() instanceof Powerable))
return false;
return ((Powerable) block.getBlockData()).isPowered();
} }
} }

Datei anzeigen

@ -34,6 +34,7 @@ public class CommandDetonator implements CommandExecutor {
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 remove §8- §7Entfernt den Fernzünder");
} }
private boolean permissionCheck(Player player) { private boolean permissionCheck(Player player) {
@ -65,16 +66,20 @@ public class CommandDetonator implements CommandExecutor {
player.updateInventory(); player.updateInventory();
Detonator.getDetonator(player); Detonator.getDetonator(player);
break; break;
case "delete":
case "reset":
case "remove": case "remove":
Detonator.deleteDetonator(player); Detonator.deleteDetonator(player);
player.getInventory().removeItem(Detonator.WAND);
break; break;
case "detonate": case "detonate":
case "click": case "click":
case "use": case "use":
Detonator.getDetonator(player).execute(); Detonator.getDetonator(player).execute();
break; break;
case "clear":
case "delete":
case "reset":
Detonator.getDetonator(player).clearLocs();
break;
default: default:
help(player); help(player);
} }

Datei anzeigen

@ -40,6 +40,7 @@ public class CommandDetonatorTabCompleter implements TabCompleter {
tabComplete.add("wand"); tabComplete.add("wand");
tabComplete.add("reset"); tabComplete.add("reset");
tabComplete.add("detonate"); tabComplete.add("detonate");
tabComplete.add("remove");
if (args.length >= 2) { if (args.length >= 2) {
return new ArrayList<>(); return new ArrayList<>();

Datei anzeigen

@ -20,13 +20,15 @@
package de.steamwar.bausystem.world; package de.steamwar.bausystem.world;
import de.steamwar.bausystem.BauSystem; 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.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.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
@ -58,8 +60,8 @@ public class Detonator implements Listener {
WAND.setItemMeta(im); WAND.setItemMeta(im);
} }
public static Detonator getDetonator(Player player){ public static Detonator getDetonator(Player player) {
if(!players.containsKey(player)) if (!players.containsKey(player))
return new Detonator(player); return new Detonator(player);
return players.get(player); return players.get(player);
} }
@ -71,37 +73,29 @@ public class Detonator implements Listener {
} }
public static void deleteDetonator(Player player) { public static void deleteDetonator(Player player) {
if(players.containsKey(player)) if (players.containsKey(player))
players.remove(player); HandlerList.unregisterAll(players.remove(player));
} }
public void execute() { public void execute() {
for (Detoloader.DetonatorActivation activation: getLocations()) { for (Detoloader.DetonatorActivation activation : getLocations()) {
Boolean powered; if (activation.activation == -1) {
if(activation.activation == -1) switch (Core.getVersion()) { VersionedRunnable.call(new VersionedRunnable(() -> {
case 15: boolean powered = AutoLoader_12.getLever(activation.location.getBlock());
try {
powered = AutoLoader_15.getLever(activation.location.getBlock());
}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); AutoLoader_12.setRedstone(activation.location, !powered);
}else switch (Core.getVersion()) { }, 12), new VersionedRunnable(() -> {
case 15: boolean powered = AutoLoader_15.getLever(activation.location.getBlock());
AutoLoader_15.setRedstone(activation.location, true); AutoLoader_15.setRedstone(activation.location, !powered);
Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () -> }, 15));
AutoLoader_15.setRedstone(activation.location, false), activation.activation); } else {
break; VersionedRunnable.call(new VersionedRunnable(() -> {
default:
AutoLoader_12.setRedstone(activation.location, true); AutoLoader_12.setRedstone(activation.location, true);
Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () -> Bukkit.getScheduler().runTaskLater(BauSystem.getPlugin(), () -> AutoLoader_12.setRedstone(activation.location, false), activation.activation);
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!")); player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§a" + locs.size() + " Punkt" + (locs.size() > 1 ? "e" : "") + " ausgelöst!"));
@ -109,49 +103,51 @@ public class Detonator implements Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if(!event.getPlayer().equals(player)) if (!event.getPlayer().equals(player))
return; return;
if (event.getItem() == null) return; if (event.getItem() == null) return;
if (event.getItem().isSimilar(WAND)) { if (event.getItem().isSimilar(WAND)) {
event.setCancelled(true); event.setCancelled(true);
switch (event.getAction()) { switch (event.getAction()) {
case LEFT_CLICK_BLOCK: case LEFT_CLICK_BLOCK:
Detoloader detoloader; Detoloader detoloader = VersionedCallable.call(
switch(Core.getVersion()){ new VersionedCallable<>(() -> AutoLoader_12.onPlayerInteractLoader(event), 12),
case 15: new VersionedCallable<>(() -> AutoLoader_15.onPlayerInteractLoader(event), 15));
detoloader = AutoLoader_15.onPlayerInteractLoader(event);
break;
default:
detoloader = AutoLoader_12.onPlayerInteractLoader(event);
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) { if (event.getPlayer().isSneaking()) {
if (locs.stream().filter(detonatorActivation -> detonatorActivation.location.equals(event.getClickedBlock().getLocation())).collect(Collectors.toList()).size() == 1) {
locs.removeIf(detonatorActivation -> detonatorActivation.location.equals(event.getClickedBlock().getLocation())); locs.removeIf(detonatorActivation -> detonatorActivation.location.equals(event.getClickedBlock().getLocation()));
print(detoloader.addBack ? "§e" + detoloader.getBlock() + " entfernt" : print(detoloader.addBack ? "§e" + detoloader.getBlock() + " entfernt" :
detoloader.getBlock(), detoloader.addBack); detoloader.getBlock(), detoloader.addBack);
}else { } else {
if(detoloader.getActivation() == 0) { if (detoloader.getActivation() == 0) {
locs.add(new Detoloader.DetonatorActivation(event.getClickedBlock().getLocation())); locs.add(new Detoloader.DetonatorActivation(event.getClickedBlock().getLocation()));
}else { } else {
locs.add(new Detoloader.DetonatorActivation(detoloader.getActivation(), event.getClickedBlock().getLocation())); locs.add(new Detoloader.DetonatorActivation(detoloader.getActivation(), event.getClickedBlock().getLocation()));
} }
print(detoloader.addBack ? "§e" + detoloader.getBlock() + " hinzugefügt" : print(detoloader.addBack ? "§e" + detoloader.getBlock() + " hinzugefügt" :
detoloader.getBlock(), detoloader.addBack); detoloader.getBlock(), detoloader.addBack);
} }
}else { } else {
locs.clear(); locs.clear();
if(detoloader.getActivation() == 0) { if (detoloader.getActivation() == 0) {
locs.add(new Detoloader.DetonatorActivation(event.getClickedBlock().getLocation())); locs.add(new Detoloader.DetonatorActivation(event.getClickedBlock().getLocation()));
}else { } else {
locs.add(new Detoloader.DetonatorActivation(detoloader.getActivation(), event.getClickedBlock().getLocation())); locs.add(new Detoloader.DetonatorActivation(detoloader.getActivation(), event.getClickedBlock().getLocation()));
} }
print(detoloader.addBack ? "§e" + detoloader.getBlock() + " getsetzt" : print(detoloader.addBack ? "§e" + detoloader.getBlock() + " getsetzt" :
detoloader.getBlock(), detoloader.addBack); detoloader.getBlock(), detoloader.addBack);
} }
break; break;
case RIGHT_CLICK_AIR: case RIGHT_CLICK_AIR:
case RIGHT_CLICK_BLOCK: case RIGHT_CLICK_BLOCK:
execute(); execute();
@ -162,7 +158,8 @@ public class Detonator implements Listener {
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
deleteDetonator(event.getPlayer()); if (event.getPlayer().equals(player))
deleteDetonator(player);
} }
Set<Detoloader.DetonatorActivation> getLocations() { Set<Detoloader.DetonatorActivation> getLocations() {
@ -173,10 +170,15 @@ public class Detonator implements Listener {
return player; return player;
} }
void print(String message, boolean withSize){ public void clearLocs() {
if(withSize) locs.clear();
}
void print(String message, boolean withSize) {
if (withSize) {
getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message + " §8" + getLocations().size())); getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message + " §8" + getLocations().size()));
else }else {
getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message)); getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message));
}
} }
} }