Jump to content

Recommended Posts

Posted

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!

Posted

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}

Posted

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

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

Posted

.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

 

Posted

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?

 

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

Posted

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

  • 1 month later...
Posted

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

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

    • that happens every time I enter a new dimension.
    • This is the last line before the crash: [ebwizardry]: Synchronising spell emitters for PixelTraveler But I have no idea what this means
    • What in particular? I barely used that mod this time around, and it's never been a problem in the past.
    • Im trying to build my mod using shade since i use the luaj library however i keep getting this error Reason: Task ':reobfJar' uses this output of task ':shadowJar' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. So i try adding reobfJar.dependsOn shadowJar  Could not get unknown property 'reobfJar' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. my gradle file plugins { id 'eclipse' id 'idea' id 'maven-publish' id 'net.minecraftforge.gradle' version '[6.0,6.2)' id 'com.github.johnrengelman.shadow' version '7.1.2' id 'org.spongepowered.mixin' version '0.7.+' } apply plugin: 'net.minecraftforge.gradle' apply plugin: 'org.spongepowered.mixin' apply plugin: 'com.github.johnrengelman.shadow' version = mod_version group = mod_group_id base { archivesName = mod_id } // Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. java.toolchain.languageVersion = JavaLanguageVersion.of(17) //jarJar.enable() println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" minecraft { mappings channel: mapping_channel, version: mapping_version copyIdeResources = true runs { configureEach { workingDirectory project.file('run') property 'forge.logging.markers', 'REGISTRIES' property 'forge.logging.console.level', 'debug' arg "-mixin.config=derp.mixin.json" mods { "${mod_id}" { source sourceSets.main } } } client { // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. property 'forge.enabledGameTestNamespaces', mod_id } server { property 'forge.enabledGameTestNamespaces', mod_id args '--nogui' } gameTestServer { property 'forge.enabledGameTestNamespaces', mod_id } data { workingDirectory project.file('run-data') args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') } } } sourceSets.main.resources { srcDir 'src/generated/resources' } repositories { flatDir { dirs './libs' } maven { url = "https://jitpack.io" } } configurations { shade implementation.extendsFrom shade } dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" implementation 'org.luaj:luaj-jse-3.0.2' implementation fg.deobf("com.github.Virtuoel:Pehkui:${pehkui_version}") annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' minecraftLibrary 'luaj:luaj-jse:3.0.2' shade 'luaj:luaj-jse:3.0.2' } // Example for how to get properties into the manifest for reading at runtime. tasks.named('jar', Jar).configure { manifest { attributes([ 'Specification-Title' : mod_id, 'Specification-Vendor' : mod_authors, 'Specification-Version' : '1', // We are version 1 of ourselves 'Implementation-Title' : project.name, 'Implementation-Version' : project.jar.archiveVersion, 'Implementation-Vendor' : mod_authors, 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker", "TweakOrder" : 0, "MixinConfigs" : "derp.mixin.json" ]) } rename 'mixin.refmap.json', 'derp.mixin-refmap.json' } shadowJar { archiveClassifier = '' configurations = [project.configurations.shade] finalizedBy 'reobfShadowJar' } assemble.dependsOn shadowJar reobf { re shadowJar {} } publishing { publications { mavenJava(MavenPublication) { artifact jar } } repositories { maven { url "file://${project.projectDir}/mcmodsrepo" } } } my entire project:https://github.com/kevin051606/DERP-Mod/tree/Derp-1.0-1.20
  • Topics

×
×
  • Create New...

Important Information

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