From 61f7218fc09748e15779f1436ef3d27896db3c1d Mon Sep 17 00:00:00 2001 From: yoyosource Date: Wed, 25 Oct 2023 23:03:59 +0200 Subject: [PATCH] Add some QOL Simulator changes --- .../features/simulator2/SimulatorCursor.java | 30 ++++++++++------- .../features/simulator2/SimulatorStorage.java | 23 ++++++++++++- .../simulator2/SimulatorTestCommand.java | 10 ------ .../features/simulator2/SimulatorWatcher.java | 3 +- .../simulator2/data/SimulatorElement.java | 2 ++ .../data/redstone/RedstoneElement.java | 5 +++ .../simulator2/data/tnt/TNTElement.java | 5 +++ .../simulator2/gui/SimulatorGroupGui.java | 32 ++++++++++++++----- .../simulator2/gui/SimulatorRedstoneGui.java | 6 ++-- .../simulator2/gui/SimulatorTNTGui.java | 2 +- .../simulator2/gui/base/SimulatorPageGui.java | 2 +- 11 files changed, 83 insertions(+), 37 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorCursor.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorCursor.java index 3f443d26..2b1f2f87 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorCursor.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorCursor.java @@ -59,10 +59,7 @@ import org.bukkit.event.player.*; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; @@ -279,7 +276,11 @@ public class SimulatorCursor implements Listener { } pos.setX(pos.getBlockX() + 0.5); - pos.setY(pos.getBlockY()); + if (pos.getY() - pos.getBlockY() != 0 && face == BlockFace.UP) { + pos.setY(pos.getBlockY() + 1.0); + } else { + pos.setY(pos.getBlockY()); + } pos.setZ(pos.getBlockZ() + 0.5); return pos; } @@ -374,12 +375,19 @@ public class SimulatorCursor implements Listener { element.open(player, simulator, group1, back); break; default: - // Open multi element present in Simulator - SimulatorGroup group2 = new SimulatorGroup(); - group2.setMaterial(null); - group2.getElements().addAll(elements); - SimulatorGui simulatorGui = new SimulatorGui(player, simulator); - new SimulatorGroupGui(player, simulator, group2, simulatorGui).open(); + List parents = elements.stream().map(e -> e.getGroup(simulator)).distinct().collect(Collectors.toList()); + if (parents.size() == 1) { + // Open multi element present in Simulator in existing group + SimulatorGui simulatorGui = new SimulatorGui(player, simulator); + new SimulatorGroupGui(player, simulator, parents.get(0), simulatorGui).open(); + } else { + // Open multi element present in Simulator in implicit group + SimulatorGroup group2 = new SimulatorGroup(); + group2.setMaterial(null); + group2.getElements().addAll(elements); + SimulatorGui simulatorGui = new SimulatorGui(player, simulator); + new SimulatorGroupGui(player, simulator, group2, simulatorGui).open(); + } break; } return; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorStorage.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorStorage.java index 0dca6740..c81b55f2 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorStorage.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorStorage.java @@ -19,6 +19,7 @@ package de.steamwar.bausystem.features.simulator2; +import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.features.simulator2.data.Simulator; import de.steamwar.bausystem.features.simulator2.gui.base.SimulatorPageGui; @@ -27,6 +28,7 @@ import de.steamwar.inventory.SWItem; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import java.util.ArrayList; import java.util.HashMap; @@ -76,7 +78,26 @@ public class SimulatorStorage { @Override public SWItem convert(Simulator simulator) { return simulator.toItem(player, clickType -> { - System.out.println(clickType); + ItemStack mainHand = player.getInventory().getItemInMainHand(); + ItemStack offHand = player.getInventory().getItemInOffHand(); + ItemStack itemStack; + if (SimulatorCursor.isSimulatorItem(mainHand)) { + itemStack = mainHand; + } else if (SimulatorCursor.isSimulatorItem(offHand)) { + itemStack = offHand; + } else { + itemStack = null; + } + if (itemStack == null) { + return; + } + + // TODO: Dynamic Item Lore, and remove if simulator does not exist anymore (On Join for every Player Inventory Slot with Simulator...) + ItemUtils.setTag(itemStack, simulatorSelection, simulator.getName()); + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setDisplayName(BauSystem.MESSAGE.parse("SIMULATOR_WAND_NAME_SELECTED", player, simulator.getName())); + itemStack.setItemMeta(itemMeta); + player.closeInventory(); }); } }; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorTestCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorTestCommand.java index be44ee99..b3f668cb 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorTestCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorTestCommand.java @@ -50,14 +50,4 @@ public class SimulatorTestCommand extends SWCommand { SimulatorGroup group3 = new SimulatorGroup().add(new RedstoneElement(new Vector(-484, 47, 307)).add(new RedstonePhase())); SIMULATOR.getElements().add(group3); } - - @Register("open") - public void openCommand(Player player) { - new SimulatorGui(player, SIMULATOR).open(); - } - - @Register("run") - public void runCommand(Player player) { - SimulatorExecutor.run(SIMULATOR); - } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorWatcher.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorWatcher.java index 470f9f12..eb888615 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorWatcher.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorWatcher.java @@ -88,13 +88,12 @@ public class SimulatorWatcher { Map>> positionCache = new HashMap<>(); simulator.getElements().stream().map(group -> group.getElements().stream().map(element -> new Pair<>(group, element)).collect(Collectors.toList())).flatMap(List::stream).forEach(pair -> { SimulatorGroup group = pair.getKey(); - // TODO: Disabled material SimulatorElement element = pair.getValue(); boolean wasNotPresent = positionCache.computeIfAbsent(element.getPosition(), __ -> new HashSet<>()) .add(element.getClass()); if (!wasNotPresent) return; - Material material = element.getWorldMaterial(); + Material material = group.isDisabled() || element.isDisabled() ? element.getWorldDisabledMaterial() : element.getWorldMaterial(); Location location = element.getWorldPos().toLocation(WORLD); RFallingBlockEntity rFallingBlockEntity = new RFallingBlockEntity(server, location, material); rFallingBlockEntity.setNoGravity(true); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/SimulatorElement.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/SimulatorElement.java index b3c2b934..e01ef88c 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/SimulatorElement.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/SimulatorElement.java @@ -79,6 +79,8 @@ public abstract class SimulatorElement { public abstract Material getWorldMaterial(); + public abstract Material getWorldDisabledMaterial(); + public Vector getWorldPos() { return position; } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/redstone/RedstoneElement.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/redstone/RedstoneElement.java index 158dfef4..4ba337a8 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/redstone/RedstoneElement.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/redstone/RedstoneElement.java @@ -44,6 +44,11 @@ public class RedstoneElement extends SimulatorElement { return Material.REDSTONE_BLOCK; } + @Override + public Material getWorldDisabledMaterial() { + return Material.WHITE_STAINED_GLASS; + } + @Override public Vector getWorldPos() { return position.clone().add(new Vector(0.5, 0, 0.5)); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/tnt/TNTElement.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/tnt/TNTElement.java index 2a3037e0..62982a22 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/tnt/TNTElement.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/data/tnt/TNTElement.java @@ -82,6 +82,11 @@ public class TNTElement extends SimulatorElement { return Material.TNT; } + @Override + public Material getWorldDisabledMaterial() { + return Material.RED_STAINED_GLASS; + } + @Override public void open(Player player, Simulator simulator, SimulatorGroup group, SimulatorBaseGui back) { new SimulatorTNTGui(player, simulator, this, group, back).open(); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGroupGui.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGroupGui.java index 4360bcef..33d87d76 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGroupGui.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGroupGui.java @@ -31,9 +31,12 @@ import de.steamwar.inventory.SWItem; import org.bukkit.Material; import org.bukkit.entity.Player; +import java.util.List; +import java.util.stream.Collectors; + public class SimulatorGroupGui extends SimulatorPageGui> { - private final SimulatorGroup simulatorGroup; + private SimulatorGroup simulatorGroup; private final SimulatorBaseGui back; public SimulatorGroupGui(Player player, Simulator simulator, SimulatorGroup simulatorGroup, SimulatorBaseGui back) { @@ -49,6 +52,14 @@ public class SimulatorGroupGui extends SimulatorPageGui> { @Override public void headerAndFooter() { + if (simulatorGroup.getMaterial() == null) { + List parents = data.stream().map(e -> e.getGroup(simulator)).distinct().collect(Collectors.toList()); + if (parents.size() == 1) { + simulatorGroup = parents.get(0); + data = simulatorGroup.getElements(); + } + } + if (simulatorGroup.getElements().removeIf(element -> element.getPhases().isEmpty())) { SimulatorWatcher.update(simulator); } @@ -69,15 +80,20 @@ public class SimulatorGroupGui extends SimulatorPageGui> { }, clickType -> { })); - inventory.setItem(simulatorGroup.getMaterial() != null ? 48 : 49, new SWItem(Material.REPEATER, "§eSettings", clickType -> { + inventory.setItem(48, new SWItem(Material.REPEATER, "§eSettings", clickType -> { new SimulatorGroupSettingsGui(player, simulator, simulatorGroup, this).open(); })); - if (simulatorGroup.getMaterial() != null) { - inventory.setItem(50, new SWItem(simulatorGroup.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, simulatorGroup.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> { - simulatorGroup.setDisabled(!simulatorGroup.isDisabled()); - SimulatorWatcher.update(simulator); - })); - } + boolean disabled = simulatorGroup.getMaterial() == null ? simulatorGroup.getElements().stream().allMatch(SimulatorElement::isDisabled) : simulatorGroup.isDisabled(); + inventory.setItem(50, new SWItem(disabled ? Material.ENDER_PEARL : Material.ENDER_EYE, simulatorGroup.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> { + if (simulatorGroup.getMaterial() == null) { + simulatorGroup.getElements().forEach(simulatorElement -> { + simulatorElement.setDisabled(!disabled); + }); + } else { + simulatorGroup.setDisabled(!disabled); + } + SimulatorWatcher.update(simulator); + })); } @Override diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorRedstoneGui.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorRedstoneGui.java index 81c58b4e..bc2b36c5 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorRedstoneGui.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorRedstoneGui.java @@ -85,14 +85,14 @@ public class SimulatorRedstoneGui extends SimulatorScrollGui { new SimulatorMaterialGui(player, simulator, redstone::getMaterial, redstone::setMaterial, this).open(); })); - //Settings + // Settings inventory.setItem(48, new SWItem(Material.REPEATER, "§eSettings", clickType -> { new SimulatorRedstoneSettingsGui(player, simulator, redstone, this).open(); })); - //Group chooser + // Group chooser inventory.setItem(49, new SWItem(Material.LEAD, "§eMove", clickType -> { - new SimulatorGroupChooserGui(player, simulator, redstone, parent, this).open(); + new SimulatorGroupChooserGui(player, simulator, redstone, redstone.getGroup(simulator), this).open(); })); //Enable/Disable diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorTNTGui.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorTNTGui.java index c046a756..f4c80ebe 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorTNTGui.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorTNTGui.java @@ -89,7 +89,7 @@ public class SimulatorTNTGui extends SimulatorScrollGui { new SimulatorTNTSettingsGui(player, simulator, tnt, this).open(); })); inventory.setItem(49, new SWItem(Material.LEAD, "§eMove", clickType -> { - new SimulatorGroupChooserGui(player, simulator, tnt, parent, this).open(); + new SimulatorGroupChooserGui(player, simulator, tnt, tnt.getGroup(simulator), this).open(); })); inventory.setItem(50, new SWItem(tnt.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, tnt.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> { tnt.setDisabled(!tnt.isDisabled()); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/base/SimulatorPageGui.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/base/SimulatorPageGui.java index 42eb1e17..14c2d786 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/base/SimulatorPageGui.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/base/SimulatorPageGui.java @@ -29,7 +29,7 @@ import java.util.List; public abstract class SimulatorPageGui extends SimulatorBaseGui { protected int page = 0; - protected final List data; + protected List data; protected SimulatorPageGui(Player player, Simulator simulator, int size, List data) { super(player, simulator, size);