Убрать блок в тег, а потом достать.

Версия Minecraft
1.12.2
5,020
47
784
Здравствуйте! Появилась небольшая проблема: раньше я с тегами никогда не работал, и вот понадобилось. Собственно, я никак не могу понять, каким образом мне получать значение имени и сетать блок по его registryName. Но перед этим еще конечно хочется узнать, почему если я в одном методе в нбт сохраняю ключ, то он в него не сохраняется и в другом методе его уже не достать...

Java:
  public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving)
    {
        ItemStack destroyBlock = new ItemStack(Item.getItemFromBlock(state.getBlock()));
        
        
        NBTTagCompound newtag = new NBTTagCompound();
        
        newtag.setString("filled", destroyBlock.getUnlocalizedName());
    
        
        
        System.out.println(stack + " ___ " + newtag);

        return true;
    }
    public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
    {
        ItemStack stack = player.getActiveItemStack();
        System.out.println(stack + " ___ " + stack.getTagCompound().getString("filled"));

        return EnumActionResult.PASS;
    }
 
Краш-лог
[13:42:11] [main/FATAL] [minecraft/Minecraft]: Unreported exception thrown!
java.lang.NullPointerException: null
at com.xumuk.realism.items.tools.BasicShowel.onItemUse(BasicShowel.java:62) ~[BasicShowel.class:?]
at net.minecraft.item.ItemStack.onItemUse(ItemStack.java:201) ~[ItemStack.class:?]
at net.minecraft.client.multiplayer.PlayerControllerMP.processRightClickBlock(PlayerControllerMP.java:509) ~[PlayerControllerMP.class:?]
at net.minecraft.client.Minecraft.rightClickMouse(Minecraft.java:1693) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.processKeyBinds(Minecraft.java:2380) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.runTickKeyboard(Minecraft.java:2146) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1934) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1187) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:441) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_191]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_191]
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
at GradleStart.main(GradleStart.java:25) [start/:?]
[13:42:11] [main/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: ---- Minecraft Crash Report ----
// This is a token for 1 free hug. Redeem at your nearest Mojangsta: [~~HUG~~]

Time: 9/28/19 1:42 PM
Description: Unexpected error

java.lang.NullPointerException: Unexpected error
at com.xumuk.realism.items.tools.BasicShowel.onItemUse(BasicShowel.java:62)
at net.minecraft.item.ItemStack.onItemUse(ItemStack.java:201)
at net.minecraft.client.multiplayer.PlayerControllerMP.processRightClickBlock(PlayerControllerMP.java:509)
at net.minecraft.client.Minecraft.rightClickMouse(Minecraft.java:1693)
at net.minecraft.client.Minecraft.processKeyBinds(Minecraft.java:2380)
at net.minecraft.client.Minecraft.runTickKeyboard(Minecraft.java:2146)
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1934)
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1187)
at net.minecraft.client.Minecraft.run(Minecraft.java:441)
at net.minecraft.client.main.Main.main(Main.java:118)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
at GradleStart.main(GradleStart.java:25)
Краш-лог:
[13:42:11] [main/FATAL] [minecraft/Minecraft]: Unreported exception thrown!
java.lang.NullPointerException: null
	at com.xumuk.realism.items.tools.BasicShowel.onItemUse(BasicShowel.java:62) ~[BasicShowel.class:?]
	at net.minecraft.item.ItemStack.onItemUse(ItemStack.java:201) ~[ItemStack.class:?]
	at net.minecraft.client.multiplayer.PlayerControllerMP.processRightClickBlock(PlayerControllerMP.java:509) ~[PlayerControllerMP.class:?]
	at net.minecraft.client.Minecraft.rightClickMouse(Minecraft.java:1693) ~[Minecraft.class:?]
	at net.minecraft.client.Minecraft.processKeyBinds(Minecraft.java:2380) ~[Minecraft.class:?]
	at net.minecraft.client.Minecraft.runTickKeyboard(Minecraft.java:2146) ~[Minecraft.class:?]
	at net.minecraft.client.Minecraft.runTick(Minecraft.java:1934) ~[Minecraft.class:?]
	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1187) ~[Minecraft.class:?]
	at net.minecraft.client.Minecraft.run(Minecraft.java:441) [Minecraft.class:?]
	at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_191]
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_191]
	at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
	at GradleStart.main(GradleStart.java:25) [start/:?]
[13:42:11] [main/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: ---- Minecraft Crash Report ----
// This is a token for 1 free hug. Redeem at your nearest Mojangsta: [~~HUG~~]

Time: 9/28/19 1:42 PM
Description: Unexpected error

java.lang.NullPointerException: Unexpected error
	at com.xumuk.realism.items.tools.BasicShowel.onItemUse(BasicShowel.java:62)
	at net.minecraft.item.ItemStack.onItemUse(ItemStack.java:201)
	at net.minecraft.client.multiplayer.PlayerControllerMP.processRightClickBlock(PlayerControllerMP.java:509)
	at net.minecraft.client.Minecraft.rightClickMouse(Minecraft.java:1693)
	at net.minecraft.client.Minecraft.processKeyBinds(Minecraft.java:2380)
	at net.minecraft.client.Minecraft.runTickKeyboard(Minecraft.java:2146)
	at net.minecraft.client.Minecraft.runTick(Minecraft.java:1934)
	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1187)
	at net.minecraft.client.Minecraft.run(Minecraft.java:441)
	at net.minecraft.client.main.Main.main(Main.java:118)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
	at GradleStart.main(GradleStart.java:25)
Решение
Не пойму, что ты хочешь и что за фигню тебе тут некоторые советуют, но вот как я сделал:

Java:
public class ItemBlockStorage extends Item {
    @Override
    public boolean onBlockDestroyed(ItemStack stack, World world, IBlockState state, BlockPos pos, EntityLivingBase entity) {
        final ResourceLocation blockRegName = ForgeRegistries.BLOCKS.getKey(state.getBlock());

        if (blockRegName != null) {
            final NBTTagCompound storage = new NBTTagCompound();
            storage.setString("blockName", blockRegName.toString());
            stack.setTagCompound(storage);
        }
        return true;
    }

    @Override
    public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand) {...
5,020
47
784
что?.. У каждого инструмента свои теги. Какое отношение мой инструмент имеет к другим предметам?
 
5,020
47
784
А как менять текстурку в зависимости от тега? например, будет у меня layer=1 который будет на штык лопаты накладывать кусочек текстуры блока. Как такое делается?
 
5,020
47
784
Это не то, там она просто накладывается. Мне интересно, как управлять наложением через код.(с jsonoм)
 
Сверху