Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
Ursprung
b755b89a8c
Commit
5788ae70ef
@ -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}
|
||||||
|
@ -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 -> {
|
||||||
|
@ -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();
|
||||||
|
@ -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();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren