This commit is contained in:
Ajneb97 2024-02-20 20:11:01 -03:00
parent 97b5fc89bd
commit edd31638d0
6 changed files with 105 additions and 13 deletions

View file

@ -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 <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 <inventory> <player>
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 <kit> <player>
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<String> getInventoryCompletions(String[] args,int argInvPos){
List<String> completions = new ArrayList<>();
String argInv = args[argInvPos];
ArrayList<KitInventory> 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;
}
}

View file

@ -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 <inventory> <player>");
getConfig().set("inventoryNotExists", "&cThat inventory doesn't exists.");
saveConfig();
}
if(!text.contains("commandPreviewError:")){
getConfig().set("commandPreviewError", "&cYou need to use: &7/kit preview <kit>");
getConfig().set("kitPreviewDisabled", "&cKit preview is disabled.");

View file

@ -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;

View file

@ -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<jsonArray.size();i++) {
if(finalNBT.startsWith("{")){
Object compoundNew = version.getMethodRef("parse").invoke(null,jsonArray.get(i).toString());
version.getMethodRef("listAdd").invoke(list,compoundNew);
}else{
}
}
*/
}
else {
version.getMethodRef("setString").invoke(compound,sep[0],nbt.replace(id+"|", ""));
}

View file

@ -12,6 +12,7 @@ commandDeleteError: "&cYou need to use: &7/kit delete <name>"
commandResetError: "&cYou need to use: &7/kit reset <kit> <player>"
commandEditError: "&cYou need to use: &7/kit edit <kit>"
commandPreviewError: "&cYou need to use: &7/kit preview <kit>"
commandOpenError: "&cYou need to use: &7/kit open <inventory> <player>"
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."

View file

@ -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]