]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/ClientProxy.java
Ensure keys are registered before adding to controls list
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / ClientProxy.java
1 package com.irtimaled.bbor.client;
2
3 import com.irtimaled.bbor.client.config.ConfigManager;
4 import com.irtimaled.bbor.client.events.*;
5 import com.irtimaled.bbor.client.gui.LoadSavesScreen;
6 import com.irtimaled.bbor.client.gui.SettingsScreen;
7 import com.irtimaled.bbor.client.keyboard.Key;
8 import com.irtimaled.bbor.client.keyboard.KeyListener;
9 import com.irtimaled.bbor.client.providers.*;
10 import com.irtimaled.bbor.common.BoundingBoxCache;
11 import com.irtimaled.bbor.common.CommonProxy;
12 import com.irtimaled.bbor.common.EventBus;
13 import com.irtimaled.bbor.common.VillageColorCache;
14
15 public class ClientProxy extends CommonProxy {
16     public static void registerKeyBindings() {
17         Key mainKey = KeyListener.register("bbor.key.toggleActive", "key.keyboard.b")
18                 .onKeyPressHandler(ClientRenderer::toggleActive);
19         mainKey.register("key.keyboard.g")
20                 .onKeyPressHandler(SettingsScreen::show);
21         mainKey.register("key.keyboard.o")
22                 .onKeyPressHandler(() -> ConfigManager.Toggle(ConfigManager.outerBoxesOnly));
23         mainKey.register("key.keyboard.l")
24                 .onKeyPressHandler(LoadSavesScreen::show);
25     }
26
27     public ClientProxy() {
28         ConfigManager.loadConfig();
29     }
30
31     @Override
32     public void init() {
33         super.init();
34         EventBus.subscribe(DisconnectedFromRemoteServer.class, e -> disconnectedFromServer());
35         EventBus.subscribe(InitializeClientReceived.class, this::onInitializeClientReceived);
36         EventBus.subscribe(AddBoundingBoxReceived.class, this::addBoundingBox);
37         EventBus.subscribe(RemoveBoundingBoxReceived.class, this::onRemoveBoundingBoxReceived);
38         EventBus.subscribe(UpdateWorldSpawnReceived.class, this::onUpdateWorldSpawnReceived);
39         EventBus.subscribe(SaveLoaded.class, e -> clear());
40
41         ClientRenderer.registerProvider(new CacheProvider(this::getCache));
42
43         KeyListener.init();
44     }
45
46     private void disconnectedFromServer() {
47         ClientRenderer.deactivate();
48         if (ConfigManager.keepCacheBetweenSessions.get()) return;
49         clear();
50     }
51
52     private void clear() {
53         SlimeChunkProvider.clear();
54         WorldSpawnProvider.clear();
55         SpawningSphereProvider.clear();
56         CustomBeaconProvider.clear();
57         CustomBoxProvider.clear();
58         BiomeBorderProvider.clear();
59         VillageColorCache.clear();
60         clearCaches();
61     }
62
63     private void addBoundingBox(AddBoundingBoxReceived event) {
64         BoundingBoxCache cache = getOrCreateCache(event.getDimensionId());
65         if (cache == null) return;
66
67         cache.addBoundingBoxes(event.getKey(), event.getBoundingBoxes());
68     }
69
70     private void onRemoveBoundingBoxReceived(RemoveBoundingBoxReceived event) {
71         super.removeBoundingBox(event.getDimensionId(), event.getKey());
72     }
73
74     private void onInitializeClientReceived(InitializeClientReceived event) {
75         setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
76         setSeed(event.getSeed());
77     }
78
79     private void onUpdateWorldSpawnReceived(UpdateWorldSpawnReceived event) {
80         setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
81     }
82
83     @Override
84     protected void setSeed(long seed) {
85         super.setSeed(seed);
86         SlimeChunkProvider.setSeed(seed);
87     }
88
89     @Override
90     protected void setWorldSpawn(int spawnX, int spawnZ) {
91         super.setWorldSpawn(spawnX, spawnZ);
92         WorldSpawnProvider.setWorldSpawn(spawnX, spawnZ);
93     }
94 }