Fixed multipart block models not using the new model driven render type system. (#8844)

This commit is contained in:
Silver_David authored and GitHub committed 2022-07-10 11:10:43 -04:00
1 parent 47fd2e8604
commit daf5933b79
1 file changed
+23 -6
@@ -32,7 +32,7 @@
if (p_235050_ == null) {
return Collections.emptyList();
} else {
@@ -60,16 +_,17 @@
@@ -60,16 +_,18 @@
this.f_119460_.put(p_235050_, bitset);
}
@@ -44,6 +44,7 @@
if (bitset.get(j)) {
- list.addAll(this.f_119459_.get(j).getRight().m_213637_(p_235050_, p_235051_, RandomSource.m_216335_(k)));
+ var model = this.f_119459_.get(j).getRight();
+ if (model.getRenderTypes(p_235050_, p_235052_, modelData).contains(renderType)) // FORGE: Only put quad data if the model is using the render type passed
+ list.add(model.getQuads(p_235050_, p_235051_, RandomSource.m_216335_(k), net.minecraftforge.client.model.data.MultipartModelData.resolve(modelData, model), renderType));
}
}
@@ -68,7 +69,7 @@
public boolean m_7539_() {
return this.f_119454_;
}
@@ -89,12 +_,22 @@
@@ -89,16 +_,38 @@
return false;
}
@@ -84,10 +85,26 @@
+ @Deprecated
public ItemTransforms m_7442_() {
return this.f_119457_;
+ }
+
+ public BakedModel applyTransform(net.minecraft.client.renderer.block.model.ItemTransforms.TransformType transformType, com.mojang.blaze3d.vertex.PoseStack poseStack, boolean applyLeftHandTransform) {
+ return this.defaultModel.applyTransform(transformType, poseStack, applyLeftHandTransform);
}
+ public BakedModel applyTransform(net.minecraft.client.renderer.block.model.ItemTransforms.TransformType transformType, com.mojang.blaze3d.vertex.PoseStack poseStack, boolean applyLeftHandTransform) {
+ return this.defaultModel.applyTransform(transformType, poseStack, applyLeftHandTransform);
+ }
+
public ItemOverrides m_7343_() {
return this.f_119458_;
+ }
+
+ private final java.util.Map<BlockState, net.minecraftforge.client.ChunkRenderTypeSet> stateRenderTypeCache = new java.util.concurrent.ConcurrentHashMap<>();
+
+ @Override // FORGE: Get render types based on the models used for the block state passed, and cache those values for future use.
+ public net.minecraftforge.client.ChunkRenderTypeSet getRenderTypes(@org.jetbrains.annotations.NotNull BlockState state, @org.jetbrains.annotations.NotNull RandomSource rand, @org.jetbrains.annotations.NotNull net.minecraftforge.client.model.data.ModelData data) {
+ return this.stateRenderTypeCache.computeIfAbsent(state, s -> net.minecraftforge.client.ChunkRenderTypeSet.union(this.f_119459_.stream().filter(p -> p.getLeft().test(s)).map(p -> p.getRight().getRenderTypes(s, rand, data)).toList()));
+ }
+
+ @Override // FORGE: Get the render types for all selectors. Don't cache since itemStack could do custom things with NBT.
+ public List<net.minecraft.client.renderer.RenderType> getRenderTypes(net.minecraft.world.item.ItemStack itemStack, boolean fabulous) {
+ return this.f_119459_.stream().flatMap(p -> p.getRight().getRenderTypes(itemStack, fabulous).stream()).distinct().toList();
}
@OnlyIn(Dist.CLIENT)