import com.irtimaled.bbor.client.events.*;
import com.irtimaled.bbor.client.gui.SettingsScreen;
import com.irtimaled.bbor.client.keyboard.KeyListener;
+import com.irtimaled.bbor.common.BoundingBoxCache;
import com.irtimaled.bbor.common.CommonProxy;
import com.irtimaled.bbor.common.EventBus;
import com.irtimaled.bbor.common.VillageColorCache;
@Override
public void init() {
super.init();
- EventBus.subscribe(Render.class, e -> render(e.getDimensionId()));
- EventBus.subscribe(ConnectedToRemoteServer.class, e -> connectedToServer(e.getInternetAddress()));
+ EventBus.subscribe(Render.class, this::render);
+ EventBus.subscribe(ConnectedToRemoteServer.class, this::connectedToServer);
EventBus.subscribe(DisconnectedFromRemoteServer.class, e -> disconnectedFromServer());
- EventBus.subscribe(InitializeClientReceived.class, e -> setWorldData(e.getSeed(), e.getSpawnX(), e.getSpawnZ()));
- EventBus.subscribe(AddBoundingBoxReceived.class, e -> addBoundingBox(e.getDimensionId(), e.getKey(), e.getBoundingBoxes()));
- EventBus.subscribe(RemoveBoundingBoxReceived.class, e -> removeBoundingBox(e.getDimensionId(), e.getKey()));
+ EventBus.subscribe(InitializeClientReceived.class, this::onInitializeClientReceived);
+ EventBus.subscribe(AddBoundingBoxReceived.class, this::addBoundingBox);
+ EventBus.subscribe(RemoveBoundingBoxReceived.class, this::onRemoveBoundingBoxReceived);
renderer = new ClientRenderer(this::getCache);
KeyListener.init();
}
}
- private void connectedToServer(InetSocketAddress internetAddress) {
+ private void connectedToServer(ConnectedToRemoteServer event) {
+ InetSocketAddress internetAddress = event.getInternetAddress();
NBTFileParser.loadLocalDatFiles(internetAddress.getHostName(), internetAddress.getPort(), this::setWorldData, this::getOrCreateCache);
}
clearCaches();
}
+ private void addBoundingBox(AddBoundingBoxReceived event) {
+ BoundingBoxCache cache = getCache(event.getDimensionId());
+ if (cache == null) return;
+
+ cache.addBoundingBoxes(event.getKey(), event.getBoundingBoxes());
+ }
+
+ private void onRemoveBoundingBoxReceived(RemoveBoundingBoxReceived event) {
+ super.removeBoundingBox(event.getDimensionId(), event.getKey());
+ }
+
+ private void onInitializeClientReceived(InitializeClientReceived event) {
+ long seed = event.getSeed();
+ int spawnX = event.getSpawnX();
+ int spawnZ = event.getSpawnZ();
+ setWorldData(seed, spawnX, spawnZ);
+ }
+
@Override
protected void setWorldData(long seed, int spawnX, int spawnZ) {
super.setWorldData(seed, spawnX, spawnZ);
import com.irtimaled.bbor.common.messages.InitializeClient;
import com.irtimaled.bbor.common.messages.PayloadBuilder;
import com.irtimaled.bbor.common.messages.RemoveBoundingBox;
-import com.irtimaled.bbor.common.models.*;
-import net.minecraft.world.WorldServer;
-import net.minecraft.world.chunk.Chunk;
+import com.irtimaled.bbor.common.models.AbstractBoundingBox;
+import com.irtimaled.bbor.common.models.BoundingBoxMobSpawner;
+import com.irtimaled.bbor.common.models.ServerPlayer;
+import com.irtimaled.bbor.common.models.WorldData;
import java.util.HashMap;
import java.util.HashSet;
private final Map<Integer, BoundingBoxCache> dimensionCache = new ConcurrentHashMap<>();
public void init() {
- EventBus.subscribe(WorldLoaded.class, e -> worldLoaded(e.getWorld()));
- EventBus.subscribe(ChunkLoaded.class, e -> chunkLoaded(e.getChunk()));
- EventBus.subscribe(MobSpawnerBroken.class, e -> mobSpawnerBroken(e.getDimensionId(), e.getPos()));
- EventBus.subscribe(PlayerLoggedIn.class, e -> playerLoggedIn(e.getPlayer()));
- EventBus.subscribe(PlayerLoggedOut.class, e -> playerLoggedOut(e.getPlayer()));
- EventBus.subscribe(PlayerSubscribed.class, e -> sendBoundingBoxes(e.getPlayer()));
- EventBus.subscribe(ServerWorldTick.class, e -> serverWorldTick(e.getWorld()));
+ EventBus.subscribe(WorldLoaded.class, this::worldLoaded);
+ EventBus.subscribe(ChunkLoaded.class, this::chunkLoaded);
+ EventBus.subscribe(MobSpawnerBroken.class, this::mobSpawnerBroken);
+ EventBus.subscribe(PlayerLoggedIn.class, this::playerLoggedIn);
+ EventBus.subscribe(PlayerLoggedOut.class, this::playerLoggedOut);
+ EventBus.subscribe(PlayerSubscribed.class, this::onPlayerSubscribed);
+ EventBus.subscribe(ServerWorldTick.class, this::serverWorldTick);
EventBus.subscribe(ServerTick.class, e -> serverTick());
- EventBus.subscribe(VillageRemoved.class, e -> sendRemoveBoundingBox(e.getDimensionId(), e.getVillage()));
+ EventBus.subscribe(VillageRemoved.class, this::onVillageRemoved);
}
protected void setWorldData(long seed, int spawnX, int spawnZ) {
worldData = new WorldData(seed, spawnX, spawnZ);
}
- private void worldLoaded(WorldServer world) {
- int dimensionId = world.dimension.getType().getId();
+ private void worldLoaded(WorldLoaded event) {
+ int dimensionId = event.getDimensionId();
+ long seed = event.getSeed();
BoundingBoxCache boundingBoxCache = getOrCreateCache(dimensionId);
AbstractChunkProcessor chunkProcessor = null;
- if (dimensionId == Dimensions.OVERWORLD) {
- setWorldData(world.getSeed(), world.getWorldInfo().getSpawnX(), world.getWorldInfo().getSpawnZ());
- chunkProcessor = new OverworldChunkProcessor(boundingBoxCache);
+ switch (dimensionId) {
+ case Dimensions.OVERWORLD:
+ setWorldData(seed, 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.NETHER) {
- chunkProcessor = new NetherChunkProcessor(boundingBoxCache);
- }
- if (dimensionId == Dimensions.THE_END) {
- chunkProcessor = new EndChunkProcessor(boundingBoxCache);
- }
- Logger.info("create world dimension: %s, %s (seed: %d)", dimensionId, world.getClass().toString(), world.getSeed());
+ Logger.info("create world dimension: %s (seed: %d)", dimensionId, seed);
chunkProcessors.put(dimensionId, chunkProcessor);
villageProcessors.put(dimensionId, new VillageProcessor(dimensionId, boundingBoxCache));
}
- private void chunkLoaded(Chunk chunk) {
- int dimensionId = chunk.getWorld().dimension.getType().getId();
- AbstractChunkProcessor chunkProcessor = chunkProcessors.get(dimensionId);
- if (chunkProcessor != null) {
- chunkProcessor.process(chunk);
- }
+ private void chunkLoaded(ChunkLoaded event) {
+ AbstractChunkProcessor chunkProcessor = chunkProcessors.get(event.getDimensionId());
+ if (chunkProcessor == null) return;
+
+ chunkProcessor.process(event.getChunk());
}
- private void playerLoggedIn(ServerPlayer player) {
+ private void playerLoggedIn(PlayerLoggedIn event) {
+ ServerPlayer player = event.getPlayer();
player.sendPacket(InitializeClient.getPayload(worldData));
}
- private void playerLoggedOut(ServerPlayer player) {
+ private void playerLoggedOut(PlayerLoggedOut event) {
+ ServerPlayer player = event.getPlayer();
players.remove(player);
playerBoundingBoxesCache.remove(player);
}
+ private void onVillageRemoved(VillageRemoved event) {
+ sendRemoveBoundingBox(event.getDimensionId(), event.getVillage());
+ }
+
private void sendRemoveBoundingBox(int dimensionId, AbstractBoundingBox boundingBox) {
PayloadBuilder payload = RemoveBoundingBox.getPayload(dimensionId, boundingBox);
if (payload == null) return;
}
}
- private void sendBoundingBoxes(ServerPlayer player) {
+ private void onPlayerSubscribed(PlayerSubscribed event) {
+ ServerPlayer player = event.getPlayer();
players.add(player);
sendToPlayer(player, getCache(player.getDimensionId()));
}
return cacheSubset;
}
- protected void addBoundingBox(int dimensionId, AbstractBoundingBox key, Set<AbstractBoundingBox> boundingBoxes) {
- BoundingBoxCache cache = getCache(dimensionId);
- if (cache == null) return;
-
- cache.addBoundingBoxes(key, boundingBoxes);
- }
-
protected void removeBoundingBox(int dimensionId, AbstractBoundingBox key) {
BoundingBoxCache cache = getCache(dimensionId);
if (cache == null) return;
cache.removeBoundingBox(key);
}
- private void mobSpawnerBroken(int dimensionId, Coords pos) {
- AbstractBoundingBox boundingBox = BoundingBoxMobSpawner.from(pos);
+ private void mobSpawnerBroken(MobSpawnerBroken event) {
+ int dimensionId = event.getDimensionId();
+ AbstractBoundingBox boundingBox = BoundingBoxMobSpawner.from(event.getPos());
removeBoundingBox(dimensionId, boundingBox);
sendRemoveBoundingBox(dimensionId, boundingBox);
}
}
}
- private void serverWorldTick(WorldServer world) {
- int dimensionId = world.dimension.getType().getId();
- VillageProcessor villageProcessor = villageProcessors.get(dimensionId);
+ private void serverWorldTick(ServerWorldTick event) {
+ VillageProcessor villageProcessor = villageProcessors.get(event.getDimensionId());
if (villageProcessor == null) return;
- villageProcessor.process(world.getVillageCollection());
+ villageProcessor.process(event.getWorld());
}
protected BoundingBoxCache getCache(int dimensionId) {