]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/commitdiff
Prepare for multiple dimensions in the future
authorIrtimaled <irtimaled@gmail.com>
Thu, 2 Apr 2020 07:32:37 +0000 (00:32 -0700)
committerIrtimaled <irtimaled@gmail.com>
Mon, 18 May 2020 00:28:01 +0000 (17:28 -0700)
src/main/java/com/irtimaled/bbor/client/providers/BeaconProvider.java
src/main/java/com/irtimaled/bbor/client/providers/CustomBoxProvider.java
src/main/java/com/irtimaled/bbor/common/BoundingBoxType.java
src/main/java/com/irtimaled/bbor/common/ChunkProcessor.java [new file with mode: 0644]
src/main/java/com/irtimaled/bbor/common/CommonProxy.java
src/main/java/com/irtimaled/bbor/common/Dimensions.java
src/main/java/com/irtimaled/bbor/common/chunkProcessors/AbstractChunkProcessor.java [deleted file]
src/main/java/com/irtimaled/bbor/common/chunkProcessors/EndChunkProcessor.java [deleted file]
src/main/java/com/irtimaled/bbor/common/chunkProcessors/NetherChunkProcessor.java [deleted file]
src/main/java/com/irtimaled/bbor/common/chunkProcessors/OverworldChunkProcessor.java [deleted file]

index bd49e50779fbe13b1cb2c6d26c6649d7813e3532..8e1b3c3c1f4b98efb8047162404a535a465f4dfb 100644 (file)
@@ -1,7 +1,6 @@
 package com.irtimaled.bbor.client.providers;
 
 import com.irtimaled.bbor.client.Player;
-import com.irtimaled.bbor.common.Dimensions;
 import com.irtimaled.bbor.common.models.BoundingBoxBeacon;
 import com.irtimaled.bbor.common.models.Coords;
 
@@ -10,15 +9,7 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 public class BeaconProvider implements IBoundingBoxProvider<BoundingBoxBeacon> {
-    private static final Map<Integer, Map<Coords, BoundingBoxBeacon>> dimensionsCache = buildBeaconsCache();
-
-    private static Map<Integer, Map<Coords, BoundingBoxBeacon>> buildBeaconsCache() {
-        Map<Integer, Map<Coords, BoundingBoxBeacon>> map = new HashMap<>();
-        map.put(Dimensions.OVERWORLD, new ConcurrentHashMap<>());
-        map.put(Dimensions.NETHER, new ConcurrentHashMap<>());
-        map.put(Dimensions.THE_END, new ConcurrentHashMap<>());
-        return map;
-    }
+    private static final Map<Integer, Map<Coords, BoundingBoxBeacon>> dimensionsCache = new HashMap<>();
 
     private static Map<Coords, BoundingBoxBeacon> getCache(int dimensionId) {
         return dimensionsCache.computeIfAbsent(dimensionId, i -> new ConcurrentHashMap<>());
index 7ad259df145d5c66be499476ce01c8a5cca28eb0..e3b35880caa683ef1662d9dea3f315988df762ff 100644 (file)
@@ -2,7 +2,6 @@ package com.irtimaled.bbor.client.providers;
 
 import com.irtimaled.bbor.client.Player;
 import com.irtimaled.bbor.common.BoundingBoxType;
-import com.irtimaled.bbor.common.Dimensions;
 import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
 import com.irtimaled.bbor.common.models.Coords;
 
@@ -11,15 +10,7 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 public class CustomBoxProvider implements IBoundingBoxProvider<BoundingBoxCuboid> {
-    private static final Map<Integer, Map<Integer, BoundingBoxCuboid>> dimensionCache = buildDimensionCache();
-
-    private static Map<Integer, Map<Integer, BoundingBoxCuboid>> buildDimensionCache() {
-        Map<Integer, Map<Integer, BoundingBoxCuboid>> map = new HashMap<>();
-        map.put(Dimensions.OVERWORLD, new ConcurrentHashMap<>());
-        map.put(Dimensions.NETHER, new ConcurrentHashMap<>());
-        map.put(Dimensions.THE_END, new ConcurrentHashMap<>());
-        return map;
-    }
+    private final static Map<Integer, Map<Integer, BoundingBoxCuboid>> dimensionCache = new HashMap<>();
 
     private static int getHashKey(Coords minCoords, Coords maxCoords) {
         return (31 + minCoords.hashCode()) * 31 + maxCoords.hashCode();
index 25463ffcba9dcfad7ec702825203c60b841a49cc..b80d897b98dc9629ebf7fd420e95df6d1cc1ef4f 100644 (file)
@@ -38,7 +38,9 @@ public class BoundingBoxType {
     public static final BoundingBoxType Custom = register(Color.WHITE, "Custom", ConfigManager.drawCustomBoxes);
 
     private static BoundingBoxType register(Color color, String name, Setting<Boolean> shouldRenderSetting) {
-        return structureTypeMap.computeIfAbsent(name.hashCode(), k -> new BoundingBoxType(color, name, shouldRenderSetting));
+        BoundingBoxType type = structureTypeMap.computeIfAbsent(name.hashCode(), k -> new BoundingBoxType(color, name, shouldRenderSetting));
+        ChunkProcessor.registerSupportedStructure(type);
+        return type;
     }
 
     public static BoundingBoxType getByNameHash(Integer nameHash) {
diff --git a/src/main/java/com/irtimaled/bbor/common/ChunkProcessor.java b/src/main/java/com/irtimaled/bbor/common/ChunkProcessor.java
new file mode 100644 (file)
index 0000000..7eb3403
--- /dev/null
@@ -0,0 +1,73 @@
+package com.irtimaled.bbor.common;
+
+import com.irtimaled.bbor.common.models.AbstractBoundingBox;
+import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
+import com.irtimaled.bbor.common.models.BoundingBoxMobSpawner;
+import com.irtimaled.bbor.common.models.Coords;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.tileentity.TileEntityMobSpawner;
+import net.minecraft.util.math.MutableBoundingBox;
+import net.minecraft.world.chunk.Chunk;
+import net.minecraft.world.gen.feature.structure.StructurePiece;
+import net.minecraft.world.gen.feature.structure.StructureStart;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+class ChunkProcessor {
+    private static final Set<BoundingBoxType> supportedStructures = new HashSet<>();
+
+    static void registerSupportedStructure(BoundingBoxType type) {
+        supportedStructures.add(type);
+    }
+
+    ChunkProcessor(BoundingBoxCache boundingBoxCache) {
+        this.boundingBoxCache = boundingBoxCache;
+    }
+
+    private final BoundingBoxCache boundingBoxCache;
+
+    private void addStructures(BoundingBoxType type, Map<String, StructureStart> structureMap) {
+        StructureStart structureStart = structureMap.get(type.getName());
+        if (structureStart == null) return;
+
+        MutableBoundingBox bb = structureStart.getBoundingBox();
+        if (bb == null) return;
+
+        AbstractBoundingBox boundingBox = buildStructure(bb, type);
+        if (boundingBoxCache.isCached(boundingBox)) return;
+
+        Set<AbstractBoundingBox> structureBoundingBoxes = new HashSet<>();
+        for (StructurePiece structureComponent : structureStart.getComponents()) {
+            structureBoundingBoxes.add(buildStructure(structureComponent.getBoundingBox(), type));
+        }
+        boundingBoxCache.addBoundingBoxes(boundingBox, structureBoundingBoxes);
+    }
+
+    private AbstractBoundingBox buildStructure(MutableBoundingBox bb, BoundingBoxType type) {
+        Coords min = new Coords(bb.minX, bb.minY, bb.minZ);
+        Coords max = new Coords(bb.maxX, bb.maxY, bb.maxZ);
+        return BoundingBoxCuboid.from(min, max, type);
+    }
+
+    private void addMobSpawners(Chunk chunk) {
+        Collection<TileEntity> tileEntities = chunk.getTileEntityMap().values();
+        for (TileEntity tileEntity : tileEntities) {
+            TileEntityMobSpawner spawner = TypeHelper.as(tileEntity, TileEntityMobSpawner.class);
+            if (spawner != null) {
+                Coords coords = new Coords(spawner.getPos());
+                boundingBoxCache.addBoundingBox(BoundingBoxMobSpawner.from(coords));
+            }
+        }
+    }
+
+    void process(Chunk chunk) {
+        Map<String, StructureStart> structureMap = chunk.getStructureStarts();
+        if (structureMap.size() > 0) {
+            supportedStructures.forEach(type -> addStructures(type, structureMap));
+        }
+        addMobSpawners(chunk);
+    }
+}
index e00afd4792fbfbf768a9ac288a189ccf86dcd8e9..5d612f89322ebadfefc98db484c9c06036e9d682 100644 (file)
@@ -1,10 +1,6 @@
 package com.irtimaled.bbor.common;
 
 import com.irtimaled.bbor.Logger;
-import com.irtimaled.bbor.common.chunkProcessors.AbstractChunkProcessor;
-import com.irtimaled.bbor.common.chunkProcessors.EndChunkProcessor;
-import com.irtimaled.bbor.common.chunkProcessors.NetherChunkProcessor;
-import com.irtimaled.bbor.common.chunkProcessors.OverworldChunkProcessor;
 import com.irtimaled.bbor.common.events.*;
 import com.irtimaled.bbor.common.messages.AddBoundingBox;
 import com.irtimaled.bbor.common.messages.InitializeClient;
@@ -24,7 +20,7 @@ public class CommonProxy {
     private final Map<Integer, ServerPlayer> players = new ConcurrentHashMap<>();
     private final Map<Integer, Set<AbstractBoundingBox>> playerBoundingBoxesCache = new HashMap<>();
     private final Map<Integer, VillageProcessor> villageProcessors = new HashMap<>();
-    private final Map<Integer, AbstractChunkProcessor> chunkProcessors = new HashMap<>();
+    private final Map<Integer, ChunkProcessor> chunkProcessors = new HashMap<>();
     private final Map<Integer, BoundingBoxCache> dimensionCache = new ConcurrentHashMap<>();
     private Long seed = null;
     private Integer spawnX = null;
@@ -54,28 +50,18 @@ public class CommonProxy {
     private void worldLoaded(WorldLoaded event) {
         int dimensionId = event.getDimensionId();
         long seed = event.getSeed();
-        BoundingBoxCache boundingBoxCache = getOrCreateCache(dimensionId);
-        AbstractChunkProcessor chunkProcessor = null;
-        switch (dimensionId) {
-            case Dimensions.OVERWORLD:
-                setSeed(seed);
-                setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
-                chunkProcessor = new OverworldChunkProcessor(boundingBoxCache);
-                break;
-            case Dimensions.NETHER:
-                chunkProcessor = new NetherChunkProcessor(boundingBoxCache);
-                break;
-            case Dimensions.THE_END:
-                chunkProcessor = new EndChunkProcessor(boundingBoxCache);
-                break;
+        if (dimensionId == Dimensions.OVERWORLD) {
+            setSeed(seed);
+            setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
         }
         Logger.info("create world dimension: %s (seed: %d)", dimensionId, seed);
-        chunkProcessors.put(dimensionId, chunkProcessor);
+        BoundingBoxCache boundingBoxCache = getOrCreateCache(dimensionId);
+        chunkProcessors.put(dimensionId, new ChunkProcessor(boundingBoxCache));
         villageProcessors.put(dimensionId, new VillageProcessor(dimensionId, boundingBoxCache));
     }
 
     private void chunkLoaded(ChunkLoaded event) {
-        AbstractChunkProcessor chunkProcessor = chunkProcessors.get(event.getDimensionId());
+        ChunkProcessor chunkProcessor = chunkProcessors.get(event.getDimensionId());
         if (chunkProcessor == null) return;
 
         chunkProcessor.process(event.getChunk());
index ca529dfdd0dd70c6632d4bae8961ccfc4bb10f19..dcd5ad62ace3b3fc3a259ee84c7cfbb704d5be31 100644 (file)
@@ -2,6 +2,4 @@ package com.irtimaled.bbor.common;
 
 public class Dimensions {
     public static final int OVERWORLD = 0;
-    public static final int NETHER = -1;
-    public static final int THE_END = 1;
 }
diff --git a/src/main/java/com/irtimaled/bbor/common/chunkProcessors/AbstractChunkProcessor.java b/src/main/java/com/irtimaled/bbor/common/chunkProcessors/AbstractChunkProcessor.java
deleted file mode 100644 (file)
index ca6ac92..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.irtimaled.bbor.common.chunkProcessors;
-
-import com.irtimaled.bbor.common.BoundingBoxCache;
-import com.irtimaled.bbor.common.BoundingBoxType;
-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.BoundingBoxMobSpawner;
-import com.irtimaled.bbor.common.models.Coords;
-import net.minecraft.tileentity.TileEntity;
-import net.minecraft.tileentity.TileEntityMobSpawner;
-import net.minecraft.util.math.MutableBoundingBox;
-import net.minecraft.world.chunk.Chunk;
-import net.minecraft.world.gen.feature.structure.StructurePiece;
-import net.minecraft.world.gen.feature.structure.StructureStart;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-public abstract class AbstractChunkProcessor {
-    Set<BoundingBoxType> supportedStructures = new HashSet<>();
-
-    AbstractChunkProcessor(BoundingBoxCache boundingBoxCache) {
-        this.boundingBoxCache = boundingBoxCache;
-    }
-
-    private final BoundingBoxCache boundingBoxCache;
-
-    private void addStructures(BoundingBoxType type, Map<String, StructureStart> structureMap) {
-        StructureStart structureStart = structureMap.get(type.getName());
-        if (structureStart == null) return;
-
-        MutableBoundingBox bb = structureStart.getBoundingBox();
-        if (bb == null) return;
-
-        AbstractBoundingBox boundingBox = buildStructure(bb, type);
-        if (boundingBoxCache.isCached(boundingBox)) return;
-
-        Set<AbstractBoundingBox> structureBoundingBoxes = new HashSet<>();
-        for (StructurePiece structureComponent : structureStart.getComponents()) {
-            structureBoundingBoxes.add(buildStructure(structureComponent.getBoundingBox(), type));
-        }
-        boundingBoxCache.addBoundingBoxes(boundingBox, structureBoundingBoxes);
-    }
-
-    private AbstractBoundingBox buildStructure(MutableBoundingBox bb, BoundingBoxType type) {
-        Coords min = new Coords(bb.minX, bb.minY, bb.minZ);
-        Coords max = new Coords(bb.maxX, bb.maxY, bb.maxZ);
-        return BoundingBoxCuboid.from(min, max, type);
-    }
-
-    private void addMobSpawners(Chunk chunk) {
-        Collection<TileEntity> tileEntities = chunk.getTileEntityMap().values();
-        for (TileEntity tileEntity : tileEntities) {
-            TileEntityMobSpawner spawner = TypeHelper.as(tileEntity, TileEntityMobSpawner.class);
-            if (spawner != null) {
-                Coords coords = new Coords(spawner.getPos());
-                boundingBoxCache.addBoundingBox(BoundingBoxMobSpawner.from(coords));
-            }
-        }
-    }
-
-    public void process(Chunk chunk) {
-        Map<String, StructureStart> structureMap = chunk.getStructureStarts();
-        if (structureMap.size() > 0) {
-            supportedStructures.forEach(type -> addStructures(type, structureMap));
-        }
-        addMobSpawners(chunk);
-    }
-}
diff --git a/src/main/java/com/irtimaled/bbor/common/chunkProcessors/EndChunkProcessor.java b/src/main/java/com/irtimaled/bbor/common/chunkProcessors/EndChunkProcessor.java
deleted file mode 100644 (file)
index b46824f..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.irtimaled.bbor.common.chunkProcessors;
-
-import com.irtimaled.bbor.common.BoundingBoxCache;
-import com.irtimaled.bbor.common.BoundingBoxType;
-
-public class EndChunkProcessor extends AbstractChunkProcessor {
-    public EndChunkProcessor(BoundingBoxCache boundingBoxCache) {
-        super(boundingBoxCache);
-        supportedStructures.add(BoundingBoxType.EndCity);
-    }
-}
diff --git a/src/main/java/com/irtimaled/bbor/common/chunkProcessors/NetherChunkProcessor.java b/src/main/java/com/irtimaled/bbor/common/chunkProcessors/NetherChunkProcessor.java
deleted file mode 100644 (file)
index 79e9607..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.irtimaled.bbor.common.chunkProcessors;
-
-import com.irtimaled.bbor.common.BoundingBoxCache;
-import com.irtimaled.bbor.common.BoundingBoxType;
-
-public class NetherChunkProcessor extends AbstractChunkProcessor {
-    public NetherChunkProcessor(BoundingBoxCache boundingBoxCache) {
-        super(boundingBoxCache);
-        supportedStructures.add(BoundingBoxType.NetherFortress);
-    }
-}
diff --git a/src/main/java/com/irtimaled/bbor/common/chunkProcessors/OverworldChunkProcessor.java b/src/main/java/com/irtimaled/bbor/common/chunkProcessors/OverworldChunkProcessor.java
deleted file mode 100644 (file)
index 6ccac7e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.irtimaled.bbor.common.chunkProcessors;
-
-import com.irtimaled.bbor.common.BoundingBoxCache;
-import com.irtimaled.bbor.common.BoundingBoxType;
-
-public class OverworldChunkProcessor extends AbstractChunkProcessor {
-    public OverworldChunkProcessor(BoundingBoxCache boundingBoxCache) {
-        super(boundingBoxCache);
-        supportedStructures.add(BoundingBoxType.Village);
-        supportedStructures.add(BoundingBoxType.DesertTemple);
-        supportedStructures.add(BoundingBoxType.JungleTemple);
-        supportedStructures.add(BoundingBoxType.WitchHut);
-        supportedStructures.add(BoundingBoxType.OceanMonument);
-        supportedStructures.add(BoundingBoxType.Stronghold);
-        supportedStructures.add(BoundingBoxType.Mansion);
-        supportedStructures.add(BoundingBoxType.MineShaft);
-        supportedStructures.add(BoundingBoxType.Shipwreck);
-        supportedStructures.add(BoundingBoxType.OceanRuin);
-        supportedStructures.add(BoundingBoxType.BuriedTreasure);
-        supportedStructures.add(BoundingBoxType.Igloo);
-        supportedStructures.add(BoundingBoxType.PillagerOutpost);
-    }
-}