ItemTransform.java

net.minecraft.client.resources.model.cuboid.ItemTransform

信息

  • 全限定名:net.minecraft.client.resources.model.cuboid.ItemTransform
  • 类型:public record
  • 包:net.minecraft.client.resources.model.cuboid
  • 源码路径:src/main/java/net/minecraft/client/resources/model/cuboid/ItemTransform.java
  • 起始行号:L20
  • 职责:

    TODO

字段/常量

  • NO_TRANSFORM
    • 类型: ItemTransform
    • 修饰符: public static final
    • 源码定位: L21
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.resources.model.cuboid.ItemTransform.Deserializer
    • 类型: class
    • 修饰符: protected static
    • 源码定位: L51
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

public void apply(boolean applyLeftHandFix, PoseStack.Pose pose) @ L23

  • 方法名:apply
  • 源码定位:L23
  • 返回类型:void
  • 修饰符:public

参数:

  • applyLeftHandFix: boolean
  • pose: PoseStack.Pose

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public record ItemTransform(Vector3fc rotation, Vector3fc translation, Vector3fc scale) {
    public static final ItemTransform NO_TRANSFORM = new ItemTransform(new Vector3f(), new Vector3f(), new Vector3f(1.0F, 1.0F, 1.0F));
 
    public void apply(boolean applyLeftHandFix, PoseStack.Pose pose) {
        if (this == NO_TRANSFORM) {
            pose.translate(-0.5F, -0.5F, -0.5F);
        } else {
            float translationX;
            float rotY;
            float rotZ;
            if (applyLeftHandFix) {
                translationX = -this.translation.x();
                rotY = -this.rotation.y();
                rotZ = -this.rotation.z();
            } else {
                translationX = this.translation.x();
                rotY = this.rotation.y();
                rotZ = this.rotation.z();
            }
 
            pose.translate(translationX, this.translation.y(), this.translation.z());
            pose.rotate(
                new Quaternionf()
                    .rotationXYZ(this.rotation.x() * (float) (Math.PI / 180.0), rotY * (float) (Math.PI / 180.0), rotZ * (float) (Math.PI / 180.0))
            );
            pose.scale(this.scale.x(), this.scale.y(), this.scale.z());
            pose.translate(-0.5F, -0.5F, -0.5F);
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    protected static class Deserializer implements JsonDeserializer<ItemTransform> {
        private static final Vector3f DEFAULT_ROTATION = new Vector3f(0.0F, 0.0F, 0.0F);
        private static final Vector3f DEFAULT_TRANSLATION = new Vector3f(0.0F, 0.0F, 0.0F);
        private static final Vector3f DEFAULT_SCALE = new Vector3f(1.0F, 1.0F, 1.0F);
        public static final float MAX_TRANSLATION = 5.0F;
        public static final float MAX_SCALE = 4.0F;
 
        public ItemTransform deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
            JsonObject object = json.getAsJsonObject();
            Vector3f rotation = this.getVector3f(object, "rotation", DEFAULT_ROTATION);
            Vector3f translation = this.getVector3f(object, "translation", DEFAULT_TRANSLATION);
            translation.mul(0.0625F);
            translation.set(Mth.clamp(translation.x, -5.0F, 5.0F), Mth.clamp(translation.y, -5.0F, 5.0F), Mth.clamp(translation.z, -5.0F, 5.0F));
            Vector3f scale = this.getVector3f(object, "scale", DEFAULT_SCALE);
            scale.set(Mth.clamp(scale.x, -4.0F, 4.0F), Mth.clamp(scale.y, -4.0F, 4.0F), Mth.clamp(scale.z, -4.0F, 4.0F));
            return new ItemTransform(rotation, translation, scale);
        }
 
        private Vector3f getVector3f(JsonObject object, String key, Vector3f def) {
            if (!object.has(key)) {
                return def;
            } else {
                JsonArray vecArray = GsonHelper.getAsJsonArray(object, key);
                if (vecArray.size() != 3) {
                    throw new JsonParseException("Expected 3 " + key + " values, found: " + vecArray.size());
                } else {
                    float[] elements = new float[3];
 
                    for (int i = 0; i < elements.length; i++) {
                        elements[i] = GsonHelper.convertToFloat(vecArray.get(i), key + "[" + i + "]");
                    }
 
                    return new Vector3f(elements[0], elements[1], elements[2]);
                }
            }
        }
    }
}

引用的其他类

  • PoseStack

    • 引用位置: 参数
  • GsonHelper

    • 引用位置: 方法调用
    • 关联成员: GsonHelper.convertToFloat(), GsonHelper.getAsJsonArray()
  • Mth

    • 引用位置: 方法调用
    • 关联成员: Mth.clamp()