Files
CustomNPC-Plus/src/main/java/noppes/npcs/attribute/CNPCItemAttributeHelper.java
T
2025-02-24 16:08:22 -05:00

80 lines
3.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package noppes.npcs.attribute;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import java.util.Set;
import java.util.HashMap;
import java.util.Map;
/**
* Handles writing/reading item attributes.
* Non‑magic attributes are stored under a "CNPCAttributes" tag.
* Magic-based attributes are stored as a compound mapping magic ID to value,
* for example under "cnpc:magic_damage_flat".
*/
public class CNPCItemAttributeHelper {
public static final String TAG_ROOT = "CNPCAttributes";
public static void applyAttribute(ItemStack item, String attributeKey, double value) {
if(item == null) return;
if(item.stackTagCompound == null) {
item.stackTagCompound = new NBTTagCompound();
}
NBTTagCompound root = item.stackTagCompound;
NBTTagCompound attrTag;
if(root.hasKey(TAG_ROOT)) {
attrTag = root.getCompoundTag(TAG_ROOT);
} else {
attrTag = new NBTTagCompound();
}
attrTag.setDouble(attributeKey, value);
root.setTag(TAG_ROOT, attrTag);
}
public static Map<String, Double> readAttributes(ItemStack item) {
Map<String, Double> map = new HashMap<>();
if(item == null || item.stackTagCompound == null) return map;
NBTTagCompound root = item.stackTagCompound;
if(root.hasKey(TAG_ROOT)) {
NBTTagCompound attrTag = root.getCompoundTag(TAG_ROOT);
Set<String> keys = attrTag.func_150296_c();
for(String key : keys) {
map.put(key, attrTag.getDouble(key));
}
}
return map;
}
public static Map<Integer, Double> readMagicAttributeMap(ItemStack item, String attributeTag) {
Map<Integer, Double> map = new HashMap<>();
if(item == null || item.stackTagCompound == null) return map;
if(item.stackTagCompound.hasKey(attributeTag)) {
NBTTagCompound magicMap = item.stackTagCompound.getCompoundTag(attributeTag);
Set<String> keys = magicMap.func_150296_c();
for(String key : keys) {
try {
int magicId = Integer.parseInt(key);
map.put(magicId, magicMap.getDouble(key));
} catch(NumberFormatException e) {
// Skip invalid key.
}
}
}
return map;
}
public static void writeMagicAttribute(ItemStack item, String attributeTag, int magicId, double value) {
if(item == null) return;
if(item.stackTagCompound == null)
item.stackTagCompound = new NBTTagCompound();
NBTTagCompound magicMap;
if(item.stackTagCompound.hasKey(attributeTag)) {
magicMap = item.stackTagCompound.getCompoundTag(attributeTag);
} else {
magicMap = new NBTTagCompound();
}
magicMap.setDouble(String.valueOf(magicId), value);
item.stackTagCompound.setTag(attributeTag, magicMap);
}
}