Jump to content

Recommended Posts

Posted

I'm a bit confused as how to get/store custom nbt data in itemstacks on the fly in version 1.21. After a lot of googling I have found that in the past the ItemStack class had the functions getTagCompound() and setTagCompound(), however they seem to have been deprecated? It's unfortunate because that seemed so straight forward and I can't find much info on the subject otherwise. Apologies if this isn't worded nicely as I am still pretty new to minecraft modding. Any help would be appreciated.

Posted

Item Capabilities haven't been re-implemented in 1.21 yet, you can use Vanilla's Data Components system instead. See DataComponents and the related classes.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

Okay, so I actually downgraded the mod to 1.20.6 because I did not want to have to deal with vanilla datacomponents. I followed a youtube tutorial and now have a capability I made attach to my modded item. However I am now unsure how to actually retrieve and manipulate the capability of an itemstack. I saw a getCapability function in some tutorials but that seems to have been deprecated...

Posted

The situation is the same in 1.20.6. Data Components were introduced in 1.20.5/1.20.6 and Item Capabilities haven't been re-implemented since then.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

Okay, I'm glad I made a backup then. I'm confused as to where there is any information on how to work with Data Components. I don't see anything about it on the Forge docs or any tutorials on this in general unless I'm missing it somehow. I can see the DataComponents decompiled class file but I'm not sure how to work with it. Maybe it's beyond my technical expertise?

Posted

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

Okay, so I got everything set up and should have my data component registered. However when I try to register my modded item with the data component added to it, I get an error saying that the registry object (for the data component) is not present. I tried changing the order in which things are registered in the mod startup to no avail.

Posted

Forge fires RegisterEvent (which is used internally by DeferredRegister) for each registry in a specific order, so changing the registration order in your code won't help. I haven't actually been able to run my mod since 1.20.6 because I'm waiting on Item Capabilities, so I haven't encountered this error myself.

It looks like you can't use your DataComponentType during Item registration, so you probably need to get/add it on demand with getOrDefault and set, instead of in registration.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

Thanks. I removed the data component from item registration and the game boots fine now. However now when I try to call the set() method on my item stack during the item's useOn method, it still throws an error that the registry object is not present. I have registered the data component along with all of my other modded content in the main mod class, so I am at a genuine loss as to why this is still happening. I am new to these forums, am I allowed to link the github repo?

Posted

Have you registered the DeferredRegister with the mod event bus? You can link your GitHub repo.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Make a test with another Launcher like the Curseforge Launcher, MultiMC or AT Launcher
    • can anyone help me i am opening forge and add modpacks and then it says unable to update native luancher and i redownlaod java and the luancher it self?
    • The problem occurs also in 1.20.1 Forge, but with an "Error executing task on client" instead. I have "Sinytra Connector" installed. On 1.21.5 Fabric, there is no problem. When this happens, the chat message before the death screen appears gets sent, with an extra dash added.
    • Well, as usual, it was user error. Naming mismatch in sounds.json.  Please delete this post if you find it necessary. 
    • Hello Forge community.  I'm running into an issue with a mod I'm working on.  To preface, I can call /playsound modId:name music @a and I can hear the sound I registered being played in game. Great!  However, I cannot get it to trigger via my mod code.    Registration: public static final RegistryObject<SoundEvent> A_WORLD_OF_MADNESS = SOUND_EVENTS.register("a_world_of_madness", () -> new SoundEvent(new ResourceLocation("tetheredsouls", "a_world_of_madness")));   Playback: Minecraft mc = Minecraft.getInstance(); if (!(mc.player instanceof LocalPlayer) || mc.level == null) return; LocalPlayer player = (LocalPlayer) mc.player; BlockPos pos = player.blockPosition(); SoundEvent track = ModSounds.A_WORLD_OF_MADNESS.get(); System.out.println(track); System.out.println(pos); System.out.println(player); // play exactly like the tutorial: client-only, at the player's position try { mc.level.playLocalSound( player.getX(), player.getY(), player.getZ(), track, SoundSource.MUSIC, // Or MASTER if needed 1f, 1f, false ); System.out.println("[DEBUG] playSound success: " + track.getLocation()); } catch (Exception e) { System.err.println("[ERROR] Failed to play sound: " + track.getLocation()); e.printStackTrace(); } Sounds.json:   { "theme_of_laura": { "category": "music", "sounds": [ { "name": "tetheredsouls:a_world_of_madness", "stream": true } ] } } Things I have tried: - multiple .ogg files. Short .ogg files (5 seconds, <100KB).  - default minecraft sounds imported from import net.minecraft.sounds.SoundEvents; These work given my code. No idea why these are different.  - playSound() method, as well as several others in past iterations that did not work   I would be forever grateful if somebody could point me in the right direction. I've looked at several mod github repositories and found extremely similar code to what I'm doing. I've also found several threads in this forum that did not solve my issue. I just cannot figure out what I'm doing differently, and why I'm able to queue sounds manually with playsound but the code won't play it (despite confirming the code is being run with the debug statements.)
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.