]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/commitdiff
Don't provide client side boxes if they are off
authorIrtimaled <irtimaled@gmail.com>
Thu, 7 May 2020 01:15:06 +0000 (18:15 -0700)
committerIrtimaled <irtimaled@gmail.com>
Mon, 18 May 2020 00:31:27 +0000 (17:31 -0700)
13 files changed:
src/main/java/com/irtimaled/bbor/client/ClientRenderer.java
src/main/java/com/irtimaled/bbor/client/config/BoundingBoxTypeHelper.java [new file with mode: 0644]
src/main/java/com/irtimaled/bbor/client/providers/BeaconProvider.java
src/main/java/com/irtimaled/bbor/client/providers/BiomeBorderProvider.java
src/main/java/com/irtimaled/bbor/client/providers/CacheProvider.java
src/main/java/com/irtimaled/bbor/client/providers/ConduitProvider.java
src/main/java/com/irtimaled/bbor/client/providers/IBoundingBoxProvider.java
src/main/java/com/irtimaled/bbor/client/providers/Iterators.java [deleted file]
src/main/java/com/irtimaled/bbor/client/providers/MobSpawnerProvider.java
src/main/java/com/irtimaled/bbor/client/providers/SlimeChunkProvider.java
src/main/java/com/irtimaled/bbor/client/providers/SpawningSphereProvider.java
src/main/java/com/irtimaled/bbor/client/providers/WorldSpawnProvider.java
src/main/java/com/irtimaled/bbor/common/models/AbstractBoundingBox.java

index e1774733889a34790dd9ebf8c0cd6510a12eed0c..f4d73cdd87b5425564b44fdc49c34fa50afdeb67 100644 (file)
@@ -79,7 +79,7 @@ public class ClientRenderer {
     }
 
     public static void render(int dimensionId) {
-        if(!active) return;
+        if (!active) return;
 
         Set<AbstractBoundingBox> boundingBoxes = getBoundingBoxes(dimensionId);
 
@@ -93,8 +93,6 @@ public class ClientRenderer {
         }
 
         for (AbstractBoundingBox key : boundingBoxes) {
-            if (!key.shouldRender() || !isWithinRenderDistance(key)) continue;
-
             AbstractRenderer renderer = boundingBoxRendererMap.get(key.getClass());
             if (renderer == null) continue;
 
@@ -108,9 +106,13 @@ public class ClientRenderer {
 
     private static Set<AbstractBoundingBox> getBoundingBoxes(int dimensionId) {
         Set<AbstractBoundingBox> boundingBoxes = new HashSet<>();
-        for(IBoundingBoxProvider<?> provider: providers) {
-            for (AbstractBoundingBox boundingBox : provider.get(dimensionId)) {
-                boundingBoxes.add(boundingBox);
+        for (IBoundingBoxProvider<?> provider : providers) {
+            if (provider.canProvide(dimensionId)) {
+                for (AbstractBoundingBox boundingBox : provider.get(dimensionId)) {
+                    if (isWithinRenderDistance(boundingBox)) {
+                        boundingBoxes.add(boundingBox);
+                    }
+                }
             }
         }
         return boundingBoxes;
diff --git a/src/main/java/com/irtimaled/bbor/client/config/BoundingBoxTypeHelper.java b/src/main/java/com/irtimaled/bbor/client/config/BoundingBoxTypeHelper.java
new file mode 100644 (file)
index 0000000..99539e9
--- /dev/null
@@ -0,0 +1,53 @@
+package com.irtimaled.bbor.client.config;
+
+import com.irtimaled.bbor.common.BoundingBoxType;
+import com.irtimaled.bbor.config.ConfigManager;
+import com.irtimaled.bbor.config.Setting;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class BoundingBoxTypeHelper {
+    private static final Map<String, Setting<Boolean>> structureTypeMap = new HashMap<>();
+
+    private static void registerType(BoundingBoxType type, Setting<Boolean> shouldRenderSetting) {
+        structureTypeMap.put(type.getName(), shouldRenderSetting);
+    }
+
+    static {
+        registerType(BoundingBoxType.WorldSpawn, ConfigManager.drawWorldSpawn);
+        registerType(BoundingBoxType.SpawnChunks, ConfigManager.drawWorldSpawn);
+        registerType(BoundingBoxType.LazySpawnChunks, ConfigManager.drawLazySpawnChunks);
+        registerType(BoundingBoxType.MobSpawner, ConfigManager.drawMobSpawners);
+        registerType(BoundingBoxType.SlimeChunks, ConfigManager.drawSlimeChunks);
+        registerType(BoundingBoxType.AFKSphere, ConfigManager.drawAFKSpheres);
+        registerType(BoundingBoxType.BiomeBorder, ConfigManager.drawBiomeBorders);
+        registerType(BoundingBoxType.Beacon, ConfigManager.drawBeacons);
+        registerType(BoundingBoxType.Conduit, ConfigManager.drawConduits);
+
+        registerType(BoundingBoxType.JungleTemple, ConfigManager.drawJungleTemples);
+        registerType(BoundingBoxType.DesertTemple, ConfigManager.drawDesertTemples);
+        registerType(BoundingBoxType.WitchHut, ConfigManager.drawWitchHuts);
+        registerType(BoundingBoxType.OceanMonument, ConfigManager.drawOceanMonuments);
+        registerType(BoundingBoxType.Shipwreck, ConfigManager.drawShipwrecks);
+        registerType(BoundingBoxType.OceanRuin, ConfigManager.drawOceanRuins);
+        registerType(BoundingBoxType.BuriedTreasure, ConfigManager.drawBuriedTreasure);
+        registerType(BoundingBoxType.Stronghold, ConfigManager.drawStrongholds);
+        registerType(BoundingBoxType.MineShaft, ConfigManager.drawMineShafts);
+        registerType(BoundingBoxType.NetherFortress, ConfigManager.drawNetherFortresses);
+        registerType(BoundingBoxType.EndCity, ConfigManager.drawEndCities);
+        registerType(BoundingBoxType.Mansion, ConfigManager.drawMansions);
+        registerType(BoundingBoxType.Igloo, ConfigManager.drawIgloos);
+        registerType(BoundingBoxType.PillagerOutpost, ConfigManager.drawPillagerOutposts);
+        registerType(BoundingBoxType.Village, ConfigManager.drawVillages);
+        registerType(BoundingBoxType.VillageSpheres, ConfigManager.drawVillageSpheres);
+        registerType(BoundingBoxType.NetherFossil, ConfigManager.drawNetherFossils);
+        registerType(BoundingBoxType.BastionRemnant, ConfigManager.drawBastionRemnants);
+        registerType(BoundingBoxType.RuinedPortal, ConfigManager.drawRuinedPortals);
+    }
+
+    public static boolean shouldRender(BoundingBoxType type) {
+        Setting<Boolean> setting = structureTypeMap.get(type.getName());
+        return setting != null ? setting.get() : false;
+    }
+}
index 98071a144d58e8d52a27f029d0ccbb4f93d2cee6..c76f6c9a9c6aff98b48ea6df0d368ae7d117397f 100644 (file)
@@ -1,11 +1,19 @@
 package com.irtimaled.bbor.client.providers;
 
+import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
 import com.irtimaled.bbor.client.interop.TileEntitiesHelper;
 import com.irtimaled.bbor.client.models.BoundingBoxBeacon;
+import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.Coords;
 import net.minecraft.tileentity.TileEntityBeacon;
 
 public class BeaconProvider implements IBoundingBoxProvider<BoundingBoxBeacon> {
+    @Override
+    public boolean canProvide(int dimensionId) {
+        return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.Beacon);
+    }
+
+    @Override
     public Iterable<BoundingBoxBeacon> get(int dimensionId) {
         return TileEntitiesHelper.map(TileEntityBeacon.class, beacon -> {
             int levels = beacon.getLevels();
index f5723c1f056452ddb2d42cb3be7fed68e1eddcba..1957bd55c683efbeefdc1c24f023416998f69815 100644 (file)
@@ -1,6 +1,7 @@
 package com.irtimaled.bbor.client.providers;
 
 import com.irtimaled.bbor.client.Player;
+import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
 import com.irtimaled.bbor.client.interop.BiomeBorderHelper;
 import com.irtimaled.bbor.client.models.BoundingBoxBiomeBorder;
 import com.irtimaled.bbor.common.BoundingBoxType;
@@ -18,10 +19,13 @@ public class BiomeBorderProvider implements IBoundingBoxProvider<BoundingBoxBiom
     private static Integer lastMaxY = null;
     private static Map<Coords, BoundingBoxBiomeBorder> lastBorders = new HashMap<>();
 
-    public Iterable<BoundingBoxBiomeBorder> get(int dimensionId) {
-        if (!BoundingBoxType.BiomeBorder.shouldRender())
-            return Iterators.empty();
+    @Override
+    public boolean canProvide(int dimensionId) {
+        return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.BiomeBorder);
+    }
 
+    @Override
+    public Iterable<BoundingBoxBiomeBorder> get(int dimensionId) {
         Coords playerCoords = Player.getCoords();
         Integer renderDistance = ConfigManager.biomeBordersRenderDistance.get();
         Boolean renderAllTransitions = !ConfigManager.renderOnlyCurrentBiome.get();
index be43ff0792fd1b39d9b6df5e4c27e65aafc9a373..17687f1ad1edd0ecb0a292c2b563a6028532caf0 100644 (file)
@@ -2,6 +2,7 @@ package com.irtimaled.bbor.client.providers;
 
 import com.irtimaled.bbor.client.GetCache;
 import com.irtimaled.bbor.client.Player;
+import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
 import com.irtimaled.bbor.client.interop.ClientInterop;
 import com.irtimaled.bbor.common.BoundingBoxCache;
 import com.irtimaled.bbor.common.MathHelper;
@@ -40,7 +41,7 @@ public class CacheProvider implements IBoundingBoxProvider<AbstractBoundingBox>
         if (cache != null) {
             for (Map.Entry<AbstractBoundingBox, Set<AbstractBoundingBox>> entry : cache.getBoundingBoxes().entrySet()) {
                 AbstractBoundingBox key = entry.getKey();
-                if (key.shouldRender() && isWithinRenderDistance(key)) {
+                if (BoundingBoxTypeHelper.shouldRender(key.getType()) && isWithinRenderDistance(key)) {
                     if (!outerBoxesOnly) {
                         Set<AbstractBoundingBox> children = entry.getValue();
                         if (children != null && children.size() > 0) {
index 6b4034b0311e4f13606ee7ed6b44c0ca9399cde3..c74deb3a10586bfeb9b907eaa61ceecb8c3dd765 100644 (file)
@@ -1,8 +1,10 @@
 package com.irtimaled.bbor.client.providers;
 
 import com.irtimaled.bbor.ReflectionHelper;
+import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
 import com.irtimaled.bbor.client.interop.TileEntitiesHelper;
 import com.irtimaled.bbor.client.models.BoundingBoxConduit;
+import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.Coords;
 import net.minecraft.tileentity.TileEntityConduit;
 import net.minecraft.util.math.BlockPos;
@@ -14,6 +16,11 @@ public class ConduitProvider implements IBoundingBoxProvider<BoundingBoxConduit>
     private static final Function<TileEntityConduit, List<BlockPos>> blocksFetcher =
             ReflectionHelper.getPrivateFieldGetter(TileEntityConduit.class, List.class, BlockPos.class);
 
+    @Override
+    public boolean canProvide(int dimensionId) {
+        return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.Conduit);
+    }
+
     @Override
     public Iterable<BoundingBoxConduit> get(int dimensionId) {
         return TileEntitiesHelper.map(TileEntityConduit.class, conduit -> {
index eb66ee07f09678104424b13d4e070cc0dfa36af7..e4e81819253afd6606dbc4d33a75ac5e9a739549 100644 (file)
@@ -4,4 +4,5 @@ import com.irtimaled.bbor.common.models.AbstractBoundingBox;
 
 public interface IBoundingBoxProvider<T extends AbstractBoundingBox> {
     Iterable<T> get(int dimensionId);
+    default boolean canProvide(int dimensionId) { return true; }
 }
diff --git a/src/main/java/com/irtimaled/bbor/client/providers/Iterators.java b/src/main/java/com/irtimaled/bbor/client/providers/Iterators.java
deleted file mode 100644 (file)
index 80bcc1b..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.irtimaled.bbor.client.providers;
-
-import com.irtimaled.bbor.common.models.AbstractBoundingBox;
-
-import java.util.Iterator;
-import java.util.function.Supplier;
-
-class Iterators {
-    private static class Empty<T> implements Iterable<T> {
-        @Override
-        public Iterator<T> iterator() {
-            return new Iterator<T>() {
-                @Override
-                public boolean hasNext() {
-                    return false;
-                }
-
-                @Override
-                public T next() {
-                    return null;
-                }
-            };
-        }
-    }
-
-    static <T extends AbstractBoundingBox> Iterable<T> empty() {
-        return new Empty<>();
-    }
-
-    private static class SingletonIterable<T> implements Iterable<T> {
-        private final Supplier<T> supplier;
-
-        private SingletonIterable(Supplier<T> supplier) {
-            this.supplier = supplier;
-        }
-
-        @Override
-        public Iterator<T> iterator() {
-            return new Iterator<T>() {
-                private boolean hasNext = true;
-                @Override
-                public boolean hasNext() {
-                    return hasNext;
-                }
-
-                @Override
-                public T next() {
-                    if(!hasNext) return null;
-
-                    hasNext = false;
-                    return supplier.get();
-                }
-            };
-        }
-    }
-
-    public static <T extends AbstractBoundingBox> Iterable<T> singleton(final Supplier<T> supplier) {
-        return new SingletonIterable<>(supplier);
-    }
-}
index 16a56ec4ab8a03593cafa1cfef379bbd7919b6e6..655b335cf06c8163d82bfde176b2ba5d9121b0e1 100644 (file)
@@ -1,11 +1,19 @@
 package com.irtimaled.bbor.client.providers;
 
+import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
 import com.irtimaled.bbor.client.interop.TileEntitiesHelper;
 import com.irtimaled.bbor.client.models.BoundingBoxMobSpawner;
+import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.Coords;
 import net.minecraft.tileentity.TileEntityMobSpawner;
 
 public class MobSpawnerProvider implements IBoundingBoxProvider<BoundingBoxMobSpawner> {
+    @Override
+    public boolean canProvide(int dimensionId) {
+        return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.MobSpawner);
+    }
+
+    @Override
     public Iterable<BoundingBoxMobSpawner> get(int dimensionId) {
         return TileEntitiesHelper.map(TileEntityMobSpawner.class, spawner -> {
             Coords coords = new Coords(spawner.getPos());
index a41b6836e810886d5c01896052acc0481c2f89fc..60630377de468fac2872f3f4f896cbfb642a6853 100644 (file)
@@ -1,6 +1,7 @@
 package com.irtimaled.bbor.client.providers;
 
 import com.irtimaled.bbor.client.Player;
+import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
 import com.irtimaled.bbor.client.interop.ClientInterop;
 import com.irtimaled.bbor.client.models.BoundingBoxSlimeChunk;
 import com.irtimaled.bbor.common.BoundingBoxType;
@@ -34,11 +35,12 @@ public class SlimeChunkProvider implements IBoundingBoxProvider<BoundingBoxSlime
         seed = null;
     }
 
-    public Iterable<BoundingBoxSlimeChunk> get(int dimensionId) {
-        if (!BoundingBoxType.SlimeChunks.shouldRender() || seed == null || dimensionId != Dimensions.OVERWORLD) {
-            return Iterators.empty();
-        }
+    @Override
+    public boolean canProvide(int dimensionId) {
+        return dimensionId == Dimensions.OVERWORLD && seed != null && BoundingBoxTypeHelper.shouldRender(BoundingBoxType.SlimeChunks);
+    }
 
+    public Iterable<BoundingBoxSlimeChunk> get(int dimensionId) {
         Set<BoundingBoxSlimeChunk> slimeChunks = new HashSet<>();
         int renderDistanceChunks = ClientInterop.getRenderDistanceChunks();
         int playerChunkX = MathHelper.floor(Player.getX() / CHUNK_SIZE);
index 02a452a636e377bfff94eeb3d6ccec01ce1c9b00..1b2c92b882468200d1bb2b7b7131de11ee6edc3f 100644 (file)
@@ -1,12 +1,17 @@
 package com.irtimaled.bbor.client.providers;
 
 import com.irtimaled.bbor.client.Player;
+import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
 import com.irtimaled.bbor.client.interop.SpawningSphereHelper;
 import com.irtimaled.bbor.client.models.BoundingBoxSpawningSphere;
 import com.irtimaled.bbor.client.models.Point;
+import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.MathHelper;
 import com.irtimaled.bbor.common.models.Coords;
 
+import java.util.HashSet;
+import java.util.Set;
+
 public class SpawningSphereProvider implements IBoundingBoxProvider<BoundingBoxSpawningSphere> {
     private static BoundingBoxSpawningSphere spawningSphere;
     private static Integer dimensionId;
@@ -59,12 +64,15 @@ public class SpawningSphereProvider implements IBoundingBoxProvider<BoundingBoxS
         return SpawningSphereHelper.findSpawnableSpaces(center, center.getCoords(), size, size, (x, y, z) -> true);
     }
 
-    private static final Iterable<BoundingBoxSpawningSphere> iterable = Iterators.singleton(() -> spawningSphere);
+    @Override
+    public boolean canProvide(int dimensionId) {
+        return spawningSphere != null && SpawningSphereProvider.dimensionId == dimensionId && BoundingBoxTypeHelper.shouldRender(BoundingBoxType.AFKSphere);
+    }
 
+    @Override
     public Iterable<BoundingBoxSpawningSphere> get(int dimensionId) {
-        if(spawningSphere == null || SpawningSphereProvider.dimensionId != dimensionId) {
-            return Iterators.empty();
-        }
-        return iterable;
+        Set<BoundingBoxSpawningSphere> boundingBoxes = new HashSet<>();
+        boundingBoxes.add(spawningSphere);
+        return boundingBoxes;
     }
 }
index 560423e8b42587c1c353f684e71c86fb9fc4d6b9..3586ba5caf4d28ee1a8779a89831e2d41b72f01c 100644 (file)
@@ -1,5 +1,6 @@
 package com.irtimaled.bbor.client.providers;
 
+import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
 import com.irtimaled.bbor.client.models.BoundingBoxWorldSpawn;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.Dimensions;
@@ -10,22 +11,20 @@ import java.util.Set;
 
 public class WorldSpawnProvider implements IBoundingBoxProvider<BoundingBoxWorldSpawn> {
     private static final double CHUNK_SIZE = 16d;
-    private static Set<BoundingBoxWorldSpawn> spawnChunks = new HashSet<>();
+    private static BoundingBoxWorldSpawn spawnChunks;
+    private static BoundingBoxWorldSpawn lazyChunks;
+    private static BoundingBoxWorldSpawn worldSpawn;
 
     public static void setWorldSpawn(int spawnX, int spawnZ) {
-        spawnChunks = getSpawnChunkBoundingBoxes(spawnX, spawnZ);
+        worldSpawn = getWorldSpawnBoundingBox(spawnX, spawnZ);
+        spawnChunks = buildSpawnChunksBoundingBox(spawnX, spawnZ, 12, BoundingBoxType.SpawnChunks);
+        lazyChunks = buildSpawnChunksBoundingBox(spawnX, spawnZ, 16, BoundingBoxType.LazySpawnChunks);
     }
 
     public static void clear() {
-        spawnChunks = new HashSet<>();
-    }
-
-    private static Set<BoundingBoxWorldSpawn> getSpawnChunkBoundingBoxes(int spawnX, int spawnZ) {
-        Set<BoundingBoxWorldSpawn> boundingBoxes = new HashSet<>();
-        boundingBoxes.add(getWorldSpawnBoundingBox(spawnX, spawnZ));
-        boundingBoxes.add(buildSpawnChunksBoundingBox(spawnX, spawnZ, 12, BoundingBoxType.SpawnChunks));
-        boundingBoxes.add(buildSpawnChunksBoundingBox(spawnX, spawnZ, 16, BoundingBoxType.LazySpawnChunks));
-        return boundingBoxes;
+        worldSpawn = null;
+        spawnChunks = null;
+        lazyChunks = null;
     }
 
     private static BoundingBoxWorldSpawn getWorldSpawnBoundingBox(int spawnX, int spawnZ) {
@@ -50,7 +49,21 @@ public class WorldSpawnProvider implements IBoundingBoxProvider<BoundingBoxWorld
         return BoundingBoxWorldSpawn.from(minCoords, maxCoords, type);
     }
 
+    @Override
+    public boolean canProvide(int dimensionId) {
+        return dimensionId == Dimensions.OVERWORLD;
+    }
+
+    @Override
     public Iterable<BoundingBoxWorldSpawn> get(int dimensionId) {
-        return dimensionId == Dimensions.OVERWORLD ? spawnChunks : Iterators.empty();
+        Set<BoundingBoxWorldSpawn> boundingBoxes = new HashSet<>();
+        if (BoundingBoxTypeHelper.shouldRender(BoundingBoxType.WorldSpawn)) {
+            if (worldSpawn != null) boundingBoxes.add(worldSpawn);
+            if (spawnChunks != null) boundingBoxes.add(spawnChunks);
+        }
+        if (BoundingBoxTypeHelper.shouldRender(BoundingBoxType.LazySpawnChunks)) {
+            if (lazyChunks != null) boundingBoxes.add(lazyChunks);
+        }
+        return boundingBoxes;
     }
 }
index c17b7a29586565e489b8ac69b5b38971bbb1a5a7..535d1cd76154d6bd531a0017a555337b8e5091ae 100644 (file)
@@ -24,4 +24,8 @@ public abstract class AbstractBoundingBox {
     public String getTypeName() {
         return type.getName();
     }
+
+    public BoundingBoxType getType() {
+        return type;
+    }
 }