Jump to content

[1.15] Loot Table Function/Condition Issues [SOLVED]


Recommended Posts

Posted (edited)

I'm trying to add a loot table function/condition so that I can change the item that is dropped by a block based on a condition. I've tried adding both a function and a condition and I have had no success. What am I missing here?
 

This is the function that I tried.

  Reveal hidden contents

This is the loot table that I create for the function.

  Reveal hidden contents

This is the condition that I tried.

  Reveal hidden contents

This is the loot table I create for the condition.

  Reveal hidden contents

I register both of them here.

  Reveal hidden contents

 

Any help would be much appreciated.

 

EDIT: I'm overriding the cobblestone loot table and the loot table file is placed in data/minecraft/loot_tables/blocks

Edited by Tikaji
Some more info on issue.
Posted

I was messing with loot recently using global loot modifiers, and it worked pretty sweet. Looks very similar in setup to what you're doing here, just different way of registering I guess. Here's the link: https://github.com/MinecraftForge/MinecraftForge/blob/1.15.x/src/test/java/net/minecraftforge/debug/gameplay/loot/GlobalLootModifiersTest.java

 

And here's a link to the thread I had started while trying to figure it out, hope it helps!

https://www.minecraftforge.net/forum/topic/83671-1152-manipulate-actual-block-drops-not-what-can-drop/

 

Posted

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

Ok, so I got the Loot Modifier to work, but now I have the issue that gravel and sand will drop two of the same item. However, cobblestone drops one item using the same functionality. Why would that be?

Posted
  On 4/17/2020 at 2:56 AM, Tikaji said:

Ok, so I got the Loot Modifier to work, but now I have the issue that gravel and sand will drop two of the same item. However, cobblestone drops one item using the same functionality. Why would that be?

Expand  

Show your code.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted (edited)

Here's the modifier:

  Reveal hidden contents

Here is the loot modifier json:

  Reveal hidden contents

And here is the item. I assumed that I have to use the onBlockDestroyed in order to cause block drops for a custom tool. I was getting no drops with it otherwise.

  Reveal hidden contents

Let me know if there is anything else. I'll step through the code and it calls the spawnDrops method twice.

Edited by Tikaji
Posted
  On 4/17/2020 at 3:32 AM, Tikaji said:

And here is the item. I assumed that I have to use the onBlockDestroyed in order to cause block drops for a custom tool. I was getting no drops with it otherwise.

Expand  

You are not supposed to do that from what I can tell I haven't messed around with Global Loot Modifiers yet, but seeing as how LootModifier::doApply returns a List<ItemStack> I assume that are the drops.

 

  On 4/17/2020 at 3:32 AM, Tikaji said:

ItemStack tool = context.get(LootParameters.TOOL);

Expand  

ItemStacks can never be null. Use itemStack::isEmpty

 

  On 4/17/2020 at 3:32 AM, Tikaji said:

blockState != null

Expand  

I'm also unsure about this. I don't know if a BlockState will ever be null. I'd assume the default null-like value is the BlockState for AIR.

 

  On 4/17/2020 at 3:32 AM, Tikaji said:

Let me know if there is anything else. I'll step through the code and it calls the spawnDrops method twice.

Expand  

Have you stepped through your LootModifier::doApply code is it called twice? Is it called at all aside from your Block.spawnDrops call?

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted

Ok, so I got rid of the onBlockDestroyed method, which caused doApply to only get called once, and I'm getting block drops from sand and gravel, only one item which is the expected result, but now I'm not getting anything from cobblestone. The modifier isn't being fired. My guess is something is wrong with the JSON file because that's what determines when the modifier gets fired, correct?

Posted
  On 4/17/2020 at 3:32 AM, Tikaji said:

MasterRegistry.HAMMER_REGISTRY .getResult(blockState.getBlock());

Expand  

What does this look like? Do you add cobblestone to it?

  On 4/17/2020 at 5:23 AM, Tikaji said:

My guess is something is wrong with the JSON file because that's what determines when the modifier gets fired, correct?

Expand  

That would be my only idea as well, but I can't see what's wrong with it. Try setting a breakpoint in the area before global loot modifiers are called to see why your loot modifier condition is not true.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted (edited)
  On 4/17/2020 at 5:38 AM, Animefan8888 said:
  On 4/17/2020 at 3:32 AM, Tikaji said:

MasterRegistry.HAMMER_REGISTRY .getResult(blockState.getBlock());

Expand  

What does this look like? Do you add cobblestone to it?

Expand  

I do add cobblestone to the registry. Its simply a map that takes a block as input and determines the output.

I also updated the JSON to see if any other blocks would work. The only two that work and trigger the modifier are sand and gravel. I also stripped it down to just cobblestone and it doesn't work.
Updated JSON:

  Reveal hidden contents
  On 4/17/2020 at 5:38 AM, Animefan8888 said:

Try setting a breakpoint in the area before global loot modifiers are called to see why your loot modifier condition is not true.

Expand  

As far as I can tell Blocks.getDrops (which does the correct calls to use the loot table modifiers) isn't called when my custom tool is used on anything except sand and gravel.

Edited by Tikaji
Posted
  On 4/17/2020 at 6:01 AM, Tikaji said:

As far as I can tell Blocks.getDrops (which does the correct calls to use the loot table modifiers) isn't called when my custom tool is used on anything except sand and gravel.

Expand  

You either need to used the PlayerEvent.HarvestCheck event to say the player can harvest those blocks with your Hammer Item(s) or make your Hammer a Pickaxe by adding a ToolType via the Item.Properties::addToolType method.

 

I believe the first option is the most suitable.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted

I would assume that I need to add an event handler for this, but I'm not entirely sure exactly what I need within the handler. Got a good place to point me to for this?

Posted
  On 4/17/2020 at 6:32 AM, Tikaji said:

Got a good place to point me to for this?

Expand  

Not sure how much you know about Events but here is the documentation. You need to subscribe to the PlayerEvent.HarvestCheck event. And call HarvestCheck::setCanHarvest(true). Use the methods within the event to determine if the player is holding your Hammer and if they are say they can harvest the block.

  • Thanks 1

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

  • Tikaji changed the title to [1.15] Loot Table Function/Condition Issues [SOLVED]
Posted
  On 4/17/2020 at 3:32 AM, Tikaji said:

if (tool.getItem() instanceof HammerBaseItem)

Expand  

This should also be specified by your loot json file:

https://github.com/MinecraftForge/MinecraftForge/blob/1.15.x/src/test/resources/data/global_loot_test/loot_modifiers/wheat_harvest.json#L5-L8

 

  On 4/17/2020 at 5:07 AM, Animefan8888 said:

but seeing as how LootModifier::doApply returns a List<ItemStack> I assume that are the drops.

Expand  

This is correct.

 

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

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



×
×
  • Create New...

Important Information

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