Изменить текстуру BakedQuad в кастомной реализации IBakedModel

Версия Minecraft
1.16.5
API
Forge

tox1cozZ

aka Agravaine
8,455
598
2,892
Собственно, сабж.
В 1.12.2 с этим не было никаких проблем - был готовый класс BakedQuadRetextured, который без проблем позволял изменить текстуру квада:
1658997149322.png
В 1.16.5 я такого вообще не нашёл. Пытался скопировать класс, код довольно сильно отличается, половины методов/полей нет, чем я только не пытался их заменять - без толку.

Может как-то иначе можно решить задачу? Мне нужно просто изменить текстуру конкретной стороны блока в зависимости от определённых условий.
 
Решение
Решено.
Нашёл портированную версию тут: 1.15/BakedQuadRetextured.java at a67152e26d4213cb4f055f631b9db3abe698a308 · KingLemming/1.15
Адаптировал под маппинги 1.16.5:
Java:
import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.model.FaceBakery;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.jetbrains.annotations.NotNull;

import java.util.Arrays;

@OnlyIn(Dist.CLIENT)
public class BakedQuadRetextured extends BakedQuad {

    private final TextureAtlasSprite texture;

    public BakedQuadRetextured(BakedQuad...

tox1cozZ

aka Agravaine
8,455
598
2,892
Решено.
Нашёл портированную версию тут: 1.15/BakedQuadRetextured.java at a67152e26d4213cb4f055f631b9db3abe698a308 · KingLemming/1.15
Адаптировал под маппинги 1.16.5:
Java:
import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.model.FaceBakery;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.jetbrains.annotations.NotNull;

import java.util.Arrays;

@OnlyIn(Dist.CLIENT)
public class BakedQuadRetextured extends BakedQuad {

    private final TextureAtlasSprite texture;

    public BakedQuadRetextured(BakedQuad quad, TextureAtlasSprite overrideSprite) {

        super(Arrays.copyOf(quad.getVertices(), quad.getVertices().length), quad.getTintIndex(), FaceBakery.calculateFacing(quad.getVertices()), quad.getSprite(), quad.isShade());
        texture = overrideSprite;
        remapQuad();
    }

    private void remapQuad() {
        for (int i = 0; i < 4; ++i) {
            int j = DefaultVertexFormats.BLOCK.getIntegerSize() * i;
            int uvIndex = 4;
            vertices[j + uvIndex] = Float.floatToRawIntBits(texture.getU(getUnInterpolatedU(sprite, Float.intBitsToFloat(vertices[j + uvIndex]))));
            vertices[j + uvIndex + 1] = Float.floatToRawIntBits(texture.getV(getUnInterpolatedV(sprite, Float.intBitsToFloat(vertices[j + uvIndex + 1]))));
        }
    }

    @NotNull
    @Override
    public TextureAtlasSprite getSprite() {
        return texture;
    }

    private static float getUnInterpolatedU(TextureAtlasSprite sprite, float u) {
        float f = sprite.getU1() - sprite.getU0();
        return (u - sprite.getU0()) / f * 16.0F;
    }

    private static float getUnInterpolatedV(TextureAtlasSprite sprite, float v) {
        float f = sprite.getV1() - sprite.getV0();
        return (v - sprite.getV0()) / f * 16.0F;
    }
}
 
Последнее редактирование:
Сверху