From a93d7d20ee0e1f3da2e86a43f77c2ba242d3e9d6 Mon Sep 17 00:00:00 2001 From: tterrag Date: Sat, 8 Jun 2019 01:02:23 -0400 Subject: [PATCH] Rework model patches/classes for new bake signature --- .../renderer/model/BlockModel.java.patch | 47 ++++++++++--------- .../renderer/model/IUnbakedModel.java.patch | 2 +- .../model/ItemOverrideList.java.patch | 15 +++--- .../renderer/model/ModelBakery.java.patch | 16 +++++-- .../renderer/model/VariantList.java.patch | 4 +- .../model/multipart/Multipart.java.patch | 2 +- .../client/model/FancyMissingModel.java | 6 +-- .../minecraftforge/client/model/IModel.java | 3 +- .../client/model/ItemLayerModel.java | 6 +-- .../client/model/ModelDynBucket.java | 21 +++++---- .../client/model/ModelFluid.java | 2 +- .../client/model/ModelLoader.java | 38 +++++++-------- .../client/model/MultiLayerModel.java | 10 ++-- .../client/model/MultiModel.java | 8 ++-- .../animation/AnimationItemOverrideList.java | 13 +++-- .../client/model/b3d/B3DLoader.java | 2 +- .../client/model/obj/OBJModel.java | 2 +- src/main/resources/forge.exc | 11 +++-- 18 files changed, 114 insertions(+), 94 deletions(-) diff --git a/patches/minecraft/net/minecraft/client/renderer/model/BlockModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/model/BlockModel.java.patch index fa6773a8bf..52a2da2538 100644 --- a/patches/minecraft/net/minecraft/client/renderer/model/BlockModel.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/model/BlockModel.java.patch @@ -10,38 +10,43 @@ public boolean func_178309_b() { return this.field_178315_d != null ? this.field_178315_d.func_178309_b() : this.field_178322_i; } -@@ -87,6 +90,10 @@ - return this.field_187968_k; - } - -+ public ItemOverrideList getOverrides(BlockModel model, Function modelGetter, Function spriteGetter) { -+ return this.field_187968_k.isEmpty() ? ItemOverrideList.field_188022_a : new ItemOverrideList(model, modelGetter, this.field_187968_k, spriteGetter); -+ } -+ +@@ -90,6 +93,10 @@ private ItemOverrideList func_217646_a(ModelBakery p_217646_1_, BlockModel p_217646_2_) { return this.field_187968_k.isEmpty() ? ItemOverrideList.field_188022_a : new ItemOverrideList(p_217646_1_, p_217646_2_, p_217646_1_::func_209597_a, this.field_187968_k); } -@@ -160,25 +167,26 @@ ++ ++ public ItemOverrideList getOverrides(ModelBakery p_217646_1_, BlockModel p_217646_2_, Function textureGetter, net.minecraft.client.renderer.vertex.VertexFormat format) { ++ return this.field_187968_k.isEmpty() ? ItemOverrideList.field_188022_a : new ItemOverrideList(p_217646_1_, p_217646_2_, p_217646_1_::func_209597_a, textureGetter, this.field_187968_k, format); ++ } + + public Collection func_187965_e() { + Set set = Sets.newHashSet(); +@@ -160,25 +167,33 @@ return set1; } - public IBakedModel func_217641_a(ModelBakery p_217641_1_, Function p_217641_2_, ISprite p_217641_3_) { - return this.func_217644_a(p_217641_1_, this, p_217641_2_, p_217641_3_); -- } -+ @Nullable -+ @Override -+ public IBakedModel bake(Function p_217644_1_, Function p_217644_3_, ISprite p_217644_2_, net.minecraft.client.renderer.vertex.VertexFormat format) { -+ if (!net.minecraftforge.client.model.Attributes.moreSpecific(format, net.minecraftforge.client.model.Attributes.DEFAULT_BAKED_FORMAT)) -+ throw new IllegalArgumentException("Cannot bake vanilla model to format other than BLOCK"); ++ // FORGE: Override our interface method, binary compatible ++ public IBakedModel bake(ModelBakery bakery, Function spriteGetter, ISprite sprite, net.minecraft.client.renderer.vertex.VertexFormat format) { ++ if (!net.minecraftforge.client.model.Attributes.moreSpecific(format, net.minecraftforge.client.model.Attributes.DEFAULT_BAKED_FORMAT)) ++ throw new IllegalArgumentException("Cannot bake vanilla model to format other than BLOCK"); ++ return this.bake(bakery, this, spriteGetter, sprite, format); + } -- public IBakedModel func_217644_a(ModelBakery p_217644_1_, BlockModel p_217644_2_, Function p_217644_3_, ISprite p_217644_4_) { ++ @Deprecated + public IBakedModel func_217644_a(ModelBakery p_217644_1_, BlockModel p_217644_2_, Function p_217644_3_, ISprite p_217644_4_) { ++ return bake(p_217644_1_, p_217644_2_, p_217644_3_, p_217644_4_, net.minecraft.client.renderer.vertex.DefaultVertexFormats.field_176599_b); ++ } ++ ++ public IBakedModel bake(ModelBakery p_217644_1_, BlockModel p_217644_2_, Function p_217644_3_, ISprite p_217644_4_, net.minecraft.client.renderer.vertex.VertexFormat format) { TextureAtlasSprite textureatlassprite = p_217644_3_.apply(new ResourceLocation(this.func_178308_c("particle"))); if (this.func_178310_f() == ModelBakery.field_177616_r) { - return new BuiltInModel(this.func_181682_g(), this.func_217646_a(p_217644_1_, p_217644_2_), textureatlassprite); -+ return new BuiltInModel(this.func_181682_g(), this.getOverrides(this, p_217644_1_, p_217644_3_), textureatlassprite); ++ return new BuiltInModel(this.func_181682_g(), this.getOverrides(p_217644_1_, p_217644_2_, p_217644_3_, format), textureatlassprite); } else { - SimpleBakedModel.Builder simplebakedmodel$builder = (new SimpleBakedModel.Builder(this, this.func_217646_a(p_217644_1_, p_217644_2_))).func_177646_a(textureatlassprite); -+ SimpleBakedModel.Builder simplebakedmodel$builder = (new SimpleBakedModel.Builder(this, this.getOverrides(this, p_217644_1_, p_217644_3_))).func_177646_a(textureatlassprite); ++ SimpleBakedModel.Builder simplebakedmodel$builder = (new SimpleBakedModel.Builder(this, this.getOverrides(p_217644_1_, p_217644_2_, p_217644_3_, format))).func_177646_a(textureatlassprite); for(BlockPart blockpart : this.func_178298_a()) { for(Direction direction : blockpart.field_178240_c.keySet()) { @@ -49,14 +54,14 @@ TextureAtlasSprite textureatlassprite1 = p_217644_3_.apply(new ResourceLocation(this.func_178308_c(blockpartface.field_178242_d))); if (blockpartface.field_178244_b == null) { - simplebakedmodel$builder.func_177648_a(func_217645_a(blockpart, blockpartface, textureatlassprite1, direction, p_217644_4_)); -+ simplebakedmodel$builder.func_177648_a(makeBakedQuad(blockpart, blockpartface, textureatlassprite1, direction, p_217644_2_)); ++ simplebakedmodel$builder.func_177648_a(makeBakedQuad(blockpart, blockpartface, textureatlassprite1, direction, p_217644_4_)); } else { - simplebakedmodel$builder.func_177650_a(p_217644_4_.func_188048_b().func_177523_a(blockpartface.field_178244_b), func_217645_a(blockpart, blockpartface, textureatlassprite1, direction, p_217644_4_)); -+ simplebakedmodel$builder.func_177650_a(p_217644_2_.getState().apply(java.util.Optional.empty()).map(trsr -> trsr.rotate(direction)).orElse(direction), makeBakedQuad(blockpart, blockpartface, textureatlassprite1, direction, p_217644_2_)); ++ simplebakedmodel$builder.func_177650_a(p_217644_4_.getState().apply(java.util.Optional.empty()).map(trsr -> trsr.rotate(direction)).orElse(direction), makeBakedQuad(blockpart, blockpartface, textureatlassprite1, direction, p_217644_4_)); } } } -@@ -191,6 +199,10 @@ +@@ -191,6 +206,10 @@ return field_217647_g.func_217648_a(p_217645_0_.field_178241_a, p_217645_0_.field_178239_b, p_217645_1_, p_217645_2_, p_217645_3_, p_217645_4_, p_217645_0_.field_178237_d, p_217645_0_.field_178238_e); } diff --git a/patches/minecraft/net/minecraft/client/renderer/model/IUnbakedModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/model/IUnbakedModel.java.patch index 7ded4fae6a..311884632d 100644 --- a/patches/minecraft/net/minecraft/client/renderer/model/IUnbakedModel.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/model/IUnbakedModel.java.patch @@ -17,6 +17,6 @@ - IBakedModel func_217641_a(ModelBakery p_217641_1_, Function p_217641_2_, ISprite p_217641_3_); + @Deprecated + default IBakedModel func_217641_a(ModelBakery p_217641_1_, Function p_217641_2_, ISprite p_217641_3_) { -+ return bake(p_217641_1_::func_209597_a, p_217641_2_, p_217641_3_, net.minecraft.client.renderer.vertex.DefaultVertexFormats.field_176599_b); ++ return bake(p_217641_1_, p_217641_2_, p_217641_3_, net.minecraft.client.renderer.vertex.DefaultVertexFormats.field_176599_b); + } } diff --git a/patches/minecraft/net/minecraft/client/renderer/model/ItemOverrideList.java.patch b/patches/minecraft/net/minecraft/client/renderer/model/ItemOverrideList.java.patch index 0a71135365..e173e1ab71 100644 --- a/patches/minecraft/net/minecraft/client/renderer/model/ItemOverrideList.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/model/ItemOverrideList.java.patch @@ -1,25 +1,22 @@ --- a/net/minecraft/client/renderer/model/ItemOverrideList.java +++ b/net/minecraft/client/renderer/model/ItemOverrideList.java -@@ -24,10 +24,17 @@ +@@ -24,10 +24,14 @@ this.field_209582_c = Collections.emptyList(); } -+ @Deprecated //Forge: Use IUnbakedModel ++ @Deprecated //Forge: Use IUnbakedModel, add texture getter public ItemOverrideList(ModelBakery p_i50984_1_, BlockModel p_i50984_2_, Function p_i50984_3_, List p_i50984_4_) { -+ this(p_i50984_1_, (IUnbakedModel)p_i50984_2_, p_i50984_3_, p_i50984_4_); ++ this(p_i50984_1_, (IUnbakedModel)p_i50984_2_, p_i50984_3_, p_i50984_1_.field_177609_j::func_195424_a, p_i50984_4_, net.minecraft.client.renderer.vertex.DefaultVertexFormats.field_176599_b); + } -+ public ItemOverrideList(ModelBakery p_i50984_1_, IUnbakedModel p_i50984_2_, Function p_i50984_3_, List p_i50984_4_) { -+ this(p_i50984_2_, p_i50984_3_, p_i50984_4_, net.minecraftforge.client.model.ModelLoader.defaultTextureGetter()); -+ } -+ public ItemOverrideList(IUnbakedModel p_i50984_2_, Function p_i50984_3_, List p_i50984_4_, Function spriteGetter) { ++ public ItemOverrideList(ModelBakery p_i50984_1_, IUnbakedModel p_i50984_2_, Function p_i50984_3_, Function textureGetter, List p_i50984_4_, net.minecraft.client.renderer.vertex.VertexFormat format) { this.field_209582_c = p_i50984_4_.stream().map((p_217649_3_) -> { IUnbakedModel iunbakedmodel = p_i50984_3_.apply(p_217649_3_.func_188026_a()); - return Objects.equals(iunbakedmodel, p_i50984_2_) ? null : p_i50984_1_.func_217845_a(p_217649_3_.func_188026_a(), ModelRotation.X0_Y0); -+ return Objects.equals(iunbakedmodel, p_i50984_2_) ? null : p_i50984_3_.apply(p_217649_3_.func_188026_a()).bake(p_i50984_3_, spriteGetter, ModelRotation.X0_Y0, net.minecraft.client.renderer.vertex.DefaultVertexFormats.field_176599_b); ++ return Objects.equals(iunbakedmodel, p_i50984_2_) ? null : p_i50984_1_.getBakedModel(p_217649_3_.func_188026_a(), ModelRotation.X0_Y0, textureGetter, format); }).collect(Collectors.toList()); Collections.reverse(this.field_209582_c); -@@ -55,4 +62,8 @@ +@@ -55,4 +59,8 @@ return p_209581_1_; } diff --git a/patches/minecraft/net/minecraft/client/renderer/model/ModelBakery.java.patch b/patches/minecraft/net/minecraft/client/renderer/model/ModelBakery.java.patch index be1fee6963..798218fcbc 100644 --- a/patches/minecraft/net/minecraft/client/renderer/model/ModelBakery.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/model/ModelBakery.java.patch @@ -18,21 +18,31 @@ return pair1; } catch (Exception exception1) { throw new ModelBakery.BlockStateDefinitionException(String.format("Exception loading blockstate definition: '%s' in resourcepack: '%s': %s", p_217839_1_.func_199029_a(), p_217839_1_.func_199026_d(), exception1.getMessage())); -@@ -381,7 +381,7 @@ +@@ -381,7 +381,12 @@ @Nullable public IBakedModel func_217845_a(ResourceLocation p_217845_1_, ISprite p_217845_2_) { - Triple triple = Triple.of(p_217845_1_, p_217845_2_.func_188048_b(), p_217845_2_.func_188049_c()); ++ return getBakedModel(p_217845_1_, p_217845_2_, this.field_177609_j::func_195424_a, net.minecraft.client.renderer.vertex.DefaultVertexFormats.field_176599_b); ++ } ++ ++ @Nullable ++ public IBakedModel getBakedModel(ResourceLocation p_217845_1_, ISprite p_217845_2_, java.util.function.Function textureGetter, net.minecraft.client.renderer.vertex.VertexFormat format) { + Triple triple = Triple.of(p_217845_1_, p_217845_2_.getState(), p_217845_2_.func_188049_c()); if (this.field_217850_G.containsKey(triple)) { return this.field_217850_G.get(triple); } else { -@@ -389,7 +389,7 @@ +@@ -389,11 +394,11 @@ if (iunbakedmodel instanceof BlockModel) { BlockModel blockmodel = (BlockModel)iunbakedmodel; if (blockmodel.func_178310_f() == field_177606_o) { - return field_217854_z.func_209579_a(this.field_177609_j::func_195424_a, blockmodel).func_217644_a(this, blockmodel, this.field_177609_j::func_195424_a, p_217845_2_); -+ return field_217854_z.func_209579_a(this.field_177609_j::func_195424_a, blockmodel).bake(this::func_209597_a, this.field_177609_j::func_195424_a, p_217845_2_, net.minecraft.client.renderer.vertex.DefaultVertexFormats.field_176599_b); ++ return field_217854_z.func_209579_a(textureGetter, blockmodel).func_217644_a(this, blockmodel, textureGetter, p_217845_2_); } } +- IBakedModel ibakedmodel = iunbakedmodel.func_217641_a(this, this.field_177609_j::func_195424_a, p_217845_2_); ++ IBakedModel ibakedmodel = iunbakedmodel.bake(this, this.field_177609_j::func_195424_a, p_217845_2_, format); + this.field_217850_G.put(triple, ibakedmodel); + return ibakedmodel; + } diff --git a/patches/minecraft/net/minecraft/client/renderer/model/VariantList.java.patch b/patches/minecraft/net/minecraft/client/renderer/model/VariantList.java.patch index 9bcf8f14ac..fb06a68056 100644 --- a/patches/minecraft/net/minecraft/client/renderer/model/VariantList.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/model/VariantList.java.patch @@ -6,7 +6,7 @@ @Nullable - public IBakedModel func_217641_a(ModelBakery p_217641_1_, Function p_217641_2_, ISprite p_217641_3_) { + @Override -+ public IBakedModel bake(Function p_217641_1_, Function p_217641_2_, ISprite p_217641_3_, net.minecraft.client.renderer.vertex.VertexFormat format) { ++ public IBakedModel bake(ModelBakery p_217641_1_, Function p_217641_2_, ISprite p_217641_3_, net.minecraft.client.renderer.vertex.VertexFormat format) { if (this.func_188114_a().isEmpty()) { return null; } else { @@ -14,7 +14,7 @@ for(Variant variant : this.func_188114_a()) { - IBakedModel ibakedmodel = p_217641_1_.func_217845_a(variant.func_188046_a(), variant); -+ IBakedModel ibakedmodel = p_217641_1_.apply(variant.func_188046_a()).bake(p_217641_1_, p_217641_2_, variant, format); ++ IBakedModel ibakedmodel = p_217641_1_.getBakedModel(variant.func_188046_a(), variant, p_217641_2_, format); weightedbakedmodel$builder.func_177677_a(ibakedmodel, variant.func_188047_d()); } diff --git a/patches/minecraft/net/minecraft/client/renderer/model/multipart/Multipart.java.patch b/patches/minecraft/net/minecraft/client/renderer/model/multipart/Multipart.java.patch index 7f94ae840e..2f4e265397 100644 --- a/patches/minecraft/net/minecraft/client/renderer/model/multipart/Multipart.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/model/multipart/Multipart.java.patch @@ -6,7 +6,7 @@ @Nullable - public IBakedModel func_217641_a(ModelBakery p_217641_1_, Function p_217641_2_, ISprite p_217641_3_) { + @Override -+ public IBakedModel bake(Function p_217641_1_, Function p_217641_2_, ISprite p_217641_3_, net.minecraft.client.renderer.vertex.VertexFormat format) { ++ public IBakedModel bake(ModelBakery p_217641_1_, Function p_217641_2_, ISprite p_217641_3_, net.minecraft.client.renderer.vertex.VertexFormat format) { MultipartBakedModel.Builder multipartbakedmodel$builder = new MultipartBakedModel.Builder(); for(Selector selector : this.func_188136_a()) { diff --git a/src/main/java/net/minecraftforge/client/model/FancyMissingModel.java b/src/main/java/net/minecraftforge/client/model/FancyMissingModel.java index e968b57ffd..3e0a848918 100644 --- a/src/main/java/net/minecraftforge/client/model/FancyMissingModel.java +++ b/src/main/java/net/minecraftforge/client/model/FancyMissingModel.java @@ -104,11 +104,11 @@ final class FancyMissingModel implements IUnbakedModel @Nullable @Override - public IBakedModel bake(Function modelGetter, Function spriteGetter, ISprite sprite, VertexFormat format) + public IBakedModel bake(ModelBakery bakery, Function 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)); } diff --git a/src/main/java/net/minecraftforge/client/model/IModel.java b/src/main/java/net/minecraftforge/client/model/IModel.java index 8318096573..4809a49f0e 100644 --- a/src/main/java/net/minecraftforge/client/model/IModel.java +++ b/src/main/java/net/minecraftforge/client/model/IModel.java @@ -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> { @Nullable - IBakedModel bake(Function modelGetter, Function spriteGetter, ISprite sprite, VertexFormat format); + IBakedModel bake(ModelBakery bakery, Function spriteGetter, ISprite sprite, VertexFormat format); /* * Default state this model will be baked with. diff --git a/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java b/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java index 2bf11d7af2..70c7424959 100644 --- a/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java +++ b/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java @@ -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 getTextures(BlockModel model) @@ -118,7 +118,7 @@ public final class ItemLayerModel implements IUnbakedModel @Nullable @Override - public IBakedModel bake(Function modelGetter, Function spriteGetter, ISprite sprite, VertexFormat format) + public IBakedModel bake(ModelBakery bakery, Function spriteGetter, ISprite sprite, VertexFormat format) { ImmutableList.Builder builder = ImmutableList.builder(); Optional transform = sprite.getState().apply(Optional.empty()); diff --git a/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java b/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java index 95f67f22f2..fbd7942b35 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java +++ b/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java @@ -126,7 +126,7 @@ public final class ModelDynBucket implements IUnbakedModel @Nullable @Override - public IBakedModel bake(Function modelGetter, Function spriteGetter, ISprite sprite, VertexFormat format) + public IBakedModel bake(ModelBakery bakery, Function spriteGetter, ISprite sprite, VertexFormat format) { IModelState state = sprite.getState(); ImmutableMap 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 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 cache; // contains all the baked models since they'll never change private final VertexFormat format; - BakedDynBucket(ModelDynBucket parent, + BakedDynBucket(ModelBakery bakery, + ModelDynBucket parent, ImmutableList quads, TextureAtlasSprite particle, VertexFormat format, @@ -472,7 +477,7 @@ public final class ModelDynBucket implements IUnbakedModel Map 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; diff --git a/src/main/java/net/minecraftforge/client/model/ModelFluid.java b/src/main/java/net/minecraftforge/client/model/ModelFluid.java index 2691369ade..f479aff14c 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelFluid.java +++ b/src/main/java/net/minecraftforge/client/model/ModelFluid.java @@ -91,7 +91,7 @@ public final class ModelFluid implements IUnbakedModel @Nullable @Override - public IBakedModel bake(Function modelGetter, Function spriteGetter, ISprite sprite, VertexFormat format) + public IBakedModel bake(ModelBakery bakery, Function spriteGetter, ISprite sprite, VertexFormat format) { return new CachingBakedFluid( sprite.getState().apply(Optional.empty()), diff --git a/src/main/java/net/minecraftforge/client/model/ModelLoader.java b/src/main/java/net/minecraftforge/client/model/ModelLoader.java index c8848a7313..77f8168f42 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelLoader.java +++ b/src/main/java/net/minecraftforge/client/model/ModelLoader.java @@ -436,19 +436,19 @@ public final class ModelLoader extends ModelBakery @Nullable @Override - public IBakedModel bake(Function modelGetter, Function spriteGetter, ISprite sprite, VertexFormat format) + public IBakedModel bake(ModelBakery bakery, Function 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 modelGetter, Function bakedTextureGetter, IModelState state, boolean uvlock, VertexFormat format) + public IBakedModel bakeImpl(ModelBakery bakery, Function 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 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 newTransforms, final VertexFormat format, final Function modelGetter, final Function bakedTextureGetter, boolean uvLocked) + private IBakedModel bakeNormal(ModelBakery bakery, BlockModel model, IModelState perState, final IModelState modelState, List newTransforms, final VertexFormat format, final Function 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 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 modelGetter, Function spriteGetter, ISprite sprite, VertexFormat format) + public IBakedModel bake(ModelBakery bakery, Function 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 modelGetter; + private final ModelBakery bakery; private final Function bakedTextureGetter; private final IModelState state; private final boolean uvlock; private final VertexFormat format; - public BakedModelCacheKey(VanillaModelWrapper model, Function modelGetter, Function bakedTextureGetter, IModelState state, boolean uvlock, VertexFormat format) + public BakedModelCacheKey(VanillaModelWrapper model, ModelBakery bakery, Function 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); } }); diff --git a/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java b/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java index 667c321d39..3b6ca63de3 100644 --- a/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java +++ b/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java @@ -79,25 +79,25 @@ public final class MultiLayerModel implements IUnbakedModel return Collections.emptyList(); } - private static ImmutableMap, IBakedModel> buildModels(ImmutableMap, ModelResourceLocation> models, ISprite sprite, VertexFormat format, Function modelGetter, Function spriteGetter) + private static ImmutableMap, IBakedModel> buildModels(ImmutableMap, ModelResourceLocation> models, ISprite sprite, VertexFormat format, ModelBakery bakery, Function spriteGetter) { ImmutableMap.Builder, IBakedModel> builder = ImmutableMap.builder(); for(Optional 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 modelGetter, Function spriteGetter, ISprite sprite, VertexFormat format) + public IBakedModel bake(ModelBakery bakery, Function 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()) ); } diff --git a/src/main/java/net/minecraftforge/client/model/MultiModel.java b/src/main/java/net/minecraftforge/client/model/MultiModel.java index f4daf77a4d..7babfb4667 100644 --- a/src/main/java/net/minecraftforge/client/model/MultiModel.java +++ b/src/main/java/net/minecraftforge/client/model/MultiModel.java @@ -261,26 +261,26 @@ public final class MultiModel implements IUnbakedModel @Nullable @Override - public IBakedModel bake(Function modelGetter, Function spriteGetter, ISprite sprite, VertexFormat format) + public IBakedModel bake(ModelBakery bakery, Function 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 mapBuilder = ImmutableMap.builder(); for (Entry> entry : parts.entrySet()) { Pair 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()); } diff --git a/src/main/java/net/minecraftforge/client/model/animation/AnimationItemOverrideList.java b/src/main/java/net/minecraftforge/client/model/animation/AnimationItemOverrideList.java index 0a736691cc..b8a2ba89fa 100644 --- a/src/main/java/net/minecraftforge/client/model/animation/AnimationItemOverrideList.java +++ b/src/main/java/net/minecraftforge/client/model/animation/AnimationItemOverrideList.java @@ -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 bakedTextureGetter; - public AnimationItemOverrideList(IUnbakedModel model, IModelState state, VertexFormat format, Function bakedTextureGetter, ItemOverrideList overrides) + public AnimationItemOverrideList(ModelBakery bakery, IUnbakedModel model, IModelState state, VertexFormat format, Function 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 bakedTextureGetter, List overrides) + public AnimationItemOverrideList(ModelBakery bakery, IUnbakedModel model, IModelState state, VertexFormat format, Function bakedTextureGetter, List 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)); } } diff --git a/src/main/java/net/minecraftforge/client/model/b3d/B3DLoader.java b/src/main/java/net/minecraftforge/client/model/b3d/B3DLoader.java index 6c5f10261d..fda550780c 100644 --- a/src/main/java/net/minecraftforge/client/model/b3d/B3DLoader.java +++ b/src/main/java/net/minecraftforge/client/model/b3d/B3DLoader.java @@ -465,7 +465,7 @@ public enum B3DLoader implements ICustomModelLoader @Nullable @Override - public IBakedModel bake(Function modelGetter, Function spriteGetter, ISprite sprite, VertexFormat format) + public IBakedModel bake(ModelBakery bakery, Function spriteGetter, ISprite sprite, VertexFormat format) { ImmutableMap.Builder builder = ImmutableMap.builder(); TextureAtlasSprite missing = spriteGetter.apply(new ResourceLocation("missingno")); diff --git a/src/main/java/net/minecraftforge/client/model/obj/OBJModel.java b/src/main/java/net/minecraftforge/client/model/obj/OBJModel.java index a65ee3bdc6..fcc0d53176 100644 --- a/src/main/java/net/minecraftforge/client/model/obj/OBJModel.java +++ b/src/main/java/net/minecraftforge/client/model/obj/OBJModel.java @@ -123,7 +123,7 @@ public class OBJModel implements IUnbakedModel @Nullable @Override - public IBakedModel bake(Function modelGetter, Function spriteGetter, ISprite sprite, VertexFormat format) + public IBakedModel bake(ModelBakery bakery, Function spriteGetter, ISprite sprite, VertexFormat format) { ImmutableMap.Builder builder = ImmutableMap.builder(); builder.put(ModelLoader.White.LOCATION.toString(), ModelLoader.White.INSTANCE); diff --git a/src/main/resources/forge.exc b/src/main/resources/forge.exc index 028e594c49..96cc3a2dcb 100644 --- a/src/main/resources/forge.exc +++ b/src/main/resources/forge.exc @@ -12,18 +12,19 @@ net/minecraft/client/renderer/BlockModelRenderer.renderModelFlat(Lnet/minecraft/ net/minecraft/client/renderer/model/BakedQuad.([IILnet/minecraft/util/Direction;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;ZLnet/minecraft/client/renderer/vertex/VertexFormat;)V=|p_i46574_1_,p_i46574_2_,p_i46574_3_,p_i46574_4_,applyDiffuseLighting,format +net/minecraft/client/renderer/model/ModelBakery.getBakedModel(Lnet/minecraft/util/ResourceLocation;Lnet/minecraft/client/renderer/texture/ISprite;Ljava/util/function/Function;Lnet/minecraft/client/renderer/vertex/VertexFormat;)Lnet/minecraft/client/renderer/model/IBakedModel;=|p_217845_1_,p_217845_2_,textureGetter,format + net/minecraft/client/renderer/model/FaceBakery.makeBakedQuad(Lnet/minecraft/client/renderer/Vector3f;Lnet/minecraft/client/renderer/Vector3f;Lnet/minecraft/client/renderer/model/BlockPartFace;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;Lnet/minecraft/util/Direction;Lnet/minecraft/client/renderer/texture/ISprite;Lnet/minecraft/client/renderer/model/BlockPartRotation;Z)Lnet/minecraft/client/renderer/model/BakedQuad;=|p_217648_1_,p_217648_2_,p_217648_3_,p_217648_4_,p_217648_5_,p_217648_6_,p_217648_7_,p_217648_8_,p_217648_9_ net/minecraft/client/renderer/model/FaceBakery.makeQuadVertexData(Lnet/minecraft/client/renderer/model/BlockFaceUV;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;Lnet/minecraft/util/Direction;[FLnet/minecraftforge/common/model/ITransformation;Lnet/minecraft/client/renderer/model/BlockPartRotation;Z)[I=|p_188012_1_,p_188012_2_,p_188012_3_,p_188012_4_,p_188012_5_,p_188012_6_,p_188012_7_ net/minecraft/client/renderer/model/FaceBakery.fillVertexData([IILnet/minecraft/util/Direction;Lnet/minecraft/client/renderer/model/BlockFaceUV;[FLnet/minecraft/client/renderer/texture/TextureAtlasSprite;Lnet/minecraftforge/common/model/ITransformation;Lnet/minecraft/client/renderer/model/BlockPartRotation;Z)V=|p_188015_1_,p_188015_2_,p_188015_3_,p_188015_4_,p_188015_5_,p_188015_6_,p_188015_7_,p_188015_8_,p_188015_9_ -net/minecraft/client/renderer/model/ItemOverrideList.(Lnet/minecraft/client/renderer/model/ModelBakery;Lnet/minecraft/client/renderer/model/IUnbakedModel;Ljava/util/function/Function;Ljava/util/List;)V=|p_i50984_1_,p_i50984_2_,p_i50984_3_,p_i50984_4_ -net/minecraft/client/renderer/model/ItemOverrideList.(Lnet/minecraft/client/renderer/model/IUnbakedModel;Ljava/util/function/Function;Ljava/util/List;Ljava/util/function/Function;)V=|p_i50984_2_,p_i50984_3_,p_i50984_4_,spriteGetter +net/minecraft/client/renderer/model/ItemOverrideList.(Lnet/minecraft/client/renderer/model/ModelBakery;Lnet/minecraft/client/renderer/model/IUnbakedModel;Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/List;Lnet/minecraft/client/renderer/vertex/VertexFormat;)V=|p_i50984_1_,p_i50984_2_,p_i50984_3_,textureGetter,p_i50984_4_,format -net/minecraft/client/renderer/model/BlockModel.bake(Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/client/renderer/texture/ISprite;Lnet/minecraft/client/renderer/vertex/VertexFormat;)Lnet/minecraft/client/renderer/model/IBakedModel;=|p_217644_1_,p_217644_3_,p_217644_2_,format +net/minecraft/client/renderer/model/BlockModel.bake(Lnet/minecraft/client/renderer/model/ModelBakery;Lnet/minecraft/client/renderer/model/BlockModel;Ljava/util/function/Function;Lnet/minecraft/client/renderer/texture/ISprite;Lnet/minecraft/client/renderer/vertex/VertexFormat;)Lnet/minecraft/client/renderer/model/IBakedModel;=|p_217644_1_,p_217644_2_,p_217644_3_,p_217644_4_,format -net/minecraft/client/renderer/model/VariantList.bake(Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/client/renderer/texture/ISprite;Lnet/minecraft/client/renderer/vertex/VertexFormat;)Lnet/minecraft/client/renderer/model/IBakedModel;=|p_217641_1_,p_217641_2_,p_217641_3_,format +net/minecraft/client/renderer/model/VariantList.bake(Lnet/minecraft/client/renderer/model/ModelBakery;Ljava/util/function/Function;Lnet/minecraft/client/renderer/texture/ISprite;Lnet/minecraft/client/renderer/vertex/VertexFormat;)Lnet/minecraft/client/renderer/model/IBakedModel;=|p_217641_1_,p_217641_2_,p_217641_3_,format -net/minecraft/client/renderer/model/multipart/Multipart.bake(Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/client/renderer/texture/ISprite;Lnet/minecraft/client/renderer/vertex/VertexFormat;)Lnet/minecraft/client/renderer/model/IBakedModel;=|p_217641_1_,p_217641_2_,p_217641_3_,format +net/minecraft/client/renderer/model/multipart/Multipart.bake(Lnet/minecraft/client/renderer/model/ModelBakery;Ljava/util/function/Function;Lnet/minecraft/client/renderer/texture/ISprite;Lnet/minecraft/client/renderer/vertex/VertexFormat;)Lnet/minecraft/client/renderer/model/IBakedModel;=|p_217641_1_,p_217641_2_,p_217641_3_,format net/minecraft/client/resources/ClientResourcePackInfo.(Ljava/lang/String;ZLjava/util/function/Supplier;Lnet/minecraft/resources/IResourcePack;Lnet/minecraft/resources/data/PackMetadataSection;Lnet/minecraft/resources/ResourcePackInfo$Priority;Z)V=|p_i48113_1_,p_i48113_2_,p_i48113_3_,p_i48113_4_,p_i48113_5_,p_i48113_6_,hidden net/minecraft/client/resources/ClientResourcePackInfo.(Ljava/lang/String;ZLjava/util/function/Supplier;Lnet/minecraft/util/text/ITextComponent;Lnet/minecraft/util/text/ITextComponent;Lnet/minecraft/resources/PackCompatibility;Lnet/minecraft/resources/ResourcePackInfo$Priority;ZLnet/minecraft/client/renderer/texture/NativeImage;Z)V=|p_i48114_1_,p_i48114_2_,p_i48114_3_,p_i48114_4_,p_i48114_5_,p_i48114_6_,p_i48114_7_,p_i48114_8_,p_i48114_9_,hidden