Skip to content

Commit 7509825

Browse files
authored
Change bloom layer to use mixin instead of enumHelper (GregTechCEu#2583)
1 parent 0160791 commit 7509825

File tree

9 files changed

+111
-38
lines changed

9 files changed

+111
-38
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package meldexun.nothirium.api.renderer.chunk;
2+
3+
/**
4+
* Adapted and minimized from <a
5+
* href="https://github.com/Meldexun/Nothirium/blob/main/src/main/java/meldexun/nothirium/api/renderer/chunk/ChunkRenderPass.java">ChunkRenderPass.java</a>
6+
*/
7+
public enum ChunkRenderPass {
8+
;
9+
10+
public static final ChunkRenderPass[] ALL = ChunkRenderPass.values();
11+
12+
}

src/main/java/gregtech/client/utils/BloomEffectUtil.java

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,19 @@
1818
import net.minecraft.client.renderer.texture.TextureMap;
1919
import net.minecraft.client.shader.Framebuffer;
2020
import net.minecraft.entity.Entity;
21-
import net.minecraft.launchwrapper.Launch;
2221
import net.minecraft.util.BlockRenderLayer;
2322
import net.minecraft.world.World;
24-
import net.minecraftforge.common.util.EnumHelper;
2523
import net.minecraftforge.fml.relauncher.Side;
2624
import net.minecraftforge.fml.relauncher.SideOnly;
2725

2826
import com.github.bsideup.jabel.Desugar;
2927
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
30-
import org.apache.commons.lang3.reflect.FieldUtils;
3128
import org.jetbrains.annotations.ApiStatus;
3229
import org.jetbrains.annotations.Contract;
3330
import org.jetbrains.annotations.NotNull;
3431
import org.jetbrains.annotations.Nullable;
3532
import org.lwjgl.opengl.GL11;
3633

37-
import java.lang.reflect.Field;
3834
import java.util.ArrayList;
3935
import java.util.List;
4036
import java.util.Map;
@@ -336,24 +332,9 @@ public boolean test(BloomRenderTicket bloomRenderTicket) {
336332
}, validityChecker);
337333
}
338334

339-
@SuppressWarnings({ "rawtypes", "unchecked" })
340335
public static void init() {
341-
bloom = EnumHelper.addEnum(BlockRenderLayer.class, "BLOOM", new Class[] { String.class }, "Bloom");
336+
bloom = BlockRenderLayer.valueOf("BLOOM");
342337
BLOOM = bloom;
343-
if (Mods.Nothirium.isModLoaded()) {
344-
try {
345-
// Nothirium hard copies the BlockRenderLayer enum into a ChunkRenderPass enum. Add our BLOOM layer to
346-
// that too.
347-
Class crp = Class.forName("meldexun.nothirium.api.renderer.chunk.ChunkRenderPass", false,
348-
Launch.classLoader);
349-
EnumHelper.addEnum(crp, "BLOOM", new Class[] {});
350-
Field all = FieldUtils.getField(crp, "ALL", false);
351-
FieldUtils.removeFinalModifier(all);
352-
FieldUtils.writeStaticField(all, crp.getEnumConstants());
353-
} catch (ClassNotFoundException | IllegalAccessException e) {
354-
throw new RuntimeException(e);
355-
}
356-
}
357338
}
358339

359340
// Calls injected via ASM

src/main/java/gregtech/client/utils/BloomEffectVintagiumUtil.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,12 @@
1111
@SideOnly(Side.CLIENT)
1212
public class BloomEffectVintagiumUtil {
1313

14-
public static BlockRenderPass bloom;
15-
1614
/**
1715
* @return {@link BlockRenderPass} instance for the bloom render layer.
1816
*/
1917
@NotNull
2018
@SuppressWarnings("unused")
2119
public static BlockRenderPass getBloomPass() {
22-
return Objects.requireNonNull(bloom, "Bloom effect is not initialized yet");
20+
return Objects.requireNonNull(BlockRenderPass.valueOf("BLOOM"), "Bloom effect is not initialized yet");
2321
}
2422
}

src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public List<String> getMixinConfigs() {
1919
configs.add("mixins.gregtech.ccl.json");
2020
configs.add("mixins.gregtech.littletiles.json");
2121
configs.add("mixins.gregtech.vintagium.json");
22+
configs.add("mixins.gregtech.nothirium.json");
2223

2324
return configs;
2425
}
@@ -31,6 +32,7 @@ public boolean shouldMixinConfigQueue(String mixinConfig) {
3132
case "mixin.gregtech.ctm.json" -> Mods.CTM.isModLoaded();
3233
case "mixins.gregtech.littletiles.json" -> Mods.LittleTiles.isModLoaded();
3334
case "mixins.gregtech.vintagium.json" -> Mods.Vintagium.isModLoaded();
35+
case "mixins.gregtech.nothirium.json" -> Mods.Nothirium.isModLoaded();
3436
default -> true;
3537
};
3638
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package gregtech.mixins.minecraft;
2+
3+
import net.minecraft.util.BlockRenderLayer;
4+
5+
import org.apache.commons.lang3.ArrayUtils;
6+
import org.spongepowered.asm.mixin.Final;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.Mutable;
9+
import org.spongepowered.asm.mixin.Shadow;
10+
import org.spongepowered.asm.mixin.gen.Invoker;
11+
12+
@Mixin(BlockRenderLayer.class)
13+
public class BlockRenderLayerMixin {
14+
15+
@Final
16+
@Shadow
17+
@Mutable
18+
private static BlockRenderLayer[] $VALUES;
19+
20+
@SuppressWarnings("all")
21+
@Invoker("<init>")
22+
private static BlockRenderLayer create(String name, int ordinal, String directoryName) {
23+
throw new IllegalStateException("Unreachable");
24+
}
25+
26+
static {
27+
BlockRenderLayer bloom = create("BLOOM", $VALUES.length, "Bloom");
28+
29+
$VALUES = ArrayUtils.add($VALUES, bloom);
30+
}
31+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package gregtech.mixins.nothirium;
2+
3+
import meldexun.nothirium.api.renderer.chunk.ChunkRenderPass;
4+
import org.apache.commons.lang3.ArrayUtils;
5+
import org.spongepowered.asm.mixin.Final;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.Mutable;
8+
import org.spongepowered.asm.mixin.Shadow;
9+
import org.spongepowered.asm.mixin.gen.Invoker;
10+
11+
@Mixin(ChunkRenderPass.class)
12+
public class ChunkRenderPassMixin {
13+
14+
@Final
15+
@Mutable
16+
@Shadow(remap = false)
17+
public static ChunkRenderPass[] $VALUES;
18+
19+
@Final
20+
@Mutable
21+
@Shadow(remap = false)
22+
public static ChunkRenderPass[] ALL;
23+
24+
@SuppressWarnings("all")
25+
@Invoker(value = "<init>")
26+
private static ChunkRenderPass create(String name, int ordinal) {
27+
throw new IllegalStateException("Unreachable");
28+
}
29+
30+
static {
31+
ChunkRenderPass bloom = create("BLOOM", $VALUES.length);
32+
$VALUES = ArrayUtils.add($VALUES, bloom);
33+
ALL = ChunkRenderPass.values();
34+
}
35+
}

src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
11
package gregtech.mixins.vintagium;
22

33
import gregtech.client.utils.BloomEffectUtil;
4-
import gregtech.client.utils.BloomEffectVintagiumUtil;
54

65
import net.minecraft.util.BlockRenderLayer;
7-
import net.minecraftforge.common.util.EnumHelper;
86

97
import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass;
108
import me.jellysquid.mods.sodium.client.util.BufferSizeUtil;
11-
import me.jellysquid.mods.sodium.client.util.EnumUtil;
9+
import org.apache.commons.lang3.ArrayUtils;
1210
import org.spongepowered.asm.mixin.Final;
1311
import org.spongepowered.asm.mixin.Mixin;
1412
import org.spongepowered.asm.mixin.Mutable;
1513
import org.spongepowered.asm.mixin.Shadow;
16-
import org.spongepowered.asm.mixin.injection.At;
17-
import org.spongepowered.asm.mixin.injection.Inject;
18-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
14+
import org.spongepowered.asm.mixin.gen.Invoker;
1915

2016
@Mixin(BlockRenderPass.class)
2117
public abstract class BlockRenderPassMixin {
2218

19+
@Final
20+
@Mutable
21+
@Shadow(remap = false)
22+
public static BlockRenderPass[] $VALUES;
23+
2324
@Final
2425
@Mutable
2526
@Shadow(remap = false)
@@ -30,17 +31,17 @@ public abstract class BlockRenderPassMixin {
3031
@Shadow(remap = false)
3132
public static int COUNT;
3233

33-
@SuppressWarnings("UnresolvedMixinReference")
34-
@Inject(method = "<clinit>",
35-
at = @At(value = "TAIL"),
36-
remap = false)
37-
private static void init(CallbackInfo ci) {
38-
EnumUtil.LAYERS = BlockRenderLayer.values();
34+
@SuppressWarnings("all")
35+
@Invoker("<init>")
36+
private static BlockRenderPass create(String name, int ordinal, BlockRenderLayer layer, boolean translucent) {
37+
throw new IllegalStateException("Unreachable");
38+
}
39+
40+
static {
3941
BufferSizeUtil.BUFFER_SIZES.put(BloomEffectUtil.getBloomLayer(), 131072);
4042

41-
var params = new Class[] { BlockRenderLayer.class, boolean.class };
42-
var values = new Object[] { BloomEffectUtil.getBloomLayer(), true };
43-
BloomEffectVintagiumUtil.bloom = EnumHelper.addEnum(BlockRenderPass.class, "BLOOM", params, values);
43+
BlockRenderPass bloom = create("BLOOM", $VALUES.length, BloomEffectUtil.getBloomLayer(), true);
44+
$VALUES = ArrayUtils.add($VALUES, bloom);
4445
VALUES = BlockRenderPass.values();
4546
COUNT = VALUES.length;
4647
}

src/main/resources/mixins.gregtech.minecraft.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
},
1010
"mixins": [
1111
"BlockConcretePowderMixin",
12+
"BlockRenderLayerMixin",
1213
"DamageSourceMixin",
1314
"EnchantmentCanApplyMixin",
1415
"MinecraftMixin"
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"package": "gregtech.mixins.nothirium",
3+
"refmap": "mixins.gregtech.refmap.json",
4+
"target": "@env(DEFAULT)",
5+
"minVersion": "0.8",
6+
"compatibilityLevel": "JAVA_8",
7+
"mixins": [
8+
"ChunkRenderPassMixin"
9+
],
10+
"client": [],
11+
"server": []
12+
}

0 commit comments

Comments
 (0)