forked from SteamWar/SteamWar
Remove YAPION from BauSystem_Main module
This commit is contained in:
@@ -64,7 +64,7 @@ public class Depth {
|
||||
dimensions.setZ(Math.abs(dimensions.getZ()));
|
||||
|
||||
RegionUtils.message(region, player -> {
|
||||
if (Config.getInstance().get(player).getPlainValueOrDefault("depth_message", true)) {
|
||||
if (Config.STORE.get(player).isDepthMessage()) {
|
||||
player.spigot().sendMessage(getMessage(player, dimensions.getBlockX() + 1, dimensions.getBlockY() + 1, dimensions.getBlockZ() + 1, tntCount));
|
||||
}
|
||||
});
|
||||
|
||||
+3
-3
@@ -34,11 +34,11 @@ public class DepthCommand extends SWCommand {
|
||||
|
||||
@Register
|
||||
public void toggle(Player player) {
|
||||
if (Config.getInstance().get(player).getPlainValueOrDefault("depth_message", true)) {
|
||||
Config.getInstance().get(player).put("depth_message", false);
|
||||
if (Config.STORE.get(player).isDepthMessage()) {
|
||||
Config.STORE.get(player).setDepthMessage(false);
|
||||
BauSystem.MESSAGE.send("DEPTH_COUNTER_DISABLE", player);
|
||||
} else {
|
||||
Config.getInstance().get(player).put("depth_message", true);
|
||||
Config.STORE.get(player).setDepthMessage(true);
|
||||
BauSystem.MESSAGE.send("DEPTH_COUNTER_ENABLE", player);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -95,7 +95,7 @@ public class Detonator {
|
||||
|
||||
public static void activateDetonator(DetonatorStorage detonator) {
|
||||
Player p = detonator.getPlayer();
|
||||
if (Config.getInstance().get(p).getPlainValueOrDefault("detonator-autostart", false)) {
|
||||
if (Config.STORE.get(p).isDetonatorAutostart()) {
|
||||
AutostartListener.instance.activate(p);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -76,8 +76,8 @@ public class DetonatorCommand extends SWCommand {
|
||||
|
||||
@Register(value = "autostart", description = "DETONATOR_HELP_AUTOSTART")
|
||||
public void toggleAutostartTimer(Player p) {
|
||||
boolean current = Config.getInstance().get(p).getPlainValueOrDefault("detonator-autostart", false);
|
||||
Config.getInstance().get(p).put("detonator-autostart", !current);
|
||||
boolean current = Config.STORE.get(p).isDetonatorAutostart();
|
||||
Config.STORE.get(p).setDetonatorAutostart(!current);
|
||||
if (!current) {
|
||||
BauSystem.MESSAGE.send("DETONATOR_AUTOSTART_ENABLE", p);
|
||||
} else {
|
||||
|
||||
+15
-16
@@ -28,7 +28,6 @@ import lombok.Setter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@@ -52,15 +51,15 @@ public class BauGuiMapping {
|
||||
}
|
||||
|
||||
@Getter
|
||||
private final YAPIONObject object;
|
||||
private final Config config;
|
||||
@Getter
|
||||
private final Player owner;
|
||||
@Getter
|
||||
@Setter
|
||||
private boolean saved;
|
||||
|
||||
protected BauGuiMapping(YAPIONObject object, Player p) {
|
||||
this.object = object;
|
||||
protected BauGuiMapping(Config config, Player p) {
|
||||
this.config = config;
|
||||
this.owner = p;
|
||||
fromUUID.put(p.getUniqueId(), this);
|
||||
mappings.add(this);
|
||||
@@ -70,19 +69,18 @@ public class BauGuiMapping {
|
||||
BauGuiMapping mapping = fromUUID.get(p.getUniqueId());
|
||||
|
||||
if (mapping == null) {
|
||||
YAPIONObject yapionObject = Config.getInstance().get(p);
|
||||
mapping = new BauGuiMapping(yapionObject.getObject("baugui"), p);
|
||||
mapping = new BauGuiMapping(Config.STORE.get(p), p);
|
||||
}
|
||||
|
||||
return mapping;
|
||||
}
|
||||
|
||||
public boolean isShown(int id) {
|
||||
return object.getPlainValueOrDefault(Integer.toString(id), -1) >= 0;
|
||||
return config.getBauGui().getOrDefault(id, -1) >= 0;
|
||||
}
|
||||
|
||||
public int getSlot(int id) {
|
||||
return object.getPlainValue(Integer.toString(id));
|
||||
return config.getBauGui().get(id);
|
||||
}
|
||||
|
||||
public Map<Integer, Integer> getMapping() {
|
||||
@@ -94,7 +92,7 @@ public class BauGuiMapping {
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
return object.getPlainValueOrDefault("size", 45);
|
||||
return config.getBauGuiSize();
|
||||
}
|
||||
|
||||
public void setSize(int size) {
|
||||
@@ -102,7 +100,7 @@ public class BauGuiMapping {
|
||||
return;
|
||||
}
|
||||
|
||||
object.add("size", size);
|
||||
config.setBauGuiSize(size);
|
||||
}
|
||||
|
||||
private void tick() {
|
||||
@@ -111,16 +109,17 @@ public class BauGuiMapping {
|
||||
|
||||
public void save() {
|
||||
if (saved) return;
|
||||
YAPIONObject config = Config.getInstance().get(owner);
|
||||
config.add("baugui", object);
|
||||
Config.getInstance().save(owner);
|
||||
Config current = Config.STORE.get(owner);
|
||||
current.setBauGui(config.getBauGui());
|
||||
current.setBauGuiSize(config.getBauGuiSize());
|
||||
Config.STORE.save(owner);
|
||||
saved = true;
|
||||
}
|
||||
|
||||
private Map<Integer, Integer> internalReadMap() {
|
||||
Map<Integer, Integer> map = new HashMap<>();
|
||||
for (Map.Entry<Integer, BauGuiItem> e : BauGUI.getITEMS().entrySet()) {
|
||||
Integer value = object.getPlainValueOrDefault(e.getKey().toString(), -1);
|
||||
Integer value = config.getBauGui().getOrDefault(e.getKey(), -1);
|
||||
if (value == -1) continue;
|
||||
map.put(e.getKey(), value);
|
||||
}
|
||||
@@ -129,10 +128,10 @@ public class BauGuiMapping {
|
||||
|
||||
private void internalWriteMap(Map<Integer, Integer> map) {
|
||||
for (Map.Entry<Integer, BauGuiItem> e : BauGUI.getITEMS().entrySet()) {
|
||||
object.remove(e.getKey().toString());
|
||||
config.getBauGui().remove(e.getKey());
|
||||
Integer value = map.getOrDefault(e.getKey(), -1);
|
||||
if (value == -1) continue;
|
||||
object.add(e.getKey().toString(), value);
|
||||
config.getBauGui().put(e.getKey(), value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+30
-40
@@ -20,39 +20,23 @@
|
||||
package de.steamwar.bausystem.features.hotbar;
|
||||
|
||||
import de.steamwar.bausystem.configplayer.Config;
|
||||
import de.steamwar.core.Core;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import yapion.hierarchy.types.YAPIONArray;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
import yapion.hierarchy.types.YAPIONValue;
|
||||
import yapion.parser.YAPIONParser;
|
||||
import yapion.serializing.YAPIONDeserializer;
|
||||
import yapion.serializing.YAPIONSerializer;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
|
||||
@UtilityClass
|
||||
public class DefaultHotbar {
|
||||
|
||||
private final YAPIONArray DEFAULT_HOTBAR = YAPIONParser.parse("{[{@type(org.bukkit.inventory.ItemStack)v(2230)type(WOODEN_AXE)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(WorldEdit Wand)lore{@type(java.util.ArrayList)values[Left click: select pos #1,Right click: select pos #2]}}},{@type(org.bukkit.inventory.ItemStack)v(2230)type(COMPASS)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(Navigation Wand)lore{@type(java.util.ArrayList)values[Left click: jump to location,Right click: pass through walls]}}},null,null,null,null,null,null,{@type(org.bukkit.inventory.ItemStack)v(2230)type(NETHER_STAR)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(§eBau GUI)}},null,null,{@type(org.bukkit.inventory.ItemStack)v(3117)type(ELYTRA)},null]}").getArray("");
|
||||
|
||||
public void updateHotbar(Player p) {
|
||||
ItemStack[] hotbar = new ItemStack[13];
|
||||
System.arraycopy(p.getInventory().getContents(), 0, hotbar, 0, 9);
|
||||
System.arraycopy(p.getInventory().getArmorContents(), 0, hotbar, 9, 4);
|
||||
YAPIONArray yapionArray = new YAPIONArray();
|
||||
for (ItemStack itemStack : hotbar) {
|
||||
if (itemStack != null) {
|
||||
yapionArray.add(YAPIONSerializer.serialize(itemStack));
|
||||
} else {
|
||||
yapionArray.add(new YAPIONValue<>(null));
|
||||
}
|
||||
}
|
||||
Config.getInstance().get(p).add("hotbar-" + Core.getVersion(), yapionArray);
|
||||
Config.getInstance().save(p);
|
||||
Config.STORE.get(p).setHotbar(copy(hotbar));
|
||||
Config.STORE.save(p);
|
||||
}
|
||||
|
||||
public void setHotbar(Player p) {
|
||||
@@ -66,28 +50,34 @@ public class DefaultHotbar {
|
||||
}
|
||||
|
||||
public ItemStack[] getItems(Player p) {
|
||||
Config.getInstance().get(p).remap("hotbar", "hotbar-19");
|
||||
YAPIONArray yapionArray = Config.getInstance().get(p).getYAPIONArrayOrSetDefault("hotbar-" + Core.getVersion(), defaultHotbar());
|
||||
return copy(Config.STORE.get(p).getHotbar());
|
||||
}
|
||||
|
||||
public ItemStack[] defaultHotbar() {
|
||||
ItemStack[] hotbar = new ItemStack[13];
|
||||
Set<Integer> invalid = new HashSet<>();
|
||||
yapionArray.forEach((integer, yapionAnyType) -> {
|
||||
if (yapionAnyType instanceof YAPIONValue) {
|
||||
hotbar[integer] = null;
|
||||
} else {
|
||||
try {
|
||||
hotbar[integer] = YAPIONDeserializer.deserialize((YAPIONObject) yapionAnyType);
|
||||
} catch (Exception e) {
|
||||
invalid.add(integer);
|
||||
hotbar[integer] = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
invalid.forEach(i -> yapionArray.set(i, new YAPIONValue<>(null)));
|
||||
if (!invalid.isEmpty()) Config.getInstance().save(p);
|
||||
hotbar[0] = item(Material.WOODEN_AXE, "WorldEdit Wand", "Left click: select pos #1", "Right click: select pos #2");
|
||||
hotbar[1] = item(Material.COMPASS, "Navigation Wand", "Left click: jump to location", "Right click: pass through walls");
|
||||
hotbar[8] = item(Material.NETHER_STAR, "§eBau GUI");
|
||||
hotbar[11] = new ItemStack(Material.ELYTRA);
|
||||
return hotbar;
|
||||
}
|
||||
|
||||
public YAPIONArray defaultHotbar() {
|
||||
return DEFAULT_HOTBAR;
|
||||
private ItemStack item(Material material, String name, String... lore) {
|
||||
ItemStack itemStack = new ItemStack(material);
|
||||
ItemMeta meta = itemStack.getItemMeta();
|
||||
meta.setDisplayName(name);
|
||||
if (lore.length > 0) {
|
||||
meta.setLore(List.of(lore));
|
||||
}
|
||||
itemStack.setItemMeta(meta);
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
private ItemStack[] copy(ItemStack[] hotbar) {
|
||||
ItemStack[] copy = new ItemStack[13];
|
||||
for (int i = 0; i < Math.min(hotbar.length, copy.length); i++) {
|
||||
copy[i] = hotbar[i] == null ? null : hotbar[i].clone();
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -49,7 +49,7 @@ public class InventoryFillBauGuiItem extends BauGuiItem {
|
||||
|
||||
@Override
|
||||
public ItemStack getItem(Player player) {
|
||||
String loreKey = Config.getInstance().get(player).getPlainValueOrDefault("inventoryfill", false) ? "OTHER_ITEMS_INVENTORY_FILL_LORE_ACTIVE" : "OTHER_ITEMS_INVENTORY_FILL_LORE_INACTIVE";
|
||||
String loreKey = Config.STORE.get(player).isInventoryFill() ? "OTHER_ITEMS_INVENTORY_FILL_LORE_ACTIVE" : "OTHER_ITEMS_INVENTORY_FILL_LORE_INACTIVE";
|
||||
return new SWItem(Material.HOPPER, BauSystem.MESSAGE.parse("OTHER_ITEMS_INVENTORY_FILL_NAME", player), Collections.singletonList(BauSystem.MESSAGE.parse(loreKey, player)), false, clickType -> {
|
||||
}).getItemStack();
|
||||
}
|
||||
|
||||
+2
-2
@@ -40,7 +40,7 @@ public class InventoryFiller implements Listener {
|
||||
@EventHandler
|
||||
public void onPlayerDropItem(PlayerDropItemEvent event) {
|
||||
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
|
||||
if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("inventoryfill", false)) return;
|
||||
if (!Config.STORE.get(event.getPlayer()).isInventoryFill()) return;
|
||||
if (!event.getPlayer().isSneaking()) return;
|
||||
Block block = event.getPlayer().getTargetBlockExact(5);
|
||||
if (block == null) return;
|
||||
@@ -62,7 +62,7 @@ public class InventoryFiller implements Listener {
|
||||
@EventHandler
|
||||
public void onPlayerItemHeld(PlayerItemHeldEvent event) {
|
||||
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
|
||||
if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("inventoryfill", false)) return;
|
||||
if (!Config.STORE.get(event.getPlayer()).isInventoryFill()) return;
|
||||
if (!event.getPlayer().isSneaking()) return;
|
||||
ItemStack itemStack = event.getPlayer().getInventory().getItemInMainHand();
|
||||
if (itemStack.getType() == Material.AIR) return;
|
||||
|
||||
+2
-2
@@ -68,8 +68,8 @@ public class InventoryFillerCommand extends SWCommand {
|
||||
|
||||
@Register(description = {"INVENTORY_FILL_HELP", "INVENTORY_FILL_INFO"})
|
||||
public void toggle(Player player) {
|
||||
boolean inventoryFill = Config.getInstance().get(player).getPlainValueOrDefault("inventoryfill", false);
|
||||
Config.getInstance().get(player).put("inventoryfill", !inventoryFill);
|
||||
boolean inventoryFill = Config.STORE.get(player).isInventoryFill();
|
||||
Config.STORE.get(player).setInventoryFill(!inventoryFill);
|
||||
if (!inventoryFill) {
|
||||
SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("INVENTORY_FILL_ENABLE", player));
|
||||
BauSystem.MESSAGE.send("INVENTORY_FILL_INFO", player);
|
||||
|
||||
+4
-4
@@ -167,7 +167,7 @@ public class RayVisualizerCommand extends SWCommand implements Listener {
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
|
||||
boolean rayvisualizer = Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("rayvisualizer", false);
|
||||
boolean rayvisualizer = Config.STORE.get(event.getPlayer()).isRayVisualizer();
|
||||
if (rayvisualizer) server.addPlayer(event.getPlayer());
|
||||
}
|
||||
|
||||
@@ -181,7 +181,7 @@ public class RayVisualizerCommand extends SWCommand implements Listener {
|
||||
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
if (Permission.BUILD.hasPermission(player)) {
|
||||
boolean rayvisualizer = Config.getInstance().get(player).getPlainValueOrDefault("rayvisualizer", false);
|
||||
boolean rayvisualizer = Config.STORE.get(player).isRayVisualizer();
|
||||
if (rayvisualizer) server.addPlayer(player);
|
||||
} else {
|
||||
server.removePlayer(player);
|
||||
@@ -192,8 +192,8 @@ public class RayVisualizerCommand extends SWCommand implements Listener {
|
||||
|
||||
@Register
|
||||
public void toggle(@Validator Player player) {
|
||||
boolean rayvisualizer = Config.getInstance().get(player).getPlainValueOrDefault("rayvisualizer", false);
|
||||
Config.getInstance().get(player).put("rayvisualizer", !rayvisualizer);
|
||||
boolean rayvisualizer = Config.STORE.get(player).isRayVisualizer();
|
||||
Config.STORE.get(player).setRayVisualizer(!rayvisualizer);
|
||||
if (!rayvisualizer) {
|
||||
SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("RAY_VISUALIZER_ENABLE", player));
|
||||
server.addPlayer(player);
|
||||
|
||||
+3
-3
@@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.simulator.data;
|
||||
|
||||
import de.steamwar.bausystem.features.simulator.execute.SimulatorAction;
|
||||
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
|
||||
import de.steamwar.bausystem.features.simulator.storage.SimulatorConfig;
|
||||
import de.steamwar.inventory.InvCallback;
|
||||
import de.steamwar.inventory.SWItem;
|
||||
import lombok.Getter;
|
||||
@@ -28,7 +29,6 @@ import lombok.Setter;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
@@ -121,9 +121,9 @@ public abstract class SimulatorElement<T extends SimulatorPhase> {
|
||||
|
||||
public abstract String getType();
|
||||
|
||||
public void saveExtra(YAPIONObject elementObject) {
|
||||
public void saveExtra(SimulatorConfig.Element element) {
|
||||
}
|
||||
|
||||
public void loadExtra(YAPIONObject elementObject) {
|
||||
public void loadExtra(SimulatorConfig.Element element) {
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -20,10 +20,10 @@
|
||||
package de.steamwar.bausystem.features.simulator.data;
|
||||
|
||||
import de.steamwar.bausystem.features.simulator.execute.SimulatorAction;
|
||||
import de.steamwar.bausystem.features.simulator.storage.SimulatorConfig;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.bukkit.util.Vector;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
@@ -38,9 +38,9 @@ public abstract class SimulatorPhase {
|
||||
|
||||
public abstract void toSimulatorActions(Vector position, BiConsumer<Integer, SimulatorAction> tickStart, BiConsumer<Integer, SimulatorAction> tickEnd);
|
||||
|
||||
public void saveExtra(YAPIONObject phaseObject) {
|
||||
public void saveExtra(SimulatorConfig.Phase phase) {
|
||||
}
|
||||
|
||||
public void loadExtra(YAPIONObject phaseObject) {
|
||||
public void loadExtra(SimulatorConfig.Phase phase) {
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.simulator.data.observer;
|
||||
|
||||
import de.steamwar.bausystem.features.simulator.data.SimulatorPhase;
|
||||
import de.steamwar.bausystem.features.simulator.execute.SimulatorAction;
|
||||
import de.steamwar.bausystem.features.simulator.storage.SimulatorConfig;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
@@ -31,7 +32,6 @@ import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.data.type.Observer;
|
||||
import org.bukkit.util.Vector;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
@@ -70,12 +70,12 @@ public final class ObserverPhase extends SimulatorPhase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveExtra(YAPIONObject phaseObject) {
|
||||
phaseObject.add("orientation", orientation.name());
|
||||
public void saveExtra(SimulatorConfig.Phase phase) {
|
||||
phase.setOrientation(orientation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadExtra(YAPIONObject phaseObject) {
|
||||
orientation = BlockFace.valueOf(phaseObject.getPlainValue("orientation"));
|
||||
public void loadExtra(SimulatorConfig.Phase phase) {
|
||||
if (phase.getOrientation() != null) orientation = phase.getOrientation();
|
||||
}
|
||||
}
|
||||
|
||||
+7
-7
@@ -24,13 +24,13 @@ import de.steamwar.bausystem.features.simulator.data.SimulatorElement;
|
||||
import de.steamwar.bausystem.features.simulator.data.SimulatorGroup;
|
||||
import de.steamwar.bausystem.features.simulator.gui.SimulatorTNTGui;
|
||||
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
|
||||
import de.steamwar.bausystem.features.simulator.storage.SimulatorConfig;
|
||||
import de.steamwar.inventory.InvCallback;
|
||||
import de.steamwar.inventory.SWItem;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
|
||||
public final class TNTElement extends SimulatorElement<TNTPhase> {
|
||||
|
||||
@@ -100,14 +100,14 @@ public final class TNTElement extends SimulatorElement<TNTPhase> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveExtra(YAPIONObject elementObject) {
|
||||
elementObject.add("alignmentX", alignment.getX());
|
||||
elementObject.add("alignmentZ", alignment.getZ());
|
||||
public void saveExtra(SimulatorConfig.Element element) {
|
||||
element.setAlignmentX(alignment.getX());
|
||||
element.setAlignmentZ(alignment.getZ());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadExtra(YAPIONObject elementObject) {
|
||||
alignment.setX(elementObject.getDoubleOrSetDefault("alignmentX", 0));
|
||||
alignment.setZ(elementObject.getDoubleOrSetDefault("alignmentZ", 0));
|
||||
public void loadExtra(SimulatorConfig.Element element) {
|
||||
alignment.setX(element.getAlignmentX() != null ? element.getAlignmentX() : 0);
|
||||
alignment.setZ(element.getAlignmentZ() != null ? element.getAlignmentZ() : 0);
|
||||
}
|
||||
}
|
||||
|
||||
+11
-11
@@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.simulator.data.tnt;
|
||||
|
||||
import de.steamwar.bausystem.features.simulator.data.SimulatorPhase;
|
||||
import de.steamwar.bausystem.features.simulator.execute.SimulatorAction;
|
||||
import de.steamwar.bausystem.features.simulator.storage.SimulatorConfig;
|
||||
import de.steamwar.bausystem.region.Region;
|
||||
import de.steamwar.bausystem.region.flags.Flag;
|
||||
import de.steamwar.bausystem.region.flags.FreezeMode;
|
||||
@@ -31,7 +32,6 @@ import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.util.Vector;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
@@ -83,18 +83,18 @@ public final class TNTPhase extends SimulatorPhase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveExtra(YAPIONObject phaseObject) {
|
||||
phaseObject.add("count", count);
|
||||
phaseObject.add("xJump", xJump);
|
||||
phaseObject.add("yJump", yJump);
|
||||
phaseObject.add("zJump", zJump);
|
||||
public void saveExtra(SimulatorConfig.Phase phase) {
|
||||
phase.setCount(count);
|
||||
phase.setXJump(xJump);
|
||||
phase.setYJump(yJump);
|
||||
phase.setZJump(zJump);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadExtra(YAPIONObject phaseObject) {
|
||||
count = phaseObject.getPlainValue("count");
|
||||
xJump = phaseObject.getPlainValue("xJump");
|
||||
yJump = phaseObject.getPlainValue("yJump");
|
||||
zJump = phaseObject.getPlainValue("zJump");
|
||||
public void loadExtra(SimulatorConfig.Phase phase) {
|
||||
if (phase.getCount() != null) count = phase.getCount();
|
||||
if (phase.getXJump() != null) xJump = phase.getXJump();
|
||||
if (phase.getYJump() != null) yJump = phase.getYJump();
|
||||
if (phase.getZJump() != null) zJump = phase.getZJump();
|
||||
}
|
||||
}
|
||||
|
||||
+29
-37
@@ -19,6 +19,7 @@
|
||||
|
||||
package de.steamwar.bausystem.features.simulator.storage;
|
||||
|
||||
import com.google.gson.JsonParseException;
|
||||
import de.steamwar.bausystem.features.simulator.data.Simulator;
|
||||
import de.steamwar.bausystem.features.simulator.data.SimulatorElement;
|
||||
import de.steamwar.bausystem.features.simulator.data.SimulatorGroup;
|
||||
@@ -29,12 +30,7 @@ import de.steamwar.bausystem.features.simulator.data.redstone.RedstoneElement;
|
||||
import de.steamwar.bausystem.features.simulator.data.redstone.RedstonePhase;
|
||||
import de.steamwar.bausystem.features.simulator.data.tnt.TNTElement;
|
||||
import de.steamwar.bausystem.features.simulator.data.tnt.TNTPhase;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.util.Vector;
|
||||
import yapion.exceptions.YAPIONException;
|
||||
import yapion.hierarchy.types.YAPIONArray;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
import yapion.parser.YAPIONParser;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -51,44 +47,41 @@ public class SimFormatSimulatorLoader implements SimulatorLoader {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
YAPIONObject yapionObject;
|
||||
SimulatorConfig config;
|
||||
try {
|
||||
yapionObject = YAPIONParser.parse(file);
|
||||
} catch (YAPIONException | IOException e) {
|
||||
config = SimulatorConfig.STORE.load(file);
|
||||
} catch (JsonParseException | IllegalStateException | IOException e) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
String name = file.getName().substring(0, file.getName().length() - ".sim".length());
|
||||
|
||||
Simulator simulator = new Simulator(name);
|
||||
loadSimulator(yapionObject, simulator);
|
||||
loadSimulator(config, simulator);
|
||||
return Optional.of(Collections.singletonList(simulator));
|
||||
}
|
||||
|
||||
private void loadSimulator(YAPIONObject simulatorObject, Simulator simulator) {
|
||||
simulator.setMaterial(Material.valueOf(simulatorObject.getPlainValue("material")));
|
||||
simulator.setAutoTrace(simulatorObject.getPlainValue("autoTrace"));
|
||||
simulator.setAutoTestblock(simulatorObject.getPlainValueOrDefault("autoTestblock", false));
|
||||
private void loadSimulator(SimulatorConfig config, Simulator simulator) {
|
||||
if (config.getMaterial() != null) simulator.setMaterial(config.getMaterial());
|
||||
simulator.setAutoTrace(config.isAutoTrace());
|
||||
simulator.setAutoTestblock(config.isAutoTestblock());
|
||||
|
||||
YAPIONArray groups = simulatorObject.getArray("groups");
|
||||
groups.streamObject().forEach(groupObject -> {
|
||||
config.getGroups().forEach(groupConfig -> {
|
||||
SimulatorGroup simulatorGroup = new SimulatorGroup();
|
||||
loadGroup(groupObject, simulatorGroup);
|
||||
loadGroup(groupConfig, simulatorGroup);
|
||||
simulator.add(simulatorGroup);
|
||||
});
|
||||
}
|
||||
|
||||
private void loadGroup(YAPIONObject groupObject, SimulatorGroup group) {
|
||||
group.setMaterial(Material.valueOf(groupObject.getPlainValue("material")));
|
||||
group.setDisabled(groupObject.getPlainValue("disabled"));
|
||||
private void loadGroup(SimulatorConfig.Group groupConfig, SimulatorGroup group) {
|
||||
if (groupConfig.getMaterial() != null) group.setMaterial(groupConfig.getMaterial());
|
||||
group.setDisabled(groupConfig.isDisabled());
|
||||
|
||||
YAPIONArray elements = groupObject.getArray("elements");
|
||||
elements.streamObject().forEach(elementObject -> {
|
||||
groupConfig.getElements().forEach(elementConfig -> {
|
||||
SimulatorElement<?> element;
|
||||
Supplier<SimulatorPhase> phaseConstructor;
|
||||
Vector position = new Vector(elementObject.getDouble("x"), elementObject.getDouble("y"), elementObject.getDouble("z"));
|
||||
String type = elementObject.getPlainValue("type");
|
||||
switch (type) {
|
||||
Vector position = new Vector(elementConfig.getX(), elementConfig.getY(), elementConfig.getZ());
|
||||
switch (String.valueOf(elementConfig.getType())) {
|
||||
case "TNT":
|
||||
element = new TNTElement(position);
|
||||
phaseConstructor = TNTPhase::new;
|
||||
@@ -109,28 +102,27 @@ public class SimFormatSimulatorLoader implements SimulatorLoader {
|
||||
if (element == null) {
|
||||
return;
|
||||
}
|
||||
loadElement(elementObject, element, phaseConstructor);
|
||||
loadElement(elementConfig, element, phaseConstructor);
|
||||
group.add(element);
|
||||
});
|
||||
}
|
||||
|
||||
private void loadElement(YAPIONObject elementObject, SimulatorElement<?> element, Supplier<SimulatorPhase> phaseConstructor) {
|
||||
element.setMaterial(Material.valueOf(elementObject.getPlainValue("material")));
|
||||
element.setDisabled(elementObject.getPlainValue("disabled"));
|
||||
element.loadExtra(elementObject);
|
||||
private void loadElement(SimulatorConfig.Element elementConfig, SimulatorElement<?> element, Supplier<SimulatorPhase> phaseConstructor) {
|
||||
if (elementConfig.getMaterial() != null) element.setMaterial(elementConfig.getMaterial());
|
||||
element.setDisabled(elementConfig.isDisabled());
|
||||
element.loadExtra(elementConfig);
|
||||
|
||||
YAPIONArray phases = elementObject.getArray("phases");
|
||||
phases.streamObject().forEach(phaseObject -> {
|
||||
elementConfig.getPhases().forEach(phaseConfig -> {
|
||||
SimulatorPhase phase = phaseConstructor.get();
|
||||
loadPhase(phaseObject, phase);
|
||||
loadPhase(phaseConfig, phase);
|
||||
((SimulatorElement) element).add(phase);
|
||||
});
|
||||
}
|
||||
|
||||
private void loadPhase(YAPIONObject phaseObject, SimulatorPhase phase) {
|
||||
phase.setTickOffset(phaseObject.getPlainValue("tickOffset"));
|
||||
phase.setLifetime(phaseObject.getPlainValue("lifetime"));
|
||||
phase.setOrder(phaseObject.getPlainValue("order"));
|
||||
phase.loadExtra(phaseObject);
|
||||
private void loadPhase(SimulatorConfig.Phase phaseConfig, SimulatorPhase phase) {
|
||||
phase.setTickOffset(phaseConfig.getTickOffset());
|
||||
phase.setLifetime(phaseConfig.getLifetime());
|
||||
phase.setOrder(phaseConfig.getOrder());
|
||||
phase.loadExtra(phaseConfig);
|
||||
}
|
||||
}
|
||||
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2026 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.bausystem.features.simulator.storage;
|
||||
|
||||
import de.steamwar.bausystem.config.ConfigStore;
|
||||
import de.steamwar.bausystem.config.VersionedConfig;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockFace;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* The current stored form of a simulator, saved as JSON in a .sim file. Files
|
||||
* saved before the version was stored have no version and are version 1.
|
||||
* Fields missing in the stored JSON keep the default value of their initializer,
|
||||
* so adding a new field does not need a new version.
|
||||
* <p>
|
||||
* When a field gets removed, renamed or its meaning changes, copy this class
|
||||
* to SimulatorConfigV{@link #VERSION} (without the {@link #STORE}), increase {@link #VERSION}, write a
|
||||
* {@link de.steamwar.bausystem.config.ConfigConverter} from the copy to
|
||||
* this class and register it in the {@link #STORE}.
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class SimulatorConfig implements VersionedConfig {
|
||||
|
||||
public static final int VERSION = 1;
|
||||
|
||||
/**
|
||||
* Files saved before the version was stored are version 1
|
||||
*/
|
||||
public static final ConfigStore<SimulatorConfig> STORE = new ConfigStore<>(SimulatorConfig.class, VERSION, SimulatorConfig::new)
|
||||
.unversioned(1);
|
||||
|
||||
@Setter(AccessLevel.NONE)
|
||||
protected int version = VERSION;
|
||||
|
||||
protected Material material = Material.BARREL;
|
||||
protected boolean autoTrace = false;
|
||||
protected boolean autoTestblock = false;
|
||||
protected List<Group> groups = new ArrayList<>();
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public static class Group {
|
||||
|
||||
protected Material material = Material.CHEST;
|
||||
protected boolean disabled = false;
|
||||
protected List<Element> elements = new ArrayList<>();
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public static class Element {
|
||||
|
||||
/**
|
||||
* One of "TNT", "Redstone" or "Observer"
|
||||
*/
|
||||
protected String type;
|
||||
protected Material material;
|
||||
protected boolean disabled = false;
|
||||
protected double x;
|
||||
protected double y;
|
||||
protected double z;
|
||||
|
||||
/**
|
||||
* Only used by TNT
|
||||
*/
|
||||
protected Double alignmentX;
|
||||
protected Double alignmentZ;
|
||||
|
||||
protected List<Phase> phases = new ArrayList<>();
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public static class Phase {
|
||||
|
||||
protected int tickOffset;
|
||||
protected int lifetime;
|
||||
protected int order;
|
||||
|
||||
/**
|
||||
* Only used by TNT
|
||||
*/
|
||||
protected Integer count;
|
||||
protected Boolean xJump;
|
||||
protected Boolean yJump;
|
||||
protected Boolean zJump;
|
||||
|
||||
/**
|
||||
* Only used by Observer
|
||||
*/
|
||||
protected BlockFace orientation;
|
||||
}
|
||||
}
|
||||
+43
-35
@@ -19,24 +19,30 @@
|
||||
|
||||
package de.steamwar.bausystem.features.simulator.storage;
|
||||
|
||||
import de.steamwar.bausystem.config.legacy.YapionReader;
|
||||
import de.steamwar.bausystem.features.simulator.data.Simulator;
|
||||
import de.steamwar.bausystem.features.simulator.data.SimulatorGroup;
|
||||
import de.steamwar.bausystem.features.simulator.data.tnt.TNTElement;
|
||||
import de.steamwar.bausystem.features.simulator.data.tnt.TNTPhase;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.util.Vector;
|
||||
import yapion.exceptions.YAPIONException;
|
||||
import yapion.hierarchy.types.YAPIONArray;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
import yapion.parser.YAPIONParser;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static de.steamwar.bausystem.config.legacy.YapionReader.*;
|
||||
|
||||
/**
|
||||
* Loads the legacy .simulator files stored as YAPION, they are deleted after loading
|
||||
* and saved in the current format by the {@link SimulatorSaver}.
|
||||
*/
|
||||
@Deprecated
|
||||
public class SimulatorFormatSimulatorLoader implements SimulatorLoader {
|
||||
|
||||
@Override
|
||||
@@ -45,20 +51,19 @@ public class SimulatorFormatSimulatorLoader implements SimulatorLoader {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
YAPIONObject yapionObject;
|
||||
Map<String, Object> yapionObject;
|
||||
try {
|
||||
yapionObject = YAPIONParser.parse(file);
|
||||
} catch (YAPIONException | IOException e) {
|
||||
yapionObject = YapionReader.parse(Files.readString(file.toPath(), StandardCharsets.UTF_8));
|
||||
} catch (IllegalArgumentException | IOException e) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
String name = file.getName().substring(0, file.getName().length() - ".simulator".length());
|
||||
|
||||
Simulator simulator = new Simulator(name);
|
||||
simulator.setMaterial(Material.valueOf(yapionObject.getStringOrDefault("material", "BARREL")));
|
||||
simulator.setMaterial(Material.valueOf(getString(yapionObject, "material", "BARREL")));
|
||||
|
||||
YAPIONArray tntElements = yapionObject.getArrayOrDefault("tntElements", new YAPIONArray());
|
||||
for (YAPIONObject element : tntElements.streamObject().collect(Collectors.toList())) {
|
||||
for (Map<?, ?> element : getObjects(yapionObject, "tntElements")) {
|
||||
if (element.containsKey("elements")) {
|
||||
simulator.add(loadGroup(element));
|
||||
} else {
|
||||
@@ -70,27 +75,26 @@ public class SimulatorFormatSimulatorLoader implements SimulatorLoader {
|
||||
return Optional.of(Collections.singletonList(simulator));
|
||||
}
|
||||
|
||||
private SimulatorGroup loadGroup(YAPIONObject element) {
|
||||
double x = element.getDoubleOrDefault("x", 0);
|
||||
double y = element.getDoubleOrDefault("y", 0);
|
||||
double z = element.getDoubleOrDefault("z", 0);
|
||||
int tickOffset = element.getIntOrDefault("tickOffset", 0);
|
||||
private SimulatorGroup loadGroup(Map<?, ?> element) {
|
||||
double x = getDouble(element, "x", 0);
|
||||
double y = getDouble(element, "y", 0);
|
||||
double z = getDouble(element, "z", 0);
|
||||
int tickOffset = getInt(element, "tickOffset", 0);
|
||||
|
||||
SimulatorGroup simulatorGroup = new SimulatorGroup();
|
||||
simulatorGroup.setDisabled(element.getBooleanOrDefault("disabled", false));
|
||||
simulatorGroup.setDisabled(getBoolean(element, "disabled", false));
|
||||
|
||||
YAPIONArray elements = element.getArrayOrDefault("elements", new YAPIONArray());
|
||||
for (YAPIONObject e : elements.streamObject().collect(Collectors.toList())) {
|
||||
for (Map<?, ?> e : getObjects(element, "elements")) {
|
||||
simulatorGroup.add(loadElement(e, x, y, z, tickOffset));
|
||||
}
|
||||
|
||||
return simulatorGroup;
|
||||
}
|
||||
|
||||
private TNTElement loadElement(YAPIONObject element, double dx, double dy, double dz, int dTickOffset) {
|
||||
TNTElement tntElement = new TNTElement(new Vector(element.getDouble("x") + dx, element.getDouble("y") + dy, element.getDouble("z") + dz));
|
||||
tntElement.setDisabled(element.getBooleanOrDefault("disabled", false));
|
||||
tntElement.setMaterial(Material.valueOf(element.getStringOrDefault("material", "TNT")));
|
||||
private TNTElement loadElement(Map<?, ?> element, double dx, double dy, double dz, int dTickOffset) {
|
||||
TNTElement tntElement = new TNTElement(new Vector(requireDouble(element, "x") + dx, requireDouble(element, "y") + dy, requireDouble(element, "z") + dz));
|
||||
tntElement.setDisabled(getBoolean(element, "disabled", false));
|
||||
tntElement.setMaterial(Material.valueOf(getString(element, "material", "TNT")));
|
||||
|
||||
TNTPhase tntPhase = loadPhase(element);
|
||||
tntPhase.setTickOffset(tntPhase.getTickOffset() + dTickOffset);
|
||||
@@ -99,12 +103,12 @@ public class SimulatorFormatSimulatorLoader implements SimulatorLoader {
|
||||
return tntElement;
|
||||
}
|
||||
|
||||
private SimulatorGroup loadElement(YAPIONObject element) {
|
||||
private SimulatorGroup loadElement(Map<?, ?> element) {
|
||||
SimulatorGroup simulatorGroup = new SimulatorGroup();
|
||||
|
||||
TNTElement tntElement = new TNTElement(new Vector(element.getDouble("x"), element.getDouble("y"), element.getDouble("z")));
|
||||
tntElement.setDisabled(element.getBooleanOrDefault("disabled", false));
|
||||
tntElement.setMaterial(Material.valueOf(element.getStringOrDefault("material", "TNT")));
|
||||
TNTElement tntElement = new TNTElement(new Vector(requireDouble(element, "x"), requireDouble(element, "y"), requireDouble(element, "z")));
|
||||
tntElement.setDisabled(getBoolean(element, "disabled", false));
|
||||
tntElement.setMaterial(Material.valueOf(getString(element, "material", "TNT")));
|
||||
simulatorGroup.add(tntElement);
|
||||
|
||||
tntElement.add(loadPhase(element));
|
||||
@@ -112,15 +116,15 @@ public class SimulatorFormatSimulatorLoader implements SimulatorLoader {
|
||||
return simulatorGroup;
|
||||
}
|
||||
|
||||
private TNTPhase loadPhase(YAPIONObject element) {
|
||||
private TNTPhase loadPhase(Map<?, ?> element) {
|
||||
TNTPhase tntPhase = new TNTPhase();
|
||||
tntPhase.setLifetime(element.getIntOrDefault("fuseTicks", 80));
|
||||
tntPhase.setCount(element.getIntOrDefault("count", 1));
|
||||
tntPhase.setTickOffset(element.getIntOrDefault("tickOffset", 0));
|
||||
tntPhase.setXJump(element.getBooleanOrDefault("xVelocity", false));
|
||||
tntPhase.setYJump(element.getBooleanOrDefault("yVelocity", false));
|
||||
tntPhase.setZJump(element.getBooleanOrDefault("zVelocity", false));
|
||||
switch (element.getStringOrDefault("order", "REPEATER")) {
|
||||
tntPhase.setLifetime(getInt(element, "fuseTicks", 80));
|
||||
tntPhase.setCount(getInt(element, "count", 1));
|
||||
tntPhase.setTickOffset(getInt(element, "tickOffset", 0));
|
||||
tntPhase.setXJump(getBoolean(element, "xVelocity", false));
|
||||
tntPhase.setYJump(getBoolean(element, "yVelocity", false));
|
||||
tntPhase.setZJump(getBoolean(element, "zVelocity", false));
|
||||
switch (getString(element, "order", "REPEATER")) {
|
||||
case "REPEATER":
|
||||
tntPhase.setOrder(0);
|
||||
break;
|
||||
@@ -133,4 +137,8 @@ public class SimulatorFormatSimulatorLoader implements SimulatorLoader {
|
||||
}
|
||||
return tntPhase;
|
||||
}
|
||||
|
||||
private double requireDouble(Map<?, ?> element, String key) {
|
||||
return ((Number) element.get(key)).doubleValue();
|
||||
}
|
||||
}
|
||||
|
||||
+24
-33
@@ -21,9 +21,6 @@ package de.steamwar.bausystem.features.simulator.storage;
|
||||
|
||||
import de.steamwar.bausystem.features.simulator.data.Simulator;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import yapion.hierarchy.output.FileOutput;
|
||||
import yapion.hierarchy.types.YAPIONArray;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -36,48 +33,42 @@ public class SimulatorSaver {
|
||||
directory.mkdirs();
|
||||
}
|
||||
|
||||
YAPIONObject simulatorObject = new YAPIONObject();
|
||||
simulatorObject.add("material", simulator.getMaterial().name());
|
||||
simulatorObject.add("autoTrace", simulator.isAutoTrace());
|
||||
simulatorObject.add("autoTestblock", simulator.isAutoTestblock());
|
||||
SimulatorConfig config = new SimulatorConfig();
|
||||
config.setMaterial(simulator.getMaterial());
|
||||
config.setAutoTrace(simulator.isAutoTrace());
|
||||
config.setAutoTestblock(simulator.isAutoTestblock());
|
||||
|
||||
YAPIONArray groups = new YAPIONArray();
|
||||
simulator.getGroups().forEach(group -> {
|
||||
YAPIONObject groupObject = new YAPIONObject();
|
||||
groupObject.add("material", group.getMaterial().name());
|
||||
groupObject.add("disabled", group.isDisabled());
|
||||
SimulatorConfig.Group groupConfig = new SimulatorConfig.Group();
|
||||
groupConfig.setMaterial(group.getMaterial());
|
||||
groupConfig.setDisabled(group.isDisabled());
|
||||
|
||||
YAPIONArray elements = new YAPIONArray();
|
||||
group.getElements().forEach(element -> {
|
||||
YAPIONObject elementObject = new YAPIONObject();
|
||||
elementObject.add("type", element.getType());
|
||||
elementObject.add("material", element.getMaterial().name());
|
||||
elementObject.add("disabled", element.isDisabled());
|
||||
elementObject.add("x", element.getPosition().getX());
|
||||
elementObject.add("y", element.getPosition().getY());
|
||||
elementObject.add("z", element.getPosition().getZ());
|
||||
element.saveExtra(elementObject);
|
||||
SimulatorConfig.Element elementConfig = new SimulatorConfig.Element();
|
||||
elementConfig.setType(element.getType());
|
||||
elementConfig.setMaterial(element.getMaterial());
|
||||
elementConfig.setDisabled(element.isDisabled());
|
||||
elementConfig.setX(element.getPosition().getX());
|
||||
elementConfig.setY(element.getPosition().getY());
|
||||
elementConfig.setZ(element.getPosition().getZ());
|
||||
element.saveExtra(elementConfig);
|
||||
|
||||
YAPIONArray phases = new YAPIONArray();
|
||||
element.getPhases().forEach(phase -> {
|
||||
YAPIONObject phaseObject = new YAPIONObject();
|
||||
phaseObject.add("tickOffset", phase.getTickOffset());
|
||||
phaseObject.add("lifetime", phase.getLifetime());
|
||||
phaseObject.add("order", phase.getOrder());
|
||||
phase.saveExtra(phaseObject);
|
||||
phases.add(phaseObject);
|
||||
SimulatorConfig.Phase phaseConfig = new SimulatorConfig.Phase();
|
||||
phaseConfig.setTickOffset(phase.getTickOffset());
|
||||
phaseConfig.setLifetime(phase.getLifetime());
|
||||
phaseConfig.setOrder(phase.getOrder());
|
||||
phase.saveExtra(phaseConfig);
|
||||
elementConfig.getPhases().add(phaseConfig);
|
||||
});
|
||||
elementObject.add("phases", phases);
|
||||
elements.add(elementObject);
|
||||
groupConfig.getElements().add(elementConfig);
|
||||
});
|
||||
groupObject.add("elements", elements);
|
||||
groups.add(groupObject);
|
||||
config.getGroups().add(groupConfig);
|
||||
});
|
||||
simulatorObject.add("groups", groups);
|
||||
|
||||
File file = new File(directory, simulator.getName() + ".sim");
|
||||
try {
|
||||
simulatorObject.toJSONLossy(new FileOutput(file)).close();
|
||||
SimulatorConfig.STORE.save(file, config);
|
||||
} catch (IOException e) {
|
||||
// Ignore
|
||||
}
|
||||
|
||||
+31
-21
@@ -19,6 +19,7 @@
|
||||
|
||||
package de.steamwar.bausystem.features.simulator.storage;
|
||||
|
||||
import de.steamwar.bausystem.config.legacy.YapionReader;
|
||||
import de.steamwar.bausystem.features.simulator.data.Simulator;
|
||||
import de.steamwar.bausystem.features.simulator.data.SimulatorGroup;
|
||||
import de.steamwar.bausystem.features.simulator.data.tnt.TNTElement;
|
||||
@@ -26,18 +27,23 @@ import de.steamwar.bausystem.features.simulator.data.tnt.TNTPhase;
|
||||
import de.steamwar.sql.SteamwarUser;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.util.Vector;
|
||||
import yapion.exceptions.YAPIONException;
|
||||
import yapion.hierarchy.types.YAPIONArray;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
import yapion.parser.YAPIONParser;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static de.steamwar.bausystem.config.legacy.YapionReader.*;
|
||||
|
||||
/**
|
||||
* Loads the legacy per player .yapion files containing multiple simulators, they are
|
||||
* deleted after loading and saved in the current format by the {@link SimulatorSaver}.
|
||||
*/
|
||||
@Deprecated
|
||||
public class YAPIONFormatSimulatorLoader implements SimulatorLoader {
|
||||
|
||||
@Override
|
||||
@@ -46,10 +52,10 @@ public class YAPIONFormatSimulatorLoader implements SimulatorLoader {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
YAPIONObject yapionObject;
|
||||
Map<String, Object> yapionObject;
|
||||
try {
|
||||
yapionObject = YAPIONParser.parse(file);
|
||||
} catch (YAPIONException | IOException e) {
|
||||
yapionObject = YapionReader.parse(Files.readString(file.toPath(), StandardCharsets.UTF_8));
|
||||
} catch (IllegalArgumentException | IOException e) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@@ -57,28 +63,28 @@ public class YAPIONFormatSimulatorLoader implements SimulatorLoader {
|
||||
SteamwarUser steamwarUser = SteamwarUser.byId(Integer.parseInt(name));
|
||||
|
||||
List<Simulator> simulators = new ArrayList<>();
|
||||
for (String s : yapionObject.getKeys()) {
|
||||
for (String s : yapionObject.keySet()) {
|
||||
String newName = steamwarUser.getUserName() + (s.isEmpty() ? "" : "_" + s);
|
||||
YAPIONArray content = yapionObject.getArray(s);
|
||||
List<Map<?, ?>> content = getObjects(yapionObject, s);
|
||||
if (content.isEmpty()) continue;
|
||||
Simulator simulator = new Simulator(newName);
|
||||
for (YAPIONObject element : content.streamObject().collect(Collectors.toList())) {
|
||||
for (Map<?, ?> element : content) {
|
||||
SimulatorGroup simulatorGroup = new SimulatorGroup();
|
||||
simulator.add(simulatorGroup);
|
||||
|
||||
TNTElement tntElement = new TNTElement(new Vector(element.getDouble("positionX"), element.getDouble("positionY"), element.getDouble("positionZ")));
|
||||
tntElement.setDisabled(element.getBooleanOrDefault("disabled", false)); // IDK if this existed back then?
|
||||
tntElement.setMaterial(Material.valueOf(element.getStringOrDefault("material", "TNT")));
|
||||
TNTElement tntElement = new TNTElement(new Vector(requireDouble(element, "positionX"), requireDouble(element, "positionY"), requireDouble(element, "positionZ")));
|
||||
tntElement.setDisabled(getBoolean(element, "disabled", false)); // IDK if this existed back then?
|
||||
tntElement.setMaterial(Material.valueOf(getString(element, "material", "TNT")));
|
||||
simulatorGroup.add(tntElement);
|
||||
|
||||
TNTPhase tntPhase = new TNTPhase();
|
||||
tntPhase.setLifetime(element.getIntOrDefault("fuseTicks", 80));
|
||||
tntPhase.setCount(element.getIntOrDefault("count", 1));
|
||||
tntPhase.setTickOffset(element.getIntOrDefault("tickOffset", 0));
|
||||
tntPhase.setXJump(element.getBooleanOrDefault("xVelocity", false));
|
||||
tntPhase.setYJump(element.getBooleanOrDefault("yVelocity", false));
|
||||
tntPhase.setZJump(element.getBooleanOrDefault("zVelocity", false));
|
||||
tntPhase.setOrder(element.getBooleanOrDefault("comparator", false) ? 2 : 0);
|
||||
tntPhase.setLifetime(getInt(element, "fuseTicks", 80));
|
||||
tntPhase.setCount(getInt(element, "count", 1));
|
||||
tntPhase.setTickOffset(getInt(element, "tickOffset", 0));
|
||||
tntPhase.setXJump(getBoolean(element, "xVelocity", false));
|
||||
tntPhase.setYJump(getBoolean(element, "yVelocity", false));
|
||||
tntPhase.setZJump(getBoolean(element, "zVelocity", false));
|
||||
tntPhase.setOrder(getBoolean(element, "comparator", false) ? 2 : 0);
|
||||
tntElement.add(tntPhase);
|
||||
}
|
||||
simulators.add(simulator);
|
||||
@@ -87,4 +93,8 @@ public class YAPIONFormatSimulatorLoader implements SimulatorLoader {
|
||||
file.delete();
|
||||
return Optional.of(simulators);
|
||||
}
|
||||
|
||||
private double requireDouble(Map<?, ?> element, String key) {
|
||||
return ((Number) element.get(key)).doubleValue();
|
||||
}
|
||||
}
|
||||
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2026 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.bausystem.features.slaves.laufbau;
|
||||
|
||||
import de.steamwar.bausystem.config.ConfigStore;
|
||||
import de.steamwar.bausystem.config.VersionedConfig;
|
||||
import de.steamwar.bausystem.features.slaves.laufbau.converter.LaufbauConfigV1ToV2Converter;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* The current laufbau config of a player. It is stored as JSON, fields missing
|
||||
* in the stored JSON keep the default value of their initializer, so adding a
|
||||
* new field does not need a new version.
|
||||
* <p>
|
||||
* When a field gets removed, renamed or its meaning changes, copy this class
|
||||
* to LaufbauConfigV{@link #VERSION} (without the {@link #STORE}), increase {@link #VERSION}, write a
|
||||
* {@link de.steamwar.bausystem.config.ConfigConverter} from the copy to
|
||||
* this class and register it in the {@link #STORE}.
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class LaufbauConfig implements VersionedConfig {
|
||||
|
||||
public static final int VERSION = 2;
|
||||
|
||||
/**
|
||||
* LaufbauConfigV1 is stored as Base64 of gzipped YAPION, the current version as JSON
|
||||
*/
|
||||
public static final ConfigStore<LaufbauConfig> STORE = new ConfigStore<>(LaufbauConfig.class, VERSION, LaufbauConfig::new)
|
||||
.legacy(s -> !s.startsWith("{"), LaufbauConfigV1::parse)
|
||||
.converter(new LaufbauConfigV1ToV2Converter())
|
||||
.userConfig("bausystem-laufbau")
|
||||
.removeIf(config -> config.getDeactivated().isEmpty());
|
||||
|
||||
@Setter(AccessLevel.NONE)
|
||||
protected int version = VERSION;
|
||||
|
||||
/**
|
||||
* Identifiers of the deactivated {@link BlockBoundingBox}es, see {@link LaufbauUtils#identifier(BlockBoundingBox)}
|
||||
*/
|
||||
protected Set<String> deactivated = new HashSet<>();
|
||||
}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2026 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.bausystem.features.slaves.laufbau;
|
||||
|
||||
import de.steamwar.bausystem.config.VersionedConfig;
|
||||
import de.steamwar.bausystem.config.legacy.YapionReader;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Base64;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
/**
|
||||
* The legacy laufbau config that was stored as Base64 of the gzipped YAPION,
|
||||
* an object with the deactivated identifiers as keys.
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Deprecated
|
||||
public class LaufbauConfigV1 implements VersionedConfig {
|
||||
|
||||
public static final int VERSION = 1;
|
||||
|
||||
@Setter(AccessLevel.NONE)
|
||||
protected int version = VERSION;
|
||||
|
||||
protected Set<String> deactivated = new HashSet<>();
|
||||
|
||||
public static LaufbauConfigV1 parse(String base64) {
|
||||
String yapion;
|
||||
try (InputStream inputStream = new GZIPInputStream(new ByteArrayInputStream(Base64.getDecoder().decode(base64)))) {
|
||||
yapion = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
LaufbauConfigV1 config = new LaufbauConfigV1();
|
||||
config.deactivated.addAll(YapionReader.parse(yapion).keySet());
|
||||
return config;
|
||||
}
|
||||
}
|
||||
+5
-48
@@ -20,63 +20,22 @@
|
||||
package de.steamwar.bausystem.features.slaves.laufbau;
|
||||
|
||||
import de.steamwar.bausystem.BauSystem;
|
||||
import de.steamwar.core.SWPlayer;
|
||||
import de.steamwar.inventory.SWItem;
|
||||
import de.steamwar.sql.UserConfig;
|
||||
import lombok.Cleanup;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import yapion.hierarchy.output.StreamOutput;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
import yapion.parser.YAPIONParser;
|
||||
import yapion.parser.options.StreamOptions;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
@UtilityClass
|
||||
public class LaufbauUtils {
|
||||
|
||||
public static class LaufbauComponent implements SWPlayer.Component {
|
||||
|
||||
private YAPIONObject yapionObject = new YAPIONObject();
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void onMount(SWPlayer player) {
|
||||
String config = UserConfig.getConfig(player.getPlayer().getUniqueId(), "bausystem-laufbau");
|
||||
if (config == null) {
|
||||
return;
|
||||
}
|
||||
byte[] bytes = Base64.getDecoder().decode(config);
|
||||
@Cleanup GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(bytes));
|
||||
yapionObject = new YAPIONParser(gzipInputStream, new StreamOptions().stopOnStreamEnd(true)).parse().result();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void onUnmount(SWPlayer player) {
|
||||
if (yapionObject.isEmpty()) {
|
||||
UserConfig.removePlayerConfig(player.getPlayer().getUniqueId(), "bausystem-laufbau");
|
||||
return;
|
||||
}
|
||||
@Cleanup ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||
@Cleanup GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
|
||||
yapionObject.toYAPION(new StreamOutput(gzipOutputStream)).close();
|
||||
UserConfig.updatePlayerConfig(player.getPlayer().getUniqueId(), "bausystem-laufbau", Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray()));
|
||||
}
|
||||
}
|
||||
|
||||
public static Cuboid pixelCuboid(double pixelX, double pixelY, double pixelZ, double pixelDX, double pixelDY, double pixelDZ) {
|
||||
return new Cuboid(pixelToBlock(pixelX), pixelToBlock(pixelY), pixelToBlock(pixelZ), pixelToBlock(pixelDX), pixelToBlock(pixelDY), pixelToBlock(pixelDZ));
|
||||
}
|
||||
@@ -123,7 +82,7 @@ public class LaufbauUtils {
|
||||
return false;
|
||||
}
|
||||
String identifier = identifier(bb);
|
||||
return SWPlayer.of(p).getComponentOrDefault(LaufbauComponent.class, LaufbauComponent::new).yapionObject.containsKey(identifier);
|
||||
return LaufbauConfig.STORE.get(p).getDeactivated().contains(identifier);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@@ -132,11 +91,9 @@ public class LaufbauUtils {
|
||||
return;
|
||||
}
|
||||
String identifier = identifier(bb);
|
||||
YAPIONObject yapionObject = SWPlayer.of(p).getComponentOrDefault(LaufbauComponent.class, LaufbauComponent::new).yapionObject;
|
||||
if (yapionObject.containsKey(identifier)) {
|
||||
yapionObject.remove(identifier);
|
||||
} else {
|
||||
yapionObject.put(identifier, new YAPIONObject());
|
||||
Set<String> deactivated = LaufbauConfig.STORE.get(p).getDeactivated();
|
||||
if (!deactivated.remove(identifier)) {
|
||||
deactivated.add(identifier);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2026 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.bausystem.features.slaves.laufbau.converter;
|
||||
|
||||
import de.steamwar.bausystem.config.ConfigConverter;
|
||||
import de.steamwar.bausystem.features.slaves.laufbau.LaufbauConfig;
|
||||
import de.steamwar.bausystem.features.slaves.laufbau.LaufbauConfigV1;
|
||||
|
||||
@Deprecated
|
||||
public class LaufbauConfigV1ToV2Converter implements ConfigConverter<LaufbauConfigV1, LaufbauConfig> {
|
||||
|
||||
@Override
|
||||
public int version() {
|
||||
return LaufbauConfigV1.VERSION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LaufbauConfig convert(LaufbauConfigV1 old) {
|
||||
LaufbauConfig config = new LaufbauConfig();
|
||||
config.getDeactivated().addAll(old.getDeactivated());
|
||||
return config;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -35,8 +35,8 @@ public class SmartPlaceCommand extends SWCommand {
|
||||
|
||||
@Register(description = {"SMART_PLACE_HELP", "SMART_PLACE_INFO"})
|
||||
public void genericToggle(Player p) {
|
||||
boolean smartPlace = Config.getInstance().get(p).getPlainValueOrDefault("smartPlace", false);
|
||||
Config.getInstance().get(p).put("smartPlace", !smartPlace);
|
||||
boolean smartPlace = Config.STORE.get(p).isSmartPlace();
|
||||
Config.STORE.get(p).setSmartPlace(!smartPlace);
|
||||
if (!smartPlace) {
|
||||
SWUtils.sendToActionbar(p, BauSystem.MESSAGE.parse("SMART_PLACE_ENABLE", p));
|
||||
BauSystem.MESSAGE.send("SMART_PLACE_INFO", p);
|
||||
|
||||
+3
-3
@@ -87,7 +87,7 @@ public class SmartPlaceListener implements Listener {
|
||||
public SmartPlaceListener() {
|
||||
TinyProtocol.instance.addFilter(ServerboundUseItemOnPacket.class, (player, packet) -> {
|
||||
if (!Permission.BUILD.hasPermission(player)) return packet;
|
||||
if (!Config.getInstance().get(player).getPlainValueOrDefault("smartPlace", false)) return packet;
|
||||
if (!Config.STORE.get(player).isSmartPlace()) return packet;
|
||||
RayTraceResult rayTraceResult = player.rayTraceBlocks(6);
|
||||
Block block = rayTraceResult != null ? rayTraceResult.getHitBlock() : null;
|
||||
BlockFace blockFace = rayTraceResult != null ? rayTraceResult.getHitBlockFace() : null;
|
||||
@@ -127,7 +127,7 @@ public class SmartPlaceListener implements Listener {
|
||||
@EventHandler
|
||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
|
||||
if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("smartPlace", false)) return;
|
||||
if (!Config.STORE.get(event.getPlayer()).isSmartPlace()) return;
|
||||
WAS_EXECUTED.add(event.getPlayer());
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return;
|
||||
if (event.getPlayer().getGameMode() == GameMode.SPECTATOR) return;
|
||||
@@ -146,7 +146,7 @@ public class SmartPlaceListener implements Listener {
|
||||
@EventHandler
|
||||
public void onBlockPlace(BlockPlaceEvent event) {
|
||||
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
|
||||
if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("smartPlace", false)) return;
|
||||
if (!Config.STORE.get(event.getPlayer()).isSmartPlace()) return;
|
||||
if (!SMART_PLACING.contains(event.getPlayer())) {
|
||||
if (CONTAINERS.contains(event.getBlockAgainst().getType())) {
|
||||
SoundGroup soundGroup = event.getBlockPlaced().getBlockData().getSoundGroup();
|
||||
|
||||
+3
-6
@@ -35,18 +35,15 @@ public class BlockCounter {
|
||||
public final Map<Region, BlockCount> blockCountMap = new HashMap<>();
|
||||
|
||||
public boolean isActive(final Player p) {
|
||||
if (!Config.getInstance().get(p).containsKey("blockCounter")) {
|
||||
return false;
|
||||
}
|
||||
return Config.getInstance().get(p).getPlainValue("blockCounter");
|
||||
return Config.STORE.get(p).isBlockCounter();
|
||||
}
|
||||
|
||||
public void enable(final Player p) {
|
||||
Config.getInstance().get(p).put("blockCounter", true);
|
||||
Config.STORE.get(p).setBlockCounter(true);
|
||||
}
|
||||
|
||||
public void disable(final Player p) {
|
||||
Config.getInstance().get(p).put("blockCounter", false);
|
||||
Config.STORE.get(p).setBlockCounter(false);
|
||||
}
|
||||
|
||||
public String getMessage(Player player, int count, int tntCount, long tick, long lastTick) {
|
||||
|
||||
+1
-4
@@ -36,13 +36,10 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Transformation;
|
||||
import org.joml.Quaternionf;
|
||||
import org.joml.Vector3f;
|
||||
import yapion.hierarchy.types.YAPIONValue;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static de.steamwar.bausystem.features.util.TNTClickListener.TNT_CLICK_DETAILS;
|
||||
|
||||
/**
|
||||
* Wrapper for the rendering of a record bundle
|
||||
*/
|
||||
@@ -102,7 +99,7 @@ public class TraceEntity extends RBlockDisplay {
|
||||
* @param player the player the message should be printed for
|
||||
*/
|
||||
public void printIntoChat(Player player) {
|
||||
if (!Config.getInstance().get(player).getOrSetDefault(TNT_CLICK_DETAILS, new YAPIONValue<>(true)).asBoolean().orElse(true)) {
|
||||
if (!Config.STORE.get(player).isTntClickDetails()) {
|
||||
return;
|
||||
}
|
||||
TNTPoint representative = records.get(0);
|
||||
|
||||
+4
-5
@@ -30,7 +30,6 @@ import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
|
||||
@Linked
|
||||
public class NightVisionCommand extends SWCommand implements Listener {
|
||||
@@ -41,15 +40,15 @@ public class NightVisionCommand extends SWCommand implements Listener {
|
||||
|
||||
@Register(description = "NIGHT_VISION_HELP")
|
||||
public void genericCommand(Player p) {
|
||||
YAPIONObject yapionObject = Config.getInstance().get(p);
|
||||
boolean value = !yapionObject.getBooleanOrDefault("nightvision", false);
|
||||
yapionObject.put("nightvision", value);
|
||||
Config config = Config.STORE.get(p);
|
||||
boolean value = !config.isNightVision();
|
||||
config.setNightVision(value);
|
||||
setNightVision(p, value);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
setNightVision(event.getPlayer(), Config.getInstance().get(event.getPlayer()).getBooleanOrDefault("nightvision", false));
|
||||
setNightVision(event.getPlayer(), Config.STORE.get(event.getPlayer()).isNightVision());
|
||||
}
|
||||
|
||||
private void setNightVision(Player p, boolean value) {
|
||||
|
||||
+5
-9
@@ -32,26 +32,22 @@ import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
import yapion.hierarchy.types.YAPIONValue;
|
||||
|
||||
@Linked
|
||||
public class TNTClickListener extends SWCommand implements Listener {
|
||||
|
||||
public static final String TNT_CLICK_DETAILS = "tnt_click_details";
|
||||
|
||||
public TNTClickListener() {
|
||||
super("tntdetails");
|
||||
}
|
||||
|
||||
@Register(description = "TNT_DETAILS_COMMAND")
|
||||
public void toggle(Player player) {
|
||||
YAPIONObject yapionObject = Config.getInstance().get(player);
|
||||
if (yapionObject.getOrSetDefault(TNT_CLICK_DETAILS, new YAPIONValue<>(true)).asBoolean().orElse(true)) {
|
||||
yapionObject.put(TNT_CLICK_DETAILS, false);
|
||||
Config config = Config.STORE.get(player);
|
||||
if (config.isTntClickDetails()) {
|
||||
config.setTntClickDetails(false);
|
||||
BauSystem.MESSAGE.send("TNT_DETAILS_OFF", player);
|
||||
} else {
|
||||
yapionObject.put(TNT_CLICK_DETAILS, true);
|
||||
config.setTntClickDetails(true);
|
||||
BauSystem.MESSAGE.send("TNT_DETAILS_ON", player);
|
||||
}
|
||||
}
|
||||
@@ -60,7 +56,7 @@ public class TNTClickListener extends SWCommand implements Listener {
|
||||
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
||||
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
|
||||
if (event.getHand() != EquipmentSlot.HAND) return;
|
||||
if (!Config.getInstance().get(event.getPlayer()).getOrSetDefault(TNT_CLICK_DETAILS, new YAPIONValue<>(true)).asBoolean().orElse(true)) {
|
||||
if (!Config.STORE.get(event.getPlayer()).isTntClickDetails()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ import lombok.Getter;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@@ -56,27 +55,22 @@ public class Warp {
|
||||
warpMap.put(name, this);
|
||||
}
|
||||
|
||||
public Warp(String name, YAPIONObject object) {
|
||||
public Warp(String name, WorldData.WarpEntry warp) {
|
||||
this.name = name;
|
||||
double x = object.getPlainValue("x");
|
||||
double y = object.getPlainValue("y");
|
||||
double z = object.getPlainValue("z");
|
||||
float yaw = object.getPlainValue("yaw");
|
||||
float pitch = object.getPlainValue("pitch");
|
||||
location = new Location(Bukkit.getWorlds().get(0), x, y, z, yaw, pitch);
|
||||
mat = Material.getMaterial(object.getPlainValue("material"));
|
||||
location = new Location(Bukkit.getWorlds().get(0), warp.getX(), warp.getY(), warp.getZ(), warp.getYaw(), warp.getPitch());
|
||||
mat = Material.getMaterial(warp.getMaterial());
|
||||
warpMap.put(name, this);
|
||||
}
|
||||
|
||||
public YAPIONObject output() {
|
||||
YAPIONObject yapionObject = new YAPIONObject();
|
||||
yapionObject.add("x", location.getX());
|
||||
yapionObject.add("y", location.getY());
|
||||
yapionObject.add("z", location.getZ());
|
||||
yapionObject.add("yaw", location.getYaw());
|
||||
yapionObject.add("pitch", location.getPitch());
|
||||
yapionObject.add("material", mat.toString());
|
||||
return yapionObject;
|
||||
public WorldData.WarpEntry output() {
|
||||
WorldData.WarpEntry warp = new WorldData.WarpEntry();
|
||||
warp.setX(location.getX());
|
||||
warp.setY(location.getY());
|
||||
warp.setZ(location.getZ());
|
||||
warp.setYaw(location.getYaw());
|
||||
warp.setPitch(location.getPitch());
|
||||
warp.setMaterial(mat.toString());
|
||||
return warp;
|
||||
}
|
||||
|
||||
public static Set<String> getWarpNames() {
|
||||
@@ -101,7 +95,7 @@ public class Warp {
|
||||
|
||||
public void delete() {
|
||||
warpMap.remove(name);
|
||||
WorldData.getWarpData().remove(name);
|
||||
WorldData.STORE.get().getWarps().remove(name);
|
||||
}
|
||||
|
||||
public void teleport(Player player) {
|
||||
|
||||
@@ -34,9 +34,9 @@ import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.chat.HoverEvent;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.entity.Player;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
|
||||
@Linked
|
||||
public class WarpCommand extends SWCommand implements Disable, Enable {
|
||||
@@ -135,17 +135,15 @@ public class WarpCommand extends SWCommand implements Disable, Enable {
|
||||
|
||||
@Override
|
||||
public void enable() {
|
||||
WorldData.getWarpData().forEach((name, yapionAnyType) -> {
|
||||
new Warp(name, (YAPIONObject) yapionAnyType);
|
||||
});
|
||||
WorldData.STORE.get().getWarps().forEach(Warp::new);
|
||||
Warp.enable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disable() {
|
||||
YAPIONObject yapionObject = WorldData.getWarpData();
|
||||
Map<String, WorldData.WarpEntry> warps = WorldData.STORE.get().getWarps();
|
||||
for (Warp warp : Warp.getWarps()) {
|
||||
yapionObject.add(warp.getName(), warp.output());
|
||||
warps.put(warp.getName(), warp.output());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user