Created JsonStack NMS API

This commit is contained in:
Auxilor
2020-12-02 18:42:32 +00:00
parent 0d34fb0383
commit 098e2496ee
7 changed files with 195 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
package com.willfp.ecoenchants.nms.API;
import org.bukkit.inventory.ItemStack;
public interface JsonStackWrapper {
ItemStack getFromTag(String jsonTag, String id);
String toJson(ItemStack itemStack);
}

View File

@@ -0,0 +1,32 @@
package com.willfp.ecoenchants.v1_15_R1;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.willfp.ecoenchants.nms.API.JsonStackWrapper;
import net.minecraft.server.v1_15_R1.MojangsonParser;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;
public class JsonStack implements JsonStackWrapper {
@Override
public ItemStack getFromTag(String jsonTag, String id) {
id = id.replaceAll("minecraft:", "").toUpperCase();
Material material = Material.getMaterial(id);
assert material != null;
ItemStack itemStack = new ItemStack(material);
net.minecraft.server.v1_15_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);
try {
nmsStack.setTag(MojangsonParser.parse(jsonTag));
} catch (CommandSyntaxException e) {
e.printStackTrace();
}
return CraftItemStack.asBukkitCopy(nmsStack);
}
@Override
public String toJson(ItemStack itemStack) {
return CraftItemStack.asNMSCopy(itemStack).getOrCreateTag().toString();
}
}

View File

@@ -0,0 +1,32 @@
package com.willfp.ecoenchants.v1_16_R1;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.willfp.ecoenchants.nms.API.JsonStackWrapper;
import net.minecraft.server.v1_16_R1.MojangsonParser;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;
public class JsonStack implements JsonStackWrapper {
@Override
public ItemStack getFromTag(String jsonTag, String id) {
id = id.replaceAll("minecraft:", "").toUpperCase();
Material material = Material.getMaterial(id);
assert material != null;
ItemStack itemStack = new ItemStack(material);
net.minecraft.server.v1_16_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);
try {
nmsStack.setTag(MojangsonParser.parse(jsonTag));
} catch (CommandSyntaxException e) {
e.printStackTrace();
}
return CraftItemStack.asBukkitCopy(nmsStack);
}
@Override
public String toJson(ItemStack itemStack) {
return CraftItemStack.asNMSCopy(itemStack).getOrCreateTag().toString();
}
}

View File

@@ -0,0 +1,32 @@
package com.willfp.ecoenchants.v1_16_R2;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.willfp.ecoenchants.nms.API.JsonStackWrapper;
import net.minecraft.server.v1_16_R2.MojangsonParser;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;
public class JsonStack implements JsonStackWrapper {
@Override
public ItemStack getFromTag(String jsonTag, String id) {
id = id.replaceAll("minecraft:", "").toUpperCase();
Material material = Material.getMaterial(id);
assert material != null;
ItemStack itemStack = new ItemStack(material);
net.minecraft.server.v1_16_R2.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);
try {
nmsStack.setTag(MojangsonParser.parse(jsonTag));
} catch (CommandSyntaxException e) {
e.printStackTrace();
}
return CraftItemStack.asBukkitCopy(nmsStack);
}
@Override
public String toJson(ItemStack itemStack) {
return CraftItemStack.asNMSCopy(itemStack).getOrCreateTag().toString();
}
}

View File

@@ -0,0 +1,32 @@
package com.willfp.ecoenchants.v1_16_R3;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.willfp.ecoenchants.nms.API.JsonStackWrapper;
import net.minecraft.server.v1_16_R3.MojangsonParser;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;
public class JsonStack implements JsonStackWrapper {
@Override
public ItemStack getFromTag(String jsonTag, String id) {
id = id.replaceAll("minecraft:", "").toUpperCase();
Material material = Material.getMaterial(id);
assert material != null;
ItemStack itemStack = new ItemStack(material);
net.minecraft.server.v1_16_R3.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);
try {
nmsStack.setTag(MojangsonParser.parse(jsonTag));
} catch (CommandSyntaxException e) {
e.printStackTrace();
}
return CraftItemStack.asBukkitCopy(nmsStack);
}
@Override
public String toJson(ItemStack itemStack) {
return CraftItemStack.asNMSCopy(itemStack).getOrCreateTag().toString();
}
}

View File

@@ -0,0 +1,50 @@
package com.willfp.ecoenchants.nms;
import com.willfp.ecoenchants.EcoEnchantsPlugin;
import com.willfp.ecoenchants.nms.API.JsonStackWrapper;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.ApiStatus;
/**
* Utility class to read/write NBTTagCompounds through json
*/
public class JsonStack {
private static JsonStackWrapper jsonStackWrapper;
@ApiStatus.Internal
public static boolean init() {
try {
final Class<?> class2 = Class.forName("com.willfp.ecoenchants." + EcoEnchantsPlugin.NMS_VERSION + ".JsonStack");
if (JsonStackWrapper.class.isAssignableFrom(class2)) {
jsonStackWrapper = (JsonStackWrapper) class2.getConstructor().newInstance();
}
} catch (Exception e) {
e.printStackTrace();
jsonStackWrapper = null;
}
return jsonStackWrapper != null;
}
/**
* Get the NBTTagCompound of an item as json
*
* @param itemStack The item to query
* @return The NBTTagCompound of the item as json
*/
public static String toJson(ItemStack itemStack) {
assert jsonStackWrapper != null;
return jsonStackWrapper.toJson(itemStack);
}
/**
* Create an ItemStack from NBTTagCompound json
* @param jsonTag The tag of the item
* @param id The fully qualified material ID
* @return The reconstructed ItemStack
*/
public static ItemStack fromJson(String jsonTag, String id) {
assert jsonStackWrapper != null;
return jsonStackWrapper.getFromTag(jsonTag, id);
}
}

View File

@@ -50,6 +50,7 @@ import com.willfp.ecoenchants.integrations.placeholder.PlaceholderManager;
import com.willfp.ecoenchants.integrations.placeholder.plugins.PlaceholderIntegrationPAPI;
import com.willfp.ecoenchants.nms.BlockBreak;
import com.willfp.ecoenchants.nms.Cooldown;
import com.willfp.ecoenchants.nms.JsonStack;
import com.willfp.ecoenchants.nms.OpenInventory;
import com.willfp.ecoenchants.nms.RepairCost;
import com.willfp.ecoenchants.nms.TridentStack;
@@ -158,6 +159,14 @@ public class Loader {
Bukkit.getPluginManager().disablePlugin(EcoEnchantsPlugin.getInstance());
}
if (JsonStack.init()) {
Logger.info("Json Stack: &aSUCCESS");
} else {
Logger.info("Json Stack: &cFAILURE");
Logger.error("&cAborting...");
Bukkit.getPluginManager().disablePlugin(EcoEnchantsPlugin.getInstance());
}
Logger.info("");
/*