]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/common/DimensionProcessor.java
Switch to using EventBus instead of static class
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / common / DimensionProcessor.java
1 package com.irtimaled.bbor.common;
2
3 import com.irtimaled.bbor.Logger;
4 import com.irtimaled.bbor.common.models.BoundingBox;
5 import com.irtimaled.bbor.common.models.BoundingBoxMobSpawner;
6 import com.irtimaled.bbor.common.models.BoundingBoxStructure;
7 import com.irtimaled.bbor.config.ConfigManager;
8 import com.irtimaled.bbor.config.Setting;
9 import net.minecraft.tileentity.TileEntity;
10 import net.minecraft.tileentity.TileEntityMobSpawner;
11 import net.minecraft.util.math.MutableBoundingBox;
12 import net.minecraft.world.chunk.Chunk;
13 import net.minecraft.world.dimension.DimensionType;
14 import net.minecraft.world.gen.feature.structure.StructurePiece;
15 import net.minecraft.world.gen.feature.structure.StructureStart;
16
17 import java.awt.*;
18 import java.util.Collection;
19 import java.util.HashSet;
20 import java.util.Map;
21 import java.util.Set;
22
23 public class DimensionProcessor extends BoundingBoxCache {
24     DimensionProcessor(DimensionType dimensionType) {
25         this.dimensionType = dimensionType;
26     }
27
28     private DimensionType dimensionType;
29
30     private boolean closed = false;
31
32     @Override
33     public void close() {
34         closed = true;
35         super.close();
36     }
37
38     private void addStructures(Setting drawStructure, StructureType structureType, Map<String, StructureStart> structureMap) {
39         if (!drawStructure.getBoolean()) return;
40
41         StructureStart structureStart = structureMap.get(structureType.getName());
42         if (structureStart == null) return;
43         Color color = structureType.getColor();
44         MutableBoundingBox bb = structureStart.getBoundingBox();
45         if (bb == null)
46             return;
47
48         BoundingBox boundingBox = BoundingBoxStructure.from(bb, color);
49         if (isCached(boundingBox)) return;
50
51         Set<BoundingBox> structureBoundingBoxes = new HashSet<>();
52         for (StructurePiece structureComponent : structureStart.getComponents()) {
53             structureBoundingBoxes.add(BoundingBoxStructure.from(structureComponent.getBoundingBox(), color));
54         }
55         addBoundingBoxes(boundingBox, structureBoundingBoxes);
56         Logger.info("[%s] new dimensionCache entries: %d", dimensionType, structureBoundingBoxes.size());
57     }
58
59     public synchronized void processChunk(Chunk chunk) {
60         if (closed) return;
61
62         Map<String, StructureStart> structureMap = chunk.getStructureStarts();
63         if (structureMap.size() > 0) {
64             addStructures(ConfigManager.drawDesertTemples, StructureType.DesertTemple, structureMap);
65             addStructures(ConfigManager.drawJungleTemples, StructureType.JungleTemple, structureMap);
66             addStructures(ConfigManager.drawWitchHuts, StructureType.WitchHut, structureMap);
67             addStructures(ConfigManager.drawOceanMonuments, StructureType.OceanMonument, structureMap);
68             addStructures(ConfigManager.drawStrongholds, StructureType.Stronghold, structureMap);
69             addStructures(ConfigManager.drawMansions, StructureType.Mansion, structureMap);
70             addStructures(ConfigManager.drawMineShafts, StructureType.MineShaft, structureMap);
71             addStructures(ConfigManager.drawShipwrecks, StructureType.Shipwreck, structureMap);
72             addStructures(ConfigManager.drawOceanRuins, StructureType.OceanRuin, structureMap);
73             addStructures(ConfigManager.drawBuriedTreasure, StructureType.BuriedTreasure, structureMap);
74             addStructures(ConfigManager.drawIgloos, StructureType.Igloo, structureMap);
75             addStructures(ConfigManager.drawNetherFortresses, StructureType.NetherFortress, structureMap);
76             addStructures(ConfigManager.drawEndCities, StructureType.EndCity, structureMap);
77             addStructures(ConfigManager.drawPillagerOutposts, StructureType.PillagerOutpost, structureMap);
78         }
79         if(ConfigManager.drawMobSpawners.getBoolean()) {
80             Collection<TileEntity> tileEntities = chunk.getTileEntityMap().values();
81             for (TileEntity tileEntity : tileEntities) {
82                 if (tileEntity instanceof TileEntityMobSpawner) {
83                     addBoundingBox(BoundingBoxMobSpawner.from(tileEntity.getPos()));
84                 }
85             }
86         }
87     }
88 }