From 1e04cca2f8f5ba1c936ca84ce6ee05baef46b302 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Sat, 1 Jan 2022 16:42:00 +0100 Subject: [PATCH 01/23] Add Punishments Signed-off-by: Chaoscaot --- .../schematicsystem/commands/SchematicCommand.java | 9 +++++++++ .../schematicsystem/commands/SchematicCommandUtils.java | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java index be665e4..31bc672 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java @@ -181,12 +181,21 @@ public class SchematicCommand extends SWCommand { @Register("addmember") public void addMember(Player player, SchematicNode node, SteamwarUser... targets) { SteamwarUser user = getUser(player); + if(Punishment.isPunished(user, Punishment.PunishmentType.NoSchemSharing, punishment -> player.sendMessage(SchematicSystem.PREFIX + "§cDu darfst niemanden auf deine Schematics hinzufügen: §f§l" + punishment.getReason()))) { + return; + } if (node.getOwner() != user.getId()) { player.sendMessage(SchematicSystem.PREFIX + "§cDu kannst nur auf deine eigenen Sachen jemanden hinzufügen."); return; } List added = new ArrayList<>(); for (SteamwarUser target: targets) { + if(Punishment.isPunished(target, + Punishment.PunishmentType.NoSchemReceiving, + punishment -> player.sendMessage(SchematicSystem.PREFIX + "§c" + target.getUserName() + " darf nicht auf Schematics hinzugefügt werden."))) { + continue; + } + if (user.getId() == target.getId()) { player.sendMessage(SchematicSystem.PREFIX + "§cAlso bitte: Das ist deine eigene Schematic!"); continue; diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java index 8b4e551..9cc41f7 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java @@ -322,6 +322,11 @@ public class SchematicCommandUtils { public static void changeType(Player player, SchematicNode node, SchematicType type, SchematicCommand.Extend extend) { SteamwarUser user = getUser(player); + if(Punishment.isPunished(user, + Punishment.PunishmentType.NoSchemSubmitting, + punishment -> player.sendMessage(SchematicSystem.PREFIX + "§cDu darf keine Schematics einsenden: §f§l: " + punishment.getReason()))) { + return; + } if (node.getOwner() != user.getId()) { player.sendMessage(SchematicSystem.PREFIX + "§cDu kannst nur deine eigenen Schematics einsenden."); return; From e58ad971f6090636034d6ff9dcb3b1cc55a35d03 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Tue, 4 Jan 2022 14:15:28 +0100 Subject: [PATCH 02/23] Add Schem Download to Punishments Signed-off-by: Chaoscaot --- .../schematicsystem/commands/SchematicCommandUtils.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java index 9cc41f7..ad71001 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java @@ -311,6 +311,11 @@ public class SchematicCommandUtils { public static void download(Player player, SchematicNode node) { SteamwarUser user = getUser(player); + if(Punishment.isPunished(user, Punishment.PunishmentType.NoSchemSharing, punishment -> { + player.sendMessage(SchematicSystem.PREFIX + "§cDu darf keine Schematics Downloaden: §f§l" + punishment.getReason()); + })) { + return; + } if (node.getOwner() != user.getId()) { player.sendMessage("§cDu darfst nur deine eigenen Schematics herunterladen!"); return; From 1b18fe5a28788705e1fe0c9a91b3578f4e3a3b6f Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 16 Jan 2022 20:52:29 +0100 Subject: [PATCH 03/23] Hotfix SchematicCommand --- .../de/steamwar/schematicsystem/commands/SchematicCommand.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java index b50034f..8e3202b 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java @@ -317,6 +317,9 @@ public class SchematicCommand extends SWCommand { nodes.forEach(node -> { String br = node.generateBreadcrumbs(user); String displayName = br; + if (!nameList.isEmpty()) { + displayName = "§8" + br; + } for (String s : nameList) { displayName = displayName.replace(s, "§e§l" + s + "§8"); } From 9224d6f9a6bda9622e170b0fd740d15bc58c59c5 Mon Sep 17 00:00:00 2001 From: Chaos Date: Fri, 21 Jan 2022 13:48:07 +0100 Subject: [PATCH 04/23] Safe Node --- .../schematicsystem/SafeSchematicNode.java | 87 +++++++++++++++++++ pom.xml | 5 ++ 2 files changed, 92 insertions(+) create mode 100644 SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java new file mode 100644 index 0000000..9957695 --- /dev/null +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java @@ -0,0 +1,87 @@ +package de.steamwar.schematicsystem; + +import de.steamwar.schematicsystem.commands.SchematicCommandUtils; +import de.steamwar.sql.SchematicNode; +import de.steamwar.sql.SteamwarUser; +import lombok.NonNull; +import org.bukkit.Material; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class SafeSchematicNode { + + public static Result setParent(@NonNull SteamwarUser user, @NonNull SchematicNode node, SchematicNode newParent) { + if(newParent == null) { + if(SchematicNode.getSchematicsAccessibleByUser(user.getId(), 0) + .stream().map(SchematicNode::getName).anyMatch(s -> s.equalsIgnoreCase(node.getName()))) { + return Result.ALREADY_IN_DIRECTORY; + } + + node.setParent(0); + } else { + if(!newParent.isDir()) { + return Result.NOT_A_DIR; + } + + if(SchematicNode.getSchematicsAccessibleByUser(user.getId(), newParent.getParent()) + .stream().map(SchematicNode::getName).anyMatch(s -> s.equalsIgnoreCase(node.getName()))) { + return Result.ALREADY_IN_DIRECTORY; + } + + node.setParent(newParent.getId()); + } + return Result.DONE; + } + + public static Result setName(@NonNull SteamwarUser user, @NonNull SchematicNode node, @NonNull String name) { + if(invalidSchemName(name)) { + return Result.INVALID_NAME; + } + + if(SchematicNode.getSchematicsAccessibleByUser(user.getId(), node.getParent()).stream().map(SchematicNode::getName).anyMatch(s -> s.equalsIgnoreCase(name))) { + return Result.ALREADY_IN_DIRECTORY; + } + + node.setName(name); + return Result.DONE; + } + + public static Result setItem(@NonNull SteamwarUser user, @NonNull SchematicNode node, @NonNull Material material) { + + } + + private static final List FORBIDDEN_NAMES = Collections.unmodifiableList(Arrays.asList("public")); + public static boolean invalidSchemName(String name) { + if (name.isEmpty()) { + return true; + } + if(name.length() > 64) { + return true; + } + if (name.contains("/") || + name.contains("\\") || + name.contains("<") || + name.contains(">") || + name.contains("^") || + name.contains("°") || + name.contains("'") || + name.contains("\"") || + name.contains(" ")) { + return true; + } + return FORBIDDEN_NAMES.contains(name.toLowerCase()); + } + + public enum Result { + DONE, + NOT_A_DIR, + ALREADY_IN_DIRECTORY, + INVALID_NAME; + + public boolean isSuccessful() { + return this == DONE; + } + } +} diff --git a/pom.xml b/pom.xml index b1a8c5c..cc39eaa 100644 --- a/pom.xml +++ b/pom.xml @@ -45,5 +45,10 @@ system ${main.basedir}/lib/SpigotCore.jar + + org.projectlombok + lombok + 1.18.22 + \ No newline at end of file From 0591a1c5ccce7d3999e7ee9a1e328aba72fbb7b2 Mon Sep 17 00:00:00 2001 From: Chaos Date: Fri, 21 Jan 2022 20:47:29 +0100 Subject: [PATCH 05/23] Safe Schematic Node --- .../schematicsystem/SafeSchematicNode.java | 31 +++++++++++++------ .../schematicsystem/commands/GUI.java | 17 +++++++--- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java index 9957695..5e15684 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java @@ -1,10 +1,10 @@ package de.steamwar.schematicsystem; -import de.steamwar.schematicsystem.commands.SchematicCommandUtils; import de.steamwar.sql.SchematicNode; import de.steamwar.sql.SteamwarUser; +import lombok.AllArgsConstructor; import lombok.NonNull; -import org.bukkit.Material; +import org.bukkit.entity.Player; import java.util.Arrays; import java.util.Collections; @@ -13,6 +13,9 @@ import java.util.List; public class SafeSchematicNode { public static Result setParent(@NonNull SteamwarUser user, @NonNull SchematicNode node, SchematicNode newParent) { + if(user.getId() != node.getId()) { + return Result.NOT_OWNER; + } if(newParent == null) { if(SchematicNode.getSchematicsAccessibleByUser(user.getId(), 0) .stream().map(SchematicNode::getName).anyMatch(s -> s.equalsIgnoreCase(node.getName()))) { @@ -36,6 +39,10 @@ public class SafeSchematicNode { } public static Result setName(@NonNull SteamwarUser user, @NonNull SchematicNode node, @NonNull String name) { + if(user.getId() != node.getId()) { + return Result.NOT_OWNER; + } + if(invalidSchemName(name)) { return Result.INVALID_NAME; } @@ -48,10 +55,6 @@ public class SafeSchematicNode { return Result.DONE; } - public static Result setItem(@NonNull SteamwarUser user, @NonNull SchematicNode node, @NonNull Material material) { - - } - private static final List FORBIDDEN_NAMES = Collections.unmodifiableList(Arrays.asList("public")); public static boolean invalidSchemName(String name) { if (name.isEmpty()) { @@ -74,11 +77,19 @@ public class SafeSchematicNode { return FORBIDDEN_NAMES.contains(name.toLowerCase()); } + @AllArgsConstructor public enum Result { - DONE, - NOT_A_DIR, - ALREADY_IN_DIRECTORY, - INVALID_NAME; + DONE("No"), + NOT_A_DIR(SchematicSystem.PREFIX + "§cDie ausgewählte Schematic ist kein Ordner"), + ALREADY_IN_DIRECTORY(SchematicSystem.PREFIX + "§cDie Schematic gibt es bereits in diesem Ordner"), + INVALID_NAME(SchematicSystem.PREFIX + "§cDieser Name ist unzulässig"), + NOT_OWNER(SchematicSystem.PREFIX + "§cDu bist nicht der Besitzer dieser Schematic"); + + private String errorMessage; + + public void sendError(Player player) { + player.sendMessage(errorMessage); + } public boolean isSuccessful() { return this == DONE; diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java index ea47d1b..fbabed5 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java @@ -20,6 +20,7 @@ package de.steamwar.schematicsystem.commands; import de.steamwar.inventory.*; +import de.steamwar.schematicsystem.SafeSchematicNode; import de.steamwar.schematicsystem.SchematicSystem; import de.steamwar.sql.*; import org.bukkit.Material; @@ -102,8 +103,12 @@ public class GUI { inv.setItem(5, skull); inv.setItem(6, Material.ARROW, "§eVerschieben", clickType -> { SchematicSelector selector = new SchematicSelector(player, SchematicSelector.selectDirectory(), npar -> { - node.setParent(npar==null?null:npar.getId()); - info(player, SchematicNode.getSchematicNode(node.getId())); + SafeSchematicNode.Result result = SafeSchematicNode.setParent(user, node, npar); + if(result.isSuccessful()) { + info(player, SchematicNode.getSchematicNode(node.getId())); + } else { + result.sendError(player); + } }); selector.open(); }); @@ -112,10 +117,12 @@ public class GUI { SWAnvilInv anvilInv = new SWAnvilInv(player, node.getName() + " umbenennen", node.getName()); anvilInv.setItem(finalMat); anvilInv.setCallback(s -> { - if (!invalidSchemName(player, new String[]{s})) { - node.setName(s); + SafeSchematicNode.Result result = SafeSchematicNode.setName(user, node, s); + if(result.isSuccessful()) { + info(player, node); + } else { + result.sendError(player); } - info(player, node); }); anvilInv.open(); }); From d42c116f6011b7c7d5ddbae30d5a9d9ef7bf6875 Mon Sep 17 00:00:00 2001 From: Chaos Date: Fri, 21 Jan 2022 20:50:32 +0100 Subject: [PATCH 06/23] Safe Schematic Node --- .../schematicsystem/commands/SchematicCommand.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java index 8e3202b..c7c6d5e 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java @@ -24,6 +24,7 @@ import de.steamwar.command.SWCommandUtils; import de.steamwar.command.TypeMapper; import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SchematicSelector; +import de.steamwar.schematicsystem.SafeSchematicNode; import de.steamwar.schematicsystem.SchematicSystem; import de.steamwar.sql.*; import net.md_5.bungee.api.ChatColor; @@ -407,7 +408,11 @@ public class SchematicCommand extends SWCommand { player.sendMessage(SchematicSystem.PREFIX + "§cDas gibt nur Fehler, vertrau mir."); return; } - node.setParent(newNode.getId()); + SafeSchematicNode.Result result = SafeSchematicNode.setParent(user, node, newNode); + if(!result.isSuccessful()) { + result.sendError(player); + return; + } } player.sendMessage(SchematicSystem.PREFIX + "§7Die Schematic ist nun unter §e" + node.generateBreadcrumbs(user) + " §7zu finden"); } @@ -422,7 +427,11 @@ public class SchematicCommand extends SWCommand { if (invalidSchemName(player, new String[]{name})) { return; } - node.setName(name); + SafeSchematicNode.Result result = SafeSchematicNode.setName(user, node, name); + if(!result.isSuccessful()) { + result.sendError(player); + return; + } player.sendMessage(SchematicSystem.PREFIX + "§7Die Schematic heist nun §e" + node.generateBreadcrumbs(user)); } From 897fdba6bbe5bfe19551ddf099e9b7de45fc3c67 Mon Sep 17 00:00:00 2001 From: Chaos Date: Thu, 27 Jan 2022 21:17:50 +0100 Subject: [PATCH 07/23] Add a butt ton of Code for BauSystem --- .../commands/SchematicCommand.java | 9 ++- .../commands/SchematicCommandUtils.java | 21 +++++-- .../providers/BauSystemProvider.java | 56 +++++++++++++++++++ .../providers/impl/BauSystem1Provider.java | 28 ++++++++++ .../providers/impl/BauSystem2Provider.java | 31 ++++++++++ SchematicSystem_Core/src/plugin.yml | 1 + 6 files changed, 139 insertions(+), 7 deletions(-) create mode 100644 SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/BauSystemProvider.java create mode 100644 SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem1Provider.java create mode 100644 SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem2Provider.java diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java index 0f8d83b..c9605f5 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java @@ -24,6 +24,7 @@ import de.steamwar.command.TypeMapper; import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SchematicSelector; import de.steamwar.schematicsystem.SchematicSystem; +import de.steamwar.schematicsystem.providers.BauSystemProvider; import de.steamwar.sql.*; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; @@ -134,11 +135,17 @@ public class SchematicCommand extends SWCommand { @Register("save") @Register("s") public void saveSchem(Player player, @Mapper("dirStringMapper") String name) { + SteamwarUser user = getUser(player); + if((Punishment.isPunished(user, Punishment.PunishmentType.NoSchemReceiving, punishment -> player.sendMessage(SchematicSystem.PREFIX + "§cDu darfst hier keine Schematics laden")) || + Punishment.isPunished(SteamwarUser.get(BauSystemProvider.use(BauSystemProvider::getOwner, 0)), Punishment.PunishmentType.NoSchemSharing, punishment -> player.sendMessage(SchematicSystem.PREFIX + "§cAuf diesem Bau kannst du keine Schematics speichern"))) && + Boolean.TRUE.equals(BauSystemProvider.use(bauSystemProvider -> bauSystemProvider.getOwner() != user.getId(), false))) { + player.sendMessage(SchematicSystem.PREFIX + "§cDu darfst hier keine Schematics speichern"); + return; + } if (name.endsWith("/")) { player.sendMessage(SchematicSystem.PREFIX + "§cDu must auch einen Namen für die Schematic nach dem Ordner angeben"); return; } - SteamwarUser user = getUser(player); if (name.startsWith("/")) name = name.substring(1); String[] layers = name.split("/"); if (invalidSchemName(player, layers)) return; diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java index ad71001..43e56e4 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java @@ -25,6 +25,7 @@ import de.steamwar.inventory.SWItem; import de.steamwar.schematicsystem.AutoCheckResult; import de.steamwar.schematicsystem.CheckSchemType; import de.steamwar.schematicsystem.SchematicSystem; +import de.steamwar.schematicsystem.providers.BauSystemProvider; import de.steamwar.sql.*; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; @@ -45,7 +46,8 @@ public class SchematicCommandUtils { private static final List PUBLIC_TOGGLED = new ArrayList<>(); private static final List FORBIDDEN_NAMES = Collections.unmodifiableList(Arrays.asList("public")); - private SchematicCommandUtils() {} + private SchematicCommandUtils() { + } public static boolean invalidSchemName(Player player, String[] layers) { for (String layer : layers) { @@ -65,7 +67,7 @@ public class SchematicCommandUtils { player.sendMessage(SchematicSystem.PREFIX + "§cDer angegebene Schematicname enthält verbotene Zeichen"); return true; } - if(FORBIDDEN_NAMES.contains(layer.toLowerCase())) { + if (FORBIDDEN_NAMES.contains(layer.toLowerCase())) { player.sendMessage(SchematicSystem.PREFIX + "§cDer Pfad darf nicht \"§l" + layer + "§c\" enthalten"); return true; } @@ -236,7 +238,7 @@ public class SchematicCommandUtils { base.addExtra(rename); } - TextComponent delete = new TextComponent("[" + (node.getOwner()==user.getId()?"Löschen":"Entfernen") + "] "); + TextComponent delete = new TextComponent("[" + (node.getOwner() == user.getId() ? "Löschen" : "Entfernen") + "] "); delete.setColor(ChatColor.DARK_RED); delete.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText("§e" + (node.isDir() ? "Ordner" : "Schematic") + " Löschen"))); delete.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/schem delete " + node.generateBreadcrumbs(user))); @@ -292,6 +294,13 @@ public class SchematicCommandUtils { } public static void loadSchem(Player player, SchematicNode node) { + SteamwarUser user = getUser(player); + if ((Punishment.isPunished(user, Punishment.PunishmentType.NoSchemSharing, punishment -> player.sendMessage(SchematicSystem.PREFIX + "§cDu darfst hier keine Schematics laden")) && + Boolean.TRUE.equals(BauSystemProvider.use(bauSystemProvider -> bauSystemProvider.getOwner() != user.getId(), false))) || + (Boolean.TRUE.equals(BauSystemProvider.use(bauSystemProvider -> bauSystemProvider.getOwner() != user.getId(), false)) && + Punishment.isPunished(BauSystemProvider.use(bauSystemProvider -> SteamwarUser.get(bauSystemProvider.getOwner()), user), Punishment.PunishmentType.NoSchemSharing, punishment -> player.sendMessage(SchematicSystem.PREFIX + "§cDu kannst auf diesem Bau keine Schematics laden")))) { + return; + } if (node.isDir()) { player.sendMessage(SchematicSystem.PREFIX + "§cDu kannst keine Ordner Laden"); return; @@ -311,7 +320,7 @@ public class SchematicCommandUtils { public static void download(Player player, SchematicNode node) { SteamwarUser user = getUser(player); - if(Punishment.isPunished(user, Punishment.PunishmentType.NoSchemSharing, punishment -> { + if (Punishment.isPunished(user, Punishment.PunishmentType.NoSchemSharing, punishment -> { player.sendMessage(SchematicSystem.PREFIX + "§cDu darf keine Schematics Downloaden: §f§l" + punishment.getReason()); })) { return; @@ -327,7 +336,7 @@ public class SchematicCommandUtils { public static void changeType(Player player, SchematicNode node, SchematicType type, SchematicCommand.Extend extend) { SteamwarUser user = getUser(player); - if(Punishment.isPunished(user, + if (Punishment.isPunished(user, Punishment.PunishmentType.NoSchemSubmitting, punishment -> player.sendMessage(SchematicSystem.PREFIX + "§cDu darf keine Schematics einsenden: §f§l: " + punishment.getReason()))) { return; @@ -342,7 +351,7 @@ public class SchematicCommandUtils { return; } - if(!type.isAssignable()) { + if (!type.isAssignable()) { player.sendMessage(SchematicSystem.PREFIX + "§cZu diesem Typen können keine Schematics geändert werden."); } diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/BauSystemProvider.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/BauSystemProvider.java new file mode 100644 index 0000000..fa3120c --- /dev/null +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/BauSystemProvider.java @@ -0,0 +1,56 @@ +package de.steamwar.schematicsystem.providers; + +import de.steamwar.schematicsystem.providers.impl.*; +import org.bukkit.Bukkit; + +import java.util.function.Consumer; +import java.util.function.Function; + +public interface BauSystemProvider { + + static T use(Function function, T def) { + return BauSystemProviderImplementor.use(function, def); + } + + static void use(Consumer consumer) { + BauSystemProviderImplementor.use(consumer); + } + + int getOwner(); + + class BauSystemProviderImplementor { + private BauSystemProviderImplementor() {} + + static boolean hasBausystem; + static BauSystemProvider bauSystemProvider; + + static { + try { + Class.forName("de.steamwar.bausystem.BauSystem"); + hasBausystem = true; + switch (Bukkit.getPluginManager().getPlugin("BauSystem").getDescription().getVersion()) { + case "2.0": + bauSystemProvider = new BauSystem2Provider(); + break; + case "1.0": + bauSystemProvider = new BauSystem1Provider(); + break; + default: + hasBausystem = false; + } + } catch (Exception e) { + hasBausystem = false; + } + } + + static T use(Function function, T def) { + if(!hasBausystem) return def; + return function.apply(bauSystemProvider); + } + + static void use(Consumer consumer) { + if(!hasBausystem) return; + consumer.accept(bauSystemProvider); + } + } +} diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem1Provider.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem1Provider.java new file mode 100644 index 0000000..50c966c --- /dev/null +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem1Provider.java @@ -0,0 +1,28 @@ +package de.steamwar.schematicsystem.providers.impl; + +import de.steamwar.schematicsystem.providers.BauSystemProvider; + +import java.lang.reflect.Method; + +public class BauSystem1Provider implements BauSystemProvider { + + private static final Method BAUSYSTEM_GET_OWNER_ID; + + static { + try { + Class bausystem = Class.forName("de.steamwar.bausystem.BauSystem"); + BAUSYSTEM_GET_OWNER_ID = bausystem.getDeclaredMethod("getOwnerID"); + } catch (Exception e) { + throw new SecurityException(e); + } + } + + @Override + public int getOwner() { + try { + return (int) BAUSYSTEM_GET_OWNER_ID.invoke(null); + } catch (Exception e) { + throw new SecurityException(e); + } + } +} diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem2Provider.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem2Provider.java new file mode 100644 index 0000000..7e807cb --- /dev/null +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem2Provider.java @@ -0,0 +1,31 @@ +package de.steamwar.schematicsystem.providers.impl; + +import de.steamwar.schematicsystem.providers.BauSystemProvider; + +import java.lang.reflect.Method; + +public class BauSystem2Provider implements BauSystemProvider { + + private static final Method BAU_SERVER_GET_OWNER_ID; + private static final Object BAU_SERVER_INSTANCE; + + static { + try { + Class bauServer = Class.forName("de.steamwar.bausystem.config.BauServer"); + Method bauServerGet = bauServer.getDeclaredMethod("getInstance"); + BAU_SERVER_GET_OWNER_ID = bauServer.getMethod("getOwnerID"); + BAU_SERVER_INSTANCE = bauServerGet.invoke(null); + } catch (Exception e) { + throw new SecurityException(e); + } + } + + @Override + public int getOwner() { + try { + return (int) BAU_SERVER_GET_OWNER_ID.invoke(BAU_SERVER_INSTANCE); + } catch (Exception e) { + throw new SecurityException(e); + } + } +} diff --git a/SchematicSystem_Core/src/plugin.yml b/SchematicSystem_Core/src/plugin.yml index 457fdd9..c5d64da 100644 --- a/SchematicSystem_Core/src/plugin.yml +++ b/SchematicSystem_Core/src/plugin.yml @@ -2,6 +2,7 @@ name: SchematicSystem version: "2.0" authors: [Yaruma3341, Lixfel, Chaoscaot] depend: [SpigotCore, WorldEdit] +softdepend: [BauSystem] main: de.steamwar.schematicsystem.SchematicSystem website: steamwar.de api-version: "1.13" From d800b90ac2dffcc24b62264debd6eb49edd79c6e Mon Sep 17 00:00:00 2001 From: Chaos Date: Thu, 27 Jan 2022 21:41:10 +0100 Subject: [PATCH 08/23] Move Provider to SPigotCore --- .../commands/SchematicCommand.java | 2 +- .../commands/SchematicCommandUtils.java | 2 +- .../providers/BauSystemProvider.java | 56 ------------------- .../providers/impl/BauSystem1Provider.java | 28 ---------- .../providers/impl/BauSystem2Provider.java | 31 ---------- 5 files changed, 2 insertions(+), 117 deletions(-) delete mode 100644 SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/BauSystemProvider.java delete mode 100644 SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem1Provider.java delete mode 100644 SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem2Provider.java diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java index c9605f5..30c63cf 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java @@ -23,8 +23,8 @@ import de.steamwar.command.SWCommand; import de.steamwar.command.TypeMapper; import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SchematicSelector; +import de.steamwar.providers.BauSystemProvider; import de.steamwar.schematicsystem.SchematicSystem; -import de.steamwar.schematicsystem.providers.BauSystemProvider; import de.steamwar.sql.*; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java index 43e56e4..1e4b6e0 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java @@ -22,10 +22,10 @@ package de.steamwar.schematicsystem.commands; import de.steamwar.comms.packets.PrepareSchemPacket; import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWItem; +import de.steamwar.providers.BauSystemProvider; import de.steamwar.schematicsystem.AutoCheckResult; import de.steamwar.schematicsystem.CheckSchemType; import de.steamwar.schematicsystem.SchematicSystem; -import de.steamwar.schematicsystem.providers.BauSystemProvider; import de.steamwar.sql.*; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/BauSystemProvider.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/BauSystemProvider.java deleted file mode 100644 index fa3120c..0000000 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/BauSystemProvider.java +++ /dev/null @@ -1,56 +0,0 @@ -package de.steamwar.schematicsystem.providers; - -import de.steamwar.schematicsystem.providers.impl.*; -import org.bukkit.Bukkit; - -import java.util.function.Consumer; -import java.util.function.Function; - -public interface BauSystemProvider { - - static T use(Function function, T def) { - return BauSystemProviderImplementor.use(function, def); - } - - static void use(Consumer consumer) { - BauSystemProviderImplementor.use(consumer); - } - - int getOwner(); - - class BauSystemProviderImplementor { - private BauSystemProviderImplementor() {} - - static boolean hasBausystem; - static BauSystemProvider bauSystemProvider; - - static { - try { - Class.forName("de.steamwar.bausystem.BauSystem"); - hasBausystem = true; - switch (Bukkit.getPluginManager().getPlugin("BauSystem").getDescription().getVersion()) { - case "2.0": - bauSystemProvider = new BauSystem2Provider(); - break; - case "1.0": - bauSystemProvider = new BauSystem1Provider(); - break; - default: - hasBausystem = false; - } - } catch (Exception e) { - hasBausystem = false; - } - } - - static T use(Function function, T def) { - if(!hasBausystem) return def; - return function.apply(bauSystemProvider); - } - - static void use(Consumer consumer) { - if(!hasBausystem) return; - consumer.accept(bauSystemProvider); - } - } -} diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem1Provider.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem1Provider.java deleted file mode 100644 index 50c966c..0000000 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem1Provider.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.steamwar.schematicsystem.providers.impl; - -import de.steamwar.schematicsystem.providers.BauSystemProvider; - -import java.lang.reflect.Method; - -public class BauSystem1Provider implements BauSystemProvider { - - private static final Method BAUSYSTEM_GET_OWNER_ID; - - static { - try { - Class bausystem = Class.forName("de.steamwar.bausystem.BauSystem"); - BAUSYSTEM_GET_OWNER_ID = bausystem.getDeclaredMethod("getOwnerID"); - } catch (Exception e) { - throw new SecurityException(e); - } - } - - @Override - public int getOwner() { - try { - return (int) BAUSYSTEM_GET_OWNER_ID.invoke(null); - } catch (Exception e) { - throw new SecurityException(e); - } - } -} diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem2Provider.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem2Provider.java deleted file mode 100644 index 7e807cb..0000000 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/providers/impl/BauSystem2Provider.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.steamwar.schematicsystem.providers.impl; - -import de.steamwar.schematicsystem.providers.BauSystemProvider; - -import java.lang.reflect.Method; - -public class BauSystem2Provider implements BauSystemProvider { - - private static final Method BAU_SERVER_GET_OWNER_ID; - private static final Object BAU_SERVER_INSTANCE; - - static { - try { - Class bauServer = Class.forName("de.steamwar.bausystem.config.BauServer"); - Method bauServerGet = bauServer.getDeclaredMethod("getInstance"); - BAU_SERVER_GET_OWNER_ID = bauServer.getMethod("getOwnerID"); - BAU_SERVER_INSTANCE = bauServerGet.invoke(null); - } catch (Exception e) { - throw new SecurityException(e); - } - } - - @Override - public int getOwner() { - try { - return (int) BAU_SERVER_GET_OWNER_ID.invoke(BAU_SERVER_INSTANCE); - } catch (Exception e) { - throw new SecurityException(e); - } - } -} From 1247f596d2a4e9f2e622ec39a4be46058dbfe2be Mon Sep 17 00:00:00 2001 From: Chaos Date: Fri, 28 Jan 2022 16:15:54 +0100 Subject: [PATCH 09/23] If --- .../schematicsystem/commands/SchematicCommand.java | 11 ++++++----- .../commands/SchematicCommandUtils.java | 11 ++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java index 30c63cf..2b0e4af 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java @@ -23,7 +23,7 @@ import de.steamwar.command.SWCommand; import de.steamwar.command.TypeMapper; import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SchematicSelector; -import de.steamwar.providers.BauSystemProvider; +import de.steamwar.providers.BauServerInfo; import de.steamwar.schematicsystem.SchematicSystem; import de.steamwar.sql.*; import net.md_5.bungee.api.ChatColor; @@ -136,10 +136,11 @@ public class SchematicCommand extends SWCommand { @Register("s") public void saveSchem(Player player, @Mapper("dirStringMapper") String name) { SteamwarUser user = getUser(player); - if((Punishment.isPunished(user, Punishment.PunishmentType.NoSchemReceiving, punishment -> player.sendMessage(SchematicSystem.PREFIX + "§cDu darfst hier keine Schematics laden")) || - Punishment.isPunished(SteamwarUser.get(BauSystemProvider.use(BauSystemProvider::getOwner, 0)), Punishment.PunishmentType.NoSchemSharing, punishment -> player.sendMessage(SchematicSystem.PREFIX + "§cAuf diesem Bau kannst du keine Schematics speichern"))) && - Boolean.TRUE.equals(BauSystemProvider.use(bauSystemProvider -> bauSystemProvider.getOwner() != user.getId(), false))) { - player.sendMessage(SchematicSystem.PREFIX + "§cDu darfst hier keine Schematics speichern"); + if(BauServerInfo.isBauServer() && BauServerInfo.getOwnerId() != user.getId() && + (Punishment.isPunished(user, Punishment.PunishmentType.NoSchemReceiving, punishment -> + player.sendMessage(SchematicSystem.PREFIX + "§cDu kannst nicht auf anderen Baus Schematics machen")) || + Punishment.isPunished(SteamwarUser.get(BauServerInfo.getOwnerId()), Punishment.PunishmentType.NoSchemSharing, punishment -> + player.sendMessage(SchematicSystem.PREFIX + "§cAuf diesem Bau können keine Schematics gemacht werden")))) { return; } if (name.endsWith("/")) { diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java index 1e4b6e0..0ad1e4e 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandUtils.java @@ -22,7 +22,7 @@ package de.steamwar.schematicsystem.commands; import de.steamwar.comms.packets.PrepareSchemPacket; import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWItem; -import de.steamwar.providers.BauSystemProvider; +import de.steamwar.providers.BauServerInfo; import de.steamwar.schematicsystem.AutoCheckResult; import de.steamwar.schematicsystem.CheckSchemType; import de.steamwar.schematicsystem.SchematicSystem; @@ -295,10 +295,11 @@ public class SchematicCommandUtils { public static void loadSchem(Player player, SchematicNode node) { SteamwarUser user = getUser(player); - if ((Punishment.isPunished(user, Punishment.PunishmentType.NoSchemSharing, punishment -> player.sendMessage(SchematicSystem.PREFIX + "§cDu darfst hier keine Schematics laden")) && - Boolean.TRUE.equals(BauSystemProvider.use(bauSystemProvider -> bauSystemProvider.getOwner() != user.getId(), false))) || - (Boolean.TRUE.equals(BauSystemProvider.use(bauSystemProvider -> bauSystemProvider.getOwner() != user.getId(), false)) && - Punishment.isPunished(BauSystemProvider.use(bauSystemProvider -> SteamwarUser.get(bauSystemProvider.getOwner()), user), Punishment.PunishmentType.NoSchemSharing, punishment -> player.sendMessage(SchematicSystem.PREFIX + "§cDu kannst auf diesem Bau keine Schematics laden")))) { + if(BauServerInfo.isBauServer() && BauServerInfo.getOwnerId() != user.getId() && + (Punishment.isPunished(user, Punishment.PunishmentType.NoSchemSharing, punishment -> + player.sendMessage(SchematicSystem.PREFIX + "§cDu kannst hier keine Schematics laden")) || + Punishment.isPunished(SteamwarUser.get(BauServerInfo.getOwnerId()), Punishment.PunishmentType.NoSchemReceiving, punishment -> + player.sendMessage(SchematicSystem.PREFIX + "§cAuf diesem Bau können keine Schematics geladen werden")))) { return; } if (node.isDir()) { From 4140225b91c6a21adaf922b544cc86d96b42e793 Mon Sep 17 00:00:00 2001 From: Chaos Date: Fri, 28 Jan 2022 16:17:21 +0100 Subject: [PATCH 10/23] =?UTF-8?q?=C2=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schematicsystem/SafeSchematicNode.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java index 5e15684..25a5711 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java @@ -1,3 +1,22 @@ +/* + This file is a part of the SteamWar software. + + Copyright (C) 2020 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 . +*/ + package de.steamwar.schematicsystem; import de.steamwar.sql.SchematicNode; From 1b8e572025f327860a335a062e7ff469455ff738 Mon Sep 17 00:00:00 2001 From: Chaos Date: Sat, 29 Jan 2022 14:26:49 +0100 Subject: [PATCH 11/23] Remove SoftDependend --- SchematicSystem_Core/src/plugin.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/SchematicSystem_Core/src/plugin.yml b/SchematicSystem_Core/src/plugin.yml index c5d64da..457fdd9 100644 --- a/SchematicSystem_Core/src/plugin.yml +++ b/SchematicSystem_Core/src/plugin.yml @@ -2,7 +2,6 @@ name: SchematicSystem version: "2.0" authors: [Yaruma3341, Lixfel, Chaoscaot] depend: [SpigotCore, WorldEdit] -softdepend: [BauSystem] main: de.steamwar.schematicsystem.SchematicSystem website: steamwar.de api-version: "1.13" From 7d8ba6675bc899ccf00c2086776ef8560bdf670d Mon Sep 17 00:00:00 2001 From: Chaos Date: Sat, 29 Jan 2022 14:39:44 +0100 Subject: [PATCH 12/23] Another Member Delete --- .../commands/SchematicCommand.java | 16 +++++++++++++++- .../commands/SchematicCommandHelp.java | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java index 8e3202b..bc5d253 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java @@ -485,7 +485,21 @@ public class SchematicCommand extends SWCommand { player.sendMessage(SchematicSystem.PREFIX + "§7Alle Spieler wurden von der Schematic entfernt"); } - @Register("togglepublic") + @Register("delallmember") + public void delAllMember(Player player, SteamwarUser target) { + SteamwarUser user = getUser(player); + int i = 0; + for (NodeMember nodeMember : NodeMember.getSchematics(target.getId())) { + SchematicNode node = SchematicNode.getSchematicNode(nodeMember.getNode()); + if (node.getOwner() == user.getId()) { + nodeMember.delete(); + i++; + } + } + player.sendMessage(SchematicSystem.PREFIX + "§e" + target.getUserName() + " §7wurde von §e" + i + " §7Schematics entfernt"); + } + + @Register(value = "togglepublic", noTabComplete = true) public void togglePublicMode(Player player) { SteamwarUser user = SteamwarUser.get(player.getUniqueId()); if (!user.getUserGroup().isAdminGroup()) { diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandHelp.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandHelp.java index a05e0f6..871ed06 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandHelp.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandHelp.java @@ -69,6 +69,7 @@ public class SchematicCommandHelp { "§8/§7schem §eaddmember §8[§7Schematic§8] §8[§7Spieler§8] - §7Fügt einen Spieler zu einer Schematic hinzu", "§8/§7schem §edelmember §8[§7Schematic§8] §8[§7Spieler§8] - §7Entfernt einen Spieler von einer Schematic", "§8/§7schem §eclearmember §8[§7Schematic§8] - §7Entfernt alle Spieler von der Schematic", + "§8/§7schem §edelallmember §8[§7Spieler§8] - §7Entfernt einen Spieler von allen deinen Schematics", "§8/§7schem §eaddteam §8[§7Schematic§8] - §7Füge jeden aus deinem Team auf die Schematic hinzu", "§8/§7schem §edelteam §8[§7Schematic§8] - §7Entferne jeden aus deinem Team von der Schematic" }); From 7e17d5ab3452089f5fd3ce6bf680e94b7293f8ab Mon Sep 17 00:00:00 2001 From: Chaos Date: Thu, 3 Feb 2022 23:01:37 +0100 Subject: [PATCH 13/23] Hotfix SchemSearch and Public Schems --- .../de/steamwar/schematicsystem/commands/SchematicCommand.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java index bf885f4..f170b37 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java @@ -332,6 +332,7 @@ public class SchematicCommand extends SWCommand { return true; }); player.sendMessage("§eSchematics §8(§e" + nodes.size() + "§8)"); + int finalUserId = userId; nodes.forEach(node -> { String br = node.generateBreadcrumbs(user); String displayName = br; @@ -343,7 +344,7 @@ public class SchematicCommand extends SWCommand { } TextComponent schematics = new TextComponent("§7" + displayName); schematics.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§eSchematic verwalten").create())); - schematics.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/schem info " + br)); + schematics.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/schem info " + (finalUserId == 0 ? "public ":"") + br)); player.spigot().sendMessage(schematics); }); From f16f260c965d2b18776f8d8f624d6e7ad5d94c40 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 4 Feb 2022 09:12:38 +0100 Subject: [PATCH 14/23] Update SchematicCommand.schemSearch --- .../commands/SchematicCommand.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java index f170b37..67fb20e 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommand.java @@ -24,8 +24,8 @@ import de.steamwar.command.SWCommandUtils; import de.steamwar.command.TypeMapper; import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SchematicSelector; -import de.steamwar.schematicsystem.SafeSchematicNode; import de.steamwar.providers.BauServerInfo; +import de.steamwar.schematicsystem.SafeSchematicNode; import de.steamwar.schematicsystem.SchematicSystem; import de.steamwar.sql.*; import net.md_5.bungee.api.ChatColor; @@ -57,6 +57,9 @@ public class SchematicCommand extends SWCommand { Class clazz = Material.class; searchMapper.put("-item", SWCommandUtils.createEnumMapper((Class>) clazz)); searchMapper.put("-public", null); + searchMapper.put("-exclude", SWCommandUtils.createMapper(Function.identity(), (commandSender, s) -> Collections.singletonList(s))); + searchMapper.put("-excludeType", SWCommandUtils.createMapper(SchematicType.values().stream().map(SchematicType::name).toArray(String[]::new))); + searchMapper.put("-excludeOwner", SWCommandUtils.createMapper(Function.identity(), (commandSender, s) -> Collections.singletonList(s))); } public SchematicCommand() { @@ -313,6 +316,21 @@ public class SchematicCommand extends SWCommand { return; } predicates.add(node -> node.getOwner() == steamwarUser.getId()); + break; + case "-exclude": + predicates.add(node -> !node.getName().contains(query[finalI + 1])); + break; + case "-excludeType": + predicates.add(node -> !node.getSchemtype().name().equalsIgnoreCase(query[finalI + 1])); + break; + case "-excludeOwner": + SteamwarUser steamwarUser1 = SteamwarUser.get(query[finalI + 1]); + if (steamwarUser1 == null) { + player.sendMessage(SchematicSystem.PREFIX + "§cDer Spieler §e" + query[finalI + 1] + " §cexistiert nicht"); + return; + } + predicates.add(node -> node.getOwner() != steamwarUser1.getId()); + break; } i++; } From ccdf61b6c9144658403fc8d6d68e490e16c8ce3c Mon Sep 17 00:00:00 2001 From: Chaos Date: Fri, 4 Feb 2022 20:35:56 +0100 Subject: [PATCH 15/23] Hotfixing SafeSchematicNode --- .../schematicsystem/SafeSchematicNode.java | 34 +++---------------- 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java index 25a5711..0046164 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java @@ -25,14 +25,10 @@ import lombok.AllArgsConstructor; import lombok.NonNull; import org.bukkit.entity.Player; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - public class SafeSchematicNode { public static Result setParent(@NonNull SteamwarUser user, @NonNull SchematicNode node, SchematicNode newParent) { - if(user.getId() != node.getId()) { + if(user.getId() != node.getOwner()) { return Result.NOT_OWNER; } if(newParent == null) { @@ -58,11 +54,11 @@ public class SafeSchematicNode { } public static Result setName(@NonNull SteamwarUser user, @NonNull SchematicNode node, @NonNull String name) { - if(user.getId() != node.getId()) { + if(user.getId() != node.getOwner()) { return Result.NOT_OWNER; } - if(invalidSchemName(name)) { + if(SchematicNode.invalidSchemName(new String[]{name})) { return Result.INVALID_NAME; } @@ -74,28 +70,6 @@ public class SafeSchematicNode { return Result.DONE; } - private static final List FORBIDDEN_NAMES = Collections.unmodifiableList(Arrays.asList("public")); - public static boolean invalidSchemName(String name) { - if (name.isEmpty()) { - return true; - } - if(name.length() > 64) { - return true; - } - if (name.contains("/") || - name.contains("\\") || - name.contains("<") || - name.contains(">") || - name.contains("^") || - name.contains("°") || - name.contains("'") || - name.contains("\"") || - name.contains(" ")) { - return true; - } - return FORBIDDEN_NAMES.contains(name.toLowerCase()); - } - @AllArgsConstructor public enum Result { DONE("No"), @@ -104,7 +78,7 @@ public class SafeSchematicNode { INVALID_NAME(SchematicSystem.PREFIX + "§cDieser Name ist unzulässig"), NOT_OWNER(SchematicSystem.PREFIX + "§cDu bist nicht der Besitzer dieser Schematic"); - private String errorMessage; + private final String errorMessage; public void sendError(Player player) { player.sendMessage(errorMessage); From d288edf2c9f3537a0fe3ad0df59b2e4622394e33 Mon Sep 17 00:00:00 2001 From: Chaos Date: Fri, 4 Feb 2022 20:41:48 +0100 Subject: [PATCH 16/23] Hotfix 2 SafeSchematicNode --- .../src/de/steamwar/schematicsystem/SafeSchematicNode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java index 0046164..f9d2fda 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java @@ -43,7 +43,7 @@ public class SafeSchematicNode { return Result.NOT_A_DIR; } - if(SchematicNode.getSchematicsAccessibleByUser(user.getId(), newParent.getParent()) + if(SchematicNode.getSchematicsAccessibleByUser(user.getId(), newParent.getId()) .stream().map(SchematicNode::getName).anyMatch(s -> s.equalsIgnoreCase(node.getName()))) { return Result.ALREADY_IN_DIRECTORY; } From 61bcb9f16d7126c95c3b3bb371287185c88ae686 Mon Sep 17 00:00:00 2001 From: Chaos Date: Fri, 4 Feb 2022 20:44:43 +0100 Subject: [PATCH 17/23] Hotfix 3 SafeSchematicNode --- .../src/de/steamwar/schematicsystem/SafeSchematicNode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java index f9d2fda..db3b85b 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/SafeSchematicNode.java @@ -37,7 +37,7 @@ public class SafeSchematicNode { return Result.ALREADY_IN_DIRECTORY; } - node.setParent(0); + node.setParent(null); } else { if(!newParent.isDir()) { return Result.NOT_A_DIR; From bc5542204ab9e18a414e484cc1660c56da9bda6d Mon Sep 17 00:00:00 2001 From: Chaos Date: Sat, 5 Feb 2022 12:29:22 +0100 Subject: [PATCH 18/23] Rework SchemInfo Add Back Button --- .../schematicsystem/commands/GUI.java | 91 +++++++++++-------- 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java index fbabed5..191bd12 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java @@ -47,18 +47,19 @@ public class GUI { inv.setItem(49, Material.AIR, "", clickType -> {}); } else { inv.setItem(49, Material.ANVIL, "§7Ordnereigenschaften", clickType -> { - info(selector.getPlayer(), parent); + info(selector.getPlayer(), parent, selector); }); } } - }, node -> info(player, node)); + }, node -> {}); + selector.setCallback(node -> info(player, node, selector)); selector.setSingleDirOpen(false); selector.open(); } - private static void info(Player player, SchematicNode node) { + private static void info(Player player, SchematicNode node, SchematicSelector back) { SteamwarUser user = getUser(player); - SWInventory inv = new SWInventory(player, 9, node.generateBreadcrumbs(user)); + SWInventory inv = new SWInventory(player, 9 * 2, node.generateBreadcrumbs(user)); if(!node.isDir()) { inv.setItem(0, SWItem.getMaterial("WOOD_AXE"), "§eLaden", click -> { player.closeInventory(); @@ -66,6 +67,14 @@ public class GUI { }); } + inv.setItem(9, SWItem.getMaterial("LEASH"), "§eZurück", clickType -> { + if(back != null) { + back.reOpen(); + } else { + list(player); + } + }); + if(node.getOwner() == user.getId()){ if(!node.isDir() && node.getSchemtype().writeable()){ List checkedSchematics = CheckedSchematic.getLastDeclined(player.getUniqueId()); @@ -80,16 +89,14 @@ public class GUI { } Material mat = SWItem.getMaterial(node.getItem()); - inv.setItem(2, mat, "§e" + mat.name(), Arrays.asList("§7Zum Ändern", "§7anklicken"), false, click -> { - player.closeInventory(); - changeItem(player, node); + inv.setItem(5, mat, "§e" + mat.name(), Arrays.asList("§7Zum Ändern", "§7anklicken"), false, click -> { + changeItem(player, node, back); }); if(!node.isDir()) { - inv.setItem(3, SWItem.getMaterial("CAULDRON_ITEM"), "§e" + node.getSchemtype().name(), Arrays.asList("§7Zum Ändern", "§7anklicken"), false, click -> { - player.closeInventory(); - changeType(player, node); + inv.setItem(6, SWItem.getMaterial("CAULDRON_ITEM"), "§e" + node.getSchemtype().name(), Arrays.asList("§7Zum Ändern", "§7anklicken"), node.getSchemtype().fightType(), click -> { + changeType(player, node, back); }); - inv.setItem(4, SWItem.getMaterial("MAGENTA_GLAZED_TERRACOTTA"), "§eDownload", click -> { + inv.setItem(7, SWItem.getMaterial("MAGENTA_GLAZED_TERRACOTTA"), "§eDownload", click -> { player.closeInventory(); SchematicCommandUtils.download(player, node); }); @@ -100,12 +107,12 @@ public class GUI { delmembers(player, node); }); skull.setName("§eMitglieder"); - inv.setItem(5, skull); - inv.setItem(6, Material.ARROW, "§eVerschieben", clickType -> { + inv.setItem(8, skull); + inv.setItem(15, Material.ARROW, "§eVerschieben", clickType -> { SchematicSelector selector = new SchematicSelector(player, SchematicSelector.selectDirectory(), npar -> { SafeSchematicNode.Result result = SafeSchematicNode.setParent(user, node, npar); if(result.isSuccessful()) { - info(player, SchematicNode.getSchematicNode(node.getId())); + info(player, SchematicNode.getSchematicNode(node.getId()), back); } else { result.sendError(player); } @@ -113,44 +120,44 @@ public class GUI { selector.open(); }); Material finalMat = mat; - inv.setItem(7, Material.NAME_TAG, "§eUmbenennen", clickType -> { + inv.setItem(16, Material.NAME_TAG, "§eUmbenennen", clickType -> { SWAnvilInv anvilInv = new SWAnvilInv(player, node.getName() + " umbenennen", node.getName()); anvilInv.setItem(finalMat); anvilInv.setCallback(s -> { SafeSchematicNode.Result result = SafeSchematicNode.setName(user, node, s); if(result.isSuccessful()) { - info(player, node); + info(player, node, back); } else { result.sendError(player); } }); anvilInv.open(); }); - inv.setItem(8, SWItem.getDye(1), (byte) 1, "§cLöschen", click -> { - player.closeInventory(); - delete(player, node); + inv.setItem(17, SWItem.getDye(1), (byte) 1, "§cLöschen", click -> { + delete(player, node, back); }); }else{ if(!node.isDir()) { - inv.setItem(4, SWItem.getMaterial("CAULDRON_ITEM"), "§e" + node.getSchemtype().name(), click -> {}); + inv.setItem(4, SWItem.getMaterial("CAULDRON_ITEM"), "§e" + node.getSchemtype().name(), Collections.emptyList(), node.getSchemtype().fightType(), click -> {}); } SteamwarUser owneruser = SteamwarUser.get(node.getOwner()); SWItem skull = SWItem.getPlayerSkull(owneruser.getUserName()); skull.setName("§7von §e" + owneruser.getUserName()); - inv.setItem(6, skull.getItemStack(), clickType -> {}); + inv.setItem(8, skull.getItemStack(), clickType -> {}); - inv.setItem(8, SWItem.getDye(1), (byte) 1, "§cZugriff entfernen", click -> { - player.closeInventory(); - delete(player, node); - }); + if(NodeMember.getNodeMember(node.getId(), user.getId()) != null) { + inv.setItem(17, SWItem.getDye(1), (byte) 1, "§cZugriff entfernen", click -> { + delete(player, node, back); + }); + } } inv.setCallback(-999, click -> player.closeInventory()); inv.open(); } - static void changeType(Player p, SchematicNode schem){ + static void changeType(Player p, SchematicNode schem, SchematicSelector back){ List> types = new LinkedList<>(); for(SchematicType type : SchematicType.values()){ if(!type.isAssignable()) @@ -164,28 +171,34 @@ public class GUI { } SWListInv inv = new SWListInv<>(p, "Typ ändern", types, (clickType, schematicType) -> { - p.closeInventory(); SchematicCommandUtils.changeType(p, schem, schematicType, null); + info(p, schem, back); }); inv.setCallback(-999, (ClickType click) -> p.closeInventory()); inv.open(); } - private static void deleteOwn(Player p, SchematicNode schem){ + private static void deleteOwn(Player p, SchematicNode schem, SchematicSelector back){ SteamwarUser user = getUser(p); SWInventory inv = new SWInventory(p, 9, schem.generateBreadcrumbs(user) + " löschen"); inv.setItem(0, SWItem.getDye(1), (byte) 1, "§eLöschen", click -> { schem.delete(); p.sendMessage(SchematicSystem.PREFIX + "Schematic §e" + schem.generateBreadcrumbs(user) + " §7gelöscht"); - p.closeInventory(); + if(back != null) { + if(schem.isDir()) { + back.reOpenDirUp(); + } else { + back.reOpen(); + } + } }); inv.setItem(8, SWItem.getDye(14), (byte) 14, "§cAbbruch", click -> p.closeInventory()); inv.setCallback(-999, click -> p.closeInventory()); inv.open(); } - private static void deleteMembership(Player p, SchematicNode schem){ + private static void deleteMembership(Player p, SchematicNode schem, SchematicSelector back){ SteamwarUser user = getUser(p); SWInventory inv = new SWInventory(p, 9, schem.generateBreadcrumbs(user) + " entfernen"); inv.setItem(0, SWItem.getDye(1), (byte) 1, "§eZugriff entfernen", click -> { @@ -193,18 +206,24 @@ public class GUI { if(member != null) member.delete(); p.sendMessage(SchematicSystem.PREFIX + "Zugriff zu Schematic §e" + schem.generateBreadcrumbs(user) + " §7entfernt"); - p.closeInventory(); + if(back != null) { + if(schem.isDir()) { + back.reOpenDirUp(); + } else { + back.reOpen(); + } + } }); inv.setItem(8, SWItem.getDye(14), (byte) 14, "§cAbbruch", click -> p.closeInventory()); inv.setCallback(-999, click -> p.closeInventory()); inv.open(); } - static void delete(Player p, SchematicNode schem){ + static void delete(Player p, SchematicNode schem, SchematicSelector back){ if(SteamwarUser.get(p.getUniqueId()).getId() == schem.getOwner()) - deleteOwn(p, schem); + deleteOwn(p, schem, back); else - deleteMembership(p, schem); + deleteMembership(p, schem, back); } static void delmembers(Player p, SchematicNode schem){ @@ -223,11 +242,11 @@ public class GUI { inv.open(); } - private static void changeItem(Player p, SchematicNode schem){ + private static void changeItem(Player p, SchematicNode schem, SchematicSelector back){ UtilGui.openMaterialSelector(p, "Item ändern", material -> { schem.setItem(material.name()); p.closeInventory(); - info(p, schem); + info(p, schem, back); }); } } From 310c28d54b95f24e1e169010c3846a52deffe019 Mon Sep 17 00:00:00 2001 From: Chaos Date: Mon, 7 Feb 2022 09:37:19 +0100 Subject: [PATCH 19/23] Optimizing GUI --- .../src/de/steamwar/schematicsystem/commands/GUI.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java index 191bd12..c7ff849 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java @@ -68,11 +68,7 @@ public class GUI { } inv.setItem(9, SWItem.getMaterial("LEASH"), "§eZurück", clickType -> { - if(back != null) { - back.reOpen(); - } else { - list(player); - } + back.reOpen(); }); if(node.getOwner() == user.getId()){ @@ -119,10 +115,9 @@ public class GUI { }); selector.open(); }); - Material finalMat = mat; inv.setItem(16, Material.NAME_TAG, "§eUmbenennen", clickType -> { SWAnvilInv anvilInv = new SWAnvilInv(player, node.getName() + " umbenennen", node.getName()); - anvilInv.setItem(finalMat); + anvilInv.setItem(mat); anvilInv.setCallback(s -> { SafeSchematicNode.Result result = SafeSchematicNode.setName(user, node, s); if(result.isSuccessful()) { From 86888e708fac69e8462dec3b20834a82b1e98759 Mon Sep 17 00:00:00 2001 From: Chaos Date: Wed, 9 Feb 2022 18:40:34 +0100 Subject: [PATCH 20/23] Rebuild --- .../steamwar/schematicsystem/commands/SchematicCommandHelp.java | 1 - 1 file changed, 1 deletion(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandHelp.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandHelp.java index 871ed06..78dab28 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandHelp.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/SchematicCommandHelp.java @@ -26,7 +26,6 @@ import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.entity.Player; public class SchematicCommandHelp { - private SchematicCommandHelp() { } From 7f3725842f49f1a8dbc373709ab452fda6e4c784 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Fri, 11 Feb 2022 17:51:04 +0100 Subject: [PATCH 21/23] test(security): Commit Signing Signed-off-by: Chaos --- SchematicSystem_Core/src/plugin.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/SchematicSystem_Core/src/plugin.yml b/SchematicSystem_Core/src/plugin.yml index 457fdd9..931046c 100644 --- a/SchematicSystem_Core/src/plugin.yml +++ b/SchematicSystem_Core/src/plugin.yml @@ -5,5 +5,6 @@ depend: [SpigotCore, WorldEdit] main: de.steamwar.schematicsystem.SchematicSystem website: steamwar.de api-version: "1.13" +description: Schematic-Frontend commands: \ No newline at end of file From 40ac248553543fad2310d99e853a4419ad7c5caa Mon Sep 17 00:00:00 2001 From: Chaos Date: Fri, 11 Feb 2022 17:56:00 +0100 Subject: [PATCH 22/23] test(security): Commit Signing 2 Signed-off-by: Chaos --- SchematicSystem_Core/src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SchematicSystem_Core/src/plugin.yml b/SchematicSystem_Core/src/plugin.yml index 931046c..b756bec 100644 --- a/SchematicSystem_Core/src/plugin.yml +++ b/SchematicSystem_Core/src/plugin.yml @@ -7,4 +7,4 @@ website: steamwar.de api-version: "1.13" description: Schematic-Frontend -commands: \ No newline at end of file +commands: From 0e12df8b05339a161c098f0d2bca0faa94941e14 Mon Sep 17 00:00:00 2001 From: Chaos Date: Fri, 11 Feb 2022 22:56:04 +0100 Subject: [PATCH 23/23] fix(gui): Hotfix Closing GUI before changing Type Signed-off-by: Chaos --- .../src/de/steamwar/schematicsystem/commands/GUI.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java index c7ff849..24d621e 100644 --- a/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java +++ b/SchematicSystem_Core/src/de/steamwar/schematicsystem/commands/GUI.java @@ -90,7 +90,7 @@ public class GUI { }); if(!node.isDir()) { inv.setItem(6, SWItem.getMaterial("CAULDRON_ITEM"), "§e" + node.getSchemtype().name(), Arrays.asList("§7Zum Ändern", "§7anklicken"), node.getSchemtype().fightType(), click -> { - changeType(player, node, back); + changeType(player, node); }); inv.setItem(7, SWItem.getMaterial("MAGENTA_GLAZED_TERRACOTTA"), "§eDownload", click -> { player.closeInventory(); @@ -152,7 +152,7 @@ public class GUI { inv.open(); } - static void changeType(Player p, SchematicNode schem, SchematicSelector back){ + static void changeType(Player p, SchematicNode schem){ List> types = new LinkedList<>(); for(SchematicType type : SchematicType.values()){ if(!type.isAssignable()) @@ -166,8 +166,8 @@ public class GUI { } SWListInv inv = new SWListInv<>(p, "Typ ändern", types, (clickType, schematicType) -> { + p.closeInventory(); SchematicCommandUtils.changeType(p, schem, schematicType, null); - info(p, schem, back); }); inv.setCallback(-999, (ClickType click) -> p.closeInventory()); inv.open();