Skip to content

Commit 38321fd

Browse files
authored
Fix some bugs (#502)
* Switch target to Embeddium * Fix some render type code * Correct particle sort order * Fix some parity issues with Forge * Fix TextureManager mixin now being broken in production
1 parent f2ff446 commit 38321fd

File tree

12 files changed

+58
-35
lines changed

12 files changed

+58
-35
lines changed

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ repositories {
4040
includeGroup "maven.modrinth"
4141
}
4242
}
43+
maven { url "https://maven.blamejared.com/" }
4344
maven {
4445
url "https://maven.su5ed.dev/releases"
4546
}
@@ -51,7 +52,7 @@ dependencies {
5152
forge "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
5253

5354
//modCompileOnly "maven.modrinth:rubidium:0.7.1"
54-
modCompileOnly "me.jellysquid.mods:rubidium-upstream:0.7.1+git.1cdb739"
55+
modCompileOnly "org.embeddedt:embeddium-1.20.1:0.2.12-git.149aa28+mc1.20.1"
5556
}
5657

5758
processResources {

gradlew

100644100755
File mode changed.

src/main/java/net/coderbot/iris/block_rendering/BlockMaterialMapping.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import net.minecraft.world.level.block.state.BlockState;
1818
import net.minecraft.world.level.block.state.StateDefinition;
1919
import net.minecraft.world.level.block.state.properties.Property;
20+
import net.minecraftforge.client.ChunkRenderTypeSet;
2021

2122
import java.util.HashMap;
2223
import java.util.List;
@@ -35,15 +36,15 @@ public static Object2IntMap<BlockState> createBlockStateIdMap(Int2ObjectMap<List
3536
return blockStateIds;
3637
}
3738

38-
public static Map<Block, RenderType> createBlockTypeMap(Map<NamespacedId, BlockRenderType> blockPropertiesMap) {
39-
Map<Block, RenderType> blockTypeIds = new Reference2ReferenceOpenHashMap<>();
39+
public static Map<Block, ChunkRenderTypeSet> createBlockTypeMap(Map<NamespacedId, BlockRenderType> blockPropertiesMap) {
40+
Map<Block, ChunkRenderTypeSet> blockTypeIds = new Reference2ReferenceOpenHashMap<>();
4041

4142
blockPropertiesMap.forEach((id, blockType) -> {
4243
ResourceLocation resourceLocation = new ResourceLocation(id.getNamespace(), id.getName());
4344

4445
Block block = BuiltInRegistries.BLOCK.get(resourceLocation);
4546

46-
blockTypeIds.put(block, convertBlockToRenderType(blockType));
47+
blockTypeIds.put(block, ChunkRenderTypeSet.of(convertBlockToRenderType(blockType)));
4748
});
4849

4950
return blockTypeIds;

src/main/java/net/coderbot/iris/block_rendering/BlockRenderingSettings.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.minecraft.client.renderer.RenderType;
77
import net.minecraft.world.level.block.Block;
88
import net.minecraft.world.level.block.state.BlockState;
9+
import net.minecraftforge.client.ChunkRenderTypeSet;
910
import org.jetbrains.annotations.Nullable;
1011

1112
import java.util.Map;
@@ -15,7 +16,7 @@ public class BlockRenderingSettings {
1516

1617
private boolean reloadRequired;
1718
private Object2IntMap<BlockState> blockStateIds;
18-
private Map<Block, RenderType> blockTypeIds;
19+
private Map<Block, ChunkRenderTypeSet> blockTypeIds;
1920
private Object2IntFunction<NamespacedId> entityIds;
2021
private Object2IntFunction<NamespacedId> itemIds;
2122
private float ambientOcclusionLevel;
@@ -53,7 +54,7 @@ public Object2IntMap<BlockState> getBlockStateIds() {
5354
}
5455

5556
@Nullable
56-
public Map<Block, RenderType> getBlockTypeIds() {
57+
public Map<Block, ChunkRenderTypeSet> getBlockTypeIds() {
5758
return blockTypeIds;
5859
}
5960

@@ -77,7 +78,7 @@ public void setBlockStateIds(Object2IntMap<BlockState> blockStateIds) {
7778
this.blockStateIds = blockStateIds;
7879
}
7980

80-
public void setBlockTypeIds(Map<Block, RenderType> blockTypeIds) {
81+
public void setBlockTypeIds(Map<Block, ChunkRenderTypeSet> blockTypeIds) {
8182
if (this.blockTypeIds != null && this.blockTypeIds.equals(blockTypeIds)) {
8283
return;
8384
}

src/main/java/net/coderbot/iris/compat/sodium/mixin/vertex_format/MixinRegionChunkRenderer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,14 @@ public MixinRegionChunkRenderer(RenderDevice device, ChunkVertexType vertexType)
2929
}
3030

3131
@Redirect(remap = false, method = "createRegionTessellation", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/gl/tessellation/TessellationBinding;forVertexBuffer(Lme/jellysquid/mods/sodium/client/gl/buffer/GlBuffer;[Lme/jellysquid/mods/sodium/client/gl/attribute/GlVertexAttributeBinding;)Lme/jellysquid/mods/sodium/client/gl/tessellation/TessellationBinding;"))
32+
@SuppressWarnings({"rawtypes", "unchecked"})
3233
private TessellationBinding iris$onInit(GlBuffer buffer, GlVertexAttributeBinding[] attributes) {
3334
if (!BlockRenderingSettings.INSTANCE.shouldUseExtendedVertexFormat()) {
3435
return TessellationBinding.forVertexBuffer(buffer, attributes);
3536
}
3637

38+
GlVertexFormat vertexFormat = this.vertexFormat;
39+
3740
attributes = new GlVertexAttributeBinding[]{
3841
new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.ATTRIBUTE_POSITION_ID,
3942
vertexFormat.getAttribute(IrisChunkMeshAttributes.POSITION_MATERIAL_MESH)),

src/main/java/net/coderbot/iris/mixin/MixinItemBlockRenderTypes.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.minecraft.client.renderer.RenderType;
66
import net.minecraft.world.level.block.Block;
77
import net.minecraft.world.level.block.state.BlockState;
8+
import net.minecraftforge.client.ChunkRenderTypeSet;
89
import org.spongepowered.asm.mixin.Mixin;
910
import org.spongepowered.asm.mixin.injection.At;
1011
import org.spongepowered.asm.mixin.injection.Inject;
@@ -14,11 +15,11 @@
1415

1516
@Mixin(ItemBlockRenderTypes.class)
1617
public class MixinItemBlockRenderTypes {
17-
@Inject(method = "getChunkRenderType", at = @At("HEAD"), cancellable = true)
18-
private static void iris$setCustomRenderType(BlockState arg, CallbackInfoReturnable<RenderType> cir) {
19-
Map<Block, RenderType> idMap = BlockRenderingSettings.INSTANCE.getBlockTypeIds();
18+
@Inject(method = "getRenderLayers", at = @At("HEAD"), cancellable = true, remap = false)
19+
private static void iris$setCustomRenderType(BlockState arg, CallbackInfoReturnable<ChunkRenderTypeSet> cir) {
20+
Map<Block, ChunkRenderTypeSet> idMap = BlockRenderingSettings.INSTANCE.getBlockTypeIds();
2021
if (idMap != null) {
21-
RenderType type = idMap.get(arg.getBlock());
22+
ChunkRenderTypeSet type = idMap.get(arg.getBlock());
2223
if (type != null) {
2324
cir.setReturnValue(type);
2425
}

src/main/java/net/coderbot/iris/mixin/fantastic/MixinParticleEngine.java

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.coderbot.iris.mixin.fantastic;
22

3-
import com.google.common.collect.ImmutableList;
3+
import com.google.common.collect.ImmutableSet;
4+
import com.google.common.collect.Maps;
45
import com.mojang.blaze3d.systems.RenderSystem;
56
import com.mojang.blaze3d.vertex.PoseStack;
67
import net.coderbot.iris.fantastic.ParticleRenderingPhase;
@@ -23,10 +24,7 @@
2324
import org.spongepowered.asm.mixin.injection.Redirect;
2425
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2526

26-
import java.util.HashMap;
27-
import java.util.List;
28-
import java.util.Map;
29-
import java.util.Queue;
27+
import java.util.*;
3028
import java.util.function.Supplier;
3129

3230
/**
@@ -63,10 +61,10 @@ public class MixinParticleEngine implements PhasedParticleEngine {
6361
@Final
6462
private Map<ParticleRenderType, Queue<Particle>> particles;
6563

66-
private static final List<ParticleRenderType> OPAQUE_PARTICLE_RENDER_TYPES;
64+
private static final Set<ParticleRenderType> OPAQUE_PARTICLE_RENDER_TYPES;
6765

6866
static {
69-
OPAQUE_PARTICLE_RENDER_TYPES = ImmutableList.of(
67+
OPAQUE_PARTICLE_RENDER_TYPES = ImmutableSet.of(
7068
ParticleRenderType.PARTICLE_SHEET_OPAQUE,
7169
ParticleRenderType.PARTICLE_SHEET_LIT,
7270
ParticleRenderType.CUSTOM,
@@ -81,20 +79,13 @@ public class MixinParticleEngine implements PhasedParticleEngine {
8179

8280
@Redirect(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/particle/ParticleEngine;particles:Ljava/util/Map;"))
8381
private Map<ParticleRenderType, Queue<Particle>> iris$selectParticlesToRender(ParticleEngine instance) {
84-
Map<ParticleRenderType, Queue<Particle>> toRender = new HashMap<>(particles);
8582
if (phase == ParticleRenderingPhase.TRANSLUCENT) {
86-
// Remove all known opaque particle texture sheets.
87-
for(ParticleRenderType type : OPAQUE_PARTICLE_RENDER_TYPES)
88-
toRender.remove(type);
89-
90-
return toRender;
83+
return Maps.filterKeys(particles, type -> !OPAQUE_PARTICLE_RENDER_TYPES.contains(type));
9184
} else if (phase == ParticleRenderingPhase.OPAQUE) {
92-
// Render only opaque particle sheets
93-
toRender.remove(ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT);
94-
return toRender;
85+
return Maps.filterKeys(particles, type -> !type.equals(ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT));
9586
} else {
9687
// Don't override particle rendering
97-
return toRender;
88+
return particles;
9889
}
9990
}
10091

src/main/java/net/coderbot/iris/mixin/fantastic/MixinStationaryItemParticle.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package net.coderbot.iris.mixin.fantastic;
22

33
import net.coderbot.iris.fantastic.IrisParticleRenderTypes;
4+
import net.minecraft.client.Minecraft;
45
import net.minecraft.client.multiplayer.ClientLevel;
56
import net.minecraft.client.particle.BlockMarker;
67
import net.minecraft.client.particle.ParticleRenderType;
78
import net.minecraft.client.renderer.ItemBlockRenderTypes;
89
import net.minecraft.client.renderer.RenderType;
10+
import net.minecraft.client.resources.model.BakedModel;
11+
import net.minecraft.world.item.BlockItem;
912
import net.minecraft.world.level.block.state.BlockState;
13+
import net.minecraftforge.client.ChunkRenderTypeSet;
14+
import net.minecraftforge.client.model.data.ModelData;
1015
import org.spongepowered.asm.mixin.Mixin;
1116
import org.spongepowered.asm.mixin.Unique;
1217
import org.spongepowered.asm.mixin.injection.At;
@@ -21,9 +26,10 @@ public class MixinStationaryItemParticle {
2126

2227
@Inject(method = "<init>", at = @At("RETURN"))
2328
private void iris$resolveTranslucency(ClientLevel clientLevel, double d, double e, double f, BlockState blockState, CallbackInfo ci) {
24-
RenderType type = ItemBlockRenderTypes.getChunkRenderType(blockState);
29+
BakedModel model = Minecraft.getInstance().getBlockRenderer().getBlockModel(blockState);
30+
ChunkRenderTypeSet types = model.getRenderTypes(blockState, clientLevel.random, ModelData.EMPTY);
2531

26-
if (type == RenderType.solid() || type == RenderType.cutout() || type == RenderType.cutoutMipped()) {
32+
if (types.contains(RenderType.solid()) || types.contains(RenderType.cutout()) || types.contains(RenderType.cutoutMipped())) {
2733
isOpaque = true;
2834
}
2935
}

src/main/java/net/coderbot/iris/mixin/fantastic/MixinTerrainParticle.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package net.coderbot.iris.mixin.fantastic;
22

33
import net.coderbot.iris.fantastic.IrisParticleRenderTypes;
4+
import net.minecraft.client.Minecraft;
45
import net.minecraft.client.multiplayer.ClientLevel;
56
import net.minecraft.client.particle.ParticleRenderType;
67
import net.minecraft.client.particle.TerrainParticle;
78
import net.minecraft.client.renderer.ItemBlockRenderTypes;
89
import net.minecraft.client.renderer.RenderType;
10+
import net.minecraft.client.resources.model.BakedModel;
911
import net.minecraft.core.BlockPos;
1012
import net.minecraft.world.level.block.state.BlockState;
13+
import net.minecraftforge.client.ChunkRenderTypeSet;
14+
import net.minecraftforge.client.model.data.ModelData;
1115
import org.spongepowered.asm.mixin.Mixin;
1216
import org.spongepowered.asm.mixin.Unique;
1317
import org.spongepowered.asm.mixin.injection.At;
@@ -22,9 +26,10 @@ public class MixinTerrainParticle {
2226

2327
@Inject(method = "<init>(Lnet/minecraft/client/multiplayer/ClientLevel;DDDDDDLnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;)V", at = @At("RETURN"))
2428
private void iris$resolveTranslucency(ClientLevel level, double x, double y, double z, double velocityX, double velocityY, double velocityZ, BlockState blockState, BlockPos blockPos, CallbackInfo ci) {
25-
RenderType type = ItemBlockRenderTypes.getChunkRenderType(blockState);
29+
BakedModel model = Minecraft.getInstance().getBlockRenderer().getBlockModel(blockState);
30+
ChunkRenderTypeSet types = model.getRenderTypes(blockState, level.random, ModelData.EMPTY);
2631

27-
if (type == RenderType.solid() || type == RenderType.cutout() || type == RenderType.cutoutMipped()) {
32+
if (types.contains(RenderType.solid()) || types.contains(RenderType.cutout()) || types.contains(RenderType.cutoutMipped())) {
2833
isOpaque = true;
2934
}
3035
}

src/main/java/net/coderbot/iris/mixin/texture/MixinTextureManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
@Mixin(TextureManager.class)
1717
public class MixinTextureManager {
18-
@Inject(method = "m_244739_", at = @At("TAIL"))
18+
@Inject(method = { "method_18167", "m_244739_", "lambda$reload$5" }, at = @At("TAIL"), remap = false)
1919
private void iris$onTailReloadLambda(ResourceManager resourceManager, Executor applyExecutor, CompletableFuture<?> future, Void void1, CallbackInfo ci) {
2020
TextureFormatLoader.reload(resourceManager);
2121
PBRTextureManager.INSTANCE.clear();

0 commit comments

Comments
 (0)