From ccd992f1db8ff458c58935a191129c37cbea7b5b Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Mon, 29 Sep 2025 09:23:53 +0200 Subject: [PATCH] Improve SimulatorCursor selection changing --- .../features/simulator/SimulatorCursor.java | 41 +++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java index 8ffca7a9..5cfbaad6 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java @@ -19,8 +19,8 @@ package de.steamwar.bausystem.features.simulator; -import de.steamwar.Reflection; import com.comphenix.tinyprotocol.TinyProtocol; +import de.steamwar.Reflection; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.SWUtils; @@ -40,10 +40,13 @@ import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.utils.BauMemberUpdateEvent; import de.steamwar.bausystem.utils.ItemUtils; import de.steamwar.bausystem.utils.RayTraceUtils; +import de.steamwar.data.CMDs; import de.steamwar.entity.REntity; import de.steamwar.entity.REntityServer; import de.steamwar.entity.RFallingBlockEntity; import de.steamwar.inventory.SWAnvilInv; +import de.steamwar.inventory.SWInventory; +import de.steamwar.inventory.SWItem; import de.steamwar.linkage.Linked; import de.steamwar.linkage.MinVersion; import lombok.AllArgsConstructor; @@ -147,8 +150,23 @@ public class SimulatorCursor implements Listener { return; } if (LAST_SNEAKS.containsKey(player)) { - cursorType.put(player, cursorType.getOrDefault(player, CursorType.TNT).switchType()); - calcCursor(player); + SWInventory swInventory = new SWInventory(player, 9, "Simulator Cursor"); + int slot = 2; + CursorType currentType = cursorType.getOrDefault(player, CursorType.TNT); + for (CursorType type : CursorType.values()) { + boolean selected = type == currentType; + SWItem swItem = new SWItem(selected ? type.material : type.nonSelectedMaterial, "§e" + type.name) + .setCustomModelData(selected ? 0 : CMDs.Simulator.NEW_PHASE) + .setLore(Collections.singletonList("§eClick to select")) + .setCallback(click -> { + cursorType.put(player, type); + calcCursor(player); + player.closeInventory(); + }); + swInventory.setItem(slot, swItem); + slot += 2; + } + swInventory.open(); } else { LAST_SNEAKS.put(player, System.currentTimeMillis()); } @@ -331,25 +349,16 @@ public class SimulatorCursor implements Listener { @Getter @AllArgsConstructor public enum CursorType { - TNT(Material.TNT, SimulatorCursor::getPosFree, "TNT", vector -> new TNTElement(vector).add(new TNTPhase())), - REDSTONE_BLOCK(Material.REDSTONE_BLOCK, SimulatorCursor::getPosBlockAligned, "Redstone Block", vector -> new RedstoneElement(vector).add(new RedstonePhase())), - OBSERVER(Material.OBSERVER, SimulatorCursor::getPosBlockAligned, "Observer", vector -> new ObserverElement(vector).add(new ObserverPhase())), + TNT(Material.TNT, Material.GUNPOWDER, SimulatorCursor::getPosFree, "TNT", vector -> new TNTElement(vector).add(new TNTPhase())), + REDSTONE_BLOCK(Material.REDSTONE_BLOCK, Material.REDSTONE, SimulatorCursor::getPosBlockAligned, "Redstone Block", vector -> new RedstoneElement(vector).add(new RedstonePhase())), + OBSERVER(Material.OBSERVER, Material.QUARTZ, SimulatorCursor::getPosBlockAligned, "Observer", vector -> new ObserverElement(vector).add(new ObserverPhase())), ; private Material material; + private Material nonSelectedMaterial; private BiFunction position; private String name; private Function> elementFunction; - - public CursorType switchType() { - if (this == TNT) { - return REDSTONE_BLOCK; - } - if (this == REDSTONE_BLOCK) { - return OBSERVER; - } - return TNT; - } } @EventHandler