diff --git a/src/api/java/meldexun/nothirium/api/renderer/chunk/ChunkRenderPass.java b/src/api/java/meldexun/nothirium/api/renderer/chunk/ChunkRenderPass.java
new file mode 100644
index 00000000000..355ce0daa04
--- /dev/null
+++ b/src/api/java/meldexun/nothirium/api/renderer/chunk/ChunkRenderPass.java
@@ -0,0 +1,12 @@
+package meldexun.nothirium.api.renderer.chunk;
+
+/**
+ * Adapted and minimized from ChunkRenderPass.java
+ */
+public enum ChunkRenderPass {
+ ;
+
+ public static final ChunkRenderPass[] ALL = ChunkRenderPass.values();
+
+}
diff --git a/src/main/java/gregtech/client/utils/BloomEffectUtil.java b/src/main/java/gregtech/client/utils/BloomEffectUtil.java
index c4a4e0548ee..36671852320 100644
--- a/src/main/java/gregtech/client/utils/BloomEffectUtil.java
+++ b/src/main/java/gregtech/client/utils/BloomEffectUtil.java
@@ -18,23 +18,19 @@
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.shader.Framebuffer;
import net.minecraft.entity.Entity;
-import net.minecraft.launchwrapper.Launch;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.world.World;
-import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import com.github.bsideup.jabel.Desugar;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
-import org.apache.commons.lang3.reflect.FieldUtils;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.opengl.GL11;
-import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -336,24 +332,9 @@ public boolean test(BloomRenderTicket bloomRenderTicket) {
}, validityChecker);
}
- @SuppressWarnings({ "rawtypes", "unchecked" })
public static void init() {
- bloom = EnumHelper.addEnum(BlockRenderLayer.class, "BLOOM", new Class[] { String.class }, "Bloom");
+ bloom = BlockRenderLayer.valueOf("BLOOM");
BLOOM = bloom;
- if (Mods.Nothirium.isModLoaded()) {
- try {
- // Nothirium hard copies the BlockRenderLayer enum into a ChunkRenderPass enum. Add our BLOOM layer to
- // that too.
- Class crp = Class.forName("meldexun.nothirium.api.renderer.chunk.ChunkRenderPass", false,
- Launch.classLoader);
- EnumHelper.addEnum(crp, "BLOOM", new Class[] {});
- Field all = FieldUtils.getField(crp, "ALL", false);
- FieldUtils.removeFinalModifier(all);
- FieldUtils.writeStaticField(all, crp.getEnumConstants());
- } catch (ClassNotFoundException | IllegalAccessException e) {
- throw new RuntimeException(e);
- }
- }
}
// Calls injected via ASM
diff --git a/src/main/java/gregtech/client/utils/BloomEffectVintagiumUtil.java b/src/main/java/gregtech/client/utils/BloomEffectVintagiumUtil.java
index 0d63f22a2d4..68bd1469c38 100644
--- a/src/main/java/gregtech/client/utils/BloomEffectVintagiumUtil.java
+++ b/src/main/java/gregtech/client/utils/BloomEffectVintagiumUtil.java
@@ -11,14 +11,12 @@
@SideOnly(Side.CLIENT)
public class BloomEffectVintagiumUtil {
- public static BlockRenderPass bloom;
-
/**
* @return {@link BlockRenderPass} instance for the bloom render layer.
*/
@NotNull
@SuppressWarnings("unused")
public static BlockRenderPass getBloomPass() {
- return Objects.requireNonNull(bloom, "Bloom effect is not initialized yet");
+ return Objects.requireNonNull(BlockRenderPass.valueOf("BLOOM"), "Bloom effect is not initialized yet");
}
}
diff --git a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java
index a582e924088..f429a9d749e 100644
--- a/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java
+++ b/src/main/java/gregtech/mixins/GregTechLateMixinLoadingPlugin.java
@@ -19,6 +19,7 @@ public List getMixinConfigs() {
configs.add("mixins.gregtech.ccl.json");
configs.add("mixins.gregtech.littletiles.json");
configs.add("mixins.gregtech.vintagium.json");
+ configs.add("mixins.gregtech.nothirium.json");
return configs;
}
@@ -31,6 +32,7 @@ public boolean shouldMixinConfigQueue(String mixinConfig) {
case "mixin.gregtech.ctm.json" -> Mods.CTM.isModLoaded();
case "mixins.gregtech.littletiles.json" -> Mods.LittleTiles.isModLoaded();
case "mixins.gregtech.vintagium.json" -> Mods.Vintagium.isModLoaded();
+ case "mixins.gregtech.nothirium.json" -> Mods.Nothirium.isModLoaded();
default -> true;
};
}
diff --git a/src/main/java/gregtech/mixins/minecraft/BlockRenderLayerMixin.java b/src/main/java/gregtech/mixins/minecraft/BlockRenderLayerMixin.java
new file mode 100644
index 00000000000..d3c352a94dd
--- /dev/null
+++ b/src/main/java/gregtech/mixins/minecraft/BlockRenderLayerMixin.java
@@ -0,0 +1,31 @@
+package gregtech.mixins.minecraft;
+
+import net.minecraft.util.BlockRenderLayer;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Mutable;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.gen.Invoker;
+
+@Mixin(BlockRenderLayer.class)
+public class BlockRenderLayerMixin {
+
+ @Final
+ @Shadow
+ @Mutable
+ private static BlockRenderLayer[] $VALUES;
+
+ @SuppressWarnings("all")
+ @Invoker("")
+ private static BlockRenderLayer create(String name, int ordinal, String directoryName) {
+ throw new IllegalStateException("Unreachable");
+ }
+
+ static {
+ BlockRenderLayer bloom = create("BLOOM", $VALUES.length, "Bloom");
+
+ $VALUES = ArrayUtils.add($VALUES, bloom);
+ }
+}
diff --git a/src/main/java/gregtech/mixins/nothirium/ChunkRenderPassMixin.java b/src/main/java/gregtech/mixins/nothirium/ChunkRenderPassMixin.java
new file mode 100644
index 00000000000..9785abe9978
--- /dev/null
+++ b/src/main/java/gregtech/mixins/nothirium/ChunkRenderPassMixin.java
@@ -0,0 +1,35 @@
+package gregtech.mixins.nothirium;
+
+import meldexun.nothirium.api.renderer.chunk.ChunkRenderPass;
+import org.apache.commons.lang3.ArrayUtils;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Mutable;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.gen.Invoker;
+
+@Mixin(ChunkRenderPass.class)
+public class ChunkRenderPassMixin {
+
+ @Final
+ @Mutable
+ @Shadow(remap = false)
+ public static ChunkRenderPass[] $VALUES;
+
+ @Final
+ @Mutable
+ @Shadow(remap = false)
+ public static ChunkRenderPass[] ALL;
+
+ @SuppressWarnings("all")
+ @Invoker(value = "")
+ private static ChunkRenderPass create(String name, int ordinal) {
+ throw new IllegalStateException("Unreachable");
+ }
+
+ static {
+ ChunkRenderPass bloom = create("BLOOM", $VALUES.length);
+ $VALUES = ArrayUtils.add($VALUES, bloom);
+ ALL = ChunkRenderPass.values();
+ }
+}
diff --git a/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java b/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java
index 5544bd8069e..731128ddca0 100644
--- a/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java
+++ b/src/main/java/gregtech/mixins/vintagium/BlockRenderPassMixin.java
@@ -1,25 +1,26 @@
package gregtech.mixins.vintagium;
import gregtech.client.utils.BloomEffectUtil;
-import gregtech.client.utils.BloomEffectVintagiumUtil;
import net.minecraft.util.BlockRenderLayer;
-import net.minecraftforge.common.util.EnumHelper;
import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass;
import me.jellysquid.mods.sodium.client.util.BufferSizeUtil;
-import me.jellysquid.mods.sodium.client.util.EnumUtil;
+import org.apache.commons.lang3.ArrayUtils;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(BlockRenderPass.class)
public abstract class BlockRenderPassMixin {
+ @Final
+ @Mutable
+ @Shadow(remap = false)
+ public static BlockRenderPass[] $VALUES;
+
@Final
@Mutable
@Shadow(remap = false)
@@ -30,17 +31,17 @@ public abstract class BlockRenderPassMixin {
@Shadow(remap = false)
public static int COUNT;
- @SuppressWarnings("UnresolvedMixinReference")
- @Inject(method = "",
- at = @At(value = "TAIL"),
- remap = false)
- private static void init(CallbackInfo ci) {
- EnumUtil.LAYERS = BlockRenderLayer.values();
+ @SuppressWarnings("all")
+ @Invoker("")
+ private static BlockRenderPass create(String name, int ordinal, BlockRenderLayer layer, boolean translucent) {
+ throw new IllegalStateException("Unreachable");
+ }
+
+ static {
BufferSizeUtil.BUFFER_SIZES.put(BloomEffectUtil.getBloomLayer(), 131072);
- var params = new Class[] { BlockRenderLayer.class, boolean.class };
- var values = new Object[] { BloomEffectUtil.getBloomLayer(), true };
- BloomEffectVintagiumUtil.bloom = EnumHelper.addEnum(BlockRenderPass.class, "BLOOM", params, values);
+ BlockRenderPass bloom = create("BLOOM", $VALUES.length, BloomEffectUtil.getBloomLayer(), true);
+ $VALUES = ArrayUtils.add($VALUES, bloom);
VALUES = BlockRenderPass.values();
COUNT = VALUES.length;
}
diff --git a/src/main/resources/mixins.gregtech.minecraft.json b/src/main/resources/mixins.gregtech.minecraft.json
index 3c9abf97778..50eeb75fb65 100644
--- a/src/main/resources/mixins.gregtech.minecraft.json
+++ b/src/main/resources/mixins.gregtech.minecraft.json
@@ -9,6 +9,7 @@
},
"mixins": [
"BlockConcretePowderMixin",
+ "BlockRenderLayerMixin",
"DamageSourceMixin",
"EnchantmentCanApplyMixin",
"MinecraftMixin"
diff --git a/src/main/resources/mixins.gregtech.nothirium.json b/src/main/resources/mixins.gregtech.nothirium.json
new file mode 100644
index 00000000000..c3ffca3074e
--- /dev/null
+++ b/src/main/resources/mixins.gregtech.nothirium.json
@@ -0,0 +1,12 @@
+{
+ "package": "gregtech.mixins.nothirium",
+ "refmap": "mixins.gregtech.refmap.json",
+ "target": "@env(DEFAULT)",
+ "minVersion": "0.8",
+ "compatibilityLevel": "JAVA_8",
+ "mixins": [
+ "ChunkRenderPassMixin"
+ ],
+ "client": [],
+ "server": []
+}