]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/commitdiff
Bedrock ceiling
authorishland <ishlandmc@yeah.net>
Wed, 9 Feb 2022 15:18:17 +0000 (23:18 +0800)
committerirtimaled <irtimaled@gmail.com>
Sat, 26 Feb 2022 18:33:12 +0000 (10:33 -0800)
src/main/java/com/irtimaled/bbor/client/ClientRenderer.java
src/main/java/com/irtimaled/bbor/client/config/BoundingBoxTypeHelper.java
src/main/java/com/irtimaled/bbor/client/config/ConfigManager.java
src/main/java/com/irtimaled/bbor/client/gui/SettingsScreen.java
src/main/java/com/irtimaled/bbor/client/interop/BedrockCeilingHelper.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxBedrockCeiling.java
src/main/java/com/irtimaled/bbor/client/providers/BedrockCeilingProvider.java
src/main/java/com/irtimaled/bbor/client/providers/BiomeBorderProvider.java
src/main/java/com/irtimaled/bbor/client/renderers/BedrockCeilingRenderer.java [new file with mode: 0644]
src/main/java/com/irtimaled/bbor/common/BoundingBoxType.java

index 4ea6885ffb9a3f5c16119f4f392dcc8d3f767fd9..836d0e04fa28e311ef055e9f0a24cb7b1274f912 100644 (file)
@@ -5,6 +5,7 @@ import com.irtimaled.bbor.client.interop.ClientInterop;
 import com.irtimaled.bbor.client.interop.TileEntitiesHelper;
 import com.irtimaled.bbor.client.models.Point;
 import com.irtimaled.bbor.client.providers.BeaconProvider;
+import com.irtimaled.bbor.client.providers.BedrockCeilingProvider;
 import com.irtimaled.bbor.client.providers.BiomeBorderProvider;
 import com.irtimaled.bbor.client.providers.ConduitProvider;
 import com.irtimaled.bbor.client.providers.CustomBeaconProvider;
@@ -27,14 +28,13 @@ import com.irtimaled.bbor.common.models.AbstractBoundingBox;
 import com.irtimaled.bbor.common.models.DimensionId;
 import it.unimi.dsi.fastutil.objects.Object2ObjectMaps;
 import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
+import it.unimi.dsi.fastutil.objects.ObjectArrayList;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.loader.api.FabricLoader;
 import net.minecraft.client.util.math.MatrixStack;
 
-import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.HashSet;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -79,7 +79,7 @@ public class ClientRenderer {
         registerProvider(new CustomLineProvider());
         registerProvider(new CustomSphereProvider());
 //        registerProvider(new FlowerForestProvider());
-//        registerProvider(new BedrockCeilingProvider());
+        registerProvider(new BedrockCeilingProvider());
     }
 
     public static <T extends AbstractBoundingBox> void registerProvider(IBoundingBoxProvider<T> provider) {
@@ -130,25 +130,26 @@ public class ClientRenderer {
         lastDurationNanos.set(System.nanoTime() - startTime);
     }
 
+    private static final ObjectArrayList<AbstractBoundingBox> listForRendering = new ObjectArrayList<>();
+
     public static List<AbstractBoundingBox> getBoundingBoxes(DimensionId dimensionId) {
-        List<AbstractBoundingBox> tmp = new LinkedList<>();
+        listForRendering.clear();
         final boolean doPreCulling = ConfigManager.fastRender.get() >= 2;
         for (IBoundingBoxProvider<?> provider : providers) {
             if (provider.canProvide(dimensionId)) {
                 for (AbstractBoundingBox boundingBox : provider.get(dimensionId)) {
                     if (isWithinRenderDistance(boundingBox)) {
                         if (doPreCulling && !boundingBox.isVisibleCulling()) continue;
-                        tmp.add(boundingBox);
+                        listForRendering.add(boundingBox);
                     }
                 }
             }
         }
 
         Point point = Player.getPoint();
-        final ArrayList<AbstractBoundingBox> result = new ArrayList<>(tmp);
-        result.sort(Comparator.comparingDouble((AbstractBoundingBox boundingBox) -> boundingBox.getDistance(point.getX(), point.getY(), point.getZ())).reversed());
+        listForRendering.sort(Comparator.comparingDouble((AbstractBoundingBox boundingBox) -> boundingBox.getDistance(point.getX(), point.getY(), point.getZ())).reversed());
 
-        return result;
+        return listForRendering;
     }
 
     public static void clear() {
index 27850a1b27a7d000c48f98ed488ced5380e41576..f06b55358cabc0c1693a3fbb25c1902f49caa141 100644 (file)
@@ -26,7 +26,7 @@ public class BoundingBoxTypeHelper {
         registerType(BoundingBoxType.Conduit, ConfigManager.drawConduits, ConfigManager.colorConduits);
         registerType(BoundingBoxType.SpawnableBlocks, ConfigManager.drawSpawnableBlocks, ConfigManager.colorSpawnableBlocks);
 //        registerType(BoundingBoxType.FlowerForest, ConfigManager.drawFlowerForests, null);
-//        registerType(BoundingBoxType.BedrockCeiling, ConfigManager.drawBedrockCeilingBlocks, ConfigManager.colorBedrockCeilingBlocks);
+        registerType(BoundingBoxType.BedrockCeiling, ConfigManager.drawBedrockCeilingBlocks, ConfigManager.colorBedrockCeilingBlocks);
 
         registerType(BoundingBoxType.JungleTemple, ConfigManager.drawJungleTemples, ConfigManager.colorJungleTemples);
         registerType(BoundingBoxType.DesertTemple, ConfigManager.drawDesertTemples, ConfigManager.colorDesertTemples);
index d0e5caa59eabe6a648ebf3036b72ef79ba56c19b..c8ff8689621e54b5493e22212f33516d535d7d4e 100644 (file)
@@ -55,7 +55,7 @@ public class ConfigManager {
     public static Setting<Boolean> renderSphereAsDots;
 //    public static Setting<Boolean> drawFlowerForests;
 //    public static Setting<Integer> flowerForestsRenderDistance;
-//    public static Setting<Boolean> drawBedrockCeilingBlocks;
+    public static Setting<Boolean> drawBedrockCeilingBlocks;
 
     public static Setting<HexColor> colorWorldSpawn;
     public static Setting<HexColor> colorLazySpawnChunks;
@@ -134,7 +134,7 @@ public class ConfigManager {
 //        drawFlowerForests = setup(config, "flowerForests", "drawFlowerForests", true, "If set to true flower forest flower overlays will be drawn.");
 //        flowerForestsRenderDistance = setup(config, "flowerForests", "flowerForestsRenderDistance", 3, "The distance from the player where flower forests will be drawn.");
 
-//        drawBedrockCeilingBlocks = setup(config, "bedrockCeiling", "drawBedrockCeilingBlocks", true, "If set to true position with only one layer of bedrock will be drawn.");
+        drawBedrockCeilingBlocks = setup(config, "bedrockCeiling", "drawBedrockCeilingBlocks", true, "If set to true position with only one layer of bedrock will be drawn.");
 
         drawVillages = setup(config, "structures", "drawVillages", false, "If set to true village bounding boxes will be drawn.");
         drawDesertTemples = setup(config, "structures", "drawDesertTemples", true, "If set to true desert temple bounding boxes are drawn.");
index d07db83849169484335b37031a20b35ec2992899..5741b07b8315e3d4857d46e0235ca2a7937bfd8e 100644 (file)
@@ -78,8 +78,8 @@ public class SettingsScreen extends ListScreen {
 //                                .addDisplayValue(1, I18n.translate("bbor.options.distance.nearest"))
 //                                .addDisplayValue(2, I18n.translate("bbor.options.distance.nearer"))
 //                                .addDisplayValue(3, I18n.translate("bbor.options.distance.normal")))
-//                .section(I18n.translate("bbor.features.bedrockCeilingBlocks"),
-//                        width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.bedrockCeilingBlocks"), BoundingBoxType.BedrockCeiling))
+                .section(I18n.translate("bbor.features.bedrockCeilingBlocks"),
+                        width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.bedrockCeilingBlocks"), BoundingBoxType.BedrockCeiling))
                 .section(I18n.translate("bbor.features.mobSpawners"),
                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.mobSpawners"), BoundingBoxType.MobSpawner),
                         width -> new BoolSettingButton(width, I18n.translate("bbor.features.mobSpawners.spawnArea"), ConfigManager.renderMobSpawnerSpawnArea),
index 05a9adfd3a320f2f75317d4401952eb979ccb5b4..7bc225f679d22e62ee5bf532746b79155e0acc9b 100644 (file)
@@ -1,14 +1,9 @@
-/*
 package com.irtimaled.bbor.client.interop;
 
 import net.minecraft.block.BlockState;
 import net.minecraft.block.Blocks;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.util.math.BlockPos;
-import net.minecraft.world.gen.random.ChunkRandom;
-import net.minecraft.world.gen.random.SimpleRandom;
-
-import java.util.Random;
 
 public class BedrockCeilingHelper {
     public static boolean isBedrock(int x, int y, int z){
@@ -21,11 +16,10 @@ public class BedrockCeilingHelper {
         return MinecraftClient.getInstance().world.getChunkManager().isChunkLoaded(chunkX, chunkZ);
     }
 
-    public static Random getRandomForChunk(int chunkX, int chunkZ) {
-        ChunkRandom random = new ChunkRandom(new SimpleRandom());
-        random.setTerrainSeed(chunkX, chunkZ);
-        return random;
-    }
+//    public static Random getRandomForChunk(int chunkX, int chunkZ) {
+//        ChunkRandom random = new ChunkRandom(new SimpleRandom());
+//        random.setTerrainSeed(chunkX, chunkZ);
+//        return random;
+//    }
 }
 
- */
index ab6d2c106e8604dd12a76f08dcc4e231f56c9e62..be66d3e284f58378819c137851cfebac0a6a427a 100644 (file)
@@ -1,15 +1,14 @@
-/*
 package com.irtimaled.bbor.client.models;
 
 import com.irtimaled.bbor.client.renderers.AbstractRenderer;
-import com.irtimaled.bbor.client.renderers.CuboidRenderer;
+import com.irtimaled.bbor.client.renderers.BedrockCeilingRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.interop.CommonInterop;
 import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
 import com.irtimaled.bbor.common.models.Coords;
 
 public class BoundingBoxBedrockCeiling extends BoundingBoxCuboid {
-    private static final AbstractRenderer<BoundingBoxCuboid> RENDERER = CommonInterop.registerRenderer(BoundingBoxBedrockCeiling.class, () -> new CuboidRenderer());
+    private static final AbstractRenderer<BoundingBoxBedrockCeiling> RENDERER = CommonInterop.registerRenderer(BoundingBoxBedrockCeiling.class, () -> new BedrockCeilingRenderer());
 
     public BoundingBoxBedrockCeiling(Coords coords) {
         super(coords, coords, BoundingBoxType.BedrockCeiling);
@@ -20,4 +19,3 @@ public class BoundingBoxBedrockCeiling extends BoundingBoxCuboid {
         return RENDERER;
     }
 }
- */
index a35d5d6896609bdf4fa54d64ca3e55844819be7e..473fe5e323643f6082c16dbf44eeae3637abad13 100644 (file)
@@ -1,4 +1,3 @@
-/*
 package com.irtimaled.bbor.client.providers;
 
 import com.irtimaled.bbor.client.Player;
@@ -10,13 +9,13 @@ import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.MathHelper;
 import com.irtimaled.bbor.common.models.Coords;
 import com.irtimaled.bbor.common.models.DimensionId;
+import it.unimi.dsi.fastutil.objects.ObjectArrayList;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
-import java.util.Random;
-import java.util.Set;
 
 public class BedrockCeilingProvider implements IBoundingBoxProvider<BoundingBoxBedrockCeiling>, ICachingProvider {
     private static final double CHUNK_SIZE = 16d;
@@ -24,14 +23,14 @@ public class BedrockCeilingProvider implements IBoundingBoxProvider<BoundingBoxB
     private static final Map<String, BedrockChunk> chunks = new HashMap<>();
 
     private static class BedrockChunk {
-        private final Set<BoundingBoxBedrockCeiling> boxes = new HashSet<>();
+        private final List<BoundingBoxBedrockCeiling> boxes = new ObjectArrayList<>();
 
         public BedrockChunk(int chunkX, int chunkZ) {
             int chunkStartX = chunkX << 4;
             int chunkStartZ = chunkZ << 4;
 
             if (BedrockCeilingHelper.chunkLoaded(chunkX, chunkZ)) findBoxesFromBlockState(chunkStartX, chunkStartZ);
-            else findBoxesFromRNG(chunkX, chunkZ, chunkStartX, chunkStartZ);
+//            else findBoxesFromRNG(chunkX, chunkZ, chunkStartX, chunkStartZ);
         }
 
         private void findBoxesFromBlockState(int chunkStartX, int chunkStartZ) {
@@ -59,36 +58,36 @@ public class BedrockCeilingProvider implements IBoundingBoxProvider<BoundingBoxB
             return coords;
         }
 
-        private void findBoxesFromRNG(int chunkX, int chunkZ, int chunkStartX, int chunkStartZ) {
-            Random random = BedrockCeilingHelper.getRandomForChunk(chunkX, chunkZ);
-
-            // preseed 16x16x3 calls to nextDouble
-            for (int dummy = 0; dummy < 768; dummy++) {
-                random.nextDouble();
-            }
-            for (int z = 0; z < 16; z++) {
-                for (int x = 0; x < 16; x++) {
-                    Coords coords = getBlocksFromRNG(random, chunkStartX + x, chunkStartZ + z);
-
-                    if (coords != null) {
-                        boxes.add(new BoundingBoxBedrockCeiling(coords));
-                    }
-                }
-            }
-        }
-
-        private Coords getBlocksFromRNG(Random random, int x, int z) {
-            int count = 0;
-            for (int y = 127; y >= 123; y--) {
-                if (y >= 127 - random.nextInt(5)) {
-                    count++;
-                }
-            }
-            for (int y = 4; y >= 0; y--) {
-                random.nextInt(5);
-            }
-            return count == 1 ? new Coords(x, 127, z) : null;
-        }
+//        private void findBoxesFromRNG(int chunkX, int chunkZ, int chunkStartX, int chunkStartZ) {
+//            Random random = BedrockCeilingHelper.getRandomForChunk(chunkX, chunkZ);
+//
+//            // preseed 16x16x3 calls to nextDouble
+//            for (int dummy = 0; dummy < 768; dummy++) {
+//                random.nextDouble();
+//            }
+//            for (int z = 0; z < 16; z++) {
+//                for (int x = 0; x < 16; x++) {
+//                    Coords coords = getBlocksFromRNG(random, chunkStartX + x, chunkStartZ + z);
+//
+//                    if (coords != null) {
+//                        boxes.add(new BoundingBoxBedrockCeiling(coords));
+//                    }
+//                }
+//            }
+//        }
+//
+//        private Coords getBlocksFromRNG(Random random, int x, int z) {
+//            int count = 0;
+//            for (int y = 127; y >= 123; y--) {
+//                if (y >= 127 - random.nextInt(5)) {
+//                    count++;
+//                }
+//            }
+//            for (int y = 4; y >= 0; y--) {
+//                random.nextInt(5);
+//            }
+//            return count == 1 ? new Coords(x, 127, z) : null;
+//        }
 
         public Collection<? extends BoundingBoxBedrockCeiling> getBlocks() {
             return boxes;
@@ -112,7 +111,7 @@ public class BedrockCeilingProvider implements IBoundingBoxProvider<BoundingBoxB
         int playerChunkX = MathHelper.floor(Player.getX() / CHUNK_SIZE);
         int playerChunkZ = MathHelper.floor(Player.getZ() / CHUNK_SIZE);
 
-        Set<BoundingBoxBedrockCeiling> boxes = new HashSet<>();
+        ArrayList<BoundingBoxBedrockCeiling> boxes = new ArrayList<>();
 
         for (int chunkX = playerChunkX - renderDistanceChunks; chunkX <= playerChunkX + renderDistanceChunks; chunkX++) {
             for (int chunkZ = playerChunkZ - renderDistanceChunks; chunkZ <= playerChunkZ + renderDistanceChunks; chunkZ++) {
@@ -129,7 +128,7 @@ public class BedrockCeilingProvider implements IBoundingBoxProvider<BoundingBoxB
 
     public boolean shouldRecalculate() {
         long gameTime = ClientInterop.getGameTime();
-        if (!((Long) gameTime).equals(lastGameTime) && gameTime % 2L == 0L) {
+        if (!((Long) gameTime).equals(lastGameTime) && (gameTime & 0b1111) == 0) {
             lastGameTime = gameTime;
             return true;
         }
@@ -141,4 +140,3 @@ public class BedrockCeilingProvider implements IBoundingBoxProvider<BoundingBoxB
         return dimensionId == DimensionId.NETHER && BoundingBoxTypeHelper.shouldRender(BoundingBoxType.BedrockCeiling) && Player.getY() > 110;
     }
 }
- */
index 8447a4de96cff7109bd34ffd2df5747707f7837a..2fa6320983937c03262075e64d87a0810d9f4c66 100644 (file)
@@ -9,6 +9,7 @@ import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.MathHelper;
 import com.irtimaled.bbor.common.models.Coords;
 import com.irtimaled.bbor.common.models.DimensionId;
+import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -18,7 +19,7 @@ public class BiomeBorderProvider implements IBoundingBoxProvider<BoundingBoxBiom
     private static Boolean lastRenderAllTransitions = null;
     private static Integer lastRenderDistance = null;
     private static Integer lastMaxY = null;
-    private static Map<Coords, BoundingBoxBiomeBorder> lastBorders = new HashMap<>();
+    private static Map<Coords, BoundingBoxBiomeBorder> lastBorders = new Object2ObjectLinkedOpenHashMap<>();
 
     @Override
     public boolean canProvide(DimensionId dimensionId) {
diff --git a/src/main/java/com/irtimaled/bbor/client/renderers/BedrockCeilingRenderer.java b/src/main/java/com/irtimaled/bbor/client/renderers/BedrockCeilingRenderer.java
new file mode 100644 (file)
index 0000000..22b88b7
--- /dev/null
@@ -0,0 +1,19 @@
+package com.irtimaled.bbor.client.renderers;
+
+import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
+import com.irtimaled.bbor.client.models.BoundingBoxBedrockCeiling;
+import com.irtimaled.bbor.common.models.Coords;
+import net.minecraft.client.util.math.MatrixStack;
+
+public class BedrockCeilingRenderer extends AbstractRenderer<BoundingBoxBedrockCeiling> {
+    @Override
+    public void render(MatrixStack matrixStack, BoundingBoxBedrockCeiling boundingBox) {
+        Coords coords = boundingBox.getMinCoords();
+        int x = coords.getX();
+        int y = coords.getY();
+        int z = coords.getZ();
+        renderCuboid(matrixStack, new OffsetBox(new OffsetPoint(x, y + 1.01d, z),
+                        new OffsetPoint(x + 1, y + 1.01d, z + 1)),
+                BoundingBoxTypeHelper.getColor(boundingBox.getType()), true, 127);
+    }
+}
index 98a747a55100f02c2f1f14677a0b30cfbe373dc3..eabd102640f92276e37e793e2d83ea6a7b5c4d2a 100644 (file)
@@ -18,7 +18,7 @@ public class BoundingBoxType {
     public static final BoundingBoxType Conduit = register("Conduit");
     public static final BoundingBoxType SpawnableBlocks = register("Spawnable Blocks");
 //    public static final BoundingBoxType FlowerForest = register("Flower Forest");
-//    public static final BoundingBoxType BedrockCeiling = register("Bedrock Ceiling");
+    public static final BoundingBoxType BedrockCeiling = register("Bedrock Ceiling");
 
     public static final BoundingBoxType JungleTemple = register("jungle_pyramid");
     public static final BoundingBoxType DesertTemple = register("desert_pyramid");