FlashHUN Posted April 9, 2020 Posted April 9, 2020 I looked at how a filled map item gets block colors, tried something similar, but I've ran into a couple of issues. My code: private MaterialColor getBlockColorAt(int x, int z) { Chunk chunk = client.world.getChunkAt(new BlockPos(x, 0, z)); int y = chunk.getTopBlockY(Heightmap.Type.WORLD_SURFACE, x, z); BlockPos pos = new BlockPos(x, y, z); return client.world.getBlockState(pos).getMaterialColor(client.world.getBlockReader(chunk.getPos().x, chunk.getPos().z), pos); } Issues:BlockState#getMaterialColor is deprecated and I can't find any alternatives to use y always returns -1 What am I doing wrong? What do I need to do to get a block's color at a specific position? Quote
TheGreyGhost Posted April 10, 2020 Posted April 10, 2020 Howdy based on FilledMapItem::updateMapData and BlockColors::getColorOrMaterialColor, I think you should just use World and not mess with Chunk. It's ok to call BlockState::getMaterialColor. Don't worry too much about the @deprecated, they are sprinkled throughout the code and usually don't actually mean anything relevant (sometimes they are suggesting a more-flexible alternative but it's nearly always fine to ignore them.) Cheers TGG Quote
TheGreyGhost Posted April 11, 2020 Posted April 11, 2020 On 4/10/2020 at 6:49 PM, diesieben07 said: Mojang uses these to signify that these methods shouldn't be called, but overriding them is fine. In the case of BlockState#getMaterialColor however it seems to be a wrongly ported Forge patch. Yeah I think you're right about BlockState#getMaterialColor. But I had assumed that the @deprecated are put there by MCP not by Mojang? Do annotations survive the obfuscation process? (Given that I've never seen any vanilla code using reflection) Quote
Recommended Posts
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.