SteamWar/BauSystem2.0
Archiviert
12
0

Add all tnt menus
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
yoyosource 2022-06-10 17:25:49 +02:00
Ursprung b755b89a8c
Commit 5788ae70ef
6 geänderte Dateien mit 152 neuen und 13 gelöschten Zeilen

Datei anzeigen

@ -603,6 +603,8 @@ SIMULATOR_TNT_SPAWN_MATERIAL = §eMaterial
SIMULATOR_TNT_SPAWN_MATERIAL_LORE_1 = §7Current material§8: §e{0} SIMULATOR_TNT_SPAWN_MATERIAL_LORE_1 = §7Current material§8: §e{0}
SIMULATOR_TNT_SPAWN_MATERIAL_LORE_2 = §eLeft-Click §7to change SIMULATOR_TNT_SPAWN_MATERIAL_LORE_2 = §eLeft-Click §7to change
SIMULATOR_TNT_SPAWN_MATERIAL_LORE_3 = §eRight-Click §7to reset SIMULATOR_TNT_SPAWN_MATERIAL_LORE_3 = §eRight-Click §7to reset
SIMULATOR_TNT_SPAWN_ENABLED = §aEnabled
SIMULATOR_TNT_SPAWN_DISABLED = §cDisabled
SIMULATOR_MATERIAL_GUI_NAME = Change material SIMULATOR_MATERIAL_GUI_NAME = Change material
SIMULATOR_MATERIAL_NAME = §e{0} SIMULATOR_MATERIAL_NAME = §e{0}
SIMULATOR_MATERIAL_NAME_LORE = §7Material §8- §e{0} SIMULATOR_MATERIAL_NAME_LORE = §7Material §8- §e{0}

Datei anzeigen

@ -34,10 +34,7 @@ import yapion.hierarchy.types.YAPIONArray;
import yapion.hierarchy.types.YAPIONObject; import yapion.hierarchy.types.YAPIONObject;
import yapion.hierarchy.types.YAPIONType; import yapion.hierarchy.types.YAPIONType;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Getter @Getter
@ -137,6 +134,22 @@ public class TNTSimulator {
return tntSpawns; return tntSpawns;
} }
public void remove(TNTElement tntElement) {
hide(tntElement);
tntElementList.remove(tntElement);
Set<SimulatorElement> toRemove = new HashSet<>();
for (SimulatorElement spawn : tntElementList) {
spawn.remove(tntElement);
if (spawn instanceof TNTGroup) {
if (((TNTGroup) spawn).getElements().isEmpty()) {
toRemove.add(spawn);
}
}
}
tntElementList.removeAll(toRemove);
tntElement.close();
}
public void edit(Player player, RayTraceResult result) { public void edit(Player player, RayTraceResult result) {
if (result == null) { if (result == null) {
TNTSimulatorGui.open(player, vector -> { TNTSimulatorGui.open(player, vector -> {

Datei anzeigen

@ -24,9 +24,11 @@ import de.steamwar.bausystem.features.simulatorn.OrderUtils;
import de.steamwar.bausystem.features.simulatorn.SimulatorStorage; import de.steamwar.bausystem.features.simulatorn.SimulatorStorage;
import de.steamwar.bausystem.features.simulatorn.TNTSimulator; import de.steamwar.bausystem.features.simulatorn.TNTSimulator;
import de.steamwar.bausystem.features.simulatorn.tnt.TNTElement; import de.steamwar.bausystem.features.simulatorn.tnt.TNTElement;
import de.steamwar.bausystem.features.simulatorn.tnt.TNTGroup;
import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SWAnvilInv;
import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -104,7 +106,7 @@ public class TNTElementGUI {
})); }));
}; };
editObserver.run(); editObserver.run();
tntElement.register(editObserver); tntElement.register(editObserver, player::closeInventory);
inv.addCloseRunnable(() -> tntElement.unregister(editObserver)); inv.addCloseRunnable(() -> tntElement.unregister(editObserver));
inv.open(); inv.open();
@ -201,7 +203,7 @@ public class TNTElementGUI {
*/ */
}; };
editObserver.run(); editObserver.run();
tntElement.register(editObserver); tntElement.register(editObserver, player::closeInventory);
inv.addCloseRunnable(() -> tntElement.unregister(editObserver)); inv.addCloseRunnable(() -> tntElement.unregister(editObserver));
inv.open(); inv.open();
@ -298,7 +300,7 @@ public class TNTElementGUI {
})); }));
}; };
editObserver.run(); editObserver.run();
tntElement.register(editObserver); tntElement.register(editObserver, player::closeInventory);
inv.addCloseRunnable(() -> tntElement.unregister(editObserver)); inv.addCloseRunnable(() -> tntElement.unregister(editObserver));
inv.open(); inv.open();
@ -311,7 +313,9 @@ public class TNTElementGUI {
} }
Runnable editObserver = () -> { Runnable editObserver = () -> {
inv.setItem(42, new SWItem(tntElement.getOrder(), BauSystem.MESSAGE.parse("SIMULATOR_TNT_SPAWN_ACTIVATED_NAME", player), OrderUtils.orderList(tntElement.getOrder(), player), false, clickType -> { TNTSimulator tntSimulator = SimulatorStorage.getSimulator(player.getInventory().getItemInMainHand());
inv.setItem(19, new SWItem(tntElement.getOrder(), BauSystem.MESSAGE.parse("SIMULATOR_TNT_SPAWN_ACTIVATED_NAME", player), OrderUtils.orderList(tntElement.getOrder(), player), false, clickType -> {
if (clickType.isShiftClick()) { if (clickType.isShiftClick()) {
tntElement.setOrder(OrderUtils.previous(tntElement.getOrder())); tntElement.setOrder(OrderUtils.previous(tntElement.getOrder()));
} else { } else {
@ -319,9 +323,83 @@ public class TNTElementGUI {
} }
tntElement.change(); tntElement.change();
})); }));
inv.setItem(21, new SWItem(tntElement.getMaterial(), BauSystem.MESSAGE.parse("SIMULATOR_TNT_SPAWN_MATERIAL", player), Arrays.asList(BauSystem.MESSAGE.parse("SIMULATOR_TNT_SPAWN_MATERIAL_LORE_1", player, tntElement.getMaterial().name().toLowerCase()), BauSystem.MESSAGE.parse("SIMULATOR_TNT_SPAWN_MATERIAL_LORE_2", player), BauSystem.MESSAGE.parse("SIMULATOR_TNT_SPAWN_MATERIAL_LORE_3", player)), false, clickType -> {
if (clickType.isLeftClick()) {
List<SWListInv.SWListEntry<Material>> swListEntries = new ArrayList<>();
MATERIALS.forEach(current -> {
swListEntries.add(new SWListInv.SWListEntry<>(new SWItem(current, BauSystem.MESSAGE.parse("SIMULATOR_MATERIAL_NAME", player, current.name().toLowerCase()), Arrays.asList(BauSystem.MESSAGE.parse("SIMULATOR_MATERIAL_CLICK", player)), false, ignored -> {
}), current));
});
SWListInv<Material> swListInv = new SWListInv<>(player, BauSystem.MESSAGE.parse("SIMULATOR_MATERIAL_GUI_NAME", player), false, swListEntries, (invClickType, material) -> {
tntElement.setMaterial(material);
tntElement.change();
editOther(player, tntElement, back);
});
swListInv.open();
} else {
tntElement.setMaterial(Material.TNT);
tntElement.change();
editOther(player, tntElement, back);
}
}));
inv.setItem(22, new SWItem(tntElement.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, BauSystem.MESSAGE.parse(tntElement.isDisabled() ? "SIMULATOR_TNT_SPAWN_DISABLED" : "SIMULATOR_TNT_SPAWN_ENABLED", player), new ArrayList<>(), !tntElement.isDisabled(), clickType -> {
if (!tntElement.isDisabled()) {
tntSimulator.hide(tntElement);
}
tntElement.setDisabled(!tntElement.isDisabled());
if (!tntElement.isDisabled()) {
tntSimulator.show(tntElement);
}
tntElement.change();
}));
if (!tntElement.hasParent()) {
inv.setItem(24, new SWItem(Material.TNT, BauSystem.MESSAGE.parse("SIMULATOR_TNT_SPAWN_ADD_IGNITION_PHASE", player), Arrays.asList(BauSystem.MESSAGE.parse("SIMULATOR_TNT_SPAWN_ADD_IGNITION_PHASE_SHIFT", player)), false, clickType -> {
// Create TNTGroup
tntSimulator.getTntElementList().remove(tntElement);
Vector vector = tntElement.getOwnPosition().clone();
int tickOffset = tntElement.getOwnTickOffset();
TNTGroup tntGroup = new TNTGroup(vector);
tntGroup.setTickOffset(tickOffset);
tntElement.setTickOffset(0);
tntElement.getOwnPosition().setX(0);
tntElement.getOwnPosition().setY(0);
tntElement.getOwnPosition().setZ(0);
tntGroup.add(tntElement);
tntSimulator.getTntElementList().add(tntGroup);
// Add new TNT
TNTElement newElement = new TNTElement(new Vector(0, 0, 0));
newElement.setTickOffset(1);
tntGroup.add(newElement);
tntElement.change();
}));
} else {
inv.setItem(24, new SWItem());
}
inv.setItem(25, new SWItem(Material.DISPENSER, BauSystem.MESSAGE.parse("SIMULATOR_TNT_SPAWN_ADD_TNT", player), clickType -> {
Vector vector = tntElement.getOwnPosition().clone();
TNTElement newElement = new TNTElement(vector);
if (tntElement.hasParent()) {
newElement.setTickOffset(tntElement.getOwnTickOffset() + 1);
tntElement.getParent().add(newElement);
} else {
tntSimulator.getTntElementList().add(newElement);
}
}));
// Delete tnt
inv.setItem(44, new SWItem(Material.BARRIER, BauSystem.MESSAGE.parse("SIMULATOR_TNT_SPAWN_REMOVE_TNT", player), clickType -> {
tntSimulator.remove(tntElement);
player.closeInventory();
}));
}; };
editObserver.run(); editObserver.run();
tntElement.register(editObserver); tntElement.register(editObserver, player::closeInventory);
inv.addCloseRunnable(() -> tntElement.unregister(editObserver)); inv.addCloseRunnable(() -> tntElement.unregister(editObserver));
inv.open(); inv.open();

Datei anzeigen

@ -32,6 +32,7 @@ import java.util.*;
public interface SimulatorElement { public interface SimulatorElement {
Map<SimulatorElement, Set<Runnable>> observer = new HashMap<>(); Map<SimulatorElement, Set<Runnable>> observer = new HashMap<>();
Map<Runnable, Runnable> closeObserver = new HashMap<>();
YAPIONObject toYAPION(); YAPIONObject toYAPION();
List<Entity> getEntities(); List<Entity> getEntities();
@ -40,6 +41,7 @@ public interface SimulatorElement {
return new Vector(0, 0, 0); return new Vector(0, 0, 0);
} }
void remove(TNTElement tntElement);
void show(SimulatorEntityShowMode showMode); void show(SimulatorEntityShowMode showMode);
void hide(SimulatorEntityShowMode showMode); void hide(SimulatorEntityShowMode showMode);
@ -50,13 +52,24 @@ public interface SimulatorElement {
default void change() { default void change() {
observer.getOrDefault(this, new HashSet<>()).forEach(Runnable::run); observer.getOrDefault(this, new HashSet<>()).forEach(Runnable::run);
} }
default void register(Runnable observer) { default void register(Runnable observer, Runnable close) {
SimulatorElement.observer.computeIfAbsent(this, k -> new HashSet<>()).add(observer); SimulatorElement.observer.computeIfAbsent(this, k -> new HashSet<>()).add(observer);
SimulatorElement.closeObserver.put(observer, close);
} }
default void unregister(Runnable observer) { default void unregister(Runnable observer) {
SimulatorElement.observer.computeIfPresent(this, (k, v) -> { SimulatorElement.observer.computeIfPresent(this, (k, v) -> {
v.remove(observer); v.remove(observer);
return v.isEmpty() ? null : v; return v.isEmpty() ? null : v;
}); });
SimulatorElement.closeObserver.remove(observer);
}
default void close() {
Set<Runnable> allRunnables = observer.remove(this);
if (allRunnables == null) return;
allRunnables.forEach(runnable -> {
Runnable closeRunnable = closeObserver.remove(runnable);
if (closeRunnable == null) return;
closeRunnable.run();
});
} }
} }

Datei anzeigen

@ -131,6 +131,10 @@ public class TNTElement implements SimulatorElement {
return tickOffset; return tickOffset;
} }
@Override
public void remove(TNTElement tntElement) {
}
@Override @Override
public void show(SimulatorEntityShowMode showMode) { public void show(SimulatorEntityShowMode showMode) {
if (disabled) return; if (disabled) return;
@ -158,7 +162,7 @@ public class TNTElement implements SimulatorElement {
lore.add(""); lore.add("");
lore.add(BauSystem.MESSAGE.parse("SIMULATOR_GUI_TNT_DISABLED", p)); lore.add(BauSystem.MESSAGE.parse("SIMULATOR_GUI_TNT_DISABLED", p));
} }
return new SWItem(material, BauSystem.MESSAGE.parse("SIMULATOR_GUI_TNT_SPAWN_NAME", p), lore, false, null); return new SWItem(material, BauSystem.MESSAGE.parse("SIMULATOR_GUI_TNT_SPAWN_NAME", p), lore, disabled, null);
} }
@Override @Override
@ -218,4 +222,20 @@ public class TNTElement implements SimulatorElement {
public void setOrder(Material material) { public void setOrder(Material material) {
this.order = material; this.order = material;
} }
public void setMaterial(Material material) {
this.material = material;
}
public boolean hasParent() {
return tntGroup != null;
}
public TNTGroup getParent() {
return tntGroup;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
} }

Datei anzeigen

@ -32,7 +32,6 @@ import yapion.hierarchy.types.YAPIONArray;
import yapion.hierarchy.types.YAPIONObject; import yapion.hierarchy.types.YAPIONObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -80,6 +79,11 @@ public class TNTGroup implements SimulatorElement {
return yapionObject; return yapionObject;
} }
public void add(TNTElement tntElement) {
tntElement.tntGroup = this;
elements.add(tntElement);
}
@Override @Override
public List<Entity> getEntities() { public List<Entity> getEntities() {
if (disabled) new ArrayList<>(); if (disabled) new ArrayList<>();
@ -94,6 +98,11 @@ public class TNTGroup implements SimulatorElement {
} }
} }
@Override
public void remove(TNTElement tntElement) {
elements.remove(tntElement);
}
@Override @Override
public void show(SimulatorEntityShowMode showMode) { public void show(SimulatorEntityShowMode showMode) {
if (disabled) return; if (disabled) return;
@ -118,7 +127,7 @@ public class TNTGroup implements SimulatorElement {
lore.add(""); lore.add("");
lore.add(BauSystem.MESSAGE.parse("SIMULATOR_GUI_TNT_DISABLED", p)); lore.add(BauSystem.MESSAGE.parse("SIMULATOR_GUI_TNT_DISABLED", p));
} }
return new SWItem(material, BauSystem.MESSAGE.parse("SIMULATOR_GUI_TNT_GROUP_NAME", p), lore, false, null); return new SWItem(material, BauSystem.MESSAGE.parse("SIMULATOR_GUI_TNT_GROUP_NAME", p), lore, disabled, null);
} }
@Override @Override
@ -128,4 +137,8 @@ public class TNTGroup implements SimulatorElement {
tntElement.locations(result); tntElement.locations(result);
}); });
} }
public void setTickOffset(int tickOffset) {
this.tickOffset = tickOffset;
}
} }