1 package com.irtimaled.bbor.common;
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;
18 import java.util.Collection;
19 import java.util.HashSet;
23 public class DimensionProcessor extends BoundingBoxCache {
24 DimensionProcessor(DimensionType dimensionType) {
25 this.dimensionType = dimensionType;
28 private DimensionType dimensionType;
30 private boolean closed = false;
38 private void addStructures(Setting drawStructure, StructureType structureType, Map<String, StructureStart> structureMap) {
39 if (!drawStructure.getBoolean()) return;
41 StructureStart structureStart = structureMap.get(structureType.getName());
42 if (structureStart == null) return;
43 Color color = structureType.getColor();
44 MutableBoundingBox bb = structureStart.getBoundingBox();
48 BoundingBox boundingBox = BoundingBoxStructure.from(bb, color);
49 if (isCached(boundingBox)) return;
51 Set<BoundingBox> structureBoundingBoxes = new HashSet<>();
52 for (StructurePiece structureComponent : structureStart.getComponents()) {
53 structureBoundingBoxes.add(BoundingBoxStructure.from(structureComponent.getBoundingBox(), color));
55 addBoundingBoxes(boundingBox, structureBoundingBoxes);
56 Logger.info("[%s] new dimensionCache entries: %d", dimensionType, structureBoundingBoxes.size());
59 public synchronized void processChunk(Chunk chunk) {
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);
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()));