Minecraft.getMinecraft().gameSettings.keyBindings = ArrayUtils.addAll(Minecraft.getMinecraft().gameSettings.keyBindings, activeHotKey, outerBoxOnlyHotKey);
}
- @Override
- public void setWorldData(WorldData worldData) {
- worldSpawnBoundingBox = null;
- spawnChunksBoundingBox = null;
- lazySpawnChunksBoundingBox = null;
- super.setWorldData(worldData);
- }
-
public void render(float partialTicks) {
EntityPlayer entityPlayer = Minecraft.getMinecraft().player;
PlayerData.setPlayerPosition(partialTicks, entityPlayer);
if (this.active) {
DimensionType dimensionType = DimensionType.getById(entityPlayer.dimension);
Map<BoundingBox, Set<BoundingBox>> boundingBoxes = null;
- if (boundingBoxCacheMap.containsKey(dimensionType)) {
- boundingBoxes = boundingBoxCacheMap.get(dimensionType).getBoundingBoxes();
+ BoundingBoxCache boundingBoxCache = dimensionCache.getBoundingBoxes(dimensionType);
+ if (boundingBoxCache != null) {
+ boundingBoxes = boundingBoxCache.getBoundingBoxes();
}
renderBoundingBoxes(boundingBoxes, getClientBoundingBoxes(dimensionType));
}
loadVillageNbtFile(localStructuresFolder, cache, "Villages.dat");
}
- boundingBoxCacheMap.put(DimensionType.OVERWORLD, cache);
+ dimensionCache.put(DimensionType.OVERWORLD, cache);
}
private void loadNetherStructures(File localStructuresFolder) {
if (ConfigManager.drawVillages.getBoolean()) {
loadVillageNbtFile(localStructuresFolder, cache, "villages_nether.dat");
}
- boundingBoxCacheMap.put(DimensionType.NETHER, cache);
+ dimensionCache.put(DimensionType.NETHER, cache);
}
private void loadEndStructures(File localStructuresFolder) {
if (ConfigManager.drawEndCities.getBoolean()) {
loadStructureNbtFile(localStructuresFolder, cache, "EndCity.dat", StructureType.EndCity.getColor(), "*");
}
- boundingBoxCacheMap.put(DimensionType.THE_END, cache);
+ dimensionCache.put(DimensionType.THE_END, cache);
}
private void loadVillageNbtFile(File localStructuresFolder, BoundingBoxCache cache, String fileName) {
long seed = data.getLong("RandomSeed");
int spawnX = data.getInteger("SpawnX");
int spawnZ = data.getInteger("SpawnZ");
- setWorldData(new WorldData(seed, spawnX, spawnZ));
- Logger.info("Loaded level.dat (seed: %d, spawn: %d,%d)", worldData.getSeed(), worldData.getSpawnX(), worldData.getSpawnZ());
+ dimensionCache.setWorldData(seed, spawnX, spawnZ);
+ Logger.info("Loaded level.dat (seed: %d, spawn: %d,%d)", seed, spawnX, spawnZ);
}
private NBTTagCompound loadNbtFile(File file) {
public void playerDisconnectedFromServer() {
active = false;
if (ConfigManager.keepCacheBetweenSessions.getBoolean()) return;
- worldData = null;
worldSpawnBoundingBox = null;
spawnChunksBoundingBox = null;
- for (BoundingBoxCache cache : boundingBoxCacheMap.values()) {
- cache.close();
- }
- boundingBoxCacheMap.clear();
+ lazySpawnChunksBoundingBox = null;
+ dimensionCache.clear();
}
private void renderBoundingBoxes(Map<BoundingBox, Set<BoundingBox>> map, Set<BoundingBox> clientBoundingBoxes) {
}
private Set<BoundingBox> getClientBoundingBoxes(DimensionType dimensionType) {
+ WorldData worldData = dimensionCache.getWorldData();
if (worldData == null || dimensionType != DimensionType.OVERWORLD) {
return null;
}
}
private boolean isSlimeChunk(int chunkX, int chunkZ) {
+ WorldData worldData = dimensionCache.getWorldData();
Random r = new Random(worldData.getSeed() +
(long) (chunkX * chunkX * 4987142) +
(long) (chunkX * 5947611) +
import com.irtimaled.bbor.Logger;
import com.irtimaled.bbor.ReflectionHelper;
-import com.irtimaled.bbor.common.models.WorldData;
-import com.irtimaled.bbor.config.ConfigManager;
import net.minecraft.world.DimensionType;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.gen.ChunkProviderServer;
import net.minecraft.world.gen.IChunkGenerator;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
public class CommonProxy {
- public Map<DimensionType, BoundingBoxCache> boundingBoxCacheMap = new ConcurrentHashMap<>();
+ protected DimensionCache dimensionCache = new DimensionCache();
- protected WorldData worldData;
private IEventHandler eventHandler = null;
- public void init() {
- }
-
public void worldLoaded(World world) {
IChunkProvider chunkProvider = world.getChunkProvider();
if (chunkProvider instanceof ChunkProviderServer) {
IChunkGenerator chunkGenerator = ReflectionHelper.getPrivateValue(ChunkProviderServer.class, (ChunkProviderServer) chunkProvider, IChunkGenerator.class);
- setWorldData(new WorldData(world.getSeed(), world.getWorldInfo().getSpawnX(), world.getWorldInfo().getSpawnZ()));
+ dimensionCache.setWorldData(world.getSeed(), world.getWorldInfo().getSpawnX(), world.getWorldInfo().getSpawnZ());
DimensionType dimensionType = world.provider.getDimensionType();
- Logger.info("create world dimension: %s, %s (chunkprovider: %s) (seed: %d)", dimensionType, world.getClass().toString(), chunkGenerator.getClass().toString(), worldData.getSeed());
- boundingBoxCacheMap.put(dimensionType, new DimensionProcessor(eventHandler, world, dimensionType, chunkGenerator));
+ Logger.info("create world dimension: %s, %s (chunkprovider: %s) (seed: %d)", dimensionType, world.getClass().toString(), chunkGenerator.getClass().toString(), world.getSeed());
+ DimensionProcessor boundingBoxCache = new DimensionProcessor(eventHandler, world, dimensionType, chunkGenerator);
+ dimensionCache.put(dimensionType, boundingBoxCache);
}
}
public void chunkLoaded(Chunk chunk) {
DimensionType dimensionType = chunk.getWorld().provider.getDimensionType();
- if (boundingBoxCacheMap.containsKey(dimensionType)) {
- boundingBoxCacheMap.get(dimensionType).refresh();
- }
+ dimensionCache.refresh(dimensionType);
}
- public WorldData getWorldData() {
- return worldData;
- }
-
- public void setWorldData(WorldData worldData) {
- this.worldData = worldData;
+ public void init() {
}
public void setEventHandler(IEventHandler eventHandler) {
this.eventHandler = eventHandler;
}
+
+ public DimensionCache getDimensionCache() {
+ return dimensionCache;
+ }
}
--- /dev/null
+package com.irtimaled.bbor.common;
+
+import com.irtimaled.bbor.common.models.WorldData;
+import net.minecraft.world.DimensionType;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class DimensionCache {
+ private final Map<DimensionType, BoundingBoxCache> map = new ConcurrentHashMap<>();
+ private WorldData worldData;
+
+ void refresh(DimensionType dimensionType) {
+ if (map.containsKey(dimensionType)) {
+ map.get(dimensionType).refresh();
+ }
+ }
+
+ public void put(DimensionType dimensionType, BoundingBoxCache boundingBoxCache) {
+ map.put(dimensionType, boundingBoxCache);
+ }
+
+ public BoundingBoxCache getBoundingBoxes(DimensionType dimensionType) {
+ return map.get(dimensionType);
+ }
+
+ public void clear() {
+ worldData = null;
+ for (BoundingBoxCache cache : map.values()) {
+ cache.close();
+ }
+ map.clear();
+ }
+
+ public void setWorldData(long seed, int spawnX, int spawnZ) {
+ this.worldData = new WorldData(seed, spawnX, spawnZ);
+ }
+
+ public WorldData getWorldData() {
+ return worldData;
+ }
+}
import com.irtimaled.bbor.Logger;
import com.irtimaled.bbor.common.BoundingBoxCache;
import com.irtimaled.bbor.common.CommonProxy;
+import com.irtimaled.bbor.common.DimensionCache;
import com.irtimaled.bbor.common.IEventHandler;
import com.irtimaled.bbor.common.models.BoundingBox;
import com.irtimaled.bbor.common.models.WorldData;
DimensionType dimensionType = DimensionType.getById(player.dimension);
playerDimensions.put(player, dimensionType);
- sendToPlayer(player, getProxy().boundingBoxCacheMap.get(dimensionType));
+ sendToPlayer(player, getDimensionCache().getBoundingBoxes(dimensionType));
}
}
initializeClient(player);
DimensionType dimensionType = DimensionType.getById(player.dimension);
playerDimensions.put(player, dimensionType);
- sendToPlayer(player, getProxy().boundingBoxCacheMap.get(dimensionType));
+ sendToPlayer(player, getDimensionCache().getBoundingBoxes(dimensionType));
}
}
playerDimensions.remove(player);
} else {
DimensionType dimensionType = playerDimensions.get(player);
- if (getProxy().boundingBoxCacheMap.containsKey(dimensionType)) {
- sendToPlayer(player, getProxy().boundingBoxCacheMap.get(dimensionType));
- }
+ sendToPlayer(player, getDimensionCache().getBoundingBoxes(dimensionType));
}
}
}
private void initializeClient(EntityPlayerMP player) {
- network.sendTo(InitializeClientMessage.from(getProxy().getWorldData()), player);
+ network.sendTo(InitializeClientMessage.from(getDimensionCache().getWorldData()), player);
}
private void sendToPlayer(EntityPlayerMP player, BoundingBoxCache boundingBoxCache) {
}
public void setWorldData(WorldData worldData) {
- getProxy().setWorldData(worldData);
+ getDimensionCache().setWorldData(worldData.getSeed(), worldData.getSpawnX(), worldData.getSpawnZ());
}
public void addBoundingBox(DimensionType dimensionType, BoundingBox key, Set<BoundingBox> boundingBoxes) {
- Map<DimensionType, BoundingBoxCache> boundingBoxCacheMap = getProxy().boundingBoxCacheMap;
- if (!boundingBoxCacheMap.containsKey(dimensionType)) {
- boundingBoxCacheMap.put(dimensionType, new BoundingBoxCache());
+ DimensionCache dimensionCache = getDimensionCache();
+ BoundingBoxCache cache = dimensionCache.getBoundingBoxes(dimensionType);
+ if (cache == null) {
+ dimensionCache.put(dimensionType, cache = new BoundingBoxCache());
}
-
- boundingBoxCacheMap.get(dimensionType).addBoundingBoxes(key, boundingBoxes);
+ cache.addBoundingBoxes(key, boundingBoxes);
}
public void removeBoundingBox(DimensionType dimensionType, BoundingBox key) {
- Map<DimensionType, BoundingBoxCache> boundingBoxCacheMap = getProxy().boundingBoxCacheMap;
-
- if (boundingBoxCacheMap.containsKey(dimensionType)) {
- boundingBoxCacheMap.get(dimensionType).removeBoundingBox(key);
+ BoundingBoxCache cache = getDimensionCache().getBoundingBoxes(dimensionType);
+ if (cache != null) {
+ cache.removeBoundingBox(key);
}
}
+
+ private DimensionCache getDimensionCache() {
+ return getProxy().getDimensionCache();
+ }
}