From 8f9e52c26030e1033e66517271131c02dcb5e02f Mon Sep 17 00:00:00 2001 From: tterrag Date: Wed, 29 Jul 2020 23:10:40 -0400 Subject: [PATCH] Implement forge IBakedModel methods in vanilla wrapper models --- .../model/MultipartBakedModel.java.patch | 79 +++++++++++++++++++ .../model/WeightedBakedModel.java.patch | 45 ++++++++++- .../client/extensions/IForgeBakedModel.java | 1 - .../model/ItemMultiLayerBakedModel.java | 9 ++- .../client/model/MultiLayerModel.java | 12 +-- src/main/resources/forge.exc | 2 + 6 files changed, 131 insertions(+), 17 deletions(-) create mode 100644 patches/minecraft/net/minecraft/client/renderer/model/MultipartBakedModel.java.patch diff --git a/patches/minecraft/net/minecraft/client/renderer/model/MultipartBakedModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/model/MultipartBakedModel.java.patch new file mode 100644 index 000000000..b0d6dcaca --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/model/MultipartBakedModel.java.patch @@ -0,0 +1,79 @@ +--- a/net/minecraft/client/renderer/model/MultipartBakedModel.java ++++ b/net/minecraft/client/renderer/model/MultipartBakedModel.java +@@ -18,7 +18,7 @@ + import org.apache.commons.lang3.tuple.Pair; + + @OnlyIn(Dist.CLIENT) +-public class MultipartBakedModel implements IBakedModel { ++public class MultipartBakedModel implements net.minecraftforge.client.model.data.IDynamicBakedModel { + private final List, IBakedModel>> field_188626_f; + protected final boolean field_188621_a; + protected final boolean field_188622_b; +@@ -27,10 +27,12 @@ + protected final ItemCameraTransforms field_188624_d; + protected final ItemOverrideList field_188625_e; + private final Map field_210277_g = new Object2ObjectOpenCustomHashMap<>(Util.func_212443_g()); ++ private final IBakedModel defaultModel; + + public MultipartBakedModel(List, IBakedModel>> p_i48273_1_) { + this.field_188626_f = p_i48273_1_; + IBakedModel ibakedmodel = p_i48273_1_.iterator().next().getRight(); ++ this.defaultModel = ibakedmodel; + this.field_188621_a = ibakedmodel.func_177555_b(); + this.field_188622_b = ibakedmodel.func_177556_c(); + this.field_230185_c_ = ibakedmodel.func_230044_c_(); +@@ -39,7 +41,8 @@ + this.field_188625_e = ibakedmodel.func_188617_f(); + } + +- public List func_200117_a(@Nullable BlockState p_200117_1_, @Nullable Direction p_200117_2_, Random p_200117_3_) { ++ // FORGE: Implement our overloads (here and below) so child models can have custom logic ++ public List getQuads(@Nullable BlockState p_200117_1_, @Nullable Direction p_200117_2_, Random p_200117_3_, net.minecraftforge.client.model.data.IModelData modelData) { + if (p_200117_1_ == null) { + return Collections.emptyList(); + } else { +@@ -62,7 +65,7 @@ + + for(int j = 0; j < bitset.length(); ++j) { + if (bitset.get(j)) { +- list.addAll(this.field_188626_f.get(j).getRight().func_200117_a(p_200117_1_, p_200117_2_, new Random(k))); ++ list.addAll(this.field_188626_f.get(j).getRight().getQuads(p_200117_1_, p_200117_2_, new Random(k), modelData)); + } + } + +@@ -74,6 +77,10 @@ + return this.field_188621_a; + } + ++ public boolean isAmbientOcclusion(BlockState state) { ++ return this.defaultModel.isAmbientOcclusion(state); ++ } ++ + public boolean func_177556_c() { + return this.field_188622_b; + } +@@ -86,14 +93,24 @@ + return false; + } + ++ @Deprecated + public TextureAtlasSprite func_177554_e() { + return this.field_188623_c; + } + ++ public TextureAtlasSprite getParticleTexture(net.minecraftforge.client.model.data.IModelData modelData) { ++ return this.defaultModel.getParticleTexture(modelData); ++ } ++ ++ @Deprecated + public ItemCameraTransforms func_177552_f() { + return this.field_188624_d; + } + ++ public IBakedModel handlePerspective(net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType transformType, com.mojang.blaze3d.matrix.MatrixStack matrixStack) { ++ return this.defaultModel.handlePerspective(transformType, matrixStack); ++ } ++ + public ItemOverrideList func_188617_f() { + return this.field_188625_e; + } diff --git a/patches/minecraft/net/minecraft/client/renderer/model/WeightedBakedModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/model/WeightedBakedModel.java.patch index f4be1d561..1ed02b5b4 100644 --- a/patches/minecraft/net/minecraft/client/renderer/model/WeightedBakedModel.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/model/WeightedBakedModel.java.patch @@ -1,12 +1,53 @@ --- a/net/minecraft/client/renderer/model/WeightedBakedModel.java +++ b/net/minecraft/client/renderer/model/WeightedBakedModel.java -@@ -31,6 +31,9 @@ +@@ -12,7 +12,7 @@ + import net.minecraftforge.api.distmarker.OnlyIn; + + @OnlyIn(Dist.CLIENT) +-public class WeightedBakedModel implements IBakedModel { ++public class WeightedBakedModel implements net.minecraftforge.client.model.data.IDynamicBakedModel { + private final int field_177567_a; + private final List field_177565_b; + private final IBakedModel field_177566_c; +@@ -23,14 +23,20 @@ + this.field_177566_c = (p_i46073_1_.get(0)).field_185281_b; + } + +- public List func_200117_a(@Nullable BlockState p_200117_1_, @Nullable Direction p_200117_2_, Random p_200117_3_) { +- return (WeightedRandom.func_180166_a(this.field_177565_b, Math.abs((int)p_200117_3_.nextLong()) % this.field_177567_a)).field_185281_b.func_200117_a(p_200117_1_, p_200117_2_, p_200117_3_); ++ // FORGE: Implement our overloads (here and below) so child models can have custom logic ++ public List getQuads(@Nullable BlockState p_200117_1_, @Nullable Direction p_200117_2_, Random p_200117_3_, net.minecraftforge.client.model.data.IModelData modelData) { ++ return (WeightedRandom.func_180166_a(this.field_177565_b, Math.abs((int)p_200117_3_.nextLong()) % this.field_177567_a)).field_185281_b.getQuads(p_200117_1_, p_200117_2_, p_200117_3_, modelData); + } + + public boolean func_177555_b() { return this.field_177566_c.func_177555_b(); } + @Override -+ public boolean isAmbientOcclusion(BlockState state) { return this.field_177566_c.isAmbientOcclusion(state); } ++ public boolean isAmbientOcclusion(BlockState state) { ++ return this.field_177566_c.isAmbientOcclusion(state); ++ } + public boolean func_177556_c() { return this.field_177566_c.func_177556_c(); } +@@ -47,10 +53,18 @@ + return this.field_177566_c.func_177554_e(); + } + ++ public TextureAtlasSprite getParticleTexture(net.minecraftforge.client.model.data.IModelData modelData) { ++ return this.field_177566_c.getParticleTexture(modelData); ++ } ++ + public ItemCameraTransforms func_177552_f() { + return this.field_177566_c.func_177552_f(); + } + ++ public IBakedModel handlePerspective(net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType transformType, com.mojang.blaze3d.matrix.MatrixStack matrixStack) { ++ return this.field_177566_c.handlePerspective(transformType, matrixStack); ++ } ++ + public ItemOverrideList func_188617_f() { + return this.field_177566_c.func_188617_f(); + } diff --git a/src/main/java/net/minecraftforge/client/extensions/IForgeBakedModel.java b/src/main/java/net/minecraftforge/client/extensions/IForgeBakedModel.java index f71a0f603..a334e4040 100644 --- a/src/main/java/net/minecraftforge/client/extensions/IForgeBakedModel.java +++ b/src/main/java/net/minecraftforge/client/extensions/IForgeBakedModel.java @@ -22,7 +22,6 @@ package net.minecraftforge.client.extensions; import java.util.Collections; import java.util.List; import java.util.Random; -import java.util.Set; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/src/main/java/net/minecraftforge/client/model/ItemMultiLayerBakedModel.java b/src/main/java/net/minecraftforge/client/model/ItemMultiLayerBakedModel.java index 49abb34d4..d18ca9dec 100644 --- a/src/main/java/net/minecraftforge/client/model/ItemMultiLayerBakedModel.java +++ b/src/main/java/net/minecraftforge/client/model/ItemMultiLayerBakedModel.java @@ -34,7 +34,8 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.item.ItemStack; import net.minecraft.util.Direction; import net.minecraft.util.math.vector.TransformationMatrix; -import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.client.model.data.IDynamicBakedModel; +import net.minecraftforge.client.model.data.IModelData; import javax.annotation.Nullable; import java.util.Collection; @@ -42,7 +43,7 @@ import java.util.Collections; import java.util.List; import java.util.Random; -public class ItemMultiLayerBakedModel implements IBakedModel +public class ItemMultiLayerBakedModel implements IDynamicBakedModel { private final boolean smoothLighting; private final boolean shadedInGui; @@ -67,10 +68,10 @@ public class ItemMultiLayerBakedModel implements IBakedModel } @Override - public List getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) + public List getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand, IModelData modelData) { List quads = Lists.newArrayList(); - layerModels.forEach(lm -> quads.addAll(lm.getFirst().getQuads(state, side, rand, EmptyModelData.INSTANCE))); + layerModels.forEach(lm -> quads.addAll(lm.getFirst().getQuads(state, side, rand, modelData))); return quads; } diff --git a/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java b/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java index d6a811c53..2ddbb1d6e 100644 --- a/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java +++ b/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java @@ -34,7 +34,6 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.util.math.vector.TransformationMatrix; import net.minecraft.client.renderer.model.*; import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType; -import net.minecraft.client.renderer.texture.AtlasTexture; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.item.ItemStack; import net.minecraft.resources.IResourceManager; @@ -44,7 +43,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.ForgeRenderTypes; import net.minecraftforge.client.MinecraftForgeClient; -import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.client.model.data.IDynamicBakedModel; import net.minecraftforge.client.model.data.IModelData; import net.minecraftforge.client.model.geometry.IModelGeometry; import org.apache.logging.log4j.LogManager; @@ -109,7 +108,7 @@ public final class MultiLayerModel implements IModelGeometry ); } - private static final class MultiLayerBakedModel implements IBakedModel + private static final class MultiLayerBakedModel implements IDynamicBakedModel { private final ImmutableMap models; private final ImmutableMap cameraTransforms; @@ -143,13 +142,6 @@ public final class MultiLayerModel implements IModelGeometry }).collect(Collectors.toList()); } - @Deprecated - @Override - public List getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) - { - return getQuads(state, side, rand, EmptyModelData.INSTANCE); - } - @Nonnull @Override public List getQuads(@Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, @Nonnull IModelData extraData) diff --git a/src/main/resources/forge.exc b/src/main/resources/forge.exc index 67fec542a..3c2d7ab4d 100644 --- a/src/main/resources/forge.exc +++ b/src/main/resources/forge.exc @@ -39,7 +39,9 @@ net/minecraft/client/renderer/model/ModelBakery.(Lnet/minecraft/resources/ net/minecraft/client/renderer/model/ModelBakery.addModelToCache(Lnet/minecraft/util/ResourceLocation;)V=|p_217843_1_ net/minecraft/client/renderer/model/ModelBakery.getBakedModel(Lnet/minecraft/util/ResourceLocation;Lnet/minecraft/client/renderer/model/IModelTransform;Ljava/util/function/Function;)Lnet/minecraft/client/renderer/model/IBakedModel;=|p_217845_1_,p_217845_2_,textureGetter net/minecraft/client/renderer/model/ModelBakery.processLoading(Lnet/minecraft/profiler/IProfiler;I)V=|p_i226056_3_,p_i226056_4_ +net/minecraft/client/renderer/model/MultipartBakedModel.getQuads(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/Direction;Ljava/util/Random;Lnet/minecraftforge/client/model/data/IModelData;)Ljava/util/List;=|p_200117_1_,p_200117_2_,p_200117_3_,modelData net/minecraft/client/renderer/model/VariantList.bake(Lnet/minecraft/client/renderer/model/ModelBakery;Ljava/util/function/Function;Lnet/minecraft/client/renderer/texture/IModelTransform;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/WeightedBakedModel.getQuads(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/Direction;Ljava/util/Random;Lnet/minecraftforge/client/model/data/IModelData;)Ljava/util/List;=|p_200117_1_,p_200117_2_,p_200117_3_,modelData net/minecraft/client/renderer/model/multipart/Multipart.bake(Lnet/minecraft/client/renderer/model/ModelBakery;Ljava/util/function/Function;Lnet/minecraft/client/renderer/texture/IModelTransform;Lnet/minecraft/client/renderer/vertex/VertexFormat;)Lnet/minecraft/client/renderer/model/IBakedModel;=|p_217641_1_,p_217641_2_,p_217641_3_,format