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]);
}
}
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
GsonHelper.convertToFloat(), GsonHelper.getAsJsonArray()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.clamp()
- 引用位置: