1 package com.irtimaled.bbor.client;
3 import com.irtimaled.bbor.client.events.*;
4 import com.irtimaled.bbor.client.gui.SettingsScreen;
5 import com.irtimaled.bbor.client.keyboard.KeyListener;
6 import com.irtimaled.bbor.common.BoundingBoxCache;
7 import com.irtimaled.bbor.common.CommonProxy;
8 import com.irtimaled.bbor.common.EventBus;
9 import com.irtimaled.bbor.common.VillageColorCache;
10 import com.irtimaled.bbor.config.ConfigManager;
11 import com.irtimaled.bbor.config.Setting;
13 import java.net.InetSocketAddress;
15 public class ClientProxy extends CommonProxy {
16 public static final String Name = "Bounding Box Outline Reloaded";
17 public static boolean active;
20 KeyListener.register("Toggle Active", 0x42, Name)
21 .onKeyPressHandler(ClientProxy::toggleActive)
22 .onLongKeyPressHandler(60, SettingsScreen::show);
23 KeyListener.register("Toggle Outer Box Only", 0x4f, Name)
24 .onKeyPressHandler(ClientProxy::toggleOuterBoxesOnly);
27 private boolean ready;
29 public static void toggleActive() {
32 PlayerCoords.setActiveY();
35 private static void toggleOuterBoxesOnly() {
36 Setting<Boolean> outerBoxesOnly = ConfigManager.outerBoxesOnly;
37 outerBoxesOnly.set(!outerBoxesOnly.get());
40 private ClientRenderer renderer;
45 EventBus.subscribe(Render.class, this::render);
46 EventBus.subscribe(ConnectedToRemoteServer.class, this::connectedToServer);
47 EventBus.subscribe(DisconnectedFromRemoteServer.class, e -> disconnectedFromServer());
48 EventBus.subscribe(InitializeClientReceived.class, this::onInitializeClientReceived);
49 EventBus.subscribe(AddBoundingBoxReceived.class, this::addBoundingBox);
50 EventBus.subscribe(RemoveBoundingBoxReceived.class, this::onRemoveBoundingBoxReceived);
52 renderer = new ClientRenderer(this::getCache);
56 private void render(Render event) {
57 if (!active || !ready) return;
59 renderer.render(event.getDimensionId(), ConfigManager.outerBoxesOnly.get());
62 private void connectedToServer(ConnectedToRemoteServer event) {
63 InetSocketAddress internetAddress = event.getInternetAddress();
64 NBTFileParser.loadLocalDatFiles(internetAddress.getHostName(), internetAddress.getPort(), this::setWorldData, this::getOrCreateCache);
67 private void disconnectedFromServer() {
70 if (ConfigManager.keepCacheBetweenSessions.get()) return;
71 VillageColorCache.clear();
75 private void addBoundingBox(AddBoundingBoxReceived event) {
76 BoundingBoxCache cache = getCache(event.getDimensionId());
77 if (cache == null) return;
79 cache.addBoundingBoxes(event.getKey(), event.getBoundingBoxes());
82 private void onRemoveBoundingBoxReceived(RemoveBoundingBoxReceived event) {
83 super.removeBoundingBox(event.getDimensionId(), event.getKey());
86 private void onInitializeClientReceived(InitializeClientReceived event) {
87 long seed = event.getSeed();
88 int spawnX = event.getSpawnX();
89 int spawnZ = event.getSpawnZ();
90 setWorldData(seed, spawnX, spawnZ);
94 protected void setWorldData(long seed, int spawnX, int spawnZ) {
95 super.setWorldData(seed, spawnX, spawnZ);
96 renderer.setWorldData(seed, spawnX, spawnZ);