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 public class ClientProxy extends CommonProxy {
14 public static final String Name = "Bounding Box Outline Reloaded";
15 public static boolean active;
18 KeyListener.register("Toggle Active", 0x30, Name)
19 .onKeyPressHandler(ClientProxy::toggleActive)
20 .onLongKeyPressHandler(60, SettingsScreen::show);
21 KeyListener.register("Toggle Outer Box Only", 0x18, Name)
22 .onKeyPressHandler(ClientProxy::toggleOuterBoxesOnly);
25 private boolean ready;
27 public static void toggleActive() {
30 PlayerCoords.setActiveY();
33 private static void toggleOuterBoxesOnly() {
34 Setting<Boolean> outerBoxesOnly = ConfigManager.outerBoxesOnly;
35 outerBoxesOnly.set(!outerBoxesOnly.get());
38 private ClientRenderer renderer;
43 EventBus.subscribe(Render.class, this::render);
44 EventBus.subscribe(DisconnectedFromRemoteServer.class, e -> disconnectedFromServer());
45 EventBus.subscribe(InitializeClientReceived.class, this::onInitializeClientReceived);
46 EventBus.subscribe(AddBoundingBoxReceived.class, this::addBoundingBox);
47 EventBus.subscribe(RemoveBoundingBoxReceived.class, this::onRemoveBoundingBoxReceived);
48 EventBus.subscribe(UpdateWorldSpawnReceived.class, this::onUpdateWorldSpawnReceived);
49 EventBus.subscribe(SeedCommandTyped.class, this::onSeedCommandTyped);
51 renderer = new ClientRenderer(this::getCache);
54 private void render(Render event) {
55 if (!active || !ready) return;
57 renderer.render(event.getDimensionId(), ConfigManager.outerBoxesOnly.get());
60 private void disconnectedFromServer() {
62 if (ConfigManager.keepCacheBetweenSessions.get()) return;
64 VillageColorCache.clear();
69 private void addBoundingBox(AddBoundingBoxReceived event) {
70 BoundingBoxCache cache = getOrCreateCache(event.getDimensionId());
71 if (cache == null) return;
73 cache.addBoundingBoxes(event.getKey(), event.getBoundingBoxes());
76 private void onRemoveBoundingBoxReceived(RemoveBoundingBoxReceived event) {
77 super.removeBoundingBox(event.getDimensionId(), event.getKey());
80 private void onInitializeClientReceived(InitializeClientReceived event) {
81 setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
82 setSeed(event.getSeed());
85 private void onUpdateWorldSpawnReceived(UpdateWorldSpawnReceived event) {
86 setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
89 private void onSeedCommandTyped(SeedCommandTyped event) {
90 setSeed(event.getSeed());
94 public void setSeed(long seed) {
96 renderer.setSeed(seed);
101 protected void setWorldSpawn(int spawnX, int spawnZ) {
102 super.setWorldSpawn(spawnX, spawnZ);
103 renderer.setWorldSpawn(spawnX, spawnZ);