Rework model patches/classes for new bake signature

This commit is contained in:
tterrag committed 2019-06-08 01:02:29 -04:00
1 parent b74b72e44c
commit a93d7d20ee
18 files changed
+114 -94

No files matched your search

@@ -104,11 +104,11 @@ final class FancyMissingModel implements IUnbakedModel
@Nullable
@Override
public IBakedModel bake(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
public IBakedModel bake(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
{
IBakedModel bigMissing = missingModel.bake(modelGetter, spriteGetter, sprite, format);
IBakedModel bigMissing = missingModel.bake(bakery, spriteGetter, sprite, format);
ModelStateComposition smallState = new ModelStateComposition(sprite.getState(), smallTransformation);
IBakedModel smallMissing = missingModel.bake(modelGetter, spriteGetter, smallState, format);
IBakedModel smallMissing = missingModel.bake(bakery, spriteGetter, smallState, format);
return new BakedModel(bigMissing, smallMissing, fontCache.getUnchecked(format), message, spriteGetter.apply(font2));
}
@@ -27,7 +27,6 @@ import javax.annotation.Nullable;
import com.google.common.collect.ImmutableMap;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.texture.ISprite;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
@@ -45,7 +44,7 @@ import net.minecraftforge.common.model.animation.IClip;
public interface IModel<T extends IModel<T>>
{
@Nullable
IBakedModel bake(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format);
IBakedModel bake(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format);
/*
* Default state this model will be baked with.
@@ -71,9 +71,9 @@ public final class ItemLayerModel implements IUnbakedModel
this.overrides = overrides;
}
public ItemLayerModel(BlockModel model)
public ItemLayerModel(ModelBakery bakery, BlockModel model, VertexFormat format)
{
this(getTextures(model), model.getOverrides(model, ModelLoader.defaultModelGetter(), ModelLoader.defaultTextureGetter()));
this(getTextures(model), model.getOverrides(bakery, model, ModelLoader.defaultTextureGetter(), format));
}
private static ImmutableList<ResourceLocation> getTextures(BlockModel model)
@@ -118,7 +118,7 @@ public final class ItemLayerModel implements IUnbakedModel
@Nullable
@Override
public IBakedModel bake(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
public IBakedModel bake(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
{
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
Optional<TRSRTransformation> transform = sprite.getState().apply(Optional.empty());
@@ -126,7 +126,7 @@ public final class ModelDynBucket implements IUnbakedModel
@Nullable
@Override
public IBakedModel bake(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
public IBakedModel bake(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
{
IModelState state = sprite.getState();
ImmutableMap<TransformType, TRSRTransformation> transformMap = PerspectiveMapWrapper.getTransforms(state);
@@ -151,7 +151,7 @@ public final class ModelDynBucket implements IUnbakedModel
if (baseLocation != null)
{
// build base (insidest)
IBakedModel model = (new ItemLayerModel(ImmutableList.of(baseLocation))).bake(modelGetter, spriteGetter, sprite, format);
IBakedModel model = (new ItemLayerModel(ImmutableList.of(baseLocation))).bake(bakery, spriteGetter, sprite, format);
random.setSeed(42);
builder.addAll(model.getQuads(null, null, random));
particleSprite = model.getParticleTexture();
@@ -176,7 +176,7 @@ public final class ModelDynBucket implements IUnbakedModel
}
}
return new BakedDynBucket(this, builder.build(), particleSprite, format, Maps.immutableEnumMap(transformMap), Maps.newHashMap(), transform.isIdentity());
return new BakedDynBucket(bakery, this, builder.build(), particleSprite, format, Maps.immutableEnumMap(transformMap), Maps.newHashMap(), transform.isIdentity());
}
/**
@@ -426,8 +426,12 @@ public final class ModelDynBucket implements IUnbakedModel
private static final class BakedDynBucketOverrideHandler extends ItemOverrideList
{
public static final BakedDynBucketOverrideHandler INSTANCE = new BakedDynBucketOverrideHandler();
private BakedDynBucketOverrideHandler() {}
private final ModelBakery bakery;
private BakedDynBucketOverrideHandler(ModelBakery bakery)
{
this.bakery = bakery;
}
@Override
public IBakedModel getModelWithOverrides(IBakedModel originalModel, ItemStack stack, @Nullable World world, @Nullable LivingEntity entity)
@@ -445,7 +449,7 @@ public final class ModelDynBucket implements IUnbakedModel
Function<ResourceLocation, TextureAtlasSprite> textureGetter;
textureGetter = location -> Minecraft.getInstance().getTextureMap().getAtlasSprite(location.toString());
IBakedModel bakedModel = parent.bake(ModelLoader.defaultModelGetter(), textureGetter, new SimpleModelState(model.transforms), model.format);
IBakedModel bakedModel = parent.bake(bakery, textureGetter, new SimpleModelState(model.transforms), model.format);
model.cache.put(name, bakedModel);
return bakedModel;
}
@@ -464,7 +468,8 @@ public final class ModelDynBucket implements IUnbakedModel
private final Map<String, IBakedModel> cache; // contains all the baked models since they'll never change
private final VertexFormat format;
BakedDynBucket(ModelDynBucket parent,
BakedDynBucket(ModelBakery bakery,
ModelDynBucket parent,
ImmutableList<BakedQuad> quads,
TextureAtlasSprite particle,
VertexFormat format,
@@ -472,7 +477,7 @@ public final class ModelDynBucket implements IUnbakedModel
Map<String, IBakedModel> cache,
boolean untransformed)
{
super(quads, particle, transforms, BakedDynBucketOverrideHandler.INSTANCE, untransformed);
super(quads, particle, transforms, new BakedDynBucketOverrideHandler(bakery), untransformed);
this.format = format;
this.parent = parent;
this.cache = cache;
@@ -91,7 +91,7 @@ public final class ModelFluid implements IUnbakedModel
@Nullable
@Override
public IBakedModel bake(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
public IBakedModel bake(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
{
return new CachingBakedFluid(
sprite.getState().apply(Optional.empty()),
@@ -436,19 +436,19 @@ public final class ModelLoader extends ModelBakery
@Nullable
@Override
public IBakedModel bake(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
public IBakedModel bake(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
{
return VanillaLoader.INSTANCE.modelCache.getUnchecked(new BakedModelCacheKey(this, modelGetter, spriteGetter, sprite.getState(), uvlock, format));
return VanillaLoader.INSTANCE.modelCache.getUnchecked(new BakedModelCacheKey(this, bakery, spriteGetter, sprite.getState(), uvlock, format));
}
public IBakedModel bakeImpl(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter, IModelState state, boolean uvlock, VertexFormat format)
public IBakedModel bakeImpl(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter, IModelState state, boolean uvlock, VertexFormat format)
{
if(!Attributes.moreSpecific(format, Attributes.DEFAULT_BAKED_FORMAT))
{
throw new IllegalArgumentException("can't bake vanilla models to the format that doesn't fit into the default one: " + format);
}
BlockModel model = this.model;
if(model == null) return getMissingModel().bake(modelGetter, bakedTextureGetter, new BasicState(getMissingModel().getDefaultState(), uvlock), format);
if(model == null) return getMissingModel().bake(bakery, bakedTextureGetter, new BasicState(getMissingModel().getDefaultState(), uvlock), format);
List<TRSRTransformation> newTransforms = Lists.newArrayList();
for(int i = 0; i < model.getElements().size(); i++)
@@ -465,18 +465,18 @@ public final class ModelLoader extends ModelBakery
if(model == ModelBakery.MODEL_GENERATED)
{
return new ItemLayerModel(model).bake(modelGetter, bakedTextureGetter, new BasicState(perState, uvlock), format);
return new ItemLayerModel(bakery, model, format).bake(bakery, bakedTextureGetter, new BasicState(perState, uvlock), format);
}
TextureAtlasSprite textureatlassprite = bakedTextureGetter.apply(new ResourceLocation(model.resolveTextureName("particle")));
if(model == ModelBakery.MODEL_ENTITY) return new BuiltInModel(transforms, model.getOverrides(model, modelGetter, bakedTextureGetter), textureatlassprite);
return bakeNormal(model, perState, state, newTransforms, format, modelGetter, bakedTextureGetter, uvlock);
if(model == ModelBakery.MODEL_ENTITY) return new BuiltInModel(transforms, model.getOverrides(bakery, model, bakedTextureGetter, format), textureatlassprite);
return bakeNormal(bakery, model, perState, state, newTransforms, format, bakedTextureGetter, uvlock);
}
private IBakedModel bakeNormal(BlockModel model, IModelState perState, final IModelState modelState, List<TRSRTransformation> newTransforms, final VertexFormat format, final Function<ResourceLocation, IUnbakedModel> modelGetter, final Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter, boolean uvLocked)
private IBakedModel bakeNormal(ModelBakery bakery, BlockModel model, IModelState perState, final IModelState modelState, List<TRSRTransformation> newTransforms, final VertexFormat format, final Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter, boolean uvLocked)
{
final TRSRTransformation baseState = modelState.apply(Optional.empty()).orElse(TRSRTransformation.identity());
TextureAtlasSprite particle = bakedTextureGetter.apply(new ResourceLocation(model.resolveTextureName("particle")));
SimpleBakedModel.Builder builder = (new SimpleBakedModel.Builder(model, model.getOverrides(model, modelGetter, bakedTextureGetter))).setTexture(particle);
SimpleBakedModel.Builder builder = (new SimpleBakedModel.Builder(model, model.getOverrides(bakery, model, bakedTextureGetter, format))).setTexture(particle);
for(int i = 0; i < model.getElements().size(); i++)
{
if(modelState.apply(Optional.of(Models.getHiddenModelPart(ImmutableList.of(Integer.toString(i))))).isPresent())
@@ -509,7 +509,7 @@ public final class ModelLoader extends ModelBakery
return new PerspectiveMapWrapper(builder.build(), perState)
{
private final ItemOverrideList overrides = new AnimationItemOverrideList(VanillaModelWrapper.this, modelState, format, bakedTextureGetter, super.getOverrides());
private final ItemOverrideList overrides = new AnimationItemOverrideList(bakery, VanillaModelWrapper.this, modelState, format, bakedTextureGetter, super.getOverrides());
@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand, IModelData modelData)
@@ -517,7 +517,7 @@ public final class ModelLoader extends ModelBakery
IModelState newState = modelData.getData(Properties.AnimationProperty);
if(newState != null)
{
return VanillaModelWrapper.this.bake(modelGetter, bakedTextureGetter, new ModelStateComposition(modelState, newState, uvlock), format).getQuads(state, side, rand, modelData);
return VanillaModelWrapper.this.bake(bakery, bakedTextureGetter, new ModelStateComposition(modelState, newState, uvlock), format).getQuads(state, side, rand, modelData);
}
return super.getQuads(state, side, rand);
}
@@ -707,7 +707,7 @@ public final class ModelLoader extends ModelBakery
@Nullable
@Override
public IBakedModel bake(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
public IBakedModel bake(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
{
if(!Attributes.moreSpecific(format, Attributes.DEFAULT_BAKED_FORMAT))
{
@@ -716,13 +716,13 @@ public final class ModelLoader extends ModelBakery
if(variants.size() == 1)
{
IUnbakedModel model = models.get(0);
return model.bake(modelGetter, spriteGetter, new BasicState(MultiModelState.getPartState(sprite.getState(), model, 0), sprite.isUvLock()), format);
return model.bake(bakery, spriteGetter, new BasicState(MultiModelState.getPartState(sprite.getState(), model, 0), sprite.isUvLock()), format);
}
WeightedBakedModel.Builder builder = new WeightedBakedModel.Builder();
for(int i = 0; i < variants.size(); i++)
{
IUnbakedModel model = models.get(i);
builder.add(model.bake(modelGetter, spriteGetter, new BasicState(MultiModelState.getPartState(sprite.getState(), model, i), sprite.isUvLock()), format), variants.get(i).getWeight());
builder.add(model.bake(bakery, spriteGetter, new BasicState(MultiModelState.getPartState(sprite.getState(), model, i), sprite.isUvLock()), format), variants.get(i).getWeight());
}
return builder.build();
}
@@ -775,16 +775,16 @@ public final class ModelLoader extends ModelBakery
protected final class BakedModelCacheKey
{
private final VanillaModelWrapper model;
private final Function<ResourceLocation, IUnbakedModel> modelGetter;
private final ModelBakery bakery;
private final Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter;
private final IModelState state;
private final boolean uvlock;
private final VertexFormat format;
public BakedModelCacheKey(VanillaModelWrapper model, Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter, IModelState state, boolean uvlock, VertexFormat format)
public BakedModelCacheKey(VanillaModelWrapper model, ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter, IModelState state, boolean uvlock, VertexFormat format)
{
this.model = model;
this.modelGetter = modelGetter;
this.bakery = bakery;
this.bakedTextureGetter = bakedTextureGetter;
this.state = state;
this.uvlock = uvlock;
@@ -803,7 +803,7 @@ public final class ModelLoader extends ModelBakery
return false;
}
BakedModelCacheKey that = (BakedModelCacheKey) o;
return Objects.equal(model, that.model) && Objects.equal(modelGetter, that.modelGetter) && Objects.equal(bakedTextureGetter, that.bakedTextureGetter) && Objects.equal(state, that.state) && uvlock == that.uvlock && Objects.equal(format, that.format);
return Objects.equal(model, that.model) && Objects.equal(bakery, that.bakery) && Objects.equal(bakedTextureGetter, that.bakedTextureGetter) && Objects.equal(state, that.state) && uvlock == that.uvlock && Objects.equal(format, that.format);
}
@Override
@@ -823,7 +823,7 @@ public final class ModelLoader extends ModelBakery
@Override
public IBakedModel load(BakedModelCacheKey key) throws Exception
{
return key.model.bakeImpl(key.modelGetter, key.bakedTextureGetter, key.state, key.uvlock, key.format);
return key.model.bakeImpl(key.bakery, key.bakedTextureGetter, key.state, key.uvlock, key.format);
}
});
@@ -79,25 +79,25 @@ public final class MultiLayerModel implements IUnbakedModel
return Collections.emptyList();
}
private static ImmutableMap<Optional<BlockRenderLayer>, IBakedModel> buildModels(ImmutableMap<Optional<BlockRenderLayer>, ModelResourceLocation> models, ISprite sprite, VertexFormat format, Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter)
private static ImmutableMap<Optional<BlockRenderLayer>, IBakedModel> buildModels(ImmutableMap<Optional<BlockRenderLayer>, ModelResourceLocation> models, ISprite sprite, VertexFormat format, ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter)
{
ImmutableMap.Builder<Optional<BlockRenderLayer>, IBakedModel> builder = ImmutableMap.builder();
for(Optional<BlockRenderLayer> key : models.keySet())
{
IUnbakedModel model = ModelLoaderRegistry.getModelOrLogError(models.get(key), "Couldn't load MultiLayerModel dependency: " + models.get(key));
builder.put(key, model.bake(modelGetter, spriteGetter, new ModelStateComposition(sprite.getState(), model.getDefaultState(), sprite.isUvLock()), format));
builder.put(key, model.bake(bakery, spriteGetter, new ModelStateComposition(sprite.getState(), model.getDefaultState(), sprite.isUvLock()), format));
}
return builder.build();
}
@Nullable
@Override
public IBakedModel bake(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
public IBakedModel bake(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
{
IUnbakedModel missing = ModelLoaderRegistry.getMissingModel();
return new MultiLayerBakedModel(
buildModels(models, sprite, format, modelGetter, spriteGetter),
missing.bake(modelGetter, spriteGetter, new BasicState(missing.getDefaultState(), sprite.isUvLock()), format),
buildModels(models, sprite, format, bakery, spriteGetter),
missing.bake(bakery, spriteGetter, new BasicState(missing.getDefaultState(), sprite.isUvLock()), format),
PerspectiveMapWrapper.getTransforms(sprite.getState())
);
}
@@ -261,26 +261,26 @@ public final class MultiModel implements IUnbakedModel
@Nullable
@Override
public IBakedModel bake(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
public IBakedModel bake(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
{
IBakedModel bakedBase = null;
if (base != null)
bakedBase = base.bake(modelGetter, spriteGetter, sprite, format);
bakedBase = base.bake(bakery, spriteGetter, sprite, format);
ImmutableMap.Builder<String, IBakedModel> mapBuilder = ImmutableMap.builder();
for (Entry<String, Pair<IUnbakedModel, IModelState>> entry : parts.entrySet())
{
Pair<IUnbakedModel, IModelState> pair = entry.getValue();
mapBuilder.put(entry.getKey(), pair.getLeft().bake(modelGetter, spriteGetter, new ModelStateComposition(sprite.getState(), pair.getRight(), sprite.isUvLock()), format));
mapBuilder.put(entry.getKey(), pair.getLeft().bake(bakery, spriteGetter, new ModelStateComposition(sprite.getState(), pair.getRight(), sprite.isUvLock()), format));
}
if(bakedBase == null && parts.isEmpty())
{
LOGGER.error("MultiModel {} is empty (no base model or parts were provided/resolved)", location);
IUnbakedModel missing = ModelLoaderRegistry.getMissingModel();
return missing.bake(modelGetter, spriteGetter, new BasicState(missing.getDefaultState(), sprite.isUvLock()), format);
return missing.bake(bakery, spriteGetter, new BasicState(missing.getDefaultState(), sprite.isUvLock()), format);
}
return new Baked(location, true, bakedBase, mapBuilder.build());
}
@@ -26,6 +26,7 @@ import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.IUnbakedModel;
import net.minecraft.client.renderer.model.ItemOverride;
import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.entity.LivingEntity;
@@ -45,19 +46,21 @@ import javax.annotation.Nullable;
public final class AnimationItemOverrideList extends ItemOverrideList
{
private final ModelBakery bakery;
private final IUnbakedModel model;
private final IModelState state;
private final VertexFormat format;
private final Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter;
public AnimationItemOverrideList(IUnbakedModel model, IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter, ItemOverrideList overrides)
public AnimationItemOverrideList(ModelBakery bakery, IUnbakedModel model, IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter, ItemOverrideList overrides)
{
this(model, state, format, bakedTextureGetter, overrides.getOverrides().reverse());
this(bakery, model, state, format, bakedTextureGetter, overrides.getOverrides().reverse());
}
public AnimationItemOverrideList(IUnbakedModel model, IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter, List<ItemOverride> overrides)
public AnimationItemOverrideList(ModelBakery bakery, IUnbakedModel model, IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter, List<ItemOverride> overrides)
{
super(model, ModelLoader.defaultModelGetter(), overrides, bakedTextureGetter);
super(bakery, model, ModelLoader.defaultModelGetter(), bakedTextureGetter, overrides, format);
this.bakery = bakery;
this.model = model;
this.state = state;
this.format = format;
@@ -83,7 +86,7 @@ public final class AnimationItemOverrideList extends ItemOverrideList
return asm.apply(Animation.getWorldTime(world, Animation.getPartialTickTime())).getLeft();
})
// TODO where should uvlock data come from?
.map(state -> model.bake(ModelLoader.defaultModelGetter(), bakedTextureGetter, new ModelStateComposition(state, this.state), format))
.map(state -> model.bake(bakery, bakedTextureGetter, new ModelStateComposition(state, this.state), format))
.orElseGet(() -> super.getModelWithOverrides(originalModel, stack, world, entity));
}
}
@@ -465,7 +465,7 @@ public enum B3DLoader implements ICustomModelLoader
@Nullable
@Override
public IBakedModel bake(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
public IBakedModel bake(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
{
ImmutableMap.Builder<String, TextureAtlasSprite> builder = ImmutableMap.builder();
TextureAtlasSprite missing = spriteGetter.apply(new ResourceLocation("missingno"));
@@ -123,7 +123,7 @@ public class OBJModel implements IUnbakedModel
@Nullable
@Override
public IBakedModel bake(Function<ResourceLocation, IUnbakedModel> modelGetter, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
public IBakedModel bake(ModelBakery bakery, Function<ResourceLocation, TextureAtlasSprite> spriteGetter, ISprite sprite, VertexFormat format)
{
ImmutableMap.Builder<String, TextureAtlasSprite> builder = ImmutableMap.builder();
builder.put(ModelLoader.White.LOCATION.toString(), ModelLoader.White.INSTANCE);