minecraft-src/net/minecraft/client/resources/model/ItemModel.java
2025-07-04 02:49:36 +03:00

55 lines
1.7 KiB
Java

package net.minecraft.client.resources.model;
import java.util.List;
import java.util.function.Function;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.block.model.BakedOverrides;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.ItemOverride;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.resources.ResourceLocation;
@Environment(EnvType.CLIENT)
public class ItemModel implements UnbakedModel {
private final ResourceLocation id;
private List<ItemOverride> overrides = List.of();
public ItemModel(ResourceLocation id) {
this.id = id;
}
@Override
public void resolveDependencies(UnbakedModel.Resolver resolver) {
if (resolver.resolve(this.id) instanceof BlockModel blockModel) {
this.overrides = blockModel.getOverrides();
this.overrides.forEach(itemOverride -> resolver.resolve(itemOverride.model()));
}
}
@Override
public BakedModel bake(ModelBaker baker, Function<Material, TextureAtlasSprite> spriteGetter, ModelState state) {
BakedModel bakedModel = baker.bake(this.id, state);
if (this.overrides.isEmpty()) {
return bakedModel;
} else {
BakedOverrides bakedOverrides = new BakedOverrides(baker, this.overrides);
return new ItemModel.BakedModelWithOverrides(bakedModel, bakedOverrides);
}
}
@Environment(EnvType.CLIENT)
static class BakedModelWithOverrides extends DelegateBakedModel {
private final BakedOverrides overrides;
public BakedModelWithOverrides(BakedModel parent, BakedOverrides overrides) {
super(parent);
this.overrides = overrides;
}
@Override
public BakedOverrides overrides() {
return this.overrides;
}
}
}