From aef8edca07e4a622a71a41ae3a0c4913413fefc8 Mon Sep 17 00:00:00 2001 From: D4rkr34lm Date: Thu, 19 Oct 2023 10:29:59 +0200 Subject: [PATCH] Add group choosing and creation --- .../gui/SimulatorGroupChooserGui.java | 113 ++++++++++++++++++ .../simulator2/gui/SimulatorGroupGui.java | 4 +- .../features/simulator2/gui/SimulatorGui.java | 10 +- .../simulator2/gui/SimulatorRedstoneGui.java | 4 +- .../simulator2/gui/SimulatorTNTGui.java | 9 +- .../gui/SimulatorTNTSettingsGui.java | 4 +- 6 files changed, 130 insertions(+), 14 deletions(-) create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGroupChooserGui.java diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGroupChooserGui.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGroupChooserGui.java new file mode 100644 index 00000000..3a2e78f7 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGroupChooserGui.java @@ -0,0 +1,113 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2023 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.bausystem.features.simulator2.gui; + +import de.steamwar.bausystem.features.simulator2.SimulatorWatcher; +import de.steamwar.bausystem.features.simulator2.data.Simulator; +import de.steamwar.bausystem.features.simulator2.data.SimulatorElement; +import de.steamwar.bausystem.features.simulator2.data.SimulatorGroup; +import de.steamwar.bausystem.features.simulator2.data.redstone.RedstoneElement; +import de.steamwar.bausystem.features.simulator2.data.tnt.TNTElement; +import de.steamwar.bausystem.features.simulator2.gui.base.SimulatorBaseGui; +import de.steamwar.bausystem.features.simulator2.gui.base.SimulatorPageGui; +import de.steamwar.bausystem.features.simulator2.gui.utils.SimulatorMaterialGui; +import de.steamwar.inventory.SWItem; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class SimulatorGroupChooserGui extends SimulatorPageGui { + + private final SimulatorElement subject; + private final SimulatorGroup parent; + private final SimulatorBaseGui back; + + public SimulatorGroupChooserGui(Player player, Simulator simulator, List data, SimulatorElement subject, SimulatorGroup parent, SimulatorBaseGui back){ + super(player, simulator, 6*9, data); + this.subject = subject; + this.parent = parent; + this.back = back; + } + + @Override + public void headerAndFooter() { + simulator.getElements().removeIf(element -> element.getElements().isEmpty()); + + inventory.setItem(4, new SWItem(simulator.getMaterial(), "§e" + simulator.getName(), clickType -> {})); + if(parent.getElements().size() != 1){ + inventory.setItem(49 , new SWItem(Material.BARRIER, "§c Remove from Group", clickType -> { + SimulatorGroup newParent = new SimulatorGroup(); + newParent.add(subject); + simulator.getElements().add(newParent); + back.open(); + SimulatorWatcher.update(simulator); + })); + } + } + @Override + public String baseTitle() { + return "§eChoose group to add to or element, to create new group"; + } + + @Override + public SWItem convert(SimulatorGroup simulatorGroup) { + List> elements = simulatorGroup.getElements(); + if (elements.size() == 1) { + SimulatorElement element = elements.get(0); + List lore = new ArrayList<>(); + lore.add("§7Phase count§8:§e " + element.getPhases().size()); + lore.add("§7Tick§8:§e " + element.getBaseTick()); + lore.add(""); + lore.add("§7X§8:§e " + element.getPosition().getX()); + lore.add("§7Y§8:§e " + element.getPosition().getY()); + lore.add("§7Z§8:§e " + element.getPosition().getZ()); + if (element.isDisabled()) { + lore.add(""); + lore.add("§cDisabled"); + } + return new SWItem(element.getMaterial(), "§e" + element.getName(), lore, element.isDisabled(), clickType -> { + SimulatorGroup newParent = new SimulatorGroup(); + newParent.add(subject); + newParent.add(element); + simulatorGroup.getElements().remove(element); + parent.getElements().remove(subject); + simulator.getElements().add(newParent); + back.open(); + SimulatorWatcher.update(simulator); + }); + } + + List lore = new ArrayList<>(); + lore.add("§7Element count§8:§e " + elements.size()); + lore.add("§7Tick§8:§e " + simulatorGroup.getBaseTick()); + if (simulatorGroup.isDisabled()) { + lore.add(""); + lore.add("§cDisabled"); + } + return new SWItem(simulatorGroup.getMaterial(), "§eGroup", lore, simulatorGroup.isDisabled(), clickType -> { + simulatorGroup.add(subject); + parent.getElements().remove(subject); + back.open(); + SimulatorWatcher.update(simulator); + }); + } +} 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 85addcb4..47dc1586 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 @@ -35,7 +35,7 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; -public class SimulatorGroupGui extends SimulatorPageGui> { +public class SimulatorGroupGui extends SimulatorPageGui> { //TODO Disolve group option ? private final SimulatorGroup simulatorGroup; private final SimulatorBaseGui back; @@ -99,7 +99,7 @@ public class SimulatorGroupGui extends SimulatorPageGui> { } return new SWItem(element.getMaterial(), "§e" + element.getName(), lore, element.isDisabled(), clickType -> { if (element instanceof TNTElement) { - new SimulatorTNTGui(player, simulator, (TNTElement) element, this).open(); + new SimulatorTNTGui(player, simulator, (TNTElement) element, simulatorGroup, this).open(); } else if (element instanceof RedstoneElement) { new SimulatorRedstoneGui(player, simulator, simulatorGroup, (RedstoneElement) element, this).open(); } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGui.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGui.java index 8387c540..c4e233e6 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGui.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorGui.java @@ -34,7 +34,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -public class SimulatorGui extends SimulatorPageGui { +public class SimulatorGui extends SimulatorPageGui {//TODO Groupcreation public SimulatorGui(Player player, Simulator simulator) { super(player, simulator, 6 * 9, simulator.getElements()); @@ -47,11 +47,7 @@ public class SimulatorGui extends SimulatorPageGui { @Override public void headerAndFooter() { - for (Iterator i = simulator.getElements().iterator(); i.hasNext(); ) { - if (i.next().getElements().isEmpty()) { - i.remove(); - } - } + simulator.getElements().removeIf(element -> element.getElements().isEmpty()); inventory.setItem(4, new SWItem(simulator.getMaterial(), "§e" + simulator.getName(), clickType -> { new SimulatorMaterialGui(player, simulator, simulator::getMaterial, simulator::setMaterial, this).open(); @@ -79,7 +75,7 @@ public class SimulatorGui extends SimulatorPageGui { } return new SWItem(element.getMaterial(), "§e" + element.getName(), lore, element.isDisabled(), clickType -> { if (element instanceof TNTElement) { - new SimulatorTNTGui(player, simulator, (TNTElement) element, this).open(); + new SimulatorTNTGui(player, simulator, (TNTElement) element, simulatorGroup,this).open(); } else if (element instanceof RedstoneElement) { new SimulatorRedstoneGui(player, simulator, simulatorGroup, (RedstoneElement) element, this).open(); } 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 759aa0ed..6d66cd33 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 @@ -89,7 +89,9 @@ public class SimulatorRedstoneGui extends SimulatorScrollGui { new SimulatorRedstoneSettingsGui(player, simulator, redstone, this).open(); })); - // 49 Lead? + inventory.setItem(49, new SWItem(Material.LEAD, "§eMove", clickType -> { + new SimulatorGroupChooserGui(player, simulator, simulator.getElements(), redstone, simulatorGroup, this).open(); + })); //Enable/Disable inventory.setItem(50, new SWItem(redstone.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, redstone.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> { 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 9ea81ce6..1672564f 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 @@ -21,11 +21,13 @@ package de.steamwar.bausystem.features.simulator2.gui; import de.steamwar.bausystem.features.simulator2.SimulatorWatcher; import de.steamwar.bausystem.features.simulator2.data.Simulator; +import de.steamwar.bausystem.features.simulator2.data.SimulatorGroup; import de.steamwar.bausystem.features.simulator2.data.tnt.TNTElement; import de.steamwar.bausystem.features.simulator2.data.tnt.TNTPhase; import de.steamwar.bausystem.features.simulator2.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator2.gui.base.SimulatorScrollGui; import de.steamwar.bausystem.features.simulator2.gui.utils.SimulatorMaterialGui; +import de.steamwar.bausystem.features.simulator2.gui.SimulatorTNTPhaseSettingsGui; import de.steamwar.inventory.SWItem; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -38,9 +40,10 @@ import java.util.List; public class SimulatorTNTGui extends SimulatorScrollGui { private TNTElement tnt; + private SimulatorGroup parent; private SimulatorBaseGui back; - public SimulatorTNTGui(Player player, Simulator simulator, TNTElement tnt, SimulatorBaseGui back) { + public SimulatorTNTGui(Player player, Simulator simulator, TNTElement tnt, SimulatorGroup parent, SimulatorBaseGui back) { super(player, simulator, 6 * 9, tnt.getPhases()); this.tnt = tnt; this.back = back; @@ -84,7 +87,9 @@ public class SimulatorTNTGui extends SimulatorScrollGui { inventory.setItem(48, new SWItem(Material.REPEATER, "§eSettings", clickType -> { new SimulatorTNTSettingsGui(player, simulator, tnt, this).open(); })); - // 49 Lead? + inventory.setItem(49, new SWItem(Material.LEAD, "§eMove", clickType -> { + new SimulatorGroupChooserGui(player, simulator, simulator.getElements(), tnt, parent, this).open(); + })); inventory.setItem(50, new SWItem(tnt.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, tnt.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> { tnt.setDisabled(!tnt.isDisabled()); SimulatorWatcher.update(simulator); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorTNTSettingsGui.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorTNTSettingsGui.java index c9d47366..1daf0ae4 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorTNTSettingsGui.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/gui/SimulatorTNTSettingsGui.java @@ -109,12 +109,12 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui { })); // X - inventory.setItem(12, new SWItem(Material.OAK_BUTTON, "§7Align§8: §eNegativ X", clickType -> { + inventory.setItem(12, new SWItem(Material.STONE_BUTTON, "§7Align§8: §eNegativ X", clickType -> { tnt.align(new Vector(0.49, 0, 0)); SimulatorWatcher.update(simulator); })); - inventory.setItem(30, new SWItem(Material.OAK_BUTTON, "§7Align§8: §ePositiv X", clickType -> { + inventory.setItem(30, new SWItem(Material.STONE_BUTTON, "§7Align§8: §ePositiv X", clickType -> { tnt.align(new Vector(0.51, 0, 0)); SimulatorWatcher.update(simulator); }));