From 469c06d7eca9d57b7f52ac9be24beace2b3d8ee4 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 19 Apr 2021 14:17:43 +0200 Subject: [PATCH] Update TNTSimulator --- .../features/simulator/SimulatorCommand.java | 2 - .../features/simulator/TNTSimulator.java | 134 +++++++++++++----- .../simulator/TNTSimulatorListener.java | 4 +- 3 files changed, 97 insertions(+), 43 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCommand.java index 24397251..c718d6c8 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCommand.java @@ -69,8 +69,6 @@ public class SimulatorCommand extends SWCommand { } private boolean cannotUse(Player player) { - // TODO: remove this - if (true) return false; if (!Permission.hasPermission(player, Permission.WORLD)) { player.sendMessage(BauSystem.PREFIX + "§cDu darfst hier nicht den Simulator nutzen"); return true; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulator.java index 863dc4bf..0f2fb064 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulator.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulator.java @@ -29,8 +29,6 @@ import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWListInv; -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.World; @@ -49,6 +47,10 @@ import java.util.stream.Collectors; public class TNTSimulator { + private static final Vector X_VECTOR = new Vector(0.0625, 0, 0); + private static final Vector Y_VECTOR = new Vector(0, 0.0625, 0); + private static final Vector Z_VECTOR = new Vector(0, 0, 0.0625); + private static final World WORLD = Bukkit.getWorlds().get(0); private static final List LORE = Collections.singletonList("§eZum Ändern klicken"); private static final List EMPTY = new ArrayList<>(); @@ -300,18 +302,14 @@ public class TNTSimulator { } private void setFuseTicks(int fuseTicks) { - if (fuseTicks < 0) - fuseTicks = 0; - if (fuseTicks > 80) - fuseTicks = 80; + if (fuseTicks < 0) fuseTicks = 0; + if (fuseTicks > 160) fuseTicks = 160; this.fuseTicks = fuseTicks; } private void setCount(int count) { - if (count < 1) - count = 1; - if (count > 400) - count = 400; + if (count < 1) count = 1; + if (count > 400) count = 400; this.count = count; } @@ -320,10 +318,8 @@ public class TNTSimulator { } private void setTickOffset(int tickOffset) { - if (tickOffset < 0) - tickOffset = 0; - if (tickOffset > 400) - tickOffset = 400; + if (tickOffset < 0) tickOffset = 0; + if (tickOffset > 400) tickOffset = 400; this.tickOffset = tickOffset; } @@ -336,7 +332,7 @@ public class TNTSimulator { SWInventory swInventory = new SWInventory(player, 54, "TNT konfigurieren"); // Change Count of spawned TNT - swInventory.setItem(29, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { + swInventory.setItem(1, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { setCount(count + 1); editTNT(); })); @@ -345,14 +341,14 @@ public class TNTSimulator { editTNT(); }, this::editTNT)); countItem.getItemStack().setAmount(count); - swInventory.setItem(37, countItem); - swInventory.setItem(46, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { + swInventory.setItem(10, countItem); + swInventory.setItem(19, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { setCount(count - 1); editTNT(); })); // Change TickOffset - swInventory.setItem(30, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { + swInventory.setItem(2, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { setTickOffset(tickOffset + 1); editTNT(); })); @@ -361,14 +357,14 @@ public class TNTSimulator { editTNT(); }, this::editTNT)); tickItem.getItemStack().setAmount(Math.max(tickOffset, 1)); - swInventory.setItem(38, tickItem); - swInventory.setItem(47, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { + swInventory.setItem(11, tickItem); + swInventory.setItem(20, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { setTickOffset(tickOffset - 1); editTNT(); })); // Change FuseTicks - swInventory.setItem(31, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { + swInventory.setItem(3, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { setFuseTicks(fuseTicks + 1); editTNT(); })); @@ -377,41 +373,74 @@ public class TNTSimulator { editTNT(); }, this::editTNT)); fuseTickItem.getItemStack().setAmount(Math.max(fuseTicks, 1)); - swInventory.setItem(39, fuseTickItem); - swInventory.setItem(48, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { + swInventory.setItem(12, fuseTickItem); + swInventory.setItem(21, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { setFuseTicks(fuseTicks - 1); editTNT(); })); // Velocity Settings - swInventory.setItem(11, Material.TNT, "TNT", clickType -> { + swInventory.setItem(38, Material.TNT, "TNT", clickType -> { }); - swInventory.setItem(19, new SWItem(getDye(xVelocity), getColor(xVelocity), "§7TNT §eSprung X §8- " + active(xVelocity), clickType -> { + swInventory.setItem(46, new SWItem(getWool(xVelocity), getColor(xVelocity), "§7TNT §eSprung X §8- " + active(xVelocity), clickType -> { xVelocity = !xVelocity; editTNT(); })); - swInventory.setItem(2, new SWItem(getDye(yVelocity), getColor(yVelocity), "§7TNT §eSprung Y §8- " + active(yVelocity), clickType -> { + swInventory.setItem(29, new SWItem(getWool(yVelocity), getColor(yVelocity), "§7TNT §eSprung Y §8- " + active(yVelocity), clickType -> { yVelocity = !yVelocity; editTNT(); })); - swInventory.setItem(21, new SWItem(getDye(zVelocity), getColor(zVelocity), "§7TNT §eSprung Z §8- " + active(zVelocity), clickType -> { + swInventory.setItem(48, new SWItem(getWool(zVelocity), getColor(zVelocity), "§7TNT §eSprung Z §8- " + active(zVelocity), clickType -> { zVelocity = !zVelocity; editTNT(); })); // Position Settings - swInventory.setItem(15, Material.TNT, "TNT", clickType -> { - }); - swInventory.setItem(23, new SWItem(getDye(xVelocity), getColor(xVelocity), "§7TNT §eSprung X §8- " + active(xVelocity), clickType -> { - xVelocity = !xVelocity; + // X Position + swInventory.setItem(5, new SWItem(SWItem.getDye(10), "§7+0,0625", clickType -> { + position.add(X_VECTOR); editTNT(); })); - swInventory.setItem(6, new SWItem(getDye(yVelocity), getColor(yVelocity), "§7TNT §eSprung Y §8- " + active(yVelocity), clickType -> { - yVelocity = !yVelocity; + swInventory.setItem(14, new SWItem(Material.PAPER, "§7x-Position §8- §e" + position.getX(), LORE, false, clickType -> { + changePosition(player, position.getX(), x -> { + position.setX(clamp(x)); + editTNT(); + }, this::editTNT); + })); + swInventory.setItem(23, new SWItem(SWItem.getDye(1), "§7-0,0625", clickType -> { + position.subtract(X_VECTOR); editTNT(); })); - swInventory.setItem(25, new SWItem(getDye(zVelocity), getColor(zVelocity), "§7TNT §eSprung Z §8- " + active(zVelocity), clickType -> { - zVelocity = !zVelocity; + + // Y Position + swInventory.setItem(6, new SWItem(SWItem.getDye(10), "§7+0,0625", clickType -> { + position.add(Y_VECTOR); + editTNT(); + })); + swInventory.setItem(15, new SWItem(Material.PAPER, "§7y-Position §8- §e" + position.getY(), LORE, false, clickType -> { + changePosition(player, position.getY(), y -> { + position.setY(clamp(y)); + editTNT(); + }, this::editTNT); + })); + swInventory.setItem(24, new SWItem(SWItem.getDye(1), "§7-0,0625", clickType -> { + position.subtract(Y_VECTOR); + editTNT(); + })); + + // Z Position + swInventory.setItem(7, new SWItem(SWItem.getDye(10), "§7+0,0625", clickType -> { + position.add(Z_VECTOR); + editTNT(); + })); + swInventory.setItem(16, new SWItem(Material.PAPER, "§7z-Position §8- §e" + position.getZ(), LORE, false, clickType -> { + changePosition(player, position.getZ(), z -> { + position.setZ(clamp(z)); + editTNT(); + }, this::editTNT); + })); + swInventory.setItem(25, new SWItem(SWItem.getDye(1), "§7-0,0625", clickType -> { + position.subtract(Z_VECTOR); editTNT(); })); @@ -421,10 +450,19 @@ public class TNTSimulator { editTNT(); })); - swInventory.setItem(42, new SWItem(Material.TNT, "§eZündphase hinzufügen", clickType -> { + swInventory.setItem(33, new SWItem(Material.TNT, "§eZündphase hinzufügen", clickType -> { spawns.add(new TNTSpawn(position, entity)); })); + swInventory.setItem(42, new SWItem(Material.ARROW, "§eZurück", clickType -> { + showGUI(); + })); + + swInventory.setItem(51, new SWItem(Material.DISPENSER, "§eTNT hinzufügen", clickType -> { + Vector vector = position.clone(); + spawns.add(new TNTSpawn(vector, SimulatorEntityShowMode.createEntity(player, vector, false))); + })); + // Delete tnt swInventory.setItem(43, new SWItem(Material.BARRIER, "§cEntfernen", clickType -> { hide(); @@ -432,6 +470,9 @@ public class TNTSimulator { player.closeInventory(); })); + swInventory.addCloseCallback(clickType -> { + TNTSimulator.get(player).show(TNTSimulatorListener.trace(player, player.getLocation())); + }); swInventory.open(); } @@ -448,8 +489,25 @@ public class TNTSimulator { swAnvilInv.open(); } - private Material getDye(boolean b) { - return SWItem.getDye(getColor(b)); + private void changePosition(Player player, double defaultValue, Consumer result, Runnable failure) { + SWAnvilInv swAnvilInv = new SWAnvilInv(player, "Position", defaultValue + ""); + swAnvilInv.setItem(Material.PAPER); + swAnvilInv.setCallback(s -> { + try { + result.accept(Double.parseDouble(s.replace(',', '.'))); + } catch (NumberFormatException e) { + failure.run(); + } + }); + swAnvilInv.open(); + } + + private double clamp(double d) { + return (int) (d * 100) * 0.01; + } + + private Material getWool(boolean b) { + return b ? Material.LIME_WOOL : Material.RED_WOOL; } private byte getColor(boolean b) { diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulatorListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulatorListener.java index 0bcfcc27..a4e8627d 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulatorListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulatorListener.java @@ -45,8 +45,6 @@ import static de.steamwar.bausystem.features.simulator.TNTSimulator.get; public class TNTSimulatorListener implements Listener { private boolean permissionCheck(Player player) { - // TODO: remove this - if (true) return true; if (!Permission.hasPermission(player, Permission.WORLD)) { player.sendMessage(BauSystem.PREFIX + "§cDu darfst hier nicht den Simulator nutzen"); return false; @@ -54,7 +52,7 @@ public class TNTSimulatorListener implements Listener { return true; } - private RayTraceResult trace(Player player, Location to) { + static RayTraceResult trace(Player player, Location to) { Location startPos = to.clone().add(0.0, player.getEyeHeight(), 0.0); Vector direction = to.getDirection(); RayTraceResult blocks = player.getWorld().rayTraceBlocks(startPos, direction, 10.0, FluidCollisionMode.NEVER, true);