From: Irtimaled Date: Thu, 7 May 2020 01:15:06 +0000 (-0700) Subject: Don't provide client side boxes if they are off X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=1fae13dae9fc1f16b1fdcd6b6b336b4d7d2294ea;p=BoundingBoxOutlineReloaded.git Don't provide client side boxes if they are off --- diff --git a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java index e177473..f4d73cd 100644 --- a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java +++ b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java @@ -79,7 +79,7 @@ public class ClientRenderer { } public static void render(int dimensionId) { - if(!active) return; + if (!active) return; Set 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 getBoundingBoxes(int dimensionId) { Set 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 index 0000000..99539e9 --- /dev/null +++ b/src/main/java/com/irtimaled/bbor/client/config/BoundingBoxTypeHelper.java @@ -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> structureTypeMap = new HashMap<>(); + + private static void registerType(BoundingBoxType type, Setting 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 setting = structureTypeMap.get(type.getName()); + return setting != null ? setting.get() : false; + } +} diff --git a/src/main/java/com/irtimaled/bbor/client/providers/BeaconProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/BeaconProvider.java index 98071a1..c76f6c9 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/BeaconProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/BeaconProvider.java @@ -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 { + @Override + public boolean canProvide(int dimensionId) { + return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.Beacon); + } + + @Override public Iterable get(int dimensionId) { return TileEntitiesHelper.map(TileEntityBeacon.class, beacon -> { int levels = beacon.getLevels(); diff --git a/src/main/java/com/irtimaled/bbor/client/providers/BiomeBorderProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/BiomeBorderProvider.java index f5723c1..1957bd5 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/BiomeBorderProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/BiomeBorderProvider.java @@ -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 lastBorders = new HashMap<>(); - public Iterable get(int dimensionId) { - if (!BoundingBoxType.BiomeBorder.shouldRender()) - return Iterators.empty(); + @Override + public boolean canProvide(int dimensionId) { + return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.BiomeBorder); + } + @Override + public Iterable get(int dimensionId) { Coords playerCoords = Player.getCoords(); Integer renderDistance = ConfigManager.biomeBordersRenderDistance.get(); Boolean renderAllTransitions = !ConfigManager.renderOnlyCurrentBiome.get(); diff --git a/src/main/java/com/irtimaled/bbor/client/providers/CacheProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/CacheProvider.java index be43ff0..17687f1 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/CacheProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/CacheProvider.java @@ -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 if (cache != null) { for (Map.Entry> entry : cache.getBoundingBoxes().entrySet()) { AbstractBoundingBox key = entry.getKey(); - if (key.shouldRender() && isWithinRenderDistance(key)) { + if (BoundingBoxTypeHelper.shouldRender(key.getType()) && isWithinRenderDistance(key)) { if (!outerBoxesOnly) { Set children = entry.getValue(); if (children != null && children.size() > 0) { diff --git a/src/main/java/com/irtimaled/bbor/client/providers/ConduitProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/ConduitProvider.java index 6b4034b..c74deb3 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/ConduitProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/ConduitProvider.java @@ -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 private static final Function> blocksFetcher = ReflectionHelper.getPrivateFieldGetter(TileEntityConduit.class, List.class, BlockPos.class); + @Override + public boolean canProvide(int dimensionId) { + return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.Conduit); + } + @Override public Iterable get(int dimensionId) { return TileEntitiesHelper.map(TileEntityConduit.class, conduit -> { diff --git a/src/main/java/com/irtimaled/bbor/client/providers/IBoundingBoxProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/IBoundingBoxProvider.java index eb66ee0..e4e8181 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/IBoundingBoxProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/IBoundingBoxProvider.java @@ -4,4 +4,5 @@ import com.irtimaled.bbor.common.models.AbstractBoundingBox; public interface IBoundingBoxProvider { Iterable 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 index 80bcc1b..0000000 --- a/src/main/java/com/irtimaled/bbor/client/providers/Iterators.java +++ /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 implements Iterable { - @Override - public Iterator iterator() { - return new Iterator() { - @Override - public boolean hasNext() { - return false; - } - - @Override - public T next() { - return null; - } - }; - } - } - - static Iterable empty() { - return new Empty<>(); - } - - private static class SingletonIterable implements Iterable { - private final Supplier supplier; - - private SingletonIterable(Supplier supplier) { - this.supplier = supplier; - } - - @Override - public Iterator iterator() { - return new Iterator() { - 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 Iterable singleton(final Supplier supplier) { - return new SingletonIterable<>(supplier); - } -} diff --git a/src/main/java/com/irtimaled/bbor/client/providers/MobSpawnerProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/MobSpawnerProvider.java index 16a56ec..655b335 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/MobSpawnerProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/MobSpawnerProvider.java @@ -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 { + @Override + public boolean canProvide(int dimensionId) { + return BoundingBoxTypeHelper.shouldRender(BoundingBoxType.MobSpawner); + } + + @Override public Iterable get(int dimensionId) { return TileEntitiesHelper.map(TileEntityMobSpawner.class, spawner -> { Coords coords = new Coords(spawner.getPos()); diff --git a/src/main/java/com/irtimaled/bbor/client/providers/SlimeChunkProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/SlimeChunkProvider.java index a41b683..6063037 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/SlimeChunkProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/SlimeChunkProvider.java @@ -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 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 get(int dimensionId) { Set slimeChunks = new HashSet<>(); int renderDistanceChunks = ClientInterop.getRenderDistanceChunks(); int playerChunkX = MathHelper.floor(Player.getX() / CHUNK_SIZE); diff --git a/src/main/java/com/irtimaled/bbor/client/providers/SpawningSphereProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/SpawningSphereProvider.java index 02a452a..1b2c92b 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/SpawningSphereProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/SpawningSphereProvider.java @@ -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 { private static BoundingBoxSpawningSphere spawningSphere; private static Integer dimensionId; @@ -59,12 +64,15 @@ public class SpawningSphereProvider implements IBoundingBoxProvider true); } - private static final Iterable iterable = Iterators.singleton(() -> spawningSphere); + @Override + public boolean canProvide(int dimensionId) { + return spawningSphere != null && SpawningSphereProvider.dimensionId == dimensionId && BoundingBoxTypeHelper.shouldRender(BoundingBoxType.AFKSphere); + } + @Override public Iterable get(int dimensionId) { - if(spawningSphere == null || SpawningSphereProvider.dimensionId != dimensionId) { - return Iterators.empty(); - } - return iterable; + Set boundingBoxes = new HashSet<>(); + boundingBoxes.add(spawningSphere); + return boundingBoxes; } } diff --git a/src/main/java/com/irtimaled/bbor/client/providers/WorldSpawnProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/WorldSpawnProvider.java index 560423e..3586ba5 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/WorldSpawnProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/WorldSpawnProvider.java @@ -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 { private static final double CHUNK_SIZE = 16d; - private static Set 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 getSpawnChunkBoundingBoxes(int spawnX, int spawnZ) { - Set 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 get(int dimensionId) { - return dimensionId == Dimensions.OVERWORLD ? spawnChunks : Iterators.empty(); + Set 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; } } diff --git a/src/main/java/com/irtimaled/bbor/common/models/AbstractBoundingBox.java b/src/main/java/com/irtimaled/bbor/common/models/AbstractBoundingBox.java index c17b7a2..535d1cd 100644 --- a/src/main/java/com/irtimaled/bbor/common/models/AbstractBoundingBox.java +++ b/src/main/java/com/irtimaled/bbor/common/models/AbstractBoundingBox.java @@ -24,4 +24,8 @@ public abstract class AbstractBoundingBox { public String getTypeName() { return type.getName(); } + + public BoundingBoxType getType() { + return type; + } }