Or use the run configs if you are using IntelliJ IDEA.
# Compiling
-Run `gradlew buildMerged`, and the merged jar will be in `build/libs/`.
\ No newline at end of file
+Run `gradlew build`, and the merged jar will be in `fabric|forge/build/libs/`.
\ No newline at end of file
}
architectury {
- common(false)
+ common()
}
configurations {
general.addEntry(eb.startTextDescription(Component.nullToEmpty("ยง7" + I18n.get("description.lightoverlay.caching"))).build());
general.addEntry(eb.startBooleanToggle(new TranslatableComponent("config.lightoverlay.caching"), LightOverlay.caching).setDefaultValue(false).setSaveConsumer(bool -> LightOverlay.caching = bool).build());
general.addEntry(eb.startIntSlider(new TranslatableComponent("config.lightoverlay.reach"), LightOverlay.reach, 1, 64).setDefaultValue(12).setTextGetter(integer -> Component.nullToEmpty("Reach: " + integer + " Blocks")).setSaveConsumer(integer -> LightOverlay.reach = integer).build());
- IntegerSliderEntry crossLevel = eb.startIntSlider(new TranslatableComponent("config.lightoverlay.crossLevel"), LightOverlay.crossLevel, 0, 15).setDefaultValue(7).setTextGetter(integer -> Component.nullToEmpty("Cross Level: " + integer)).setSaveConsumer(integer -> LightOverlay.crossLevel = integer).build();
+ IntegerSliderEntry crossLevel = eb.startIntSlider(new TranslatableComponent("config.lightoverlay.crossLevel"), LightOverlay.crossLevel, 0, 15).setDefaultValue(0).setTextGetter(integer -> Component.nullToEmpty("Cross Level: " + integer)).setSaveConsumer(integer -> LightOverlay.crossLevel = integer).build();
general.addEntry(crossLevel);
general.addEntry(eb.startIntSlider(new TranslatableComponent("config.lightoverlay.secondaryLevel"), LightOverlay.secondaryLevel, -1, 15)
- .setErrorSupplier(integer -> {
- if (integer >= 0 && integer >= crossLevel.getValue())
- return Optional.of(new TextComponent("Secondary Level cannot be higher than Cross Level!"));
- return Optional.empty();
- }).setDefaultValue(-1).setTextGetter(integer -> new TextComponent(integer < 0 ? "Off" : "Level: " + integer)).setSaveConsumer(integer -> LightOverlay.secondaryLevel = integer).build());
+ .setDefaultValue(7).setTextGetter(integer -> new TextComponent(integer < 0 ? "Off" : "Level: " + integer)).setSaveConsumer(integer -> LightOverlay.secondaryLevel = integer).build());
general.addEntry(eb.startBooleanToggle(new TranslatableComponent("config.lightoverlay.showNumber"), LightOverlay.showNumber).setDefaultValue(false).setSaveConsumer(bool -> LightOverlay.showNumber = bool).build());
general.addEntry(eb.startBooleanToggle(new TranslatableComponent("config.lightoverlay.underwater"), LightOverlay.underwater).setDefaultValue(false).setSaveConsumer(bool -> LightOverlay.underwater = bool).build());
general.addEntry(eb.startBooleanToggle(new TranslatableComponent("config.lightoverlay.mushroom"), LightOverlay.mushroom).setDefaultValue(false).setSaveConsumer(bool -> LightOverlay.mushroom = bool).build());
public class LightOverlay {
public static final DecimalFormat FORMAT = new DecimalFormat("#.#");
public static int reach = 12;
- public static int crossLevel = 7;
- public static int secondaryLevel = -1;
+ public static int crossLevel = 0;
+ public static int secondaryLevel = 7;
public static int lowerCrossLevel = -1;
public static int higherCrossLevel = -1;
public static boolean caching = false;
properties.load(fis);
fis.close();
reach = Integer.parseInt((String) properties.computeIfAbsent("reach", a -> "12"));
- crossLevel = Integer.parseInt((String) properties.computeIfAbsent("crossLevel", a -> "7"));
- secondaryLevel = Integer.parseInt((String) properties.computeIfAbsent("secondaryLevel", a -> "-1"));
+ crossLevel = Integer.parseInt((String) properties.computeIfAbsent("crossLevel", a -> "0"));
+ secondaryLevel = Integer.parseInt((String) properties.computeIfAbsent("secondaryLevel", a -> "7"));
caching = ((String) properties.computeIfAbsent("caching", a -> "false")).equalsIgnoreCase("true");
showNumber = ((String) properties.computeIfAbsent("showNumber", a -> "false")).equalsIgnoreCase("true");
underwater = ((String) properties.computeIfAbsent("underwater", a -> "false")).equalsIgnoreCase("true");
} catch (Exception e) {
e.printStackTrace();
reach = 12;
- crossLevel = 7;
- secondaryLevel = -1;
+ crossLevel = 0;
+ secondaryLevel = 7;
lineWidth = 1.0F;
redColor = 0xFF0000;
yellowColor = 0xFFFF00;
ex.printStackTrace();
}
}
- if (secondaryLevel >= crossLevel) System.err.println("[Light Overlay] Secondary Level is higher than Cross Level");
+ if (secondaryLevel >= crossLevel) {
+ higherCross = CROSS_SECONDARY;
+ lowerCross = CROSS_YELLOW;
+ } else {
+ higherCross = CROSS_YELLOW;
+ lowerCross = CROSS_SECONDARY;
+ }
lowerCrossLevel = Math.min(crossLevel, secondaryLevel);
higherCrossLevel = Math.max(crossLevel, secondaryLevel);
ticker.CHUNK_MAP.clear();
public static final byte CROSS_YELLOW = 0;
public static final byte CROSS_RED = 1;
public static final byte CROSS_SECONDARY = 2;
- public static final byte CROSS_NONE = 2;
+ public static final byte CROSS_NONE = 3;
+ public static byte higherCross = CROSS_YELLOW;
+ public static byte lowerCross = CROSS_SECONDARY;
}
if (blockLightLevel > LightOverlay.higherCrossLevel)
return LightOverlay.CROSS_NONE;
if (skyLightLevel > LightOverlay.higherCrossLevel)
- return LightOverlay.CROSS_YELLOW;
- return LightOverlay.lowerCrossLevel >= 0 && blockLightLevel > LightOverlay.lowerCrossLevel ? LightOverlay.CROSS_SECONDARY : LightOverlay.CROSS_RED;
+ return LightOverlay.higherCross;
+ return LightOverlay.lowerCrossLevel >= 0 && blockLightLevel > LightOverlay.lowerCrossLevel ?
+ LightOverlay.lowerCross : LightOverlay.CROSS_RED;
}
public static int getCrossLevel(BlockPos pos, BlockPos down, BlockGetter world, LayerLightEventListener view, CollisionContext collisionContext) {
}
modImplementation("dev.architectury:architectury-fabric:${rootProject.architectury_version}")
- common(project(path: ":common", configuration: "dev")) {
+ common(project(path: ":common", configuration: "namedElements")) {
transitive = false
}
shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) {
forge()
}
+loom {
+ forge {
+ mixinConfig "lightoverlay-forge.mixins.json"
+ }
+}
+
processResources {
filesMatching("META-INF/mods.toml") {
expand "version": project.version
modImplementation("me.shedaniel.cloth:cloth-config-forge:${rootProject.cloth_config_version}")
modImplementation("dev.architectury:architectury-forge:${rootProject.architectury_version}")
- implementation(project(path: ":common")) {
+ implementation(project(path: ":common", configuration: "namedElements")) {
transitive = false
}
- developmentForge(project(path: ":common")) {
+ developmentForge(project(path: ":common", configuration: "namedElements")) {
transitive = false
}
shadow(project(path: ":common", configuration: "transformProductionForge")) {
import net.minecraftforge.fml.IExtensionPoint;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
-import net.minecraftforge.fmllegacy.network.FMLNetworkConstants;
+import net.minecraftforge.network.NetworkConstants;
@Mod("lightoverlay")
public class LightOverlay {
public LightOverlay() {
- ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> FMLNetworkConstants.IGNORESERVERONLY, (a, b) -> true));
+ ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true));
DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> LightOverlayImpl::register);
}
}
package me.shedaniel.lightoverlay.forge;
import me.shedaniel.lightoverlay.common.ClothScreen;
+import net.minecraftforge.client.ConfigGuiHandler;
import net.minecraftforge.fml.ModLoadingContext;
-import net.minecraftforge.fmlclient.ConfigGuiHandler;
public class LightOverlayCloth {
public static void register() {
import com.mojang.blaze3d.vertex.PoseStack;
import me.shedaniel.lightoverlay.common.LightOverlay;
+import me.shedaniel.lightoverlay.common.LightOverlayRenderer;
import net.minecraft.client.renderer.culling.Frustum;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
import java.util.function.Consumer;
public class LightOverlayImpl {
+ public static LightOverlayRenderer renderer = LightOverlay.renderer;
public static Consumer<PoseStack> debugRenderer = poses -> {};
public static void register() {
import me.shedaniel.lightoverlay.common.CubicChunkPos;
import me.shedaniel.lightoverlay.common.LightOverlay;
-//import net.minecraft.network.Connection;
import net.minecraft.client.multiplayer.ClientPacketListener;
+import net.minecraft.network.Connection;
import net.minecraft.network.PacketListener;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket;
import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket;
import net.minecraft.network.protocol.game.ClientboundSetChunkCacheCenterPacket;
import net.minecraft.util.Mth;
-//import org.spongepowered.asm.mixin.Mixin;
-//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.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-//@Mixin(Connection.class)
+@Mixin(Connection.class)
public class MixinClientConnection {
-// @Inject(method = "genericsFtw", at = @At("HEAD"))
-// private static void handlePacket(Packet packet, PacketListener listener, CallbackInfo ci) {
+ @Inject(method = "genericsFtw", at = @At("HEAD"))
+ private static void handlePacket(Packet packet, PacketListener listener, CallbackInfo ci) {
//
// }
- public static void handlePacket(Packet packet, PacketListener listener) {
+// public static void handlePacket(Packet packet, PacketListener listener) {
try {
if (!(listener instanceof ClientPacketListener packetListener)) return;
var level = packetListener.getLevel();
import com.mojang.blaze3d.vertex.PoseStack;
import me.shedaniel.lightoverlay.forge.LightOverlayImpl;
-/*import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.debug.DebugRenderer;
import org.spongepowered.asm.mixin.Mixin;
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.injection.callback.CallbackInfo;
-//@Mixin(DebugRenderer.class)
+@Mixin(DebugRenderer.class)
public class MixinDebugRenderer {
-// @Inject(method = "render", at = @At("HEAD"))
-// private void render(PoseStack arg, MultiBufferSource.BufferSource arg2, double d, double e, double f, CallbackInfo ci) {
-// LightOverlayImpl.renderWorldLast();
-// }
-
- public static void render(PoseStack stack) {
- LightOverlayImpl.renderWorldLast(stack);
+ @Inject(method = "render", at = @At("HEAD"))
+ private void render(PoseStack arg, MultiBufferSource.BufferSource arg2, double d, double e, double f, CallbackInfo ci) {
+ LightOverlayImpl.renderWorldLast(arg);
}
}
package me.shedaniel.lightoverlay.forge.mixin;
-import me.shedaniel.lightoverlay.common.LightOverlay;
+import me.shedaniel.lightoverlay.forge.LightOverlayImpl;
+import net.minecraft.client.Camera;
+import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.culling.Frustum;
-//import net.minecraft.client.Camera;
-//import net.minecraft.client.renderer.LevelRenderer;
-//import org.spongepowered.asm.mixin.Mixin;
-//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.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-//@Mixin(LevelRenderer.class)
+@Mixin(LevelRenderer.class)
public class MixinLevelRenderer {
-// @Inject(method = "setupRender", at = @At("HEAD"))
-// private void setupTerrain(Camera camera, Frustum frustum, boolean bl, int i, boolean bl2, CallbackInfo ci) {
-// LightOverlay.renderer.frustum = frustum;
-// }
-
- public static void setupTerrain(Frustum frustum) {
- LightOverlay.renderer.frustum = frustum;
+ @Inject(method = "setupRender", at = @At("HEAD"))
+ private void setupTerrain(Camera camera, Frustum frustum, boolean bl, boolean bl2, CallbackInfo ci) {
+ LightOverlayImpl.renderer.frustum = frustum;
}
}
+++ /dev/null
-var Opcodes = Java.type("org.objectweb.asm.Opcodes");
-var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode");
-var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode");
-var ASMAPI = Java.type("net.minecraftforge.coremod.api.ASMAPI");
-
-function transformMethod(method) {
- var instructions = method.instructions;
- instructions.insert(new MethodInsnNode(Opcodes.INVOKESTATIC, "me/shedaniel/lightoverlay/forge/mixin/MixinClientConnection", "handlePacket", "(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;)V", false));
- instructions.insert(new VarInsnNode(Opcodes.ALOAD, 1));
- instructions.insert(new VarInsnNode(Opcodes.ALOAD, 0));
-}
-
-function initializeCoreMod() {
- return {
- "lightoverlay": {
- 'target': {
- 'type': 'CLASS',
- 'name': 'net.minecraft.network.Connection'
- },
- 'transformer': function (classNode) {
- var genericsFtw = ASMAPI.mapMethod("m_129517_");
- for (i in classNode.methods) {
- var method = classNode.methods[i];
- if (method.name === genericsFtw) {
- transformMethod(method)
- break;
- }
- }
- return classNode;
- }
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-var Opcodes = Java.type("org.objectweb.asm.Opcodes");
-var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode");
-var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode");
-var ASMAPI = Java.type("net.minecraftforge.coremod.api.ASMAPI");
-
-function transformMethod(method) {
- var instructions = method.instructions;
- instructions.insert(new MethodInsnNode(Opcodes.INVOKESTATIC, "me/shedaniel/lightoverlay/forge/mixin/MixinDebugRenderer", "render", "(Lcom/mojang/blaze3d/vertex/PoseStack;)V", false));
- instructions.insert(new VarInsnNode(Opcodes.ALOAD, 1));
-}
-
-function initializeCoreMod() {
- return {
- "lightoverlay": {
- 'target': {
- 'type': 'CLASS',
- 'name': 'net.minecraft.client.renderer.debug.DebugRenderer'
- },
- 'transformer': function (classNode) {
- var render = ASMAPI.mapMethod("m_113457_");
- for (i in classNode.methods) {
- var method = classNode.methods[i];
- if (method.name === render) {
- transformMethod(method)
- break;
- }
- }
- return classNode;
- }
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-var Opcodes = Java.type("org.objectweb.asm.Opcodes");
-var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode");
-var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode");
-var ASMAPI = Java.type("net.minecraftforge.coremod.api.ASMAPI");
-
-function transformMethod(method) {
- var instructions = method.instructions;
- instructions.insert(new MethodInsnNode(Opcodes.INVOKESTATIC, "me/shedaniel/lightoverlay/forge/mixin/MixinLevelRenderer", "setupTerrain", "(Lnet/minecraft/client/renderer/culling/Frustum;)V", false));
- instructions.insert(new VarInsnNode(Opcodes.ALOAD, 2));
-}
-
-function initializeCoreMod() {
- return {
- "lightoverlay": {
- 'target': {
- 'type': 'CLASS',
- 'name': 'net.minecraft.client.renderer.LevelRenderer'
- },
- 'transformer': function (classNode) {
- var setupRender = ASMAPI.mapMethod("m_109695_");
- for (i in classNode.methods) {
- var method = classNode.methods[i];
- if (method.name === setupRender) {
- transformMethod(method)
- break;
- }
- }
- return classNode;
- }
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-{
- "Connection": "META-INF/Connection.js",
- "DebugRenderer": "META-INF/DebugRenderer.js",
- "LevelRenderer": "META-INF/LevelRenderer.js"
-}
\ No newline at end of file
[[dependencies.lightoverlay]]
modId = "cloth_config"
mandatory = true
-versionRange = "[5.0.36,)"
+versionRange = "[6,)"
ordering = "NONE"
side = "CLIENT"
[[dependencies.lightoverlay]]
modId = "architectury"
mandatory = true
-versionRange = "[2.3.22,)"
+versionRange = "[3,)"
ordering = "NONE"
side = "CLIENT"
--- /dev/null
+{
+ "required": true,
+ "package": "me.shedaniel.lightoverlay.forge.mixin",
+ "minVersion": "0.7.11",
+ "compatibilityLevel": "JAVA_8",
+ "mixins": [],
+ "client": [
+ "MixinClientConnection",
+ "MixinDebugRenderer",
+ "MixinLevelRenderer"
+ ],
+ "injectors": {
+ "defaultRequire": 1
+ }
+}
\ No newline at end of file
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false
-mod_version=6.0.3
-minecraft_version=1.18-rc3
+mod_version=6.0.4
+minecraft_version=1.18
-architectury_version=3.0.39
+architectury_version=3.1.45
# fabric
fabric_loader_version=0.12.5
fabric_api_version=0.43.1+1.18
-cloth_config_version=6.0.42
+cloth_config_version=6.0.45
modmenu_version=3.0.0
# forge
-forge_version=37.0.13
\ No newline at end of file
+forge_version=38.0.15
\ No newline at end of file
include("common")
include("fabric")
-//include("forge")
+include("forge")