package com.irtimaled.bbor.client;
+import com.irtimaled.bbor.client.config.ConfigManager;
import com.irtimaled.bbor.client.events.*;
+import com.irtimaled.bbor.client.gui.LoadSavesScreen;
import com.irtimaled.bbor.client.gui.SettingsScreen;
+import com.irtimaled.bbor.client.keyboard.Key;
import com.irtimaled.bbor.client.keyboard.KeyListener;
+import com.irtimaled.bbor.client.providers.*;
+import com.irtimaled.bbor.common.BoundingBoxCache;
import com.irtimaled.bbor.common.CommonProxy;
import com.irtimaled.bbor.common.EventBus;
import com.irtimaled.bbor.common.VillageColorCache;
-import com.irtimaled.bbor.config.ConfigManager;
-import com.irtimaled.bbor.config.Setting;
-
-import java.net.InetSocketAddress;
public class ClientProxy extends CommonProxy {
- public static final String Name = "Bounding Box Outline Reloaded";
- public static boolean active;
-
static {
- KeyListener.register("Toggle Active", 0x42, Name)
- .onKeyPressHandler(ClientProxy::toggleActive)
- .onLongKeyPressHandler(60, SettingsScreen::show);
- KeyListener.register("Toggle Outer Box Only", 0x4f, Name)
- .onKeyPressHandler(ClientProxy::toggleOuterBoxesOnly);
- }
-
- public static void toggleActive() {
- active = !active;
- if (active)
- PlayerCoords.setActiveY();
+ Key mainKey = KeyListener.register("bbor.key.toggleActive", "key.keyboard.b")
+ .onKeyPressHandler(ClientRenderer::toggleActive);
+ mainKey.register("key.keyboard.g")
+ .onKeyPressHandler(SettingsScreen::show);
+ mainKey.register("key.keyboard.o")
+ .onKeyPressHandler(() -> ConfigManager.Toggle(ConfigManager.outerBoxesOnly));
+ mainKey.register("key.keyboard.l")
+ .onKeyPressHandler(LoadSavesScreen::show);
}
- private static void toggleOuterBoxesOnly() {
- Setting<Boolean> outerBoxesOnly = ConfigManager.outerBoxesOnly;
- outerBoxesOnly.set(!outerBoxesOnly.get());
+ public ClientProxy() {
+ ConfigManager.loadConfig();
}
- private ClientRenderer renderer;
-
@Override
public void init() {
super.init();
- EventBus.subscribe(Render.class, e -> render(e.getDimensionId()));
- EventBus.subscribe(ConnectedToRemoteServer.class, e -> connectedToServer(e.getInternetAddress()));
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()));
-
- renderer = new ClientRenderer(this::getCache);
- KeyListener.init();
- }
+ EventBus.subscribe(InitializeClientReceived.class, this::onInitializeClientReceived);
+ EventBus.subscribe(AddBoundingBoxReceived.class, this::addBoundingBox);
+ EventBus.subscribe(RemoveBoundingBoxReceived.class, this::onRemoveBoundingBoxReceived);
+ EventBus.subscribe(UpdateWorldSpawnReceived.class, this::onUpdateWorldSpawnReceived);
+ EventBus.subscribe(SaveLoaded.class, e -> clear());
- private void render(int dimensionId) {
- if (active) {
- renderer.render(dimensionId, ConfigManager.outerBoxesOnly.get());
- }
- }
+ ClientRenderer.registerProvider(new CacheProvider(this::getCache));
- private void connectedToServer(InetSocketAddress internetAddress) {
- NBTFileParser.loadLocalDatFiles(internetAddress.getHostName(), internetAddress.getPort(), this::setWorldData, this::getOrCreateCache);
+ KeyListener.init();
}
private void disconnectedFromServer() {
- active = false;
+ ClientRenderer.deactivate();
if (ConfigManager.keepCacheBetweenSessions.get()) return;
+ clear();
+ }
+
+ private void clear() {
+ SlimeChunkProvider.clear();
+ WorldSpawnProvider.clear();
+ SpawningSphereProvider.clear();
+ CustomBeaconProvider.clear();
+ CustomBoxProvider.clear();
+ BiomeBorderProvider.clear();
VillageColorCache.clear();
clearCaches();
}
+ private void addBoundingBox(AddBoundingBoxReceived event) {
+ BoundingBoxCache cache = getOrCreateCache(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) {
+ setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
+ setSeed(event.getSeed());
+ }
+
+ private void onUpdateWorldSpawnReceived(UpdateWorldSpawnReceived event) {
+ setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
+ }
+
+ @Override
+ protected void setSeed(long seed) {
+ super.setSeed(seed);
+ SlimeChunkProvider.setSeed(seed);
+ }
+
@Override
- protected void setWorldData(long seed, int spawnX, int spawnZ) {
- super.setWorldData(seed, spawnX, spawnZ);
- renderer.setWorldData(seed, spawnX, spawnZ);
+ protected void setWorldSpawn(int spawnX, int spawnZ) {
+ super.setWorldSpawn(spawnX, spawnZ);
+ WorldSpawnProvider.setWorldSpawn(spawnX, spawnZ);
}
}