From 023557c813b58ab0f5768f962b30570c63aa9771 Mon Sep 17 00:00:00 2001 From: Irtimaled Date: Sun, 13 Sep 2020 23:44:49 -0700 Subject: [PATCH] Make clearing providers easier --- src/main/java/com/irtimaled/bbor/client/ClientProxy.java | 7 +------ .../java/com/irtimaled/bbor/client/ClientRenderer.java | 6 ++++++ .../bbor/client/commands/SpawningSphereCommand.java | 2 +- .../bbor/client/providers/BiomeBorderProvider.java | 4 ++-- .../bbor/client/providers/CustomBeaconProvider.java | 6 +++++- .../bbor/client/providers/CustomBoxProvider.java | 6 +++++- .../bbor/client/providers/CustomLineProvider.java | 6 +++++- .../bbor/client/providers/CustomSphereProvider.java | 6 +++++- .../bbor/client/providers/FlowerForestProvider.java | 4 ++-- .../bbor/client/providers/ICachingProvider.java | 5 +++++ .../bbor/client/providers/SlimeChunkProvider.java | 4 ++-- .../bbor/client/providers/SpawnableBlocksProvider.java | 5 +++-- .../bbor/client/providers/SpawningSphereProvider.java | 9 ++++++--- .../bbor/client/providers/WorldSpawnProvider.java | 4 ++-- 14 files changed, 50 insertions(+), 24 deletions(-) create mode 100644 src/main/java/com/irtimaled/bbor/client/providers/ICachingProvider.java diff --git a/src/main/java/com/irtimaled/bbor/client/ClientProxy.java b/src/main/java/com/irtimaled/bbor/client/ClientProxy.java index efee94a..72a0a81 100644 --- a/src/main/java/com/irtimaled/bbor/client/ClientProxy.java +++ b/src/main/java/com/irtimaled/bbor/client/ClientProxy.java @@ -49,12 +49,7 @@ public class ClientProxy extends CommonProxy { } private void clear() { - SlimeChunkProvider.clear(); - WorldSpawnProvider.clear(); - SpawningSphereProvider.clear(); - CustomBeaconProvider.clear(); - CustomBoxProvider.clear(); - BiomeBorderProvider.clear(); + ClientRenderer.clear(); clearCaches(); } diff --git a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java index fab8e3b..e4bf5b5 100644 --- a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java +++ b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java @@ -5,6 +5,7 @@ import com.irtimaled.bbor.client.models.*; import com.irtimaled.bbor.client.providers.*; import com.irtimaled.bbor.client.renderers.*; import com.irtimaled.bbor.common.MathHelper; +import com.irtimaled.bbor.common.TypeHelper; import com.irtimaled.bbor.common.models.AbstractBoundingBox; import com.irtimaled.bbor.common.models.BoundingBoxCuboid; import com.irtimaled.bbor.common.models.DimensionId; @@ -112,4 +113,9 @@ public class ClientRenderer { .comparingDouble((AbstractBoundingBox boundingBox) -> boundingBox.getDistance(point.getX(), point.getY(), point.getZ())).reversed()); } + public static void clear() { + for(IBoundingBoxProvider provider : providers) { + TypeHelper.doIfType(provider, ICachingProvider.class, ICachingProvider::clearCache); + } + } } diff --git a/src/main/java/com/irtimaled/bbor/client/commands/SpawningSphereCommand.java b/src/main/java/com/irtimaled/bbor/client/commands/SpawningSphereCommand.java index ac823be..8ab9f1b 100644 --- a/src/main/java/com/irtimaled/bbor/client/commands/SpawningSphereCommand.java +++ b/src/main/java/com/irtimaled/bbor/client/commands/SpawningSphereCommand.java @@ -25,7 +25,7 @@ public class SpawningSphereCommand { .executes(SpawningSphereCommand::setSphere)) .then(Commands.literal(ArgumentNames.CLEAR) .executes(context -> { - boolean cleared = SpawningSphereProvider.clear(); + boolean cleared = SpawningSphereProvider.clearSphere(); String format = cleared ? "bbor.commands.spawningSphere.cleared" : "bbor.commands.spawningSphere.notSet"; CommandHelper.feedback(context, format); 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 7776c77..8447a4d 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/BiomeBorderProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/BiomeBorderProvider.java @@ -13,7 +13,7 @@ import com.irtimaled.bbor.common.models.DimensionId; import java.util.HashMap; import java.util.Map; -public class BiomeBorderProvider implements IBoundingBoxProvider { +public class BiomeBorderProvider implements IBoundingBoxProvider, ICachingProvider { private static Coords lastPlayerCoords = null; private static Boolean lastRenderAllTransitions = null; private static Integer lastRenderDistance = null; @@ -44,7 +44,7 @@ public class BiomeBorderProvider implements IBoundingBoxProvider(); lastPlayerCoords = null; } diff --git a/src/main/java/com/irtimaled/bbor/client/providers/CustomBeaconProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/CustomBeaconProvider.java index 15a3728..daf945e 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/CustomBeaconProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/CustomBeaconProvider.java @@ -10,7 +10,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class CustomBeaconProvider implements IBoundingBoxProvider { +public class CustomBeaconProvider implements IBoundingBoxProvider, ICachingProvider { private static final Map> dimensionsCache = new HashMap<>(); private static Map getCache(DimensionId dimensionId) { @@ -32,6 +32,10 @@ public class CustomBeaconProvider implements IBoundingBoxProvider get(DimensionId dimensionId) { return getCache(dimensionId).values(); diff --git a/src/main/java/com/irtimaled/bbor/client/providers/CustomBoxProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/CustomBoxProvider.java index 31c92a1..9fb9e09 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/CustomBoxProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/CustomBoxProvider.java @@ -10,7 +10,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class CustomBoxProvider implements IBoundingBoxProvider { +public class CustomBoxProvider implements IBoundingBoxProvider, ICachingProvider { private static final Map> dimensionCache = new HashMap<>(); private static int getHashKey(Coords minCoords, Coords maxCoords) { @@ -38,6 +38,10 @@ public class CustomBoxProvider implements IBoundingBoxProvider get(DimensionId dimensionId) { return getCache(dimensionId).values(); diff --git a/src/main/java/com/irtimaled/bbor/client/providers/CustomLineProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/CustomLineProvider.java index 5bcbdc3..4256b97 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/CustomLineProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/CustomLineProvider.java @@ -10,7 +10,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class CustomLineProvider implements IBoundingBoxProvider { +public class CustomLineProvider implements IBoundingBoxProvider, ICachingProvider { private static final Map> dimensionCache = new HashMap<>(); private static int getHashKey(Point minPoint, Point maxPoint) { @@ -38,6 +38,10 @@ public class CustomLineProvider implements IBoundingBoxProvider dimensionCache.values().forEach(Map::clear); } + public void clearCache() { + clear(); + } + @Override public Iterable get(DimensionId dimensionId) { return getCache(dimensionId).values(); diff --git a/src/main/java/com/irtimaled/bbor/client/providers/CustomSphereProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/CustomSphereProvider.java index 08b944f..c1406e8 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/CustomSphereProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/CustomSphereProvider.java @@ -10,7 +10,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class CustomSphereProvider implements IBoundingBoxProvider { +public class CustomSphereProvider implements IBoundingBoxProvider, ICachingProvider { private static final Map> dimensionCache = new HashMap<>(); private static Map getCache(DimensionId dimensionId) { @@ -34,6 +34,10 @@ public class CustomSphereProvider implements IBoundingBoxProvider get(DimensionId dimensionId) { return getCache(dimensionId).values(); diff --git a/src/main/java/com/irtimaled/bbor/client/providers/FlowerForestProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/FlowerForestProvider.java index cd6b46a..3bc7bdc 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/FlowerForestProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/FlowerForestProvider.java @@ -16,7 +16,7 @@ import net.minecraft.world.biome.Biomes; import java.util.HashMap; import java.util.Map; -public class FlowerForestProvider implements IBoundingBoxProvider { +public class FlowerForestProvider implements IBoundingBoxProvider, ICachingProvider { public static final int FLOWER_FOREST_BIOME_ID = Registry.BIOME.getId(Biomes.FLOWER_FOREST); private static Coords lastPlayerCoords = null; private static Integer lastRenderDistance = null; @@ -39,7 +39,7 @@ public class FlowerForestProvider implements IBoundingBoxProvider(); lastPlayerCoords = null; } diff --git a/src/main/java/com/irtimaled/bbor/client/providers/ICachingProvider.java b/src/main/java/com/irtimaled/bbor/client/providers/ICachingProvider.java new file mode 100644 index 0000000..a48d941 --- /dev/null +++ b/src/main/java/com/irtimaled/bbor/client/providers/ICachingProvider.java @@ -0,0 +1,5 @@ +package com.irtimaled.bbor.client.providers; + +public interface ICachingProvider { + void clearCache(); +} 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 022671f..a8d0302 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/SlimeChunkProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/SlimeChunkProvider.java @@ -13,7 +13,7 @@ import net.minecraft.util.SharedSeedRandom; import java.util.HashSet; import java.util.Set; -public class SlimeChunkProvider implements IBoundingBoxProvider { +public class SlimeChunkProvider implements IBoundingBoxProvider, ICachingProvider { private static final double CHUNK_SIZE = 16d; private static Long seed; @@ -26,7 +26,7 @@ public class SlimeChunkProvider implements IBoundingBoxProvider { +public class SpawnableBlocksProvider implements IBoundingBoxProvider, ICachingProvider { public static final Minecraft minecraft = Minecraft.getInstance(); private static Long lastGameTime = null; private static Set lastBoundingBox = null; - public static void clear() { + public void clearCache() { + lastGameTime = null; lastBoundingBox = null; } 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 2ef1cca..d9782fa 100644 --- a/src/main/java/com/irtimaled/bbor/client/providers/SpawningSphereProvider.java +++ b/src/main/java/com/irtimaled/bbor/client/providers/SpawningSphereProvider.java @@ -15,7 +15,7 @@ import net.minecraft.client.Minecraft; import java.util.HashSet; import java.util.Set; -public class SpawningSphereProvider implements IBoundingBoxProvider { +public class SpawningSphereProvider implements IBoundingBoxProvider, ICachingProvider { public static final Minecraft minecraft = Minecraft.getInstance(); private static Long lastGameTime = null; @@ -25,14 +25,13 @@ public class SpawningSphereProvider implements IBoundingBoxProvider { +public class WorldSpawnProvider implements IBoundingBoxProvider, ICachingProvider { private static final double CHUNK_SIZE = 16d; private static BoundingBoxWorldSpawn spawnChunks; private static BoundingBoxWorldSpawn lazyChunks; @@ -21,7 +21,7 @@ public class WorldSpawnProvider implements IBoundingBoxProvider