Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

1.18.2 and tag changes


Adil Yilan
 Share

Recommended Posts

Hello,

Seems that there have been some breaking changes with 1.18.2 regarding the tags.

Following code no longer works:

public static final Tags.IOptionalNamedTag<Block> MACHINES = 
            BlockTags.createOptional(new ResourceLocation(ExperimentalMod.MODID, "machines"));

However, I have managed to change the code to:

    public static final TagKey<Block> MACHINES = 
            BlockTags.create(new ResourceLocation(ExperimentalMod.MODID, "machines"));

Is this valid migration path?

There are two additional lines of code that do not work any longer:

List<Block> flowers = BlockTags.SMALL_FLOWERS.getValues();

Method .getValues() no longer exists. Is there another way to get all blocks that have specific tag?

Same is with .is(...) method:

if (!blockState.is(BlockTags.LOGS)) {
	return;
}

Is there a different approach now to check if BlockState is tagged with specific tag?

Thanks!

Link to comment
Share on other sites

Things that goin into inventories, are items, blocks are in world placed.  So if you're using a tag file for say crafting/fuel/slot/whatnot,  it has to be an item tag.  the block tags are for literal inworld use (axe on log, for stripped_log)
-log placed world is the block tag use. 
-axe is the item tag use. 
-log in inventory, is item tag.
== aka, the fuel tag for logs is an item tag [logs_that_burn] to be put into a furnace. {as well as having a matching block tag}

Link to comment
Share on other sites

@DePhoegon I am not sure what exactly are you trying to point out.

Methods above were valid in Forge for 1.18.1.

Since update to 1.18.2 methods have stopped to exist so there are probably replacement methods that I am trying to find.

.is(..) method on BlockState existed before in 1.18.1 .

Link to comment
Share on other sites

13 minutes ago, Adil Yilan said:

@DePhoegon I am not sure what exactly are you trying to point out.

Methods above were valid in Forge for 1.18.1.

Since update to 1.18.2 methods have stopped to exist so there are probably replacement methods that I am trying to find.

.is(..) method on BlockState existed before in 1.18.1 .

I must be dumb tired... but I believe you may need to examine 2 java classes

net.minecraft.data.tags
-BlockTagsProvider
-ItemTagsProvider

I believe that the way it was handled got shifted into those classes. 

 

I'm sorry for the confusion from me... but I hope it helps.

Link to comment
Share on other sites

.is(..) method is still there where it used to be.

Issue was with version of parchment mappings that I was using so method was obfuscated to something else.

I have updated to use latest parchment version (from yesterday) and that problem is now gone:

1.18.1-2022.03.06-1.18.2

 

Link to comment
Share on other sites

I am still not able to find a replacement method for .getValues().

Does anyone know how to get all blocks with specific tag?

@DePhoegon I have inspected BlockTagsProvider and ItemTagsProvider but I am not familiar with how to use those.

Aren't these supposed to be used with data generators?

 

Link to comment
Share on other sites

22 minutes ago, Adil Yilan said:

I am still not able to find a replacement method for .getValues().

Does anyone know how to get all blocks with specific tag?

@DePhoegon I have inspected BlockTagsProvider and ItemTagsProvider but I am not familiar with how to use those.

Aren't these supposed to be used with data generators?

 

from how they are structured, it seems they are for a clear separation of tags to prevent any chance of confusion or confliction.  

I would suggest you poke about and see what the methods in those java classes actually do.

Pay attention to how it is done for regular Minecraft stuff now, and how they are called. 
-- you have to remember that things like small flowers, desert plants, & even 'trees' have tags that are used to allow them to be planted on certain blocks.

I likely will have to go over this explicitly, to ensure my sand, sand slabs, & upside down stairs will support the deadbushes, & cacti.. but I am sure you can figure it out.  they are used in the code.

Link to comment
Share on other sites

@DePhoegon To create an instance of BlockTagsProvider, I would have to pass in DataGenerator.

I need to get list of all blocks in runtime, not when data is generating.

Apart from seeing the map of tags and blocks, I don't see how could I use that while the mod is running.

Link to comment
Share on other sites

  • 1 month later...

This is kind of hard to get them because items or blocks don't belong to tags, but tags belong to them : basically, an item (or a block) has a list of tags associated to it.

Luckily, there's another way to get the tag rather than looping through every item in the game and check if it has the tag you want :

// This is to get the values of a tag that is bound to items :
ForgeRegistries.ITEMS.tags().getTag([THE TAG YOU WANT]).stream().toList(); // Returns a List<Item>
//                                           ^
//                                Should be a TagKey<Item>


// To get a tag that is bound to blocks :
ForgeRegistries.BLOCKS.tags().getTag([THE TAG YOU WANT]).stream().toList(); // Returns a List<Block>
//                                            ^
//                                Should be a TagKey<Block>

Hope it helps :)

  • Thanks 2
Link to comment
Share on other sites

  • 2 weeks later...
Posted (edited)

Well, I'm not sure (as I haven't tested it for some reason), but I think this would like to work:

ForgeRegistries.<FORGE REGISTRY ENTRY>.tags().getTag(<THE TAG YOU WANT>).stream()

e.g. ForgeRegistries.BLOCKS.tags().getTag(BlockTags.REPLACEABLE_PLANTS).stream()

Edited by Shage_Jack
Link to comment
Share on other sites

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
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.

 Share



×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.