diff --git a/build.gradle b/build.gradle
index f327146..31b3ed4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -80,7 +80,7 @@ dependencies {
}
group = 'gq.unurled'
-version = '0.5.2'
+version = '0.5.3'
description = 'Raxen'
java.sourceCompatibility = JavaVersion.VERSION_17
diff --git a/src/main/java/gq/unurled/raxen/Raxen.java b/src/main/java/gq/unurled/raxen/Raxen.java
index e6bd816..90b3c20 100644
--- a/src/main/java/gq/unurled/raxen/Raxen.java
+++ b/src/main/java/gq/unurled/raxen/Raxen.java
@@ -18,7 +18,7 @@ import static gq.unurled.raxen.utils.Utils.colorComp;
public final class Raxen extends JavaPlugin {
private static final String prefix = "Rx> ";
- @Getter private static String version = "0.5.2";
+ @Getter private static String version = "0.5.3";
private final PluginManager pm = getServer().getPluginManager();
private static Raxen plugin;
diff --git a/src/main/java/gq/unurled/raxen/commands/admin/CustomModelDataCommand.java b/src/main/java/gq/unurled/raxen/commands/admin/CustomModelDataCommand.java
index 824dfe0..47ba425 100644
--- a/src/main/java/gq/unurled/raxen/commands/admin/CustomModelDataCommand.java
+++ b/src/main/java/gq/unurled/raxen/commands/admin/CustomModelDataCommand.java
@@ -6,7 +6,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.StringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/gq/unurled/raxen/commands/player/MainGuiCommand.java b/src/main/java/gq/unurled/raxen/commands/player/MainGuiCommand.java
new file mode 100644
index 0000000..96f05e7
--- /dev/null
+++ b/src/main/java/gq/unurled/raxen/commands/player/MainGuiCommand.java
@@ -0,0 +1,63 @@
+package gq.unurled.raxen.commands.player;
+
+import gq.unurled.raxen.Raxen;
+import gq.unurled.raxen.components.gui.MainGui;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.command.TabExecutor;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+import static gq.unurled.raxen.utils.Utils.errorConsoleSender;
+import static gq.unurled.raxen.utils.Utils.noPerms;
+
+public class MainGuiCommand implements TabExecutor {
+
+ private Raxen main;
+
+ public MainGuiCommand(Raxen main) {
+ this.main = main;
+ }
+
+ /**
+ * @param sender Source of the command
+ * @param command Command which was executed
+ * @param label Alias of the command which was used
+ * @param args Passed command arguments
+ * @return
+ */
+ @Override
+ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
+ if (!(sender instanceof Player)) {
+ errorConsoleSender(sender);
+ return true;
+ }
+ Player p = (Player) sender;
+ if (!(p.hasPermission("raxen.maingui.cmd"))) {
+ sender.sendMessage(noPerms());
+ return true;
+ }
+ Inventory inv = MainGui.build(p);
+ p.openInventory(inv);
+ return true;
+ }
+
+ /**
+ * @param sender Source of the command. For players tab-completing a
+ * command inside of a command block, this will be the player, not
+ * the command block.
+ * @param command Command which was executed
+ * @param label Alias of the command which was used
+ * @param args The arguments passed to the command, including final
+ * partial argument to be completed
+ * @return
+ */
+ @Override
+ public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
+ return null;
+ }
+}
diff --git a/src/main/java/gq/unurled/raxen/components/entity/player/RaxenPlayer.java b/src/main/java/gq/unurled/raxen/components/entity/player/RaxenPlayer.java
index c03f31e..f026758 100644
--- a/src/main/java/gq/unurled/raxen/components/entity/player/RaxenPlayer.java
+++ b/src/main/java/gq/unurled/raxen/components/entity/player/RaxenPlayer.java
@@ -13,6 +13,7 @@ import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.PlayerInventory;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
@@ -57,7 +58,7 @@ public class RaxenPlayer {
PersistentDataContainer data = player.getPersistentDataContainer();
String store = data.get(namespacedKey.storage, PersistentDataType.STRING);
org.bukkit.inventory.Inventory ec = Bukkit.createInventory(null, 54, Component.text("Ender Chest"));
- ec = setItemsToInventory(Items.listItemStackDeserialize(store), ec);
+ ec = setItemsToInventory(Items.mapItemStackDeserialize(store), ec);
EnderChest ecc = new EnderChest(ec);
Storage storage = new Storage(ecc);
return storage;
@@ -67,7 +68,8 @@ public class RaxenPlayer {
PersistentDataContainer data = player.getPersistentDataContainer();
String inv = data.get(namespacedKey.inventory, PersistentDataType.STRING);
org.bukkit.inventory.Inventory invv = Bukkit.createInventory(player, InventoryType.PLAYER);
- invv = setItemsToInventory(Items.listItemStackDeserialize(inv), invv);
+ PlayerInventory invvvvv = (PlayerInventory) Bukkit.createInventory(null, InventoryType.PLAYER);
+ invv = setItemsToInventory(Items.listItemStackDeserialize(inv), invvvvv);
Inventory invvv = new Inventory(invv);
Inventories invvvv = new Inventories(invvv);
return invvvv;
diff --git a/src/main/java/gq/unurled/raxen/components/gui/MainGui.java b/src/main/java/gq/unurled/raxen/components/gui/MainGui.java
new file mode 100644
index 0000000..b5a3dce
--- /dev/null
+++ b/src/main/java/gq/unurled/raxen/components/gui/MainGui.java
@@ -0,0 +1,71 @@
+package gq.unurled.raxen.components.gui;
+
+import gq.unurled.raxen.utils.Items;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.SkullMeta;
+
+import java.util.HashMap;
+
+import static gq.unurled.raxen.utils.Utils.colorComp;
+import static gq.unurled.raxen.utils.Utils.fillGreyPane;
+
+public class MainGui {
+
+ public static Inventory build(Player p) {
+ Inventory inv = Bukkit.createInventory(null, 54, colorComp("Raxen"));
+ String gui = "0,7,0,0,0,8,9,0,10," +
+ "0,0,0,0,0,0,0,0,0," +
+ "0,0,0,0,0,0,0,0,0," +
+ "0,2,3,0,0,0,0,4,0," +
+ "0,0,0,0,1,0,0,0,0," +
+ "0,0,0,0,0,0,0,0,0";
+ // 1 player Head
+ ItemStack head = new ItemStack(Material.PLAYER_HEAD);
+ SkullMeta headm = (SkullMeta) head.getItemMeta();
+ headm.setOwningPlayer(p.getPlayer());
+ headm.displayName(colorComp(""));
+ // 2 bank
+ ItemStack bank = new ItemStack(Material.GOLD_INGOT);
+ // 3 ah
+ ItemStack ah = new ItemStack(Material.GOLD_INGOT);
+ // 4 skill tree
+ ItemStack sk_tree = new ItemStack(Material.OAK_SAPLING);
+ // 7 teleport
+ ItemStack tp = new ItemStack(Material.ENDER_PEARL);
+ // 8 select character
+ ItemStack sel_char = new ItemStack(Material.SNOWBALL);
+ // 9 Settings
+ ItemStack sett = new ItemStack(Material.MAGMA_CREAM);
+ // 10 barrier block close
+
+ HashMap list = new HashMap<>();
+ list.put("1", head);
+ list.put("2", bank);
+ list.put("3",ah);
+ list.put("4", sk_tree);
+ list.put("7", tp);
+ list.put("8", sel_char);
+ list.put("9", sett);
+ list.put("10", Items.closeItem());
+ Inventory inventory = stringToGui(inv, gui,list);
+ inventory = fillGreyPane(inventory);
+ return inventory;
+ }
+
+ public static Inventory stringToGui(Inventory inv, String stt, HashMap it) {
+ String[] s = stt.split(",");
+ if (s.length != inv.getContents().length) {
+ return inv;
+ }
+ Integer i = 0;
+ for (String st : s) {
+ inv.setItem(i, it.get(st));
+ i++;
+ }
+ return inv;
+ }
+}
diff --git a/src/main/java/gq/unurled/raxen/components/items/custom/Item.java b/src/main/java/gq/unurled/raxen/components/items/custom/Item.java
new file mode 100644
index 0000000..ae53585
--- /dev/null
+++ b/src/main/java/gq/unurled/raxen/components/items/custom/Item.java
@@ -0,0 +1,11 @@
+package gq.unurled.raxen.components.items.custom;
+
+import gq.unurled.raxen.Raxen;
+
+public interface Item {
+
+ public void buildItem();
+
+ public void registerItem(Raxen main);
+
+}
diff --git a/src/main/java/gq/unurled/raxen/components/items/custom/List.java b/src/main/java/gq/unurled/raxen/components/items/custom/List.java
new file mode 100644
index 0000000..17f55a5
--- /dev/null
+++ b/src/main/java/gq/unurled/raxen/components/items/custom/List.java
@@ -0,0 +1,26 @@
+package gq.unurled.raxen.components.items.custom;
+
+import gq.unurled.raxen.Raxen;
+import gq.unurled.raxen.components.items.custom.weapon.Dager;
+import lombok.Getter;
+
+import java.util.ArrayList;
+
+public class List {
+
+ private static Raxen main;
+
+ @Getter
+ private java.util.List- items;
+
+ public List(Raxen main) {
+ this.main = main;
+ this.items = new ArrayList<>();
+
+ }
+
+ public void build() {
+ // weapons
+ items.add(new Dager());
+ }
+}
diff --git a/src/main/java/gq/unurled/raxen/components/items/custom/weapon/Dager.java b/src/main/java/gq/unurled/raxen/components/items/custom/weapon/Dager.java
index d67b344..39e7e51 100644
--- a/src/main/java/gq/unurled/raxen/components/items/custom/weapon/Dager.java
+++ b/src/main/java/gq/unurled/raxen/components/items/custom/weapon/Dager.java
@@ -2,6 +2,7 @@ package gq.unurled.raxen.components.items.custom.weapon;
import de.tr7zw.nbtapi.NBTItem;
import gq.unurled.raxen.Raxen;
+import gq.unurled.raxen.components.items.custom.Item;
import lombok.Getter;
import net.kyori.adventure.text.Component;
import org.bukkit.Material;
@@ -16,10 +17,7 @@ import java.util.List;
import static gq.unurled.raxen.components.items.NBT.*;
import static gq.unurled.raxen.utils.Utils.colorTextComp;
-public class Dager {
-
- private Raxen main;
-
+public class Dager implements Item {
@Getter
ItemStack dager;
@@ -46,8 +44,8 @@ public class Dager {
/**
* need Raxen main to be set before calling this method.
*/
- public void register() {
+ @Override
+ public void registerItem(Raxen main) {
main.getManager().getItemManager().registerItem(dager);
}
-
}
diff --git a/src/main/java/gq/unurled/raxen/config/PlayerConfig.java b/src/main/java/gq/unurled/raxen/config/PlayerConfig.java
index 8360a73..40f1d5d 100644
--- a/src/main/java/gq/unurled/raxen/config/PlayerConfig.java
+++ b/src/main/java/gq/unurled/raxen/config/PlayerConfig.java
@@ -31,8 +31,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-import static gq.unurled.raxen.utils.Items.listItemStackDeserialize;
-import static gq.unurled.raxen.utils.Items.setItemsToInventory;
+import static gq.unurled.raxen.utils.Items.*;
import static gq.unurled.raxen.utils.Utils.debug;
public class PlayerConfig {
@@ -167,7 +166,7 @@ public class PlayerConfig {
Inventory ec = Bukkit.createInventory(null, 54, Component.text("Ender Chest"));
if(playerDoc.getString("ec") != null) {
debug(main, "Loading " + player.getName() + "'s storage.");
- ec = setItemsToInventory(listItemStackDeserialize(playerDoc.getString("ec")), ec);
+ ec = setItemsToInventory(mapItemStackDeserialize(playerDoc.getString("ec")), ec);
}
playerManager.getRaxenPlayer(player).setStorage(ec);
PlayerInventory inv = player.getInventory();
@@ -195,12 +194,12 @@ public class PlayerConfig {
config.getInt("luck"), config.getInt("itemLuck"));
Inventory ec = Bukkit.createInventory(null, 54, Component.text("Ender Chest"));
if((String) config.get("ec") != null) {
- ec = setItemsToInventory(listItemStackDeserialize((String) config.get("ec")), ec);
+ ec = setItemsToInventory(mapItemStackDeserialize((String) config.get("ec")), ec);
}
EnderChest ecc = new EnderChest(ec);
Storage storage = new Storage(ecc);
playerManager.getRaxenPlayer(player).setStorage(ec);
- Inventory inv = Bukkit.createInventory(player, InventoryType.PLAYER);
+ PlayerInventory inv = (PlayerInventory) Bukkit.createInventory(player, InventoryType.PLAYER);
inv = setItemsToInventory(listItemStackDeserialize((String) config.getString("inv")), inv);
player.getInventory().setContents(inv.getContents());
player.updateInventory();
@@ -215,7 +214,8 @@ public class PlayerConfig {
*/
public void savePlayerConfig(@NotNull Player player) {
Attributes attributes = new Attributes(main);
- Inventory inv = player.getInventory();
+ PlayerInventory inv = player.getInventory();
+
List listInv = new ArrayList();
Integer reverse = 0;
for(ItemStack it : inv) {
@@ -225,10 +225,7 @@ public class PlayerConfig {
listInv.add(s);
}
}
- String invstr= "";
- if (listInv.size() > 0) {
- invstr = Items.listItemStackSerialize(listInv);
- }
+ String invstr= Items.itemStackSer(inv);
debug(main, "saving...");
String storage = sto.getConfig().getString("storage");
Integer finalReverse = reverse;
diff --git a/src/main/java/gq/unurled/raxen/manager/entity/ItemManager.java b/src/main/java/gq/unurled/raxen/manager/entity/ItemManager.java
index 156c94e..e74632e 100644
--- a/src/main/java/gq/unurled/raxen/manager/entity/ItemManager.java
+++ b/src/main/java/gq/unurled/raxen/manager/entity/ItemManager.java
@@ -3,6 +3,7 @@ package gq.unurled.raxen.manager.entity;
import de.tr7zw.nbtapi.NBTItem;
import gq.unurled.raxen.Raxen;
import gq.unurled.raxen.components.items.NBT;
+import gq.unurled.raxen.components.items.custom.Item;
import gq.unurled.raxen.utils.Utils;
import lombok.Getter;
import net.kyori.adventure.text.Component;
@@ -34,6 +35,17 @@ public class ItemManager {
public ItemManager(Raxen main) {
this.main = main;
// register();
+ registerItem();
+ }
+
+ /**
+ * register manually all item in Raxen
+ */
+ private void registerItem() {
+ gq.unurled.raxen.components.items.custom.List lisst = new gq.unurled.raxen.components.items.custom.List(main);
+ for (Item items : lisst.getItems()) {
+ items.registerItem(main);
+ }
}
/**
diff --git a/src/main/java/gq/unurled/raxen/manager/server/CommandManager.java b/src/main/java/gq/unurled/raxen/manager/server/CommandManager.java
index 61e0d24..42b0754 100644
--- a/src/main/java/gq/unurled/raxen/manager/server/CommandManager.java
+++ b/src/main/java/gq/unurled/raxen/manager/server/CommandManager.java
@@ -4,6 +4,7 @@ import gq.unurled.raxen.Raxen;
import gq.unurled.raxen.commands.RaxenCommand;
import gq.unurled.raxen.commands.admin.*;
import gq.unurled.raxen.commands.player.ClassCommand;
+import gq.unurled.raxen.commands.player.MainGuiCommand;
import gq.unurled.raxen.commands.player.SkillsCommand;
import gq.unurled.raxen.commands.player.StorageCommand;
import lombok.Getter;
@@ -23,6 +24,7 @@ public class CommandManager {
private SpawnEntity entityspawn;
private ClassCommand classCommand;
private CustomModelDataCommand customModelDataCommand;
+ private MainGuiCommand mainGuiCommand;
public CommandManager(Raxen main) {
this.main = main;
@@ -33,6 +35,7 @@ public class CommandManager {
this.skillsCommand = new SkillsCommand(main);
this.raxenCommand = new RaxenCommand(main);
this.customModelDataCommand = new CustomModelDataCommand();
+ this.mainGuiCommand = new MainGuiCommand(main);
}
/**
@@ -70,7 +73,8 @@ public class CommandManager {
main.getCommand("custommodeldata").setTabCompleter(customModelDataCommand);
main.getCommand("custommodeldata").setExecutor(customModelDataCommand);
-
+ main.getCommand("main_gui").setTabCompleter(mainGuiCommand);
+ main.getCommand("main_gui").setExecutor(mainGuiCommand);
}
}
diff --git a/src/main/java/gq/unurled/raxen/utils/Items.java b/src/main/java/gq/unurled/raxen/utils/Items.java
index 0db358b..08fa1c9 100644
--- a/src/main/java/gq/unurled/raxen/utils/Items.java
+++ b/src/main/java/gq/unurled/raxen/utils/Items.java
@@ -88,7 +88,11 @@ public class Items {
* @return a barrier block itemstack named close
*/
public static @NotNull ItemStack closeItem () {
- return createItem(Material.BARRIER, 1, false, false, colorString("CLOSE"));
+ ItemStack close = createItem(Material.BARRIER, 1, false, false, colorString("CLOSE"));
+ ItemMeta clo = close.getItemMeta();
+ clo.setCustomModelData(1);
+ close.setItemMeta(clo);
+ return close;
}
/**
@@ -112,12 +116,71 @@ public class Items {
return str;
}
+ /**
+ * Serelize the PlayerInventory
+ * @param inv a player inventory
+ * @return return a serelized string
+ */
+ public static @NotNull String itemStackSer(PlayerInventory inv) {
+ List list = new ArrayList<>();
+ Integer i = 0;
+ for (ItemStack it : inv.getContents()) {
+ String str = "";
+ str = itemTo64(it);
+ if (it != null) {
+ if (isContained(it, inv.getArmorContents())) {
+ str = str + "@#SLOT#" + getWhichArmor(it.getType());
+ } else {
+ i++;
+ str = str + "@#SLOT#" + (i - 1);
+ }
+ }
+ list.add(str);
+ }
+ return listItemStackSerialize(list);
+ }
+
+ /**
+ * if item is in its
+ * @param item an Itemstack
+ * @param its an Itemstack[]
+ * @return return if item is in its
+ */
+ public static boolean isContained(ItemStack item, ItemStack[] its) {
+ for (ItemStack it : its) {
+ if (it == item) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Get which armor the type is
+ * @param type a material type
+ * @return the armor type or null
+ */
+ public static String getWhichArmor(Material type) {
+ String name = type.name();
+ if (name.contains("HELMET") || name.contains("helmet")) {
+ return "HELMET";
+ } else if (name.contains("CHESTPLATE") || name.contains("chestplate")) {
+ return "CHESTPLATE";
+ } else if (name.contains("LEGGINGS") || name.contains("leggins")) {
+ return "LEGGINGS";
+ } else if (name.contains("BOOTS") || name.contains("boots")) {
+ return "BOOTS";
+ }
+ return null;
+ }
+
/**
* a class that represent the itemstack deserialized.
*/
public static class itemStackDeserializeResult {
int slot;
ItemStack it;
+ String armor;
/**
* custructor
@@ -128,6 +191,12 @@ public class Items {
this.slot = slot;
this.it = it;
}
+
+ public itemStackDeserializeResult(Integer slot, ItemStack it, String armor) {
+ this.slot = slot;
+ this.it = it;
+ this.armor = armor;
+ }
}
/**
@@ -155,6 +224,7 @@ public class Items {
Gson gson = new Gson();
ItemStack it = new ItemStack(Material.AIR);
Integer slot = 0;
+ String armor = null;
debug("full item " + str);
for (String s : mapp) {
if(s != null) {
@@ -163,13 +233,22 @@ public class Items {
} catch (Exception e) {
if (!s.equals("")) {
debug("slot " + s);
- slot = Integer.valueOf(s);
+ try {
+ slot = Integer.parseInt(s);
+ } catch (NumberFormatException nfe) {
+ armor = s;
+ }
}
}
}
}
- itemStackDeserializeResult itt = new itemStackDeserializeResult(slot, it);
+ itemStackDeserializeResult itt;
+ if (armor != null) {
+ itt = new itemStackDeserializeResult(slot, it, armor);
+ } else {
+ itt = new itemStackDeserializeResult(slot, it);
+ }
return itt;
}
@@ -192,7 +271,7 @@ public class Items {
* @param str a list of all serialized item
* @return a list of itemstack with their slot
*/
- public static @NotNull HashMap listItemStackDeserialize(@NotNull String str) {
+ public static @NotNull HashMap mapItemStackDeserialize(@NotNull String str) {
Gson gson = new Gson();
List map = Arrays.asList(str.split("@#NEW_ITEM#"));
HashMap inv = new HashMap<>();
@@ -214,6 +293,30 @@ public class Items {
return inv;
}
+ /**
+ * deserialize item
+ * @param str a list of all serialized item
+ * @return a list of itemstack with their slot
+ */
+ public static @NotNull List listItemStackDeserialize(@NotNull String str) {
+ Gson gson = new Gson();
+ List map = Arrays.asList(str.split("@#NEW_ITEM#"));
+ List inv = new ArrayList<>();
+ ArrayList items = new ArrayList();
+ for(String s : map) {
+ ItemStack itt;
+ Integer slot;
+ if(s != null) {
+ itemStackDeserializeResult itm = itemStackDeserilize(s);
+ itt = itm.it;
+ if (itt != null && itt.getType() != Material.AIR) {
+ items.add(itt);
+ }
+ }
+ }
+ return inv;
+ }
+
/**
* set all item in the list to their slot in inv
* @param list a list of item with their slot
@@ -227,6 +330,37 @@ public class Items {
return inv;
}
+ /**
+ * set all item in the list to their slot in inv
+ * @param list a list of item with their slot
+ * @param inv the destined inventory
+ * @return the inv
+ */
+ public static PlayerInventory setItemsToInventory(@NotNull List list, PlayerInventory inv) {
+ Inventory invv = Bukkit.createInventory(null, 54);
+ for (itemStackDeserializeResult itm : list) {
+ if (itm.armor != null) {
+ setArmorItem(inv, itm.it);
+ } else {
+ inv.setItem(itm.slot, itm.it);
+ }
+ }
+ return inv;
+ }
+
+ public static void setArmorItem(PlayerInventory inv, ItemStack item) {
+ String name = item.getType().name();
+ if (name.contains("HELMET")) {
+ inv.setHelmet(item);
+ } else if (name.contains("CHESTPLATE")) {
+ inv.setChestplate(item);
+ } else if (name.contains("LEGGINGS")) {
+ inv.setLeggings(item);
+ } else if (name.contains("BOOTS")) {
+ inv.setBoots(item);
+ }
+ }
+
/**
* set all item in the list to their slot in inv
* @param list a list of item with their slot
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 7f1952f..114001b 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -36,6 +36,8 @@ commands:
- cmdata
- cmd
description: set custom model data to item
+ main_gui:
+ description: not very much used, more with right click on device
permissions:
raxen.reload.cmd:
@@ -53,4 +55,6 @@ permissions:
raxen.class.cmd:
description: class command permission
raxen.custommodeldata.cmd:
- description: custom model data command permission
\ No newline at end of file
+ description: custom model data command permission
+ raxen.maingui.cmd:
+ description: main gui command permission
\ No newline at end of file