CuboidModel.java

net.minecraft.client.resources.model.cuboid.CuboidModel

信息

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

    TODO

字段/常量

  • GSON
    • 类型: Gson
    • 修饰符: static final
    • 源码定位: L33
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.resources.model.cuboid.CuboidModel.Deserializer
    • 类型: class
    • 修饰符: public static
    • 源码定位: L47
    • 说明:

      TODO

构造器

方法

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

public static CuboidModel fromStream(Reader reader) @ L42

  • 方法名:fromStream
  • 源码定位:L42
  • 返回类型:CuboidModel
  • 修饰符:public static

参数:

  • reader: Reader

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public record CuboidModel(
    @Nullable UnbakedGeometry geometry,
    UnbakedModel.@Nullable GuiLight guiLight,
    @Nullable Boolean ambientOcclusion,
    @Nullable ItemTransforms transforms,
    TextureSlots.Data textureSlots,
    @Nullable Identifier parent
) implements UnbakedModel {
    @VisibleForTesting
    static final Gson GSON = new GsonBuilder()
        .registerTypeAdapter(CuboidModel.class, new CuboidModel.Deserializer())
        .registerTypeAdapter(CuboidModelElement.class, new CuboidModelElement.Deserializer())
        .registerTypeAdapter(CuboidFace.class, new CuboidFace.Deserializer())
        .registerTypeAdapter(ItemTransform.class, new ItemTransform.Deserializer())
        .registerTypeAdapter(ItemTransforms.class, new ItemTransforms.Deserializer())
        .create();
 
    public static CuboidModel fromStream(Reader reader) {
        return GsonHelper.fromJson(GSON, reader, CuboidModel.class);
    }
 
    @OnlyIn(Dist.CLIENT)
    public static class Deserializer implements JsonDeserializer<CuboidModel> {
        public CuboidModel deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
            JsonObject object = json.getAsJsonObject();
            UnbakedGeometry elements = this.getElements(context, object);
            String parentName = this.getParentName(object);
            TextureSlots.Data textureMap = this.getTextureMap(object);
            Boolean hasAmbientOcclusion = this.getAmbientOcclusion(object);
            ItemTransforms transforms = null;
            if (object.has("display")) {
                JsonObject display = GsonHelper.getAsJsonObject(object, "display");
                transforms = context.deserialize(display, ItemTransforms.class);
            }
 
            UnbakedModel.GuiLight guiLight = null;
            if (object.has("gui_light")) {
                guiLight = UnbakedModel.GuiLight.getByName(GsonHelper.getAsString(object, "gui_light"));
            }
 
            Identifier parentLocation = parentName.isEmpty() ? null : Identifier.parse(parentName);
            return new CuboidModel(elements, guiLight, hasAmbientOcclusion, transforms, textureMap, parentLocation);
        }
 
        private TextureSlots.Data getTextureMap(JsonObject object) {
            if (object.has("textures")) {
                JsonObject texturesObject = GsonHelper.getAsJsonObject(object, "textures");
                return TextureSlots.parseTextureMap(texturesObject);
            } else {
                return TextureSlots.Data.EMPTY;
            }
        }
 
        private String getParentName(JsonObject object) {
            return GsonHelper.getAsString(object, "parent", "");
        }
 
        protected @Nullable Boolean getAmbientOcclusion(JsonObject object) {
            return object.has("ambientocclusion") ? GsonHelper.getAsBoolean(object, "ambientocclusion") : null;
        }
 
        protected @Nullable UnbakedGeometry getElements(JsonDeserializationContext context, JsonObject object) {
            if (!object.has("elements")) {
                return null;
            } else {
                List<CuboidModelElement> elements = new ArrayList<>();
 
                for (JsonElement element : GsonHelper.getAsJsonArray(object, "elements")) {
                    elements.add(context.deserialize(element, CuboidModelElement.class));
                }
 
                return new UnbakedCuboidGeometry(elements);
            }
        }
    }
}

引用的其他类

  • UnbakedModel

    • 引用位置: 实现/方法调用
    • 关联成员: UnbakedModel.GuiLight.getByName()
  • CuboidFace

    • 引用位置: 方法调用/构造调用
    • 关联成员: CuboidFace.Deserializer(), Deserializer()
  • CuboidModelElement

    • 引用位置: 方法调用/构造调用
    • 关联成员: CuboidModelElement.Deserializer(), Deserializer()
  • ItemTransform

    • 引用位置: 方法调用/构造调用
    • 关联成员: Deserializer(), ItemTransform.Deserializer()
  • ItemTransforms

    • 引用位置: 方法调用/构造调用
    • 关联成员: Deserializer(), ItemTransforms.Deserializer()
  • UnbakedCuboidGeometry

    • 引用位置: 构造调用
    • 关联成员: UnbakedCuboidGeometry()
  • TextureSlots

    • 引用位置: 方法调用
    • 关联成员: TextureSlots.parseTextureMap()
  • ClientboundPlayerInfoUpdatePacket

    • 引用位置: 参数
  • Identifier

    • 引用位置: 方法调用
    • 关联成员: Identifier.parse()
  • GsonHelper

    • 引用位置: 方法调用
    • 关联成员: GsonHelper.fromJson(), GsonHelper.getAsBoolean(), GsonHelper.getAsJsonArray(), GsonHelper.getAsJsonObject(), GsonHelper.getAsString()