Browse Source

Adds 2 more options

shedaniel 5 years ago
parent
commit
a713e7742a

+ 1 - 1
build.gradle

@@ -16,7 +16,7 @@ plugins {
 apply plugin: 'net.minecraftforge.gradle'
 apply plugin: 'eclipse'
 
-version = "4.5"
+version = "4.6"
 group = "me.shedaniel" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
 archivesBaseName = "LightOverlay"
 

+ 23 - 13
src/main/java/me/shedaniel/lightoverlay/LightOverlayClient.java

@@ -73,6 +73,8 @@ public class LightOverlayClient {
     static int reach = 12;
     static int crossLevel = 7;
     static boolean showNumber = false;
+    static boolean smoothLines = true;
+    static boolean underwater = false;
     static EntityType<Entity> testingEntityType;
     static float lineWidth = 1.0F;
     static int yellowColor = 0xFFFF00, redColor = 0xFF0000;
@@ -114,7 +116,7 @@ public class LightOverlayClient {
         BlockState blockBelowState = reader.getBlockState(down);
         BlockState blockUpperState = reader.getBlockState(pos);
         VoxelShape upperCollisionShape = blockUpperState.getCollisionShape(reader, pos, selectionContext);
-        if (!blockUpperState.getFluidState().isEmpty())
+        if (!underwater && !blockUpperState.getFluidState().isEmpty())
             return CrossType.NONE;
         /* WorldEntitySpawner.func_222266_a */
         // Check if the outline is full
@@ -143,13 +145,13 @@ public class LightOverlayClient {
         BlockState blockUpperState = reader.getBlockState(pos);
         VoxelShape collisionShape = blockBelowState.getCollisionShape(reader, down, context);
         VoxelShape upperCollisionShape = blockUpperState.getCollisionShape(reader, pos, context);
-        if (!blockUpperState.getFluidState().isEmpty())
+        if (!underwater && !blockUpperState.getFluidState().isEmpty())
             return -1;
         if (!blockBelowState.getFluidState().isEmpty())
             return -1;
         if (blockBelowState.isAir(reader, down))
             return -1;
-        if (!blockUpperState.isAir(reader, pos))
+        if (Block.doesSideFillSquare(upperCollisionShape, Direction.DOWN))
             return -1;
         return light.getLightFor(pos);
     }
@@ -336,12 +338,9 @@ public class LightOverlayClient {
         CHUNK_MAP.put(chunkPos, map);
     }
     
-    @SubscribeEvent
-    public static void renderWorldLast(RenderWorldLastEvent event) {
+    public static void renderWorldLast() {
         if (LightOverlayClient.enabled) {
             RenderSystem.pushMatrix();
-            RenderSystem.loadIdentity();
-            RenderSystem.multMatrix(event.getMatrixStack().getLast().getMatrix());
             Minecraft client = Minecraft.getInstance();
             ClientPlayerEntity playerEntity = client.player;
             int playerPosX = ((int) playerEntity.getPosX()) >> 4;
@@ -372,11 +371,12 @@ public class LightOverlayClient {
                 RenderSystem.enableDepthTest();
             } else {
                 RenderSystem.enableDepthTest();
+                RenderSystem.shadeModel(7425);
+                RenderSystem.enableAlphaTest();
+                RenderSystem.defaultAlphaFunc();
                 RenderSystem.disableTexture();
-                RenderSystem.enableBlend();
-                RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
-                RenderSystem.disableLighting();
-                GL11.glEnable(GL11.GL_LINE_SMOOTH);
+                RenderSystem.disableBlend();
+                if (smoothLines) GL11.glEnable(GL11.GL_LINE_SMOOTH);
                 RenderSystem.lineWidth(lineWidth);
                 Tessellator tessellator = Tessellator.getInstance();
                 BufferBuilder buffer = tessellator.getBuffer();
@@ -396,9 +396,10 @@ public class LightOverlayClient {
                         }
                     }
                 }
-                RenderSystem.disableBlend();
+                RenderSystem.enableBlend();
                 RenderSystem.enableTexture();
-                GL11.glDisable(GL11.GL_LINE_SMOOTH);
+                RenderSystem.shadeModel(7424);
+                if (smoothLines) GL11.glDisable(GL11.GL_LINE_SMOOTH);
             }
             RenderSystem.popMatrix();
         }
@@ -423,6 +424,8 @@ public class LightOverlayClient {
             reach = Integer.parseInt((String) properties.computeIfAbsent("reach", a -> "12"));
             crossLevel = Integer.parseInt((String) properties.computeIfAbsent("crossLevel", a -> "7"));
             showNumber = ((String) properties.computeIfAbsent("showNumber", a -> "false")).equalsIgnoreCase("true");
+            smoothLines = ((String) properties.computeIfAbsent("smoothLines", a -> "true")).equalsIgnoreCase("true");
+            underwater = ((String) properties.computeIfAbsent("underwater", a -> "false")).equalsIgnoreCase("true");
             lineWidth = Float.parseFloat((String) properties.computeIfAbsent("lineWidth", a -> "1"));
             {
                 int r, g, b;
@@ -445,6 +448,9 @@ public class LightOverlayClient {
             lineWidth = 1.0F;
             redColor = 0xFF0000;
             yellowColor = 0xFFFF00;
+            showNumber = false;
+            smoothLines = true;
+            underwater = false;
             try {
                 saveConfig(file);
             } catch (IOException ex) {
@@ -463,6 +469,10 @@ public class LightOverlayClient {
         fos.write("\n".getBytes());
         fos.write(("showNumber=" + showNumber).getBytes());
         fos.write("\n".getBytes());
+        fos.write(("smoothLines=" + smoothLines).getBytes());
+        fos.write("\n".getBytes());
+        fos.write(("underwater=" + underwater).getBytes());
+        fos.write("\n".getBytes());
         fos.write(("lineWidth=" + FORMAT.format(lineWidth)).getBytes());
         fos.write("\n".getBytes());
         fos.write(("yellowColorRed=" + ((yellowColor >> 16) & 255)).getBytes());

+ 2 - 0
src/main/java/me/shedaniel/lightoverlay/LightOverlayCloth.java

@@ -17,6 +17,8 @@ public class LightOverlayCloth {
             general.addEntry(eb.startIntSlider("config.lightoverlay-forge.reach", LightOverlayClient.reach, 1, 64).setDefaultValue(12).setTextGetter(integer -> "Reach: " + integer + " Blocks").setSaveConsumer(integer -> LightOverlayClient.reach = integer).build());
             general.addEntry(eb.startIntSlider("config.lightoverlay-forge.crossLevel", LightOverlayClient.crossLevel, 0, 15).setDefaultValue(7).setTextGetter(integer -> "Cross Level: " + integer).setSaveConsumer(integer -> LightOverlayClient.crossLevel = integer).build());
             general.addEntry(eb.startBooleanToggle("config.lightoverlay-forge.showNumber", LightOverlayClient.showNumber).setDefaultValue(false).setSaveConsumer(bool -> LightOverlayClient.showNumber = bool).build());
+            general.addEntry(eb.startBooleanToggle("config.lightoverlay-forge.smoothLines", LightOverlayClient.smoothLines).setDefaultValue(true).setSaveConsumer(bool -> LightOverlayClient.smoothLines = bool).build());
+            general.addEntry(eb.startBooleanToggle("config.lightoverlay-forge.underwater", LightOverlayClient.underwater).setDefaultValue(false).setSaveConsumer(bool -> LightOverlayClient.underwater = bool).build());
             general.addEntry(eb.startIntSlider("config.lightoverlay-forge.lineWidth", MathHelper.floor(LightOverlayClient.lineWidth * 100), 100, 700).setDefaultValue(100).setTextGetter(integer -> "Light Width: " + LightOverlayClient.FORMAT.format(integer / 100d)).setSaveConsumer(integer -> LightOverlayClient.lineWidth = integer / 100f).build());
             general.addEntry(eb.startColorField("config.lightoverlay-forge.yellowColor", LightOverlayClient.yellowColor).setDefaultValue(0xFFFF00).setSaveConsumer(color -> LightOverlayClient.yellowColor = color).build());
             general.addEntry(eb.startColorField("config.lightoverlay-forge.redColor", LightOverlayClient.redColor).setDefaultValue(0xFF0000).setSaveConsumer(color -> LightOverlayClient.redColor = color).build());

+ 1 - 4
src/main/resources/META-INF/NetworkManager.js

@@ -1,7 +1,4 @@
 var Opcodes = Java.type("org.objectweb.asm.Opcodes");
-var FieldNode = Java.type("org.objectweb.asm.tree.FieldNode");
-var InsnNode = Java.type("org.objectweb.asm.tree.InsnNode");
-var JumpInsnNode = Java.type("org.objectweb.asm.tree.JumpInsnNode");
 var LabelNode = Java.type("org.objectweb.asm.tree.LabelNode");
 var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode");
 var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode");
@@ -9,7 +6,7 @@ var ASMAPI = Java.type("net.minecraftforge.coremod.api.ASMAPI");
 
 function initializeCoreMod() {
     return {
-        "smooth-scrolling-everywhere": {
+        "light-overlay-forge": {
             'target': {
                 'type': 'CLASS',
                 'name': 'net.minecraft.network.NetworkManager'

+ 37 - 0
src/main/resources/META-INF/WorldRenderer.js

@@ -0,0 +1,37 @@
+var Opcodes = Java.type("org.objectweb.asm.Opcodes");
+var LabelNode = Java.type("org.objectweb.asm.tree.LabelNode");
+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 initializeCoreMod() {
+    return {
+        "light-overlay-forge": {
+            'target': {
+                'type': 'CLASS',
+                'name': 'net.minecraft.client.renderer.debug.DebugRenderer'
+            },
+            'transformer': function (classNode) {
+                var render = ASMAPI.mapMethod("func_229019_a_");
+                for (i in classNode.methods) {
+                    var method = classNode.methods[i];
+                    if (method.name === render) {
+                        var instructions = method.instructions;
+                        var insnArray = instructions.toArray();
+                        for (j in insnArray) {
+                            var instruction = insnArray[j];
+                            if (instruction instanceof LabelNode) {
+                                instructions.insertBefore(instruction, new LabelNode());
+                                instructions.insertBefore(instruction, new VarInsnNode(Opcodes.ALOAD, 0));
+                                instructions.insertBefore(instruction, new MethodInsnNode(Opcodes.INVOKESTATIC, "me/shedaniel/lightoverlay/LightOverlayClient", "renderWorldLast", "()V", false));
+                                break;
+                            }
+                        }
+                        break;
+                    }
+                }
+                return classNode;
+            }
+        }
+    }
+}

+ 2 - 1
src/main/resources/META-INF/coremods.json

@@ -1,3 +1,4 @@
 {
-  "NetworkManager": "META-INF/NetworkManager.js"
+  "NetworkManager": "META-INF/NetworkManager.js",
+  "WorldRenderer": "META-INF/WorldRenderer.js"
 }

+ 0 - 0
src/main/resources/assets/lightoverlay-forge/.modassetroot


+ 2 - 0
src/main/resources/assets/lightoverlay-forge/lang/en_us.json

@@ -11,6 +11,8 @@
   "config.lightoverlay-forge.reach": "Reach:",
   "config.lightoverlay-forge.crossLevel": "Light Level:",
   "config.lightoverlay-forge.showNumber": "Show Number Instead:",
+  "config.lightoverlay-forge.smoothLines": "Smooth Lines:",
+  "config.lightoverlay-forge.underwater": "Display Underwater:",
   "config.lightoverlay-forge.lineWidth": "Line Width:",
   "config.lightoverlay-forge.yellowColor": "Yellow Color:",
   "config.lightoverlay-forge.redColor": "Red Color:",