diff --git a/src/main/java/pk/ajneb97/MainCommand.java b/src/main/java/pk/ajneb97/MainCommand.java index a8bac45..f2e2a30 100644 --- a/src/main/java/pk/ajneb97/MainCommand.java +++ b/src/main/java/pk/ajneb97/MainCommand.java @@ -13,6 +13,7 @@ import pk.ajneb97.model.Kit; import pk.ajneb97.model.internal.GiveKitInstructions; import pk.ajneb97.model.internal.PlayerKitsMessageResult; import pk.ajneb97.model.inventory.InventoryPlayer; +import pk.ajneb97.model.inventory.KitInventory; import pk.ajneb97.utils.PlayerUtils; import java.util.ArrayList; @@ -41,6 +42,8 @@ public class MainCommand implements CommandExecutor, TabCompleter { reset(sender,args,messagesConfig,msgManager); }else if(args[0].equalsIgnoreCase("migrate")) { migrate(sender,args,messagesConfig,msgManager); + }else if(args[0].equalsIgnoreCase("open")){ + open(sender,args,messagesConfig,msgManager); }else{ help(sender,msgManager,messagesConfig); } @@ -73,6 +76,8 @@ public class MainCommand implements CommandExecutor, TabCompleter { verify(player,messagesConfig,msgManager); }else if(args[0].equalsIgnoreCase("migrate")) { migrate(sender,args,messagesConfig,msgManager); + }else if(args[0].equalsIgnoreCase("open")){ + open(sender,args,messagesConfig,msgManager); } else{ // /kit (short command) @@ -171,6 +176,37 @@ public class MainCommand implements CommandExecutor, TabCompleter { } } + public void open(CommandSender sender,String[] args,FileConfiguration messagesConfig,MessagesManager msgManager) { + // /kits open + if(!PlayerUtils.isPlayerKitsAdmin(sender)) { + msgManager.sendMessage(sender, messagesConfig.getString("noPermissions"), true); + return; + } + + if(args.length < 3) { + msgManager.sendMessage(sender, messagesConfig.getString("commandOpenError"), true); + return; + } + + String inventoryName = args[1]; + String playerName = args[2]; + + if(plugin.getInventoryManager().getInventory(inventoryName) == null){ + msgManager.sendMessage(sender, messagesConfig.getString("inventoryNotExists"), true); + return; + } + + Player player = Bukkit.getPlayer(playerName); + if(player == null){ + msgManager.sendMessage(sender,messagesConfig.getString("playerNotOnline") + .replace("%player%",playerName),true); + return; + } + + InventoryPlayer inventoryPlayer = new InventoryPlayer(player,inventoryName); + plugin.getInventoryManager().openInventory(inventoryPlayer); + } + public void give(CommandSender sender,String[] args,FileConfiguration messagesConfig,MessagesManager msgManager){ // /kits give if(!PlayerUtils.isPlayerKitsAdmin(sender)){ @@ -341,7 +377,7 @@ public class MainCommand implements CommandExecutor, TabCompleter { if(PlayerUtils.isPlayerKitsAdmin(sender)){ commands.add("give");commands.add("delete");commands.add("create"); commands.add("reload");commands.add("reset");commands.add("edit"); - commands.add("verify");commands.add("migrate"); + commands.add("verify");commands.add("migrate");commands.add("open"); } for(String c : commands) { if(args[0].isEmpty() || c.startsWith(args[0].toLowerCase())) { @@ -360,10 +396,16 @@ public class MainCommand implements CommandExecutor, TabCompleter { if(PlayerUtils.isPlayerKitsAdmin(sender)){ commands.add("give");commands.add("delete"); commands.add("reset");commands.add("edit"); + commands.add("open"); } for(String c : commands) { if(args[0].equalsIgnoreCase(c)){ - return getKitCompletions(sender,args,1); + if(c.equals("open")){ + return getInventoryCompletions(args,1); + }else{ + return getKitCompletions(sender,args,1); + } + } } } @@ -390,4 +432,23 @@ public class MainCommand implements CommandExecutor, TabCompleter { } return completions; } + + public List getInventoryCompletions(String[] args,int argInvPos){ + List completions = new ArrayList<>(); + String argInv = args[argInvPos]; + + ArrayList inventories = plugin.getInventoryManager().getInventories(); + for(KitInventory inv : inventories) { + Bukkit.getConsoleSender().sendMessage(inv.getName()); + if((argInv.isEmpty() || inv.getName().toLowerCase().startsWith(argInv.toLowerCase())) + && !inv.getName().equals("preview_inventory") && !inv.getName().equals("buy_requirements_inventory")) { + completions.add(inv.getName()); + } + } + + if(completions.isEmpty()){ + return null; + } + return completions; + } } diff --git a/src/main/java/pk/ajneb97/configs/MessagesConfigManager.java b/src/main/java/pk/ajneb97/configs/MessagesConfigManager.java index 85ab06c..c15a8c7 100644 --- a/src/main/java/pk/ajneb97/configs/MessagesConfigManager.java +++ b/src/main/java/pk/ajneb97/configs/MessagesConfigManager.java @@ -58,6 +58,11 @@ public class MessagesConfigManager { Path pathConfig = Paths.get(configFile.getRoute()); try{ String text = new String(Files.readAllBytes(pathConfig)); + if(!text.contains("commandOpenError:")){ + getConfig().set("commandOpenError", "&cYou need to use: &7/kit open "); + getConfig().set("inventoryNotExists", "&cThat inventory doesn't exists."); + saveConfig(); + } if(!text.contains("commandPreviewError:")){ getConfig().set("commandPreviewError", "&cYou need to use: &7/kit preview "); getConfig().set("kitPreviewDisabled", "&cKit preview is disabled."); diff --git a/src/main/java/pk/ajneb97/utils/ItemUtils.java b/src/main/java/pk/ajneb97/utils/ItemUtils.java index 551efe1..6479c56 100644 --- a/src/main/java/pk/ajneb97/utils/ItemUtils.java +++ b/src/main/java/pk/ajneb97/utils/ItemUtils.java @@ -165,8 +165,8 @@ public class ItemUtils { String decoded = new String(Base64.getDecoder().decode(texture)); String decodedFormatted = decoded.replaceAll("\\s", ""); int firstIndex = decodedFormatted.indexOf("\"SKIN\":{\"url\":")+15; - int lastIndex = decodedFormatted.indexOf("}",firstIndex+1); - url = new URL(decodedFormatted.substring(firstIndex,lastIndex-1)); + int lastIndex = decodedFormatted.indexOf("\"",firstIndex+1); + url = new URL(decodedFormatted.substring(firstIndex,lastIndex)); } catch (MalformedURLException error) { error.printStackTrace(); return; diff --git a/src/main/java/pk/ajneb97/versions/NMSManager.java b/src/main/java/pk/ajneb97/versions/NMSManager.java index 053e3fb..7b5f0c9 100644 --- a/src/main/java/pk/ajneb97/versions/NMSManager.java +++ b/src/main/java/pk/ajneb97/versions/NMSManager.java @@ -1,9 +1,13 @@ package pk.ajneb97.versions; +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import org.bukkit.Bukkit; import org.bukkit.inventory.ItemStack; import pk.ajneb97.PlayerKits2; import pk.ajneb97.utils.ServerVersion; +import java.io.StringReader; import java.lang.reflect.InvocationTargetException; import java.util.*; @@ -20,22 +24,20 @@ public class NMSManager { try { //Classes version.addClass("CraftItemStack",Class.forName("org.bukkit.craftbukkit."+serverVersion+".inventory.CraftItemStack")); - if(!serverVersionGreaterEqualThan(ServerVersion.v1_13_R1)) { - //1.12 or lower - version.addClass("NBTTagList",Class.forName("net.minecraft.server."+serverVersion+".NBTTagList")); - } if(serverVersionGreaterEqualThan(ServerVersion.v1_17_R1)){ //1.17 or greater version.addClass("ItemStackNMS",Class.forName("net.minecraft.world.item.ItemStack")); version.addClass("NBTTagCompound",Class.forName("net.minecraft.nbt.NBTTagCompound")); version.addClass("MojangsonParser",Class.forName("net.minecraft.nbt.MojangsonParser")); version.addClass("NBTBase",Class.forName("net.minecraft.nbt.NBTBase")); + version.addClass("NBTTagList",Class.forName("net.minecraft.nbt.NBTTagList")); }else{ //1.16 or lower version.addClass("ItemStackNMS",Class.forName("net.minecraft.server."+serverVersion+".ItemStack")); version.addClass("NBTTagCompound",Class.forName("net.minecraft.server."+serverVersion+".NBTTagCompound")); version.addClass("MojangsonParser",Class.forName("net.minecraft.server."+serverVersion+".MojangsonParser")); version.addClass("NBTBase",Class.forName("net.minecraft.server."+serverVersion+".NBTBase")); + version.addClass("NBTTagList",Class.forName("net.minecraft.server."+serverVersion+".NBTTagList")); } //Methods @@ -43,10 +45,8 @@ public class NMSManager { version.addMethod("asBukkitCopy",version.getClassRef("CraftItemStack").getMethod("asBukkitCopy",version.getClassRef("ItemStackNMS"))); if(!serverVersionGreaterEqualThan(ServerVersion.v1_13_R1)){ //1.12 or lower - version.addMethod("getList",version.getClassRef("NBTTagCompound").getMethod("getList",String.class,int.class)); version.addMethod("listSize",version.getClassRef("NBTTagList").getMethod("size")); version.addMethod("listGet",version.getClassRef("NBTTagList").getMethod("get",int.class)); - version.addMethod("listAdd",version.getClassRef("NBTTagList").getMethod("add",version.getClassRef("NBTBase"))); } if(!serverVersionGreaterEqualThan(ServerVersion.v1_18_R1)){ //1.17 or lower @@ -64,6 +64,7 @@ public class NMSManager { version.addMethod("getInt",version.getClassRef("NBTTagCompound").getMethod("getInt",String.class)); version.addMethod("getDouble",version.getClassRef("NBTTagCompound").getMethod("getDouble",String.class)); version.addMethod("getCompound",version.getClassRef("NBTTagCompound").getMethod("getCompound",String.class)); + version.addMethod("getList",version.getClassRef("NBTTagCompound").getMethod("getList",String.class,int.class)); version.addMethod("get",version.getClassRef("NBTTagCompound").getMethod("get",String.class)); version.addMethod("remove",version.getClassRef("NBTTagCompound").getMethod("remove",String.class)); if(serverVersionGreaterEqualThan(ServerVersion.v1_13_R1)){ @@ -73,6 +74,7 @@ public class NMSManager { } version.addMethod("hasKeyOfType",version.getClassRef("NBTTagCompound").getMethod("hasKeyOfType",String.class,int.class)); version.addMethod("parse",version.getClassRef("MojangsonParser").getMethod("parse",String.class)); + version.addMethod("listAdd",version.getClassRef("NBTTagList").getMethod("add",version.getClassRef("NBTBase"))); }else{ //1.18 or greater String methodName = null; @@ -113,6 +115,7 @@ public class NMSManager { version.addMethod("getInt",version.getClassRef("NBTTagCompound").getMethod("h",String.class)); version.addMethod("getDouble",version.getClassRef("NBTTagCompound").getMethod("k",String.class)); version.addMethod("getCompound",version.getClassRef("NBTTagCompound").getMethod("p",String.class)); + version.addMethod("getList",version.getClassRef("NBTTagCompound").getMethod("c",String.class,int.class)); version.addMethod("get",version.getClassRef("NBTTagCompound").getMethod("c",String.class)); version.addMethod("remove",version.getClassRef("NBTTagCompound").getMethod("r",String.class)); @@ -213,7 +216,13 @@ public class NMSManager { }else if((boolean)version.getMethodRef("hasKeyOfType").invoke(compound,t,8)) { //String nbtList.add(t+"|"+version.getMethodRef("getString").invoke(compound,t)); - }else { + } + /* + else if((boolean)version.getMethodRef("hasKeyOfType").invoke(compound,t,9)){ + nbtList.add(t+"|"+version.getMethodRef("get").invoke(compound,t)+"|list"); + } + */ + else { //Other nbtList.add(t+"|"+version.getMethodRef("get").invoke(compound,t)); } @@ -250,7 +259,22 @@ public class NMSManager { String finalNBT = nbt.replace(id+"|", "").replace("|compound", ""); Object compoundNew = version.getMethodRef("parse").invoke(null,finalNBT); version.getMethodRef("set").invoke(compound,sep[0],compoundNew); - }else { + }else if(type.equals("list")){ + /* + String finalNBT = nbt.replace(id+"|", "").replace("|list", ""); + JsonArray jsonArray = new Gson().fromJson(finalNBT, JsonArray.class); + Object list = version.getClassRef("NBTTagList").newInstance(); + for (int c=0;c" commandResetError: "&cYou need to use: &7/kit reset " commandEditError: "&cYou need to use: &7/kit edit " commandPreviewError: "&cYou need to use: &7/kit preview " +commandOpenError: "&cYou need to use: &7/kit open " commandDoesNotExists: "&cThat command doesn't exists." playerNotOnline: "&cPlayer &7%player% &cis not online." oneTimeError: "&cYou can't claim this kit again." @@ -37,5 +38,6 @@ days: 'd' cooldownPlaceholderReady: "&a&lReady!" pluginCriticalErrors: "&cThe plugin has detected some errors. Check them using &7/kit verify" kitPreviewDisabled: "&cKit preview is disabled." +inventoryNotExists: "&cThat inventory doesn't exists." diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 58db4a5..3f4f461 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ main: pk.ajneb97.PlayerKits2 -version: 1.8.4 +version: 1.9.1 name: PlayerKits2 api-version: 1.13 softdepend: [Vault,PlaceholderAPI]