diff --git a/BauSystem_Main/src/BauSystem.properties b/BauSystem_Main/src/BauSystem.properties
index 36adafae..5c3c439b 100644
--- a/BauSystem_Main/src/BauSystem.properties
+++ b/BauSystem_Main/src/BauSystem.properties
@@ -1,3 +1,22 @@
+#
+# This file is a part of the SteamWar software.
+#
+# Copyright (C) 2021 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 .
+#
+
PREFIX = §eBau§8System §8»
TIME = HH:mm:ss
DATE = ........
@@ -9,11 +28,14 @@ PERMISSION_CHANGE_YOU_ENABLE=§aDer Spieler darf nun {0}
PERMISSION_CHANGE_YOU_DISABLE=§cDer Spieler darf nun nicht mehr {0}
PERMISSION_CHANGE_OTHER_ENABLE=§aDu kannst nun auf der Welt von §6{0} §a{1}
PERMISSION_CHANGE_OTHER_DISABLE=§cDu kannst nun nicht mehr auf der Welt von §6{0} §c{1}
-
# Feature
FEATURE_OTHER_ITEMS_TELEPORT_GUI_NAME=Teleportieren
FEATURE_OTHER_ITEMS_TELEPORT_PLAYER_OFFLINE=§cDer Spieler ist Offline
FEATURE_GUI_EDITOR_ITEM_NAME=§eGui Editor
+FEATURE_GUI_EXPORT_CODE=§eDein Gui-Code:
+FEATURE_GUI_EXPORT_CODE_HOVER=§eKopieren
+FEATURE_GUI_IMPORT_INVALID_CODE=§eInvalieder Gui-Code
+FEATURE_GUI_IMPORT_CODE_SUCCESFULL=§eGui-Code eingelesen
FEATURE_TRACER_GUI_NAME=Tracer Gui
FEATURE_TRACER_GUI_TRACE_INACTIVE=§eTracer Starten
FEATURE_TRACER_GUI_TRACE_ACTIVE=§eTracer Stoppen
@@ -22,7 +44,6 @@ FEATURE_TRACER_GUI_AUTO_TRACE_INACTIVE=§eAuto-Tracer Aktivieren
FEATURE_TRACER_GUI_AUTO_TRACE_ACTIVE=§eAuto-Tracer Deaktivieren
FEATURE_TRACER_GUI_SHOW_GUI=§eTrace Show Gui
FEATURE_TRACER_GUI_DELETE=§eTrace Löschen
-
# Scoreboard
SCOREBOARD_TIME = Uhrzeit
SCOREBOARD_REGION = Region
@@ -39,14 +60,7 @@ FLAG_TNT=TNT
FLAG_FIRE=Fire
FLAG_FREEZE=Freeze
FLAG_PROTECT=Protect
-FLAG_FIRE_ALLOW=§can
-FLAG_FIRE_DENY=§aaus
-FLAG_COLOR = Color
-FLAG_TNT = TNT
-FLAG_FIRE = Fire
FLAG_DAMAGE = Damage
-FLAG_FREEZE = Freeze
-FLAG_PROTECT = Protect
FLAG_FIRE_ALLOW = §can
FLAG_FIRE_DENY = §aaus
diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/gui/BauGUICommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/BauGUICommand.java
index 344937cd..10172ae8 100644
--- a/BauSystem_Main/src/de/steamwar/bausystem/features/gui/BauGUICommand.java
+++ b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/BauGUICommand.java
@@ -19,11 +19,18 @@
package de.steamwar.bausystem.features.gui;
+import de.steamwar.bausystem.BauSystem;
+import de.steamwar.bausystem.config.ColorConfig;
import de.steamwar.bausystem.features.gui.editor.BauGuiEditor;
+import de.steamwar.bausystem.features.gui.editor.BauGuiImportExport;
+import de.steamwar.bausystem.features.gui.editor.BauGuiMapping;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.command.SWCommand;
import de.steamwar.inventory.SWItem;
+import net.md_5.bungee.api.chat.ClickEvent;
+import net.md_5.bungee.api.chat.HoverEvent;
+import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.entity.Player;
@Linked(LinkageType.COMMAND)
@@ -47,4 +54,24 @@ public class BauGUICommand extends SWCommand {
public void openEditor(Player p) {
BauGuiEditor.openGuiEditor(p, new SWItem().getItemStack());
}
+
+ @Register("export")
+ public void exportGui(Player p) {
+ String export = BauGuiImportExport.exportGui(BauGuiMapping.getGuiMapping(p));
+ TextComponent component = new TextComponent();
+ component.setColor(ColorConfig.HIGHLIGHT);
+ component.setBold(true);
+ component.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(BauSystem.MESSAGE.parse("FEATURE_GUI_EXPORT_CODE_HOVER", p))));
+ component.setClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, export));
+ component.setText(export);
+ BauSystem.MESSAGE.send("FEATURE_GUI_EXPORT_CODE", p);
+ p.spigot().sendMessage(component);
+ }
+
+ @Register("import")
+ public void importGui(Player p, String code) {
+ if (BauGuiImportExport.importGui(code, p)) {
+ BauSystem.MESSAGE.send("FEATURE_GUI_IMPORT_CODE_SUCCESFULL", p);
+ }
+ }
}
diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiEditorGuiItem.java b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiEditorGuiItem.java
index 573c8ec2..840adcbf 100644
--- a/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiEditorGuiItem.java
+++ b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiEditorGuiItem.java
@@ -34,7 +34,7 @@ import org.bukkit.inventory.ItemStack;
public class BauGuiEditorGuiItem extends BauGuiItem {
public BauGuiEditorGuiItem() {
- super(23);
+ super(25);
}
@Override
diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiImportExport.java b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiImportExport.java
new file mode 100644
index 00000000..f4b8c910
--- /dev/null
+++ b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiImportExport.java
@@ -0,0 +1,88 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2021 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.bausystem.features.gui.editor;
+
+import de.steamwar.bausystem.BauSystem;
+import de.steamwar.bausystem.features.gui.BauGUI;
+import org.bukkit.entity.Player;
+
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+
+public class BauGuiImportExport {
+
+ public static String exportGui(BauGuiMapping mapping) {
+
+ byte[] bytes = new byte[(mapping.getMapping().size() * 2) + 1];
+ Map map = mapping.getMapping();
+
+ int head = 0;
+ for (Map.Entry e : map.entrySet()) {
+ bytes[head] = e.getKey().byteValue();
+ head++;
+ bytes[head] = e.getValue().byteValue();
+ head++;
+ }
+ bytes[head] = (byte) mapping.getSize();
+
+ return Base64.getEncoder().encodeToString(bytes);
+ }
+
+ public static boolean importGui(String str, Player p) {
+ byte[] bytes = Base64.getDecoder().decode(str);
+ if (bytes.length % 2 != 1 || bytes.length < 2) {
+ BauSystem.MESSAGE.send("FEATURE_GUI_IMPORT_INVALID_CODE", p);
+ System.out.println("t1");
+ return false;
+ }
+
+
+ final int size = bytes[bytes.length - 1];
+ if (size > 9 * 5) {
+ BauSystem.MESSAGE.send("FEATURE_GUI_IMPORT_INVALID_CODE", p);
+ System.out.println("t2");
+ return false;
+ }
+
+ final Map map = new HashMap<>();
+ final int itemSize = BauGUI.getITEMS().size();
+ int head = 0;
+ do {
+ byte key = bytes[head];
+ head++;
+ byte value = bytes[head];
+ head++;
+
+ if (map.containsKey((int) key) || map.containsValue((int) value) ||
+ value >= size || key > itemSize) {
+ BauSystem.MESSAGE.send("FEATURE_GUI_IMPORT_INVALID_CODE", p);
+ System.out.println("t3");
+ return false;
+ }
+
+ map.put((int) key, (int) value);
+ } while (head + 2 < bytes.length);
+ BauGuiMapping mapping = BauGuiMapping.getGuiMapping(p);
+ mapping.setMapping(map);
+ mapping.setSize(size);
+ return true;
+ }
+}