Add LaufbauSettings gui working Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
Ursprung
5095decb37
Commit
c878a6a183
@ -1127,12 +1127,15 @@ LAUFBAU_STATE_FILTERING_TRACES = Traces filtern
|
||||
LAUFBAU_STATE_PROCESSING_TRACES = Traces verbinden
|
||||
LAUFBAU_STATE_EXPANDING_TRACES = Traces aufblähen
|
||||
LAUFBAU_STATE_SPLITTING_POINTS = Punkte trennen
|
||||
LAUFBAU_STATE_SHRINKING_POINTS = Punkte ausdünnen
|
||||
LAUFBAU_STATE_CREATING_INNER_BLOCKS = Innenraum füllen
|
||||
LAUFBAU_STATE_CREATING_OUTER_BLOCKS = Mantel bauen
|
||||
LAUFBAU_SIMPLE_PROGRESS = §e{0}§8: §e{1}§8/§e{2}
|
||||
LAUFBAU_DONE = §aZuende gebaut
|
||||
|
||||
LAUFBAU_SETTING_GUI_NAME = §eLaufbau
|
||||
LAUFBAU_SETTINGS_GUI_NAME = §eLaufbau
|
||||
LAUFBAU_SETTINGS_ACTIVE = §aAktiv
|
||||
LAUFBAU_SETTINGS_INACTIVE = §cInaktiv
|
||||
|
||||
LAUFBAU_BLOCK_GRASS_PATH = §eGrass Path
|
||||
LAUFBAU_BLOCK_SOUL_SAND = §eSoul Sand
|
||||
|
@ -31,6 +31,7 @@ import org.bukkit.util.Vector;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class Laufbau {
|
||||
|
||||
@ -48,12 +49,12 @@ public class Laufbau {
|
||||
private CreatingInnerBlocksState creatingInnerBlocksState = null;
|
||||
private CreatingOuterBlocksState creatingOuterBlocksState = null;
|
||||
|
||||
private List<BlockBoundingBox> elements = new ArrayList<>(BlockBoundingBox.elements);
|
||||
private List<BlockBoundingBox> elements;
|
||||
|
||||
@Getter
|
||||
private EditSession editSession;
|
||||
|
||||
public Laufbau(Location pos1, Location pos2, boolean preferingBlastResistance) {
|
||||
public Laufbau(Player player, Location pos1, Location pos2, boolean preferingBlastResistance) {
|
||||
this.world = pos1.getWorld();
|
||||
this.pos1 = new Location(world, Math.min(pos1.getBlockX(), pos2.getBlockX()), Math.min(pos1.getBlockY(), pos2.getBlockY()), Math.min(pos1.getBlockZ(), pos2.getBlockZ()));
|
||||
this.pos2 = new Location(world, Math.max(pos1.getBlockX(), pos2.getBlockX()), Math.max(pos1.getBlockY(), pos2.getBlockY()), Math.max(pos1.getBlockZ(), pos2.getBlockZ()));
|
||||
@ -64,6 +65,9 @@ public class Laufbau {
|
||||
|
||||
editSession = WorldEditUtils.getEditSession(world);
|
||||
|
||||
elements = BlockBoundingBox.elements.stream().filter(blockBoundingBox -> {
|
||||
return !LaufbauUtils.isDeactivated(player, blockBoundingBox);
|
||||
}).collect(Collectors.toList());
|
||||
if (preferingBlastResistance) {
|
||||
elements.sort((o1, o2) -> {
|
||||
int compared = Double.compare(o1.blockData.getMaterial().getBlastResistance(), o2.blockData.getMaterial().getBlastResistance());
|
||||
|
@ -57,7 +57,7 @@ public class LaufbauCommand extends SWCommand {
|
||||
BauSystem.MESSAGE.send("LAUFBAU_NO_WORLDEDIT", player);
|
||||
return;
|
||||
}
|
||||
Laufbau laufbau = new Laufbau(selection.getKey(), selection.getValue(), preferingBlastResistance);
|
||||
Laufbau laufbau = new Laufbau(player, selection.getKey(), selection.getValue(), preferingBlastResistance);
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
@ -20,8 +20,10 @@
|
||||
package de.steamwar.bausystem.features.slaves.laufbau;
|
||||
|
||||
import de.steamwar.bausystem.BauSystem;
|
||||
import de.steamwar.inventory.SWItem;
|
||||
import de.steamwar.inventory.SWListInv;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -32,13 +34,31 @@ public class LaufbauSettings {
|
||||
|
||||
public LaufbauSettings(Player p) {
|
||||
this.p = p;
|
||||
open();
|
||||
}
|
||||
|
||||
public void open() {
|
||||
List<SWListInv.SWListEntry<BlockBoundingBox>> list = new ArrayList<>();
|
||||
for (BlockBoundingBox bb : BlockBoundingBox.elements) {
|
||||
if (bb.getSwItem() == null) continue;
|
||||
list.add(new SWListInv.SWListEntry<>(LaufbauUtils.translateItem(bb.getSwItem(), p), bb));
|
||||
SWItem swItem = LaufbauUtils.translateItem(bb.getSwItem(), p);
|
||||
ItemMeta itemMeta = swItem.getItemMeta();
|
||||
if (itemMeta.getLore() != null) {
|
||||
List<String> lore = itemMeta.getLore();
|
||||
lore.add("");
|
||||
lore.add(BauSystem.MESSAGE.parse(LaufbauUtils.isDeactivated(p, bb) ? "LAUFBAU_SETTINGS_INACTIVE" : "LAUFBAU_SETTINGS_ACTIVE", p));
|
||||
itemMeta.setLore(lore);
|
||||
} else {
|
||||
List<String> lore = new ArrayList<>();
|
||||
lore.add(BauSystem.MESSAGE.parse(LaufbauUtils.isDeactivated(p, bb) ? "LAUFBAU_SETTINGS_INACTIVE" : "LAUFBAU_SETTINGS_ACTIVE", p));
|
||||
itemMeta.setLore(lore);
|
||||
}
|
||||
SWListInv<BlockBoundingBox> inv = new SWListInv<>(p, BauSystem.MESSAGE.parse("LAUFBAU_SETTING_GUI_NAME", p), false, list, (clickType, blockBoundingBox) -> {
|
||||
p.sendMessage(LaufbauUtils.identifier(blockBoundingBox.getSwItem()));
|
||||
swItem.setItemMeta(itemMeta);
|
||||
list.add(new SWListInv.SWListEntry<>(swItem, bb));
|
||||
}
|
||||
SWListInv<BlockBoundingBox> inv = new SWListInv<>(p, BauSystem.MESSAGE.parse("LAUFBAU_SETTINGS_GUI_NAME", p), false, list, (clickType, blockBoundingBox) -> {
|
||||
LaufbauUtils.toggle(p, blockBoundingBox);
|
||||
open();
|
||||
});
|
||||
inv.open();
|
||||
}
|
||||
|
@ -20,19 +20,64 @@
|
||||
package de.steamwar.bausystem.features.slaves.laufbau;
|
||||
|
||||
import de.steamwar.bausystem.BauSystem;
|
||||
import de.steamwar.bausystem.linkage.LinkageType;
|
||||
import de.steamwar.bausystem.linkage.Linked;
|
||||
import de.steamwar.inventory.SWItem;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import de.steamwar.sql.UserConfig;
|
||||
import lombok.Cleanup;
|
||||
import lombok.SneakyThrows;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import yapion.hierarchy.output.StreamOutput;
|
||||
import yapion.hierarchy.types.YAPIONObject;
|
||||
import yapion.parser.YAPIONParser;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
@UtilityClass
|
||||
public class LaufbauUtils {
|
||||
@Linked(LinkageType.LISTENER)
|
||||
public class LaufbauUtils implements Listener {
|
||||
|
||||
private static Map<Player, YAPIONObject> yapionObjectMap = new HashMap<>();
|
||||
|
||||
@EventHandler
|
||||
@SneakyThrows
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
String config = UserConfig.getConfig(event.getPlayer().getUniqueId(), "bausystem-laufbau");
|
||||
if (config == null) {
|
||||
return;
|
||||
}
|
||||
byte[] bytes = Base64.getDecoder().decode(config);
|
||||
@Cleanup GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(bytes));
|
||||
YAPIONObject yapionObject = new YAPIONParser(gzipInputStream, true).parse().result();
|
||||
yapionObjectMap.put(event.getPlayer(), yapionObject);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@SneakyThrows
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
YAPIONObject yapionObject = yapionObjectMap.get(event.getPlayer());
|
||||
if (yapionObject == null) {
|
||||
return;
|
||||
}
|
||||
if (yapionObject.isEmpty()) {
|
||||
UserConfig.removePlayerConfig(event.getPlayer().getUniqueId(), "bausystem-laufbau");
|
||||
return;
|
||||
}
|
||||
@Cleanup ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||
@Cleanup GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
|
||||
yapionObject.toYAPION(new StreamOutput(gzipOutputStream)).close();
|
||||
UserConfig.updatePlayerConfig(event.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));
|
||||
@ -57,23 +102,51 @@ public class LaufbauUtils {
|
||||
});
|
||||
}
|
||||
|
||||
public static String identifier(SWItem item) {
|
||||
public static String identifier(BlockBoundingBox bb) {
|
||||
if (bb.getSwItem() == null) {
|
||||
return null;
|
||||
}
|
||||
SWItem item = bb.getSwItem();
|
||||
ItemMeta itemMeta = item.getItemMeta();
|
||||
List<String> lore = new ArrayList<>();
|
||||
if (itemMeta.getLore() != null) {
|
||||
lore = itemMeta.getLore()
|
||||
.stream()
|
||||
.map(s -> s.substring(8))
|
||||
.map(s -> {
|
||||
return s.replace("ATTACHMENT", "*")
|
||||
.replace("CONNECTION", "CON")
|
||||
.replace("FACING", "*")
|
||||
.replace("LAYERS", "*")
|
||||
.replace("SHAPE", "*");
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
String name = itemMeta.getDisplayName().substring(14);
|
||||
return name + "[" + String.join(",", lore) + "]";
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public static boolean isDeactivated(Player p, BlockBoundingBox bb) {
|
||||
if (bb.getSwItem() == null) {
|
||||
return false;
|
||||
}
|
||||
String identifier = identifier(bb);
|
||||
YAPIONObject yapionObject = yapionObjectMap.get(p);
|
||||
if (yapionObject == null) {
|
||||
return false;
|
||||
}
|
||||
return yapionObject.containsKey(identifier);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public static void toggle(Player p, BlockBoundingBox bb) {
|
||||
if (bb.getSwItem() == null) {
|
||||
return;
|
||||
}
|
||||
String identifier = identifier(bb);
|
||||
YAPIONObject yapionObject = yapionObjectMap.get(p);
|
||||
if (yapionObject == null) {
|
||||
yapionObject = new YAPIONObject();
|
||||
yapionObjectMap.put(p, yapionObject);
|
||||
}
|
||||
if (yapionObject.containsKey(identifier)) {
|
||||
yapionObject.remove(identifier);
|
||||
} else {
|
||||
yapionObject.put(identifier, new YAPIONObject());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -48,15 +48,15 @@ public class LanternBoundingBox implements Enable {
|
||||
List<Cuboid> cuboidList = new ArrayList<>();
|
||||
cuboidList.add(pixelCuboid(5, 0, 5, 6, 7, 6));
|
||||
cuboidList.add(pixelCuboid(6, 7, 6, 4, 2, 4));
|
||||
new BlockBoundingBox(lantern, cuboidList, createItem("LAUFBAU_BLOCK_LANTERN", Material.LANTERN, "LAUFBAU_HANGING"));
|
||||
new BlockBoundingBox(lantern, cuboidList, createItem("LAUFBAU_BLOCK_LANTERN", Material.LANTERN));
|
||||
}
|
||||
|
||||
public void hangingLantern() {
|
||||
Lantern lantern = (Lantern) Material.LANTERN.createBlockData();
|
||||
lantern.setHanging(false);
|
||||
lantern.setHanging(true);
|
||||
List<Cuboid> cuboidList = new ArrayList<>();
|
||||
cuboidList.add(pixelCuboid(5, 1, 5, 6, 7, 6));
|
||||
cuboidList.add(pixelCuboid(6, 8, 6, 4, 2, 4));
|
||||
new BlockBoundingBox(lantern, cuboidList, createItem("LAUFBAU_BLOCK_LANTERN", Material.LANTERN));
|
||||
new BlockBoundingBox(lantern, cuboidList, createItem("LAUFBAU_BLOCK_LANTERN", Material.LANTERN, "LAUFBAU_HANGING"));
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
package de.steamwar.bausystem.linkage;
|
||||
|
||||
import de.steamwar.bausystem.BauSystem;
|
||||
import de.steamwar.bausystem.configplayer.Config;
|
||||
import de.steamwar.bausystem.utils.FlatteningWrapper;
|
||||
import de.steamwar.bausystem.utils.NMSWrapper;
|
||||
import lombok.experimental.UtilityClass;
|
||||
@ -42,6 +43,7 @@ public class LinkageUtils {
|
||||
private Set<Field> fieldsToLink = new HashSet<>();
|
||||
|
||||
{
|
||||
objectMap.put(Config.class, Config.getInstance());
|
||||
objectMap.put(BauSystem.class, BauSystem.getInstance());
|
||||
objectMap.put(FlatteningWrapper.IFlatteningWrapper.class, FlatteningWrapper.impl);
|
||||
objectMap.put(NMSWrapper.INMSWrapper.class, NMSWrapper.impl);
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren