mirror of
https://github.com/Minestom/Minestom.git
synced 2024-09-27 06:03:01 +02:00
Added convenience methods to convert ItemStack to/from NBTCompound
This commit is contained in:
parent
2cff307a20
commit
b2f4c8654d
@ -7,7 +7,10 @@ import net.minestom.server.data.DataContainer;
|
||||
import net.minestom.server.item.attribute.ItemAttribute;
|
||||
import net.minestom.server.item.rule.VanillaStackingRule;
|
||||
import net.minestom.server.potion.PotionType;
|
||||
import net.minestom.server.registry.Registries;
|
||||
import net.minestom.server.utils.NBTUtils;
|
||||
import net.minestom.server.utils.validate.Check;
|
||||
import org.jglrxavpok.hephaistos.nbt.NBTCompound;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -590,4 +593,31 @@ public class ItemStack implements DataContainer {
|
||||
private byte getBitModifier(ItemFlag hideFlag) {
|
||||
return (byte) (1 << hideFlag.ordinal());
|
||||
}
|
||||
|
||||
public NBTCompound toNBT() {
|
||||
NBTCompound compound = new NBTCompound()
|
||||
.setByte("Count", amount)
|
||||
.setString("id", Material.fromId(materialId).getName());
|
||||
if(hasNbtTag()) {
|
||||
NBTCompound additionalTag = new NBTCompound();
|
||||
NBTUtils.saveDataIntoNBT(this, additionalTag);
|
||||
compound.set("tag", additionalTag);
|
||||
}
|
||||
return compound;
|
||||
}
|
||||
|
||||
public static ItemStack fromNBT(NBTCompound nbt) {
|
||||
if(!nbt.containsKey("id") || !nbt.containsKey("Count"))
|
||||
throw new IllegalArgumentException("Invalid item NBT, must at least contain 'id' and 'Count' tags");
|
||||
short materialID = Registries.getMaterial(nbt.getString("id")).getId();
|
||||
byte count = nbt.getByte("Count");
|
||||
|
||||
ItemStack s = new ItemStack(materialID, count);
|
||||
|
||||
NBTCompound tag = nbt.getCompound("tag");
|
||||
if(tag != null) {
|
||||
NBTUtils.loadDataIntoItem(s, tag);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ import java.util.*;
|
||||
// for lack of a better name
|
||||
public class NBTUtils {
|
||||
|
||||
private final static Logger LOGGER = LoggerFactory.getLogger(Utils.class);
|
||||
private final static Logger LOGGER = LoggerFactory.getLogger(NBTUtils.class);
|
||||
|
||||
/**
|
||||
* Loads all the items from the 'items' list into the given inventory
|
||||
@ -109,7 +109,7 @@ public class NBTUtils {
|
||||
return item;
|
||||
}
|
||||
|
||||
private static void loadDataIntoItem(ItemStack item, NBTCompound nbt) {
|
||||
public static void loadDataIntoItem(ItemStack item, NBTCompound nbt) {
|
||||
if (nbt.containsKey("Damage")) item.setDamage(nbt.getInt("Damage"));
|
||||
if (nbt.containsKey("Unbreakable")) item.setUnbreakable(nbt.getInt("Unbreakable") == 1);
|
||||
if (nbt.containsKey("HideFlags")) item.setHideFlag(nbt.getInt("HideFlags"));
|
||||
@ -209,7 +209,7 @@ public class NBTUtils {
|
||||
}
|
||||
}
|
||||
|
||||
private static void saveDataIntoNBT(ItemStack itemStack, NBTCompound itemNBT) {
|
||||
public static void saveDataIntoNBT(ItemStack itemStack, NBTCompound itemNBT) {
|
||||
// Unbreakable
|
||||
if (itemStack.isUnbreakable()) {
|
||||
itemNBT.setInt("Unbreakable", 1);
|
||||
|
Loading…
Reference in New Issue
Block a user