Skip to content

Commit 8a94227

Browse files
committed
Deprecate block model bypass hax for removal. Embed embeddium compat.
1 parent ea41d08 commit 8a94227

File tree

6 files changed

+80
-2
lines changed

6 files changed

+80
-2
lines changed

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ repositories {
7373
mavenLocal()
7474
maven { url "https://maven.covers1624.net/" }
7575
maven { url "https://maven.blamejared.com/" }
76+
maven { url "https://api.modrinth.com/maven" }
7677
}
7778

7879
dependencies {
@@ -83,6 +84,8 @@ dependencies {
8384
}
8485
}
8586

87+
compileOnly 'maven.modrinth:embeddium:1.0.15+mc1.21.1'
88+
8689
compileOnly("mezz.jei:jei-${mc_version}-neoforge:${jei_version}") {
8790
transitive false
8891
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package codechicken.lib.internal.mixin;
2+
3+
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
4+
import org.embeddedt.embeddium.compat.ccl.CCLCompat;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.Overwrite;
7+
8+
/**
9+
* Created by covers1624 on 2/7/25.
10+
*/
11+
@Mixin (CCLCompat.class)
12+
public class EmbeddiumCCLMixin {
13+
14+
/**
15+
* @author covers1624
16+
* @reason Its broken and CCL ships its own.
17+
*/
18+
@Overwrite
19+
public static void onClientSetup(FMLClientSetupEvent event) {
20+
}
21+
}

src/main/java/codechicken/lib/render/block/BlockRenderingRegistry.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
package codechicken.lib.render.block;
22

3+
import com.mojang.blaze3d.vertex.PoseStack;
34
import net.minecraft.client.Minecraft;
45
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
5-
import net.minecraft.core.Holder;
66
import net.minecraft.core.registries.BuiltInRegistries;
77
import net.minecraft.world.level.block.Block;
88
import net.minecraft.world.level.material.Fluid;
99
import net.neoforged.api.distmarker.Dist;
1010
import net.neoforged.api.distmarker.OnlyIn;
11+
import net.neoforged.fml.ModList;
12+
import org.embeddedt.embeddium.api.BlockRendererRegistry;
13+
import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval;
1114
import org.jetbrains.annotations.Nullable;
1215

1316
import java.util.ArrayList;
1417
import java.util.HashMap;
1518
import java.util.List;
1619
import java.util.Map;
20+
import java.util.concurrent.ConcurrentHashMap;
1721
import java.util.function.Predicate;
1822

1923
/**
@@ -23,6 +27,8 @@
2327
*
2428
* @see ICCBlockRenderer
2529
*/
30+
@Deprecated(forRemoval = true) // No replacement.
31+
@ScheduledForRemoval (inVersion = "mc 1.21.2+")
2632
public class BlockRenderingRegistry {
2733

2834
private static boolean initialized = false;
@@ -39,6 +45,10 @@ public static void init() {
3945
mc.blockRenderer = new CCBlockRendererDispatcher(parentDispatcher, mc.getBlockColors());
4046
initialized = true;
4147
}
48+
49+
if (ModList.get().isLoaded("embeddium")) {
50+
EmbeddiumSupport.init();
51+
}
4252
}
4353

4454
/**
@@ -51,6 +61,7 @@ public static void init() {
5161
* @param renderer The {@link ICCBlockRenderer}.
5262
* @throws IllegalArgumentException If the same Block is registered twice.
5363
*/
64+
@Deprecated // No replacement. Use a mixin.
5465
public static synchronized void registerRenderer(Block block, ICCBlockRenderer renderer) {
5566
ICCBlockRenderer prev = blockRenderers.get(block);
5667
if (prev != null) {
@@ -69,6 +80,7 @@ public static synchronized void registerRenderer(Block block, ICCBlockRenderer r
6980
* @param renderer The {@link ICCBlockRenderer}.
7081
* @throws IllegalArgumentException If the same Fluid is registered twice.
7182
*/
83+
@Deprecated // No replacement. Use a mixin.
7284
public static synchronized void registerRenderer(Fluid fluid, ICCBlockRenderer renderer) {
7385
ICCBlockRenderer prev = fluidRenderers.get(fluid);
7486
if (prev != null) {
@@ -83,6 +95,7 @@ public static synchronized void registerRenderer(Fluid fluid, ICCBlockRenderer r
8395
*
8496
* @param renderer The {@link ICCBlockRenderer}.
8597
*/
98+
@Deprecated // No replacement. Use a mixin.
8699
public static synchronized void registerGlobalRenderer(ICCBlockRenderer renderer) {
87100
globalRenderers.add(renderer);
88101
}
@@ -114,4 +127,26 @@ static ICCBlockRenderer findFor(Fluid fluid, Predicate<ICCBlockRenderer> pred) {
114127

115128
return null;
116129
}
130+
131+
private static class EmbeddiumSupport {
132+
133+
private static final Map<ICCBlockRenderer, BlockRendererRegistry.Renderer> ADAPTERS = new ConcurrentHashMap<>();
134+
private static final ThreadLocal<PoseStack> POSE_STACK_CACHE = ThreadLocal.withInitial(PoseStack::new);
135+
136+
private static BlockRendererRegistry.Renderer adapt(ICCBlockRenderer renderer) {
137+
return ADAPTERS.computeIfAbsent(renderer, e -> (ctx, random, consumer) -> {
138+
e.renderBlock(ctx.state(), ctx.pos(), ctx.world(), POSE_STACK_CACHE.get(), consumer, random, ctx.modelData(), ctx.renderLayer());
139+
return BlockRendererRegistry.RenderResult.OVERRIDE;
140+
});
141+
}
142+
143+
public static void init() {
144+
BlockRendererRegistry.instance().registerRenderPopulator((resultList, ctx) -> {
145+
ICCBlockRenderer renderer = BlockRenderingRegistry.findFor(ctx.state().getBlock(), e -> e.canHandleBlock(ctx.world(), ctx.pos(), ctx.state(), ctx.renderLayer()));
146+
if (renderer != null) {
147+
resultList.add(adapt(renderer));
148+
}
149+
});
150+
}
151+
}
117152
}

src/main/java/codechicken/lib/render/block/CCBlockRendererDispatcher.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,15 @@
2626
import org.apache.commons.lang3.exception.ExceptionUtils;
2727
import org.apache.logging.log4j.LogManager;
2828
import org.apache.logging.log4j.Logger;
29+
import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval;
2930

3031
import java.util.concurrent.TimeUnit;
3132

3233
/**
3334
* Created by covers1624 on 8/09/2016.
3435
*/
36+
@Deprecated
37+
@ScheduledForRemoval (inVersion = "mc 1.21.2+")
3538
public class CCBlockRendererDispatcher extends BlockRenderDispatcher {
3639

3740
private static final Logger logger = LogManager.getLogger();

src/main/java/codechicken/lib/render/block/ICCBlockRenderer.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import net.minecraft.world.level.block.state.BlockState;
1515
import net.minecraft.world.level.material.FluidState;
1616
import net.neoforged.neoforge.client.model.data.ModelData;
17+
import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval;
1718
import org.jetbrains.annotations.Nullable;
1819

1920
/**
@@ -22,7 +23,14 @@
2223
* Created by covers1624 on 8/09/2016.
2324
*
2425
* @see BlockRenderingRegistry
26+
* @deprecated Unfortunately, this has become a maintenance and compatability burden. Mods like Sodium
27+
* are in every single modpack, and we can't realistically tell people not to use it. It's possible
28+
* a Neo api may pop up that allows features similar to this API. But I'm not going to hold my breath.
29+
* If someone still requires the functionality that this system provides, they should implement mixins
30+
* themselves, or Sodium/Embeddium compatability.
2531
*/
32+
@Deprecated (forRemoval = true)
33+
@ScheduledForRemoval (inVersion = "mc 1.21.2+")
2634
public interface ICCBlockRenderer {
2735

2836
//region Block
@@ -36,6 +44,7 @@ public interface ICCBlockRenderer {
3644
* @param renderType The {@link RenderType}, {@code null} for breaking.
3745
* @return If you wish to render the BlockState.
3846
*/
47+
@Deprecated
3948
boolean canHandleBlock(BlockAndTintGetter world, BlockPos pos, BlockState blockState, @Nullable RenderType renderType);
4049

4150
/**
@@ -53,6 +62,7 @@ public interface ICCBlockRenderer {
5362
* @param data Any ModelData.
5463
* @param renderType The {@link RenderType}, {@code null} for breaking.
5564
*/
65+
@Deprecated
5666
void renderBlock(BlockState state, BlockPos pos, BlockAndTintGetter world, PoseStack mStack, VertexConsumer builder, RandomSource random, ModelData data, @Nullable RenderType renderType);
5767

5868
/**
@@ -66,6 +76,7 @@ public interface ICCBlockRenderer {
6676
* @param builder The {@link VertexConsumer} to add quads to.
6777
* @param data Any ModelData.
6878
*/
79+
@Deprecated
6980
default void renderBreaking(BlockState state, BlockPos pos, BlockAndTintGetter world, PoseStack mStack, VertexConsumer builder, ModelData data) {
7081
CCRenderState ccrs = CCRenderState.instance();
7182
ccrs.overlay = OverlayTexture.NO_OVERLAY;
@@ -85,6 +96,7 @@ default void renderBreaking(BlockState state, BlockPos pos, BlockAndTintGetter w
8596
* @param state The state.
8697
* @return If you wish to render this block.
8798
*/
99+
@Deprecated // No replacement. Use a mixin.
88100
default boolean canHandleEntity(BlockState state) {
89101
return false;
90102
}
@@ -101,6 +113,7 @@ default boolean canHandleEntity(BlockState state) {
101113
* @param data Any ModelData.
102114
* @param renderType The {@link RenderType} may be {@code null}.
103115
*/
116+
@Deprecated // No replacement. Use a mixin.
104117
default void renderEntity(BlockState state, PoseStack nStack, MultiBufferSource builder, int packedLight, int packedOverlay, ModelData data, @Nullable RenderType renderType) { }
105118
//endregion
106119

@@ -115,6 +128,7 @@ default void renderEntity(BlockState state, PoseStack nStack, MultiBufferSource
115128
* @param fluidState The {@link FluidState}.
116129
* @return If you wish to render the {@link FluidState}.
117130
*/
131+
@Deprecated // No replacement. Use a mixin.
118132
default boolean canHandleFluid(BlockAndTintGetter world, BlockPos pos, BlockState blockState, FluidState fluidState) {
119133
return false;
120134
}
@@ -131,6 +145,7 @@ default boolean canHandleFluid(BlockAndTintGetter world, BlockPos pos, BlockStat
131145
* @param blockState The {@link BlockState}
132146
* @param fluidState The {@link FluidState}
133147
*/
148+
@Deprecated // No replacement. Use a mixin.
134149
default void renderFluid(BlockPos pos, BlockAndTintGetter world, VertexConsumer builder, BlockState blockState, FluidState fluidState) { }
135150
//endregion
136151
}

src/main/resources/mixins.codechickenlib.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"dev.GameNarratorMixin",
1010
"ItemRendererMixin",
1111
"MinecraftMixin",
12-
"ShaderInstanceMixin"
12+
"ShaderInstanceMixin",
13+
"EmbeddiumCCLMixin"
1314
]
1415
}

0 commit comments

Comments
 (0)