55 lines
1.7 KiB
Java
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;
|
|
}
|
|
}
|
|
}
|