Jump to content

Recommended Posts

Posted (edited)

Your question is a bit vague, it's equivalent to asking about getting the int from a Block.

 

Which ResourceLocation do you want? The registry name? The model location? Something else?

Edited by Choonster

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

The registry name is the object's unique identifier, it's not directly related to rendering (though it's used as the default location for blockstates files [for Blocks] and item models [for Items]).

 

Blocks don't have textures, they have models. Models do have textures, though.

 

What exactly are you trying to do?

 

You can use BlockRendererDispatcher#getModelForState to get the IBakedModel for an IBlockState. If you need the model's location rather than the model itself, use BlockStateMapper#getVariants to get a Map<IBlockState, ModelResourceLocation> for a Block and use it to look up the ModelResourceLocation for an IBlockState.

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

Use IBakedModel#getQuads to get the model's BakedQuads and use BakedQuad#getSprite to get the texture of a BakedQuad.

 

You can also use IBakedModel#getParticleTexture to get a model's particle texture.

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 (edited)

In case you want something more specific, this should work.

First you'll have to choose the block state you want to use. For example:

IBlockState state = Blocks.STONE.getDefaultState();

 

Then use:

Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getTexture(state);

 

EDIT

If you want to specify the side/facing etc. use:

Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelForState(state);

 

Then you can use something like this to get the texture:

 

    private TextureAtlasSprite getTexture(IBakedModel ibakedmodel, IBlockState state, EnumFacing facing) {
    	List<BakedQuad> quadList = ibakedmodel.getQuads(state, facing, 0L);
        TextureAtlasSprite sprite = quadList.isEmpty() ? ibakedmodel.getParticleTexture() : quadList.get(0).getSprite();
        return sprite == null ? this.missingTexture : sprite;
    }

 

My method above is for my own usage and won't work for some blocks like lava, water and certain tile entity blocks but .getTexture(state) should.

Better yet, take a look at BlockModelShapes.getTexture(state) method. You could copy that and modify it to your liking.

 

You can change the quadList.get(index) to another index to get another quad attached to that facing.

Edited by Vryday_Vrything
punctuation, elaboration
Posted
7 hours ago, MCrafterzz said:

Thanks both of you. Choonster what should I get the IBakedModel from because it can't be used staticly

 

9 hours ago, Choonster said:

You can use BlockRendererDispatcher#getModelForState to get the IBakedModel for an IBlockState.

 

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

BlockRendererDispatcher.getModelForState isn't a static method, it's an instance one. You need to call the method on an instance of BlockRendererDispatcher. You can obtain that instance from Minecraft.getMinecraft().getBlockRendererDispatcher().

Don't make mods if you don't know Java.

Check out my website: http://shadowfacts.net

Developer of many mods

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

    • 1) Update to the latest build of Forge for your MC version. The recommended build actually means minimum recommended. I can’t remember if it was backported to 1.20.1 or not, but we did clean up the early loading screen a bit in newer builds to look less cluttered. 2) Change the accessibility setting in game to black background. The early loading screen will then be black instead of red.
    • I'm sure this entire community knows exactly who you are, what mixin you're talking about, and how deer function in minecraft.  But being new here, and I am ignorant about all of those things. That said, I'd love to review your mixin.  I'm also having mixin issues, and I feel that if I can help you, perhaps both of our problems might get solved. Can you provide some links and context for people who aren't aware of your renown?  I'm asking humbly because I know you probably have better things to do, and you just want somebody to fix things for you.
    • I am working in the latest MDK.  Minecraft 1.21.4, Forge 54.1.0. I am trying to create a mixin.  The implementation doesn't matter.  Assume it is doing nothing more than logging to the console: @Mixin(LevelRenderer.class) public abstract class LevelRendererMixin { private static final Logger LOGGER = LogManager.getLogger("LevelRendererMixin"); @Inject(method = "renderLevel", at = @At("TAIL")) private void onRenderLevel( com.mojang.blaze3d.resource.GraphicsResourceAllocator allocator, net.minecraft.client.DeltaTracker deltaTracker, boolean someFlag, Camera camera, GameRenderer gameRenderer, Matrix4f matrix1, Matrix4f matrix2, CallbackInfo ci ) { Assuming my whole implementation is just to write something to console, it works perfectly fine in when I debug (runClient) in IntelliJ.  Whenever the Minecraft `renderLevel` runs every frame, my logging is overlaid at "TAIL". Yes, this spams the sht out of the console. But when I `build` and use the jar as a mod, it does not.  The mixin annotation processor shows to be loading, and my other parts of my mod work, but the nothing gets logged by my mixin. I am apparently generating a proper `refmap` and it's in the jar root.  Other files are also in the jar appropriately, including mods.toml.  And all the naming and reference paths are correct. I had to add this to my build.gradle to get my refmap into the jar ([name] obviously replaced): tasks.register("copyRefmap", Copy) { dependsOn tasks.named("compileJava") from("${project.buildDir}/tmp/compileJava") { include "mixins.[name].refmap.json" } into("${project.buildDir}/resources/main") } tasks.named("processResources", ProcessResources).configure { dependsOn(tasks.named("copyRefmap")) } tasks.named("jar", Jar).configure { // Include the generated refmap from build/resources/main into the jar. from("${project.buildDir}/resources/main") { include "mixins.[name].refmap.json" } }   Just for fun, here is my refmap in case something looks wrong to anybody:   { "mappings": { "com/[name]/mixin/LevelRendererMixin": { "renderLevel": "Lnet/minecraft/client/renderer/LevelRenderer;m_109599_(Lcom/mojang/blaze3d/resource/GraphicsResourceAllocator;Lnet/minecraft/client/DeltaTracker;ZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V" } }, "data": { "searge": { "com/[name]/mixin/LevelRendererMixin": { "renderLevel": "Lnet/minecraft/client/renderer/LevelRenderer;m_109599_(Lcom/mojang/blaze3d/resource/GraphicsResourceAllocator;Lnet/minecraft/client/DeltaTracker;ZLnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/GameRenderer;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V" } } } } TLDR; My mixin works in dev, but not when built and run in an official Forge/Minecraft environment.  Like it's not overlaying/replacing the minecraft function. What are some typical other things to check when a mixin works in dev, but not after build?
    • Thank you, Ugdhar.  But that only confirms the problem.  Both in the github and in my IDE, if I search for objects extended from net.minecraftforge.client.event, it isn't there.  Though the javadocs (at least at nekoyue) say it should be. Maybe since it definitely isn't there, is there some other way anybody knows to highlight some blocks (without mixins and drawing artificial faces on the camera).
  • Topics

×
×
  • Create New...

Important Information

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