Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

Hey guys!

 

I've got a slightly weird issue, so bear with me. I'll explain it as best I can.

 

Basically, from what I understand the "normal" method of adding items to worldgen chests is using ChestGenHooks and WeightedRandomChestContent. From my understanding, that adds the item you provide to a list, which is then checked against when a chest is generated into the world, and it decides whether or not to generate your particular item based on the rarity value you provide.

 

Now, in my mod, I'm wanting to add roughly ~150 items to these generated chests. There should be about a 1 in 20 chance that a chest will contain a single one of these items - but I only want it to contain one in that situation. On top of that, some of my items should be "Rarer" than others.

 

Ideally, I want the game to simply call a method saying "I'm generating a chest now, what item should I add?", and then I can run my own code to decide which lucky item gets spawned in this situation (using RNGs to select the item type and then the rarity, and picking an item at random from the relevant category). This is how I handle stuff for mob drops and it works great.

 

Is there any way for me to do that with dungeon chests by default? It's not 100% the end of the world if not as I'm adding my own custom chests alongside them - but it would just be nice to support the vanilla systems too :)

 

(The other reason behind this is that about 50 of the items require a number of NBT values attached to function properly - meaning I'd have to create all those values for each itemstack when registering it. I dread to think how long and messy the class would get if I were to do that...)

 

Any help appreciated :)

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

  • Author

Hey guys!

 

I've got a slightly weird issue, so bear with me. I'll explain it as best I can.

 

Basically, from what I understand the "normal" method of adding items to worldgen chests is using ChestGenHooks and WeightedRandomChestContent. From my understanding, that adds the item you provide to a list, which is then checked against when a chest is generated into the world, and it decides whether or not to generate your particular item based on the rarity value you provide.

 

Now, in my mod, I'm wanting to add roughly ~150 items to these generated chests. There should be about a 1 in 20 chance that a chest will contain a single one of these items - but I only want it to contain one in that situation. On top of that, some of my items should be "Rarer" than others.

 

Ideally, I want the game to simply call a method saying "I'm generating a chest now, what item should I add?", and then I can run my own code to decide which lucky item gets spawned in this situation (using RNGs to select the item type and then the rarity, and picking an item at random from the relevant category). This is how I handle stuff for mob drops and it works great.

 

Is there any way for me to do that with dungeon chests by default? It's not 100% the end of the world if not as I'm adding my own custom chests alongside them - but it would just be nice to support the vanilla systems too :)

 

(The other reason behind this is that about 50 of the items require a number of NBT values attached to function properly - meaning I'd have to create all those values for each itemstack when registering it. I dread to think how long and messy the class would get if I were to do that...)

 

Any help appreciated :)

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

I recommend walking through the vanilla code that adds chests. See if there's a suitable Forge event called at the end that gives you "last licks" to modify the chest contents. If "lucky", find an empty inventory slot and add your one dynamically generated special item.

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

I recommend walking through the vanilla code that adds chests. See if there's a suitable Forge event called at the end that gives you "last licks" to modify the chest contents. If "lucky", find an empty inventory slot and add your one dynamically generated special item.

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

  • Author

I had a quick look through the events list and there's nothing specifically about creating chests, and the generation events don't seem to have any reference to them either - but the InitMapGenEvent does contain vague information about what structures are being generated.

 

I'll have a proper look through the code tonight and see if that's do-able. Hopefully there will be some way to grab it via an event, that's a good idea - but if not does anyone else have any other ideas?

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

  • Author

I had a quick look through the events list and there's nothing specifically about creating chests, and the generation events don't seem to have any reference to them either - but the InitMapGenEvent does contain vague information about what structures are being generated.

 

I'll have a proper look through the code tonight and see if that's do-able. Hopefully there will be some way to grab it via an event, that's a good idea - but if not does anyone else have any other ideas?

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Look at WeightedRandomChestContent, you can extend it and override WeightedRandomChestContent#generateChestContent() to have more control over loot.

Look at WeightedRandomChestContent, you can extend it and override WeightedRandomChestContent#generateChestContent() to have more control over loot.

Guest
This topic is now closed to further replies.

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.