Implement forge IBakedModel methods in vanilla wrapper models

This commit is contained in:
tterrag 2020-07-29 23:10:40 -04:00
parent e62805f1d7
commit 8f9e52c260
6 changed files with 131 additions and 17 deletions

View File

@ -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<Pair<Predicate<BlockState>, 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<BlockState, BitSet> field_210277_g = new Object2ObjectOpenCustomHashMap<>(Util.func_212443_g());
+ private final IBakedModel defaultModel;
public MultipartBakedModel(List<Pair<Predicate<BlockState>, 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<BakedQuad> 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<BakedQuad> 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;
}

View File

@ -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<WeightedBakedModel.WeightedModel> 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<BakedQuad> 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<BakedQuad> 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();
}

View File

@ -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;

View File

@ -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<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand)
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand, IModelData modelData)
{
List<BakedQuad> 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;
}

View File

@ -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<MultiLayerModel>
);
}
private static final class MultiLayerBakedModel implements IBakedModel
private static final class MultiLayerBakedModel implements IDynamicBakedModel
{
private final ImmutableMap<RenderType, IBakedModel> models;
private final ImmutableMap<TransformType, TransformationMatrix> cameraTransforms;
@ -143,13 +142,6 @@ public final class MultiLayerModel implements IModelGeometry<MultiLayerModel>
}).collect(Collectors.toList());
}
@Deprecated
@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand)
{
return getQuads(state, side, rand, EmptyModelData.INSTANCE);
}
@Nonnull
@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, @Nonnull IModelData extraData)

View File

@ -39,7 +39,9 @@ net/minecraft/client/renderer/model/ModelBakery.<init>(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