From 011711841ba02f3f040c06c7a09d050e11895454 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 19 Apr 2021 12:45:34 +0200 Subject: [PATCH 1/2] Update TNTSimulator --- .../simulator/SimulatorEntity_15.java | 2 +- .../features/simulator/SimulatorCommand.java | 2 + .../features/simulator/TNTSimulator.java | 140 +++++++++++------- .../simulator/TNTSimulatorListener.java | 2 + .../show/SimulatorEntityShowMode.java | 2 +- 5 files changed, 91 insertions(+), 57 deletions(-) diff --git a/BauSystem_15/src/de/steamwar/bausystem/features/simulator/SimulatorEntity_15.java b/BauSystem_15/src/de/steamwar/bausystem/features/simulator/SimulatorEntity_15.java index 903f3871..53a329dd 100644 --- a/BauSystem_15/src/de/steamwar/bausystem/features/simulator/SimulatorEntity_15.java +++ b/BauSystem_15/src/de/steamwar/bausystem/features/simulator/SimulatorEntity_15.java @@ -31,7 +31,7 @@ class SimulatorEntity_15 extends BaseEntity_15 implements AbstractSimulatorEntit private ReferenceCounter referenceCounter = new ReferenceCounter(); public SimulatorEntity_15(World world, Vector position, boolean highlight) { - super(world, position, highlight ? Material.TNT : Material.WHITE_STAINED_GLASS); + super(world, position, highlight ? Material.WHITE_STAINED_GLASS : Material.TNT); this.setNoGravity(true); this.ticksLived = -12000; 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 c718d6c8..24397251 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCommand.java @@ -69,6 +69,8 @@ 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 e504b182..863dc4bf 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulator.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulator.java @@ -71,63 +71,70 @@ public class TNTSimulator { private AbstractSimulatorEntity cursor = null; private boolean printed = false; - private TNTSimulator(Player player){ + private TNTSimulator(Player player) { this.player = player; } - public List getEntities(){ + public List getEntities() { return spawns.stream().map(spawn -> spawn.entity.getBukkitEntity()).collect(Collectors.toList()); } - public void show(RayTraceResult result){ + public void show(RayTraceResult result) { printed = true; - if(cursor != null) + if (cursor != null) cursor.hide(player, false); spawns.forEach(TNTSpawn::show); - if(result == null) + if (result == null) return; - if(result.getHitEntity() != null){ - TNTSpawn entity = getEntity(result.getHitEntity()); - entity.hide(); + if (result.getHitEntity() != null) { + List tntSpawns = getEntity(result.getHitEntity()); + tntSpawns.forEach(TNTSpawn::hide); - cursor = SimulatorEntityShowMode.createEntity(player, entity.position, false); + cursor = SimulatorEntityShowMode.createEntity(player, tntSpawns.isEmpty() ? getPos(result) : tntSpawns.get(0).position, true); cursor.display(player); SWUtils.sendToActionbar(player, ColorConfig.HIGHLIGHT + "Position bearbeiten"); return; } - cursor = SimulatorEntityShowMode.createEntity(player, getPos(result), true); + cursor = SimulatorEntityShowMode.createEntity(player, getPos(result), false); cursor.display(player); - player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§ePosition setzen")); + SWUtils.sendToActionbar(player, ColorConfig.HIGHLIGHT + "Position setzen"); } - public void edit(RayTraceResult result){ - if(result == null) { + public void edit(RayTraceResult result) { + if (result == null) { showGUI(); return; } show(result); - if(result.getHitEntity() != null){ - TNTSpawn entity = getEntity(result.getHitEntity()); - entity.editTNT(); + if (result.getHitEntity() != null) { + List tntSpawns = getEntity(result.getHitEntity()); + if (tntSpawns.isEmpty()) { + return; + } + if (tntSpawns.size() == 1) { + tntSpawns.get(0).editTNT(); + } else { + showGUI(new HashSet<>(tntSpawns)); + } return; } spawns.add(new TNTSpawn(getPos(result), cursor)); } - public void hide(){ - if(!printed) + public void hide() { + if (!printed) return; printed = false; - if(cursor != null) + if (cursor != null) cursor.hide(player, true); cursor = null; spawns.forEach(TNTSpawn::hide); @@ -160,7 +167,11 @@ public class TNTSimulator { } public void showGUI() { - List> swListEntryList = spawns.stream().map(spawn -> { + showGUI(spawns); + } + + public void showGUI(Set tntSpawns) { + List> swListEntryList = tntSpawns.stream().map(spawn -> { List lore = new ArrayList<>(); lore.add("§7TNT-Anzahl§8: §e" + spawn.count); lore.add("§7Tick§8: §e" + spawn.tickOffset); @@ -186,12 +197,14 @@ public class TNTSimulator { swListInv.open(); } - private TNTSpawn getEntity(Entity entity){ - for(TNTSpawn spawn : spawns){ - if(spawn.entity.getId() == entity.getEntityId()) - return spawn; + private List getEntity(Entity entity) { + List tntSpawns = new ArrayList<>(); + for (TNTSpawn spawn : spawns) { + if (spawn.entity.getId() == entity.getEntityId() || spawn.position.equals(entity.getLocation().toVector())) { + tntSpawns.add(spawn); + } } - throw new IllegalStateException(); + return tntSpawns; } private void spawnRandomList(List tntSpawns) { @@ -202,11 +215,11 @@ public class TNTSimulator { } } - private Vector getPos(RayTraceResult result){ + private Vector getPos(RayTraceResult result) { Vector pos = result.getHitPosition(); BlockFace face = result.getHitBlockFace(); - if(face != null){ + if (face != null) { switch (face) { case DOWN: pos.setY(pos.getY() - 0.98); @@ -227,14 +240,14 @@ public class TNTSimulator { break; } - if(face.getModY() == 0 && !player.isSneaking()){ + if (face.getModY() == 0 && !player.isSneaking()) { pos.setY(pos.getY() - 0.49); } } - if(player.isSneaking()){ + if (player.isSneaking()) { pos.setX(pos.getBlockX() + 0.5); - if(face == null || face.getModY() == 0) + if (face == null || face.getModY() == 0) pos.setY(pos.getBlockY() + 0.0); pos.setZ(pos.getBlockZ() + 0.5); } @@ -263,15 +276,15 @@ public class TNTSimulator { editTNT(); } - private void show(){ - if(printed) + private void show() { + if (printed) return; printed = true; entity.display(player); } - private void hide(){ - if(!printed) + private void hide() { + if (!printed) return; printed = false; entity.hide(player, false); @@ -295,9 +308,9 @@ public class TNTSimulator { } private void setCount(int count) { - if(count < 1) + if (count < 1) count = 1; - if(count > 400) + if (count > 400) count = 400; this.count = count; } @@ -307,9 +320,9 @@ public class TNTSimulator { } private void setTickOffset(int tickOffset) { - if(tickOffset < 0) + if (tickOffset < 0) tickOffset = 0; - if(tickOffset > 400) + if (tickOffset > 400) tickOffset = 400; this.tickOffset = tickOffset; } @@ -320,10 +333,10 @@ public class TNTSimulator { } private void editTNT() { - SWInventory swInventory = new SWInventory(player, 27, "TNT konfigurieren"); + SWInventory swInventory = new SWInventory(player, 54, "TNT konfigurieren"); // Change Count of spawned TNT - swInventory.setItem(0, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { + swInventory.setItem(29, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { setCount(count + 1); editTNT(); })); @@ -332,14 +345,14 @@ public class TNTSimulator { editTNT(); }, this::editTNT)); countItem.getItemStack().setAmount(count); - swInventory.setItem(9, countItem); - swInventory.setItem(18, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { + swInventory.setItem(37, countItem); + swInventory.setItem(46, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { setCount(count - 1); editTNT(); })); // Change TickOffset - swInventory.setItem(1, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { + swInventory.setItem(30, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { setTickOffset(tickOffset + 1); editTNT(); })); @@ -348,14 +361,14 @@ public class TNTSimulator { editTNT(); }, this::editTNT)); tickItem.getItemStack().setAmount(Math.max(tickOffset, 1)); - swInventory.setItem(10, tickItem); - swInventory.setItem(19, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { + swInventory.setItem(38, tickItem); + swInventory.setItem(47, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { setTickOffset(tickOffset - 1); editTNT(); })); // Change FuseTicks - swInventory.setItem(2, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { + swInventory.setItem(31, new SWItem(SWItem.getDye(10), "§7+1", clickType -> { setFuseTicks(fuseTicks + 1); editTNT(); })); @@ -364,39 +377,56 @@ public class TNTSimulator { editTNT(); }, this::editTNT)); fuseTickItem.getItemStack().setAmount(Math.max(fuseTicks, 1)); - swInventory.setItem(11, fuseTickItem); - swInventory.setItem(20, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { + swInventory.setItem(39, fuseTickItem); + swInventory.setItem(48, new SWItem(SWItem.getDye(1), "§7-1", clickType -> { setFuseTicks(fuseTicks - 1); editTNT(); })); // Velocity Settings - swInventory.setItem(14, Material.TNT, "TNT", clickType -> {}); - swInventory.setItem(22, new SWItem(getDye(xVelocity), getColor(xVelocity), "§7TNT §eSprung X §8- " + active(xVelocity), clickType -> { + swInventory.setItem(11, Material.TNT, "TNT", clickType -> { + }); + swInventory.setItem(19, new SWItem(getDye(xVelocity), getColor(xVelocity), "§7TNT §eSprung X §8- " + active(xVelocity), clickType -> { xVelocity = !xVelocity; editTNT(); })); - swInventory.setItem(5, new SWItem(getDye(yVelocity), getColor(yVelocity), "§7TNT §eSprung Y §8- " + active(yVelocity), clickType -> { + swInventory.setItem(2, new SWItem(getDye(yVelocity), getColor(yVelocity), "§7TNT §eSprung Y §8- " + active(yVelocity), clickType -> { yVelocity = !yVelocity; editTNT(); })); - swInventory.setItem(24, new SWItem(getDye(zVelocity), getColor(zVelocity), "§7TNT §eSprung Z §8- " + active(zVelocity), clickType -> { + swInventory.setItem(21, new SWItem(getDye(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; + editTNT(); + })); + swInventory.setItem(6, new SWItem(getDye(yVelocity), getColor(yVelocity), "§7TNT §eSprung Y §8- " + active(yVelocity), clickType -> { + yVelocity = !yVelocity; + editTNT(); + })); + swInventory.setItem(25, new SWItem(getDye(zVelocity), getColor(zVelocity), "§7TNT §eSprung Z §8- " + active(zVelocity), clickType -> { zVelocity = !zVelocity; editTNT(); })); // Repeater before Comparator - swInventory.setItem(8, new SWItem(comparator ? SWItem.getMaterial("REDSTONE_COMPARATOR_OFF") : SWItem.getMaterial("DIODE"), "§7Gezündet durch §8- §e" + (comparator ? "Comparator" : "Repeater"), clickType -> { + swInventory.setItem(41, new SWItem(comparator ? SWItem.getMaterial("REDSTONE_COMPARATOR_OFF") : SWItem.getMaterial("DIODE"), "§7Gezündet durch §8- §e" + (comparator ? "Comparator" : "Repeater"), clickType -> { comparator = !comparator; editTNT(); })); - swInventory.setItem(17, new SWItem(Material.TNT, "§eZündphase hinzufügen", clickType -> { + swInventory.setItem(42, new SWItem(Material.TNT, "§eZündphase hinzufügen", clickType -> { spawns.add(new TNTSpawn(position, entity)); })); // Delete tnt - swInventory.setItem(26, new SWItem(Material.BARRIER, "§cEntfernen", clickType -> { + swInventory.setItem(43, new SWItem(Material.BARRIER, "§cEntfernen", clickType -> { hide(); spawns.remove(this); player.closeInventory(); 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 274972e6..0bcfcc27 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulatorListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulatorListener.java @@ -45,6 +45,8 @@ 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; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/show/SimulatorEntityShowMode.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/show/SimulatorEntityShowMode.java index be6034a3..1a80283e 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/show/SimulatorEntityShowMode.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/show/SimulatorEntityShowMode.java @@ -44,7 +44,7 @@ public class SimulatorEntityShowMode implements ShowMode { @Override public void show(Position position) { RoundedPosition roundedPosition = new RoundedPosition(position); - AbstractSimulatorEntity entity = entityMap.computeIfAbsent(roundedPosition, pos -> createEntity(player, position.getLocation(), true)); + AbstractSimulatorEntity entity = entityMap.computeIfAbsent(roundedPosition, pos -> createEntity(player, position.getLocation(), false)); entity.display(player); } From 469c06d7eca9d57b7f52ac9be24beace2b3d8ee4 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 19 Apr 2021 14:17:43 +0200 Subject: [PATCH 2/2] 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);