]> git.lizzy.rs Git - LightOverlay.git/commitdiff
4.2
authorshedaniel <daniel@shedaniel.me>
Mon, 3 Feb 2020 04:46:13 +0000 (12:46 +0800)
committershedaniel <daniel@shedaniel.me>
Mon, 3 Feb 2020 04:46:13 +0000 (12:46 +0800)
build.gradle
src/main/java/me/shedaniel/lightoverlay/LightOverlay.java
src/main/java/me/shedaniel/lightoverlay/LightOverlayClient.java
src/main/java/me/shedaniel/lightoverlay/LightOverlayCloth.java
src/main/resources/assets/lightoverlay-forge/lang/en_us.json

index d805b16da72aef9cb92ab0c89b9cbae5db95d054..41ad7771200b29d40073fa70490197d89c6bf34b 100644 (file)
@@ -11,7 +11,7 @@ buildscript {
 apply plugin: 'net.minecraftforge.gradle'
 apply plugin: 'eclipse'
 
-version = "4.1"
+version = "4.2"
 group = "me.shedaniel" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
 archivesBaseName = "LightOverlay"
 
index 5f76104b46f47c1429d1f93329d8952831c9fe85..ada3d77bed1a0fd05aa1fdf72f4d5fded15281de 100644 (file)
@@ -8,6 +8,7 @@ import net.minecraftforge.fml.common.Mod;
 public class LightOverlay {
     
     public LightOverlay() {
+        //noinspection Convert2MethodRef
         DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> LightOverlayClient.register());
     }
     
index 435a3b9183137ca1ca3f3bd99ad2b8ddc42e4094..690313115a61b7317625ddd9b700234533abefb4 100644 (file)
@@ -5,9 +5,8 @@ import net.minecraft.block.Block;
 import net.minecraft.block.BlockState;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.entity.player.ClientPlayerEntity;
-import net.minecraft.client.renderer.ActiveRenderInfo;
-import net.minecraft.client.renderer.BufferBuilder;
-import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.renderer.*;
 import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
 import net.minecraft.client.settings.KeyBinding;
 import net.minecraft.client.util.InputMappings;
@@ -52,6 +51,8 @@ public class LightOverlayClient {
     private static final ResourceLocation INCREASE_LINE_WIDTH_KEYBIND = new ResourceLocation("lightoverlay-forge", "increase_line_width");
     private static final ResourceLocation DECREASE_LINE_WIDTH_KEYBIND = new ResourceLocation("lightoverlay-forge", "decrease_line_width");
     static int reach = 7;
+    static int crossLevel = 7;
+    static boolean showNumber = false;
     static EntityType<Entity> testingEntityType;
     static float lineWidth = 1.0F;
     static int yellowColor = 0xFFFF00, redColor = 0xFF0000;
@@ -73,6 +74,7 @@ public class LightOverlayClient {
         MinecraftForge.EVENT_BUS.register(LightOverlayClient.class);
         
         try {
+            //noinspection Convert2MethodRef
             DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> LightOverlayCloth.register());
         } catch (Exception e) {
             e.printStackTrace();
@@ -100,19 +102,38 @@ public class LightOverlayClient {
         // Check block state allow spawning (excludes bedrock and barriers automatically)
         if (!blockBelowState.canEntitySpawn(world, pos.down(), testingEntityType))
             return CrossType.NONE;
-        if (world.func_226658_a_(LightType.BLOCK, pos) >= 8)
+        if (world.func_226658_a_(LightType.BLOCK, pos) > crossLevel)
             return CrossType.NONE;
-        if (world.func_226658_a_(LightType.SKY, pos) >= 8)
+        if (world.func_226658_a_(LightType.SKY, pos) > crossLevel)
             return CrossType.YELLOW;
         return CrossType.RED;
     }
     
-    public static void renderCross(World world, BlockPos pos, int color, PlayerEntity entity) {
-        ActiveRenderInfo info = Minecraft.getInstance().gameRenderer.getActiveRenderInfo();
-        RenderSystem.lineWidth(lineWidth);
-        RenderSystem.depthMask(false);
-        Tessellator tessellator = Tessellator.getInstance();
-        BufferBuilder buffer = tessellator.getBuffer();
+    public static int getCrossLevel(BlockPos pos, World world, PlayerEntity playerEntity) {
+        BlockState blockBelowState = world.getBlockState(pos.down());
+        BlockState blockUpperState = world.getBlockState(pos);
+        VoxelShape upperCollisionShape = blockUpperState.getCollisionShape(world, pos, ISelectionContext.forEntity(playerEntity));
+        if (!blockUpperState.getFluidState().isEmpty())
+            return -1;
+        /* WorldEntitySpawner.func_222266_a */
+        // Check if the outline is full
+        if (Block.doesSideFillSquare(upperCollisionShape, Direction.UP))
+            return -1;
+        // Check if there is power
+        if (blockUpperState.canProvidePower())
+            return -1;
+        // Check if the collision has a bump
+        if (upperCollisionShape.getEnd(Direction.Axis.Y) > 0)
+            return -1;
+        if (blockUpperState.getBlock().isIn(BlockTags.RAILS))
+            return -1;
+        // Check block state allow spawning (excludes bedrock and barriers automatically)
+        if (!blockBelowState.canEntitySpawn(world, pos.down(), testingEntityType))
+            return -1;
+        return world.func_226658_a_(LightType.BLOCK, pos);
+    }
+    
+    public static void renderCross(ActiveRenderInfo info, Tessellator tessellator, BufferBuilder buffer, World world, BlockPos pos, int color, PlayerEntity entity) {
         double d0 = info.getProjectedView().x;
         double d1 = info.getProjectedView().y - .005D;
         VoxelShape upperOutlineShape = world.getBlockState(pos).getShape(world, pos, ISelectionContext.forEntity(entity));
@@ -128,7 +149,29 @@ public class LightOverlayClient {
         buffer.func_225582_a_(pos.getX() - .01 + 1 - d0, pos.getY() - d1, pos.getZ() + .01 - d2).func_225586_a_(red, green, blue, 255).endVertex();
         buffer.func_225582_a_(pos.getX() + .01 - d0, pos.getY() - d1, pos.getZ() - .01 + 1 - d2).func_225586_a_(red, green, blue, 255).endVertex();
         tessellator.draw();
-        RenderSystem.depthMask(true);
+    }
+    
+    public static void renderLevel(Minecraft minecraft, ActiveRenderInfo info, World world, BlockPos pos, int level, PlayerEntity entity) {
+        String string_1 = String.valueOf(level);
+        FontRenderer fontRenderer = minecraft.fontRenderer;
+        double double_4 = info.getProjectedView().x;
+        double double_5 = info.getProjectedView().y;
+        VoxelShape upperOutlineShape = world.getBlockState(pos).getShape(world, pos, ISelectionContext.forEntity(entity));
+        if (!upperOutlineShape.isEmpty())
+            double_5 -= upperOutlineShape.getEnd(Direction.Axis.Y);
+        double double_6 = info.getProjectedView().z;
+        RenderSystem.pushMatrix();
+        RenderSystem.translatef((float) (pos.getX() + 0.5f - double_4), (float) (pos.getY() - double_5) + 0.005f, (float) (pos.getZ() + 0.5f - double_6));
+        RenderSystem.rotatef(90, 1, 0, 0);
+        RenderSystem.normal3f(0.0F, 1.0F, 0.0F);
+        float size = 0.07F;
+        RenderSystem.scalef(-size, -size, size);
+        float float_3 = (float) (-fontRenderer.getStringWidth(string_1)) / 2.0F + 0.4f;
+        RenderSystem.enableAlphaTest();
+        IRenderTypeBuffer.Impl vertexConsumerProvider$Immediate_1 = IRenderTypeBuffer.func_228455_a_(Tessellator.getInstance().getBuffer());
+        fontRenderer.func_228079_a_(string_1, float_3, -3.5f, level > crossLevel ? 0xff042404 : 0xff731111, false, TransformationMatrix.func_227983_a_().func_227988_c_(), vertexConsumerProvider$Immediate_1, false, 0, 15728880);
+        vertexConsumerProvider$Immediate_1.func_228461_a_();
+        RenderSystem.popMatrix();
     }
     
     @SubscribeEvent(receiveCanceled = true)
@@ -186,20 +229,45 @@ public class LightOverlayClient {
             Minecraft client = Minecraft.getInstance();
             ClientPlayerEntity playerEntity = client.player;
             World world = client.world;
-            RenderSystem.disableTexture();
-            RenderSystem.disableBlend();
             BlockPos playerPos = playerEntity.getPosition();
-            BlockPos.getAllInBox(playerPos.add(-reach, -reach, -reach), playerPos.add(reach, reach, reach)).forEach(pos -> {
-                Biome biome = world.func_226691_t_(pos);
-                if (biome.getSpawningChance() > 0 && !biome.getSpawns(EntityClassification.MONSTER).isEmpty()) {
-                    CrossType type = LightOverlayClient.getCrossType(pos, world, playerEntity);
-                    if (type != CrossType.NONE) {
-                        VoxelShape shape = world.getBlockState(pos).getCollisionShape(world, pos);
-                        int color = type == CrossType.RED ? redColor : yellowColor;
-                        LightOverlayClient.renderCross(world, pos, color, playerEntity);
+            ActiveRenderInfo info = client.gameRenderer.getActiveRenderInfo();
+            if (showNumber) {
+                RenderSystem.enableTexture();
+                RenderSystem.enableDepthTest();
+                
+                RenderSystem.depthMask(true);
+                for (BlockPos pos : BlockPos.getAllInBoxMutable(playerPos.add(-reach, -reach, -reach), playerPos.add(reach, reach, reach))) {
+                    Biome biome = world.func_226691_t_(pos);
+                    if (biome.getSpawningChance() > 0 && !biome.getSpawns(EntityClassification.MONSTER).isEmpty()) {
+                        int level = LightOverlayClient.getCrossLevel(pos, world, playerEntity);
+                        if (level >= 0) {
+                            VoxelShape shape = world.getBlockState(pos).getCollisionShape(world, pos);
+                            LightOverlayClient.renderLevel(client, info, world, pos, level, playerEntity);
+                        }
+                    }
+                }
+                RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
+                RenderSystem.enableDepthTest();
+            } else {
+                RenderSystem.disableTexture();
+                RenderSystem.disableBlend();
+                RenderSystem.lineWidth(lineWidth);
+                RenderSystem.depthMask(false);
+                Tessellator tessellator = Tessellator.getInstance();
+                BufferBuilder buffer = tessellator.getBuffer();
+                for (BlockPos pos : BlockPos.getAllInBoxMutable(playerPos.add(-reach, -reach, -reach), playerPos.add(reach, reach, reach))) {
+                    Biome biome = world.func_226691_t_(pos);
+                    if (biome.getSpawningChance() > 0 && !biome.getSpawns(EntityClassification.MONSTER).isEmpty()) {
+                        CrossType type = LightOverlayClient.getCrossType(pos, world, playerEntity);
+                        if (type != CrossType.NONE) {
+                            VoxelShape shape = world.getBlockState(pos).getCollisionShape(world, pos);
+                            int color = type == CrossType.RED ? redColor : yellowColor;
+                            LightOverlayClient.renderCross(info, tessellator, buffer, world, pos, color, playerEntity);
+                        }
                     }
                 }
-            });
+                RenderSystem.depthMask(true);
+            }
             RenderSystem.popMatrix();
         }
     }
@@ -221,7 +289,9 @@ public class LightOverlayClient {
             properties.load(fis);
             fis.close();
             reach = Integer.parseInt((String) properties.computeIfAbsent("reach", a -> "7"));
-            lineWidth = Float.valueOf((String) properties.computeIfAbsent("lineWidth", a -> "1"));
+            crossLevel = Integer.parseInt((String) properties.computeIfAbsent("crossLevel", a -> "7"));
+            showNumber = ((String) properties.computeIfAbsent("showNumber", a -> "false")).equalsIgnoreCase("true");
+            lineWidth = Float.parseFloat((String) properties.computeIfAbsent("lineWidth", a -> "1"));
             {
                 int r, g, b;
                 r = Integer.parseInt((String) properties.computeIfAbsent("yellowColorRed", a -> "255"));
@@ -257,6 +327,10 @@ public class LightOverlayClient {
         fos.write("\n".getBytes());
         fos.write(("reach=" + reach).getBytes());
         fos.write("\n".getBytes());
+        fos.write(("crossLevel=" + crossLevel).getBytes());
+        fos.write("\n".getBytes());
+        fos.write(("showNumber=" + showNumber).getBytes());
+        fos.write("\n".getBytes());
         fos.write(("lineWidth=" + FORMAT.format(lineWidth)).getBytes());
         fos.write("\n".getBytes());
         fos.write(("yellowColorRed=" + ((yellowColor >> 16) & 255)).getBytes());
@@ -273,7 +347,7 @@ public class LightOverlayClient {
         fos.close();
     }
     
-    private static enum CrossType {
+    private enum CrossType {
         YELLOW,
         RED,
         NONE
index c774d1de451030feefe46242d8203e62f0232f6b..ceb53b77f3ecfcf395c96eb24c3593844b1d7d40 100644 (file)
@@ -3,8 +3,6 @@ package me.shedaniel.lightoverlay;
 import me.shedaniel.forge.clothconfig2.api.ConfigBuilder;
 import me.shedaniel.forge.clothconfig2.api.ConfigCategory;
 import me.shedaniel.forge.clothconfig2.api.ConfigEntryBuilder;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.client.resources.I18n;
 import net.minecraft.util.math.MathHelper;
 import net.minecraftforge.fml.ExtensionPoint;
@@ -12,16 +10,17 @@ import net.minecraftforge.fml.ModLoadingContext;
 
 import java.util.Locale;
 import java.util.Optional;
-import java.util.function.BiFunction;
 
 public class LightOverlayCloth {
     public static void register() {
-        ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY, () -> (BiFunction<Minecraft, Screen, Screen>) (client, parent) -> {
+        ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY, () -> (client, parent) -> {
             ConfigBuilder builder = ConfigBuilder.create().setParentScreen(parent).setTitle("key.lightoverlay.category");
             
             ConfigEntryBuilder eb = builder.getEntryBuilder();
             ConfigCategory general = builder.getOrCreateCategory("config.lightoverlay-forge.general");
             general.addEntry(eb.startIntSlider("config.lightoverlay-forge.reach", LightOverlayClient.reach, 1, 50).setDefaultValue(7).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.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.startStrField("config.lightoverlay-forge.yellowColor", "#" + toStringColor(LightOverlayClient.yellowColor)).setDefaultValue("#FFFF00").setSaveConsumer(str -> LightOverlayClient.yellowColor = toIntColor(str)).setErrorSupplier(s -> {
                 if (!s.startsWith("#") || s.length() != 7 || !isInt(s.substring(1)))
@@ -67,7 +66,7 @@ public class LightOverlayCloth {
     private static String toStringColor(int toolColor) {
         String r = Integer.toHexString((toolColor >> 16) & 0xFF);
         String g = Integer.toHexString((toolColor >> 8) & 0xFF);
-        String b = Integer.toHexString((toolColor >> 0) & 0xFF);
+        String b = Integer.toHexString(toolColor & 0xFF);
         if (r.length() == 1)
             r = "0" + r;
         if (g.length() == 1)
index 4163c9b7f6efb8eb7b97483d0a18552b14d2fc9a..1c6902274b3c0edda877faab22a6caf212b6387c 100755 (executable)
@@ -9,6 +9,8 @@
   "text.lightoverlay-forge.current_line_width": "The current line width is %s!",
   "config.lightoverlay-forge.general": "General",
   "config.lightoverlay-forge.reach": "Reach:",
+  "config.lightoverlay-forge.crossLevel": "Light Level:",
+  "config.lightoverlay-forge.showNumber": "Show Number Instead:",
   "config.lightoverlay-forge.lineWidth": "Line Width:",
   "config.lightoverlay-forge.yellowColor": "Yellow Color:",
   "config.lightoverlay-forge.redColor": "Red Color:",