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;
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
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);
}
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;
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();
}
}
}
- 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();
}
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;
lineWidth = 1.0F;
redColor = 0xFF0000;
yellowColor = 0xFFFF00;
+ showNumber = false;
+ smoothLines = true;
+ underwater = false;
try {
saveConfig(file);
} catch (IOException ex) {
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());
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());
--- /dev/null
+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;
+ }
+ }
+ }
+}
\ No newline at end of file