Add TNTSimulator.saveAndDelete Add WorldData.getSimulatorData Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
Ursprung
acb0aa4e01
Commit
d15a99a23c
@ -25,10 +25,12 @@ import de.steamwar.bausystem.BauSystem;
|
|||||||
import de.steamwar.bausystem.SWUtils;
|
import de.steamwar.bausystem.SWUtils;
|
||||||
import de.steamwar.bausystem.config.ColorConfig;
|
import de.steamwar.bausystem.config.ColorConfig;
|
||||||
import de.steamwar.bausystem.features.simulator.show.SimulatorEntityShowMode;
|
import de.steamwar.bausystem.features.simulator.show.SimulatorEntityShowMode;
|
||||||
|
import de.steamwar.bausystem.worlddata.WorldData;
|
||||||
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 de.steamwar.inventory.SWListInv;
|
||||||
|
import de.steamwar.sql.SteamwarUser;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -40,6 +42,8 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.bukkit.util.Consumer;
|
import org.bukkit.util.Consumer;
|
||||||
import org.bukkit.util.RayTraceResult;
|
import org.bukkit.util.RayTraceResult;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
import yapion.hierarchy.types.YAPIONArray;
|
||||||
|
import yapion.hierarchy.types.YAPIONObject;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
@ -56,14 +60,39 @@ public class TNTSimulator {
|
|||||||
private static final List<TNTSpawn> EMPTY = new ArrayList<>();
|
private static final List<TNTSpawn> EMPTY = new ArrayList<>();
|
||||||
public static final ItemStack WAND = new SWItem(Material.BLAZE_ROD, "§eKanonensimulator", Arrays.asList("§eRechtsklick §8- §7Füge eine Position hinzu", "§eSneaken §8- §7Auf den Block zentrieren", "§eLinksklick §8- §7Starte die Simulation", "§eRechtsklick Luft §8- §7Öffne die GUI"), false, null).getItemStack();
|
public static final ItemStack WAND = new SWItem(Material.BLAZE_ROD, "§eKanonensimulator", Arrays.asList("§eRechtsklick §8- §7Füge eine Position hinzu", "§eSneaken §8- §7Auf den Block zentrieren", "§eLinksklick §8- §7Starte die Simulation", "§eRechtsklick Luft §8- §7Öffne die GUI"), false, null).getItemStack();
|
||||||
|
|
||||||
private static final Map<Player, TNTSimulator> TNT_SIMULATOR_MAP = new HashMap<>();
|
static final Map<Player, TNTSimulator> TNT_SIMULATOR_MAP = new HashMap<>();
|
||||||
|
|
||||||
public static TNTSimulator get(Player player) {
|
public static TNTSimulator get(Player player) {
|
||||||
return TNT_SIMULATOR_MAP.computeIfAbsent(player, p -> new TNTSimulator(player));
|
return TNT_SIMULATOR_MAP.computeIfAbsent(player, p -> {
|
||||||
|
YAPIONArray yapionArray = WorldData.getSimulatorData().getYAPIONArrayOrSetDefault(SteamwarUser.get(player.getUniqueId()).getId() + "", new YAPIONArray());
|
||||||
|
TNTSimulator simulator = new TNTSimulator(player);
|
||||||
|
if (!yapionArray.isEmpty()) {
|
||||||
|
yapionArray.forEach(yapionAnyType -> {
|
||||||
|
simulator.spawns.add(simulator.new TNTSpawn((YAPIONObject) yapionAnyType));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return simulator;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveAndDelete() {
|
||||||
|
TNTSimulator simulator = TNT_SIMULATOR_MAP.remove(player);
|
||||||
|
YAPIONArray yapionArray = new YAPIONArray();
|
||||||
|
simulator.spawns.forEach(tntSpawn -> {
|
||||||
|
yapionArray.add(tntSpawn.output());
|
||||||
|
});
|
||||||
|
String userID = SteamwarUser.get(player.getUniqueId()).getId() + "";
|
||||||
|
if (yapionArray.isEmpty()) {
|
||||||
|
WorldData.getSimulatorData().remove(userID);
|
||||||
|
} else {
|
||||||
|
WorldData.getSimulatorData().add(userID, yapionArray);
|
||||||
|
}
|
||||||
|
simulator.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void delete() {
|
public void delete() {
|
||||||
TNTSimulator simulator = TNT_SIMULATOR_MAP.remove(player);
|
TNTSimulator simulator = TNT_SIMULATOR_MAP.remove(player);
|
||||||
|
WorldData.getSimulatorData().remove(SteamwarUser.get(player.getUniqueId()).getId() + "");
|
||||||
simulator.hide();
|
simulator.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,6 +323,33 @@ public class TNTSimulator {
|
|||||||
editTNT();
|
editTNT();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TNTSpawn(YAPIONObject yapionObject) {
|
||||||
|
this.position = new Vector(yapionObject.getPlainValueOrDefault("positionX", 0.0), yapionObject.getPlainValueOrDefault("positionY", 0.0), yapionObject.getPlainValueOrDefault("positionZ", 0.0));
|
||||||
|
this.entity = SimulatorEntityShowMode.createEntity(player, position, false);
|
||||||
|
this.fuseTicks = yapionObject.getPlainValue("fuseTicks");
|
||||||
|
this.count = yapionObject.getPlainValue("count");
|
||||||
|
this.tickOffset = yapionObject.getPlainValue("tickOffset");
|
||||||
|
this.xVelocity = yapionObject.getPlainValue("xVelocity");
|
||||||
|
this.yVelocity = yapionObject.getPlainValue("yVelocity");
|
||||||
|
this.zVelocity = yapionObject.getPlainValue("zVelocity");
|
||||||
|
this.comparator = yapionObject.getPlainValue("comparator");
|
||||||
|
}
|
||||||
|
|
||||||
|
private YAPIONObject output() {
|
||||||
|
YAPIONObject yapionObject = new YAPIONObject();
|
||||||
|
yapionObject.add("positionX", position.getX());
|
||||||
|
yapionObject.add("positionY", position.getY());
|
||||||
|
yapionObject.add("positionZ", position.getZ());
|
||||||
|
yapionObject.add("fuseTicks", fuseTicks);
|
||||||
|
yapionObject.add("count", count);
|
||||||
|
yapionObject.add("tickOffset", tickOffset);
|
||||||
|
yapionObject.add("xVelocity", xVelocity);
|
||||||
|
yapionObject.add("yVelocity", yVelocity);
|
||||||
|
yapionObject.add("zVelocity", zVelocity);
|
||||||
|
yapionObject.add("comparator", comparator);
|
||||||
|
return yapionObject;
|
||||||
|
}
|
||||||
|
|
||||||
private void show() {
|
private void show() {
|
||||||
if (printed)
|
if (printed)
|
||||||
return;
|
return;
|
||||||
|
@ -23,6 +23,7 @@ package de.steamwar.bausystem.features.simulator;
|
|||||||
|
|
||||||
import de.steamwar.bausystem.BauSystem;
|
import de.steamwar.bausystem.BauSystem;
|
||||||
import de.steamwar.bausystem.Permission;
|
import de.steamwar.bausystem.Permission;
|
||||||
|
import de.steamwar.bausystem.linkage.Disable;
|
||||||
import de.steamwar.bausystem.linkage.LinkageType;
|
import de.steamwar.bausystem.linkage.LinkageType;
|
||||||
import de.steamwar.bausystem.linkage.Linked;
|
import de.steamwar.bausystem.linkage.Linked;
|
||||||
import org.bukkit.FluidCollisionMode;
|
import org.bukkit.FluidCollisionMode;
|
||||||
@ -47,7 +48,8 @@ import static de.steamwar.bausystem.features.simulator.TNTSimulator.WAND;
|
|||||||
import static de.steamwar.bausystem.features.simulator.TNTSimulator.get;
|
import static de.steamwar.bausystem.features.simulator.TNTSimulator.get;
|
||||||
|
|
||||||
@Linked(LinkageType.LISTENER)
|
@Linked(LinkageType.LISTENER)
|
||||||
public class TNTSimulatorListener implements Listener {
|
@Linked(LinkageType.DISABLE_LINK)
|
||||||
|
public class TNTSimulatorListener implements Listener, Disable {
|
||||||
|
|
||||||
private boolean permissionCheck(Player player) {
|
private boolean permissionCheck(Player player) {
|
||||||
if (!Permission.hasPermission(player, Permission.WORLD)) {
|
if (!Permission.hasPermission(player, Permission.WORLD)) {
|
||||||
@ -139,7 +141,13 @@ public class TNTSimulatorListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||||
get(event.getPlayer()).delete();
|
get(event.getPlayer()).saveAndDelete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void disable() {
|
||||||
|
for (TNTSimulator simulator : TNTSimulator.TNT_SIMULATOR_MAP.values()) {
|
||||||
|
simulator.saveAndDelete();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,8 +47,8 @@ public enum LinkageType {
|
|||||||
|
|
||||||
// NORMAL
|
// NORMAL
|
||||||
COMMAND(-1, false, SWCommand.class::isAssignableFrom),
|
COMMAND(-1, false, SWCommand.class::isAssignableFrom),
|
||||||
ENABLE_LINK(0, false, Enable.class::isAssignableFrom, o -> ((Enable) o).enable()),
|
ENABLE_LINK(0, false, Enable.class::isInstance, o -> ((Enable) o).enable()),
|
||||||
DISABLE_LINK(0, true, Disable.class::isAssignableFrom, o -> ((Disable) o).disable()),
|
DISABLE_LINK(0, true, Disable.class::isInstance, o -> ((Disable) o).disable()),
|
||||||
PLAIN(1, false, clazz -> true),
|
PLAIN(1, false, clazz -> true),
|
||||||
LISTENER(2, false, Listener.class::isAssignableFrom, o -> Bukkit.getPluginManager().registerEvents((Listener) o, BauSystem.getInstance())),
|
LISTENER(2, false, Listener.class::isAssignableFrom, o -> Bukkit.getPluginManager().registerEvents((Listener) o, BauSystem.getInstance())),
|
||||||
UNLINK_LISTENER(2, true, Listener.class::isAssignableFrom, o -> HandlerList.unregisterAll((Listener) o)),
|
UNLINK_LISTENER(2, true, Listener.class::isAssignableFrom, o -> HandlerList.unregisterAll((Listener) o)),
|
||||||
|
@ -47,6 +47,10 @@ public class WorldData {
|
|||||||
return getWorldData().getYAPIONObjectOrSetDefault("regions", new YAPIONObject());
|
return getWorldData().getYAPIONObjectOrSetDefault("regions", new YAPIONObject());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public YAPIONObject getSimulatorData() {
|
||||||
|
return getWorldData().getYAPIONObjectOrSetDefault("simulators", new YAPIONObject());
|
||||||
|
}
|
||||||
|
|
||||||
private void read() {
|
private void read() {
|
||||||
worldData = new YAPIONObject();
|
worldData = new YAPIONObject();
|
||||||
if (optionsFile.length() != 0) {
|
if (optionsFile.length() != 0) {
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren