recursive nbt

This commit is contained in:
rockyhawk64 2024-05-07 22:16:47 +10:00
parent 47aabb03b2
commit 43dbaafc94
2 changed files with 22 additions and 6 deletions

View File

@ -194,12 +194,8 @@ public class ItemCreation {
}
if(addNBT && itemSection.contains("nbt")){
for(String key : Objects.requireNonNull(itemSection.getConfigurationSection("nbt")).getKeys(true)){
if(itemSection.isConfigurationSection("nbt." + key)){
continue;
}
s = plugin.nbt.setNBT(s,key,plugin.tex.attachPlaceholders(panel, position, p, Objects.requireNonNull(itemSection.getString("nbt." + key)))); //itemSection.getString("nbt." + key));
}
plugin.nbt.applyNBTRecursively("", itemSection, s, p, panel, position);
}
if (itemSection.contains("enchanted")) {
try {

View File

@ -3,9 +3,15 @@ package me.rockyhawk.commandpanels.ioclasses.nbt;
import de.tr7zw.changeme.nbtapi.NBT;
import de.tr7zw.changeme.nbtapi.NBTItem;
import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.Objects;
public class NBTManager {
CommandPanels plugin;
public NBTManager(CommandPanels pl) {
@ -36,4 +42,18 @@ public class NBTManager {
if(!nbti.hasNBTData()) return "";
return nbti.getString(key);
}
public void applyNBTRecursively(String path, ConfigurationSection section, ItemStack s, Player p, Panel panel, PanelPosition position) {
for (String key : section.getKeys(true)) {
String fullPath = path.isEmpty() ? key : path + "." + key;
if (section.isConfigurationSection(key)) {
// Recursive call for nested sections
applyNBTRecursively(fullPath, section.getConfigurationSection(key), s, p, panel, position);
} else {
// Set the NBT tag at this level
String value = plugin.tex.attachPlaceholders(panel, position, p, section.getString(key));
s = plugin.nbt.setNBT(s, fullPath, value);
}
}
}
}