From 36f94fd20e940f5c0736dce8d8b226d3a23c7938 Mon Sep 17 00:00:00 2001 From: Ben Staddon Date: Thu, 17 May 2018 06:44:34 +0100 Subject: [PATCH] Allow custom models to have per-state lighting (#4732) --- .../client/renderer/BlockModelRenderer.java.patch | 2 +- .../renderer/block/model/IBakedModel.java.patch | 4 +++- .../block/model/SimpleBakedModel.java.patch | 11 +++++++++++ .../block/model/WeightedBakedModel.java.patch | 11 +++++++++++ .../client/model/BakedModelWrapper.java | 6 ++++++ .../client/model/MultiLayerModel.java | 6 ++++++ .../minecraftforge/client/model/MultiModel.java | 6 ++++++ .../client/model/PerspectiveMapWrapper.java | 15 ++++++++------- 8 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 patches/minecraft/net/minecraft/client/renderer/block/model/SimpleBakedModel.java.patch create mode 100644 patches/minecraft/net/minecraft/client/renderer/block/model/WeightedBakedModel.java.patch diff --git a/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.java.patch index 2637d7534d..fc77349fc3 100644 --- a/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.java.patch @@ -5,7 +5,7 @@ public boolean func_187493_a(IBlockAccess p_187493_1_, IBakedModel p_187493_2_, IBlockState p_187493_3_, BlockPos p_187493_4_, BufferBuilder p_187493_5_, boolean p_187493_6_, long p_187493_7_) { - boolean flag = Minecraft.func_71379_u() && p_187493_3_.func_185906_d() == 0 && p_187493_2_.func_177555_b(); -+ boolean flag = Minecraft.func_71379_u() && p_187493_3_.getLightValue(p_187493_1_, p_187493_4_) == 0 && p_187493_2_.func_177555_b(); ++ boolean flag = Minecraft.func_71379_u() && p_187493_3_.getLightValue(p_187493_1_, p_187493_4_) == 0 && p_187493_2_.isAmbientOcclusion(p_187493_3_); try { diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/IBakedModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/IBakedModel.java.patch index 1715d81e2c..033f7d808e 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/IBakedModel.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/block/model/IBakedModel.java.patch @@ -1,6 +1,6 @@ --- ../src-base/minecraft/net/minecraft/client/renderer/block/model/IBakedModel.java +++ ../src-work/minecraft/net/minecraft/client/renderer/block/model/IBakedModel.java -@@ -21,7 +21,16 @@ +@@ -21,7 +21,18 @@ TextureAtlasSprite func_177554_e(); @@ -10,6 +10,8 @@ ItemOverrideList func_188617_f(); + ++ default boolean isAmbientOcclusion(IBlockState state) { return func_177555_b(); } ++ + /* + * Returns the pair of the model for the given perspective, and the matrix + * that should be applied to the GL state before rendering it (matrix may be null). diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/SimpleBakedModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/SimpleBakedModel.java.patch new file mode 100644 index 0000000000..85c04be1b6 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/block/model/SimpleBakedModel.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/client/renderer/block/model/SimpleBakedModel.java ++++ ../src-work/minecraft/net/minecraft/client/renderer/block/model/SimpleBakedModel.java +@@ -88,7 +88,7 @@ + + public Builder(IBlockState p_i46989_1_, IBakedModel p_i46989_2_, TextureAtlasSprite p_i46989_3_, BlockPos p_i46989_4_) + { +- this(p_i46989_2_.func_177555_b(), p_i46989_2_.func_177556_c(), p_i46989_2_.func_177552_f(), p_i46989_2_.func_188617_f()); ++ this(p_i46989_2_.isAmbientOcclusion(p_i46989_1_), p_i46989_2_.func_177556_c(), p_i46989_2_.func_177552_f(), p_i46989_2_.func_188617_f()); + this.field_177652_d = p_i46989_2_.func_177554_e(); + long i = MathHelper.func_180186_a(p_i46989_4_); + diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/WeightedBakedModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/WeightedBakedModel.java.patch new file mode 100644 index 0000000000..aebad79fac --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/block/model/WeightedBakedModel.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/client/renderer/block/model/WeightedBakedModel.java ++++ ../src-work/minecraft/net/minecraft/client/renderer/block/model/WeightedBakedModel.java +@@ -41,6 +41,8 @@ + return this.field_177566_c.func_177555_b(); + } + ++ public boolean isAmbientOcclusion(IBlockState state) { return this.field_177566_c.isAmbientOcclusion(state); } ++ + public boolean func_177556_c() + { + return this.field_177566_c.func_177556_c(); diff --git a/src/main/java/net/minecraftforge/client/model/BakedModelWrapper.java b/src/main/java/net/minecraftforge/client/model/BakedModelWrapper.java index 1e14bd02c7..3fe9227446 100644 --- a/src/main/java/net/minecraftforge/client/model/BakedModelWrapper.java +++ b/src/main/java/net/minecraftforge/client/model/BakedModelWrapper.java @@ -52,6 +52,12 @@ public abstract class BakedModelWrapper implements IBaked return originalModel.isAmbientOcclusion(); } + @Override + public boolean isAmbientOcclusion(IBlockState state) + { + return originalModel.isAmbientOcclusion(state); + } + @Override public boolean isGui3d() { diff --git a/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java b/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java index 5d4505977e..b3deb51c7d 100644 --- a/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java +++ b/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java @@ -181,6 +181,12 @@ public final class MultiLayerModel implements IModel return base.isAmbientOcclusion(); } + @Override + public boolean isAmbientOcclusion(IBlockState state) + { + return base.isAmbientOcclusion(state); + } + @Override public boolean isGui3d() { diff --git a/src/main/java/net/minecraftforge/client/model/MultiModel.java b/src/main/java/net/minecraftforge/client/model/MultiModel.java index 968b9cb962..34e01059cd 100644 --- a/src/main/java/net/minecraftforge/client/model/MultiModel.java +++ b/src/main/java/net/minecraftforge/client/model/MultiModel.java @@ -154,6 +154,12 @@ public final class MultiModel implements IModel return internalBase.isAmbientOcclusion(); } + @Override + public boolean isAmbientOcclusion(IBlockState state) + { + return internalBase.isAmbientOcclusion(state); + } + @Override public boolean isGui3d() { diff --git a/src/main/java/net/minecraftforge/client/model/PerspectiveMapWrapper.java b/src/main/java/net/minecraftforge/client/model/PerspectiveMapWrapper.java index b4d062e564..6690397c46 100644 --- a/src/main/java/net/minecraftforge/client/model/PerspectiveMapWrapper.java +++ b/src/main/java/net/minecraftforge/client/model/PerspectiveMapWrapper.java @@ -82,14 +82,15 @@ public class PerspectiveMapWrapper implements IBakedModel return Pair.of(model, null); } - public boolean isAmbientOcclusion() { return parent.isAmbientOcclusion(); } - public boolean isGui3d() { return parent.isGui3d(); } - public boolean isBuiltInRenderer() { return parent.isBuiltInRenderer(); } - public TextureAtlasSprite getParticleTexture() { return parent.getParticleTexture(); } + @Override public boolean isAmbientOcclusion() { return parent.isAmbientOcclusion(); } + @Override public boolean isAmbientOcclusion(IBlockState state) { return parent.isAmbientOcclusion(state); } + @Override public boolean isGui3d() { return parent.isGui3d(); } + @Override public boolean isBuiltInRenderer() { return parent.isBuiltInRenderer(); } + @Override public TextureAtlasSprite getParticleTexture() { return parent.getParticleTexture(); } @SuppressWarnings("deprecation") - public ItemCameraTransforms getItemCameraTransforms() { return parent.getItemCameraTransforms(); } - public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) { return parent.getQuads(state, side, rand); } - public ItemOverrideList getOverrides() { return parent.getOverrides(); } + @Override public ItemCameraTransforms getItemCameraTransforms() { return parent.getItemCameraTransforms(); } + @Override public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) { return parent.getQuads(state, side, rand); } + @Override public ItemOverrideList getOverrides() { return parent.getOverrides(); } @Override public Pair handlePerspective(ItemCameraTransforms.TransformType cameraTransformType)