1 package com.irtimaled.bbor.client;
3 import com.irtimaled.bbor.client.events.*;
4 import com.irtimaled.bbor.client.gui.LoadSavesScreen;
5 import com.irtimaled.bbor.client.gui.SettingsScreen;
6 import com.irtimaled.bbor.client.keyboard.Key;
7 import com.irtimaled.bbor.client.keyboard.KeyListener;
8 import com.irtimaled.bbor.client.providers.*;
9 import com.irtimaled.bbor.common.BoundingBoxCache;
10 import com.irtimaled.bbor.common.CommonProxy;
11 import com.irtimaled.bbor.common.EventBus;
12 import com.irtimaled.bbor.common.VillageColorCache;
13 import com.irtimaled.bbor.config.ConfigManager;
15 public class ClientProxy extends CommonProxy {
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);
30 EventBus.subscribe(DisconnectedFromRemoteServer.class, e -> disconnectedFromServer());
31 EventBus.subscribe(InitializeClientReceived.class, this::onInitializeClientReceived);
32 EventBus.subscribe(AddBoundingBoxReceived.class, this::addBoundingBox);
33 EventBus.subscribe(RemoveBoundingBoxReceived.class, this::onRemoveBoundingBoxReceived);
34 EventBus.subscribe(UpdateWorldSpawnReceived.class, this::onUpdateWorldSpawnReceived);
35 EventBus.subscribe(SaveLoaded.class, e -> clear());
37 ClientRenderer.registerProvider(new CacheProvider(this::getCache));
42 private void disconnectedFromServer() {
43 ClientRenderer.deactivate();
44 if (ConfigManager.keepCacheBetweenSessions.get()) return;
48 private void clear() {
49 SlimeChunkProvider.clear();
50 WorldSpawnProvider.clear();
51 SpawningSphereProvider.clear();
52 CustomBeaconProvider.clear();
53 CustomBoxProvider.clear();
54 BiomeBorderProvider.clear();
55 VillageColorCache.clear();
59 private void addBoundingBox(AddBoundingBoxReceived event) {
60 BoundingBoxCache cache = getOrCreateCache(event.getDimensionId());
61 if (cache == null) return;
63 cache.addBoundingBoxes(event.getKey(), event.getBoundingBoxes());
66 private void onRemoveBoundingBoxReceived(RemoveBoundingBoxReceived event) {
67 super.removeBoundingBox(event.getDimensionId(), event.getKey());
70 private void onInitializeClientReceived(InitializeClientReceived event) {
71 setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
72 setSeed(event.getSeed());
75 private void onUpdateWorldSpawnReceived(UpdateWorldSpawnReceived event) {
76 setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
80 protected void setSeed(long seed) {
82 SlimeChunkProvider.setSeed(seed);
86 protected void setWorldSpawn(int spawnX, int spawnZ) {
87 super.setWorldSpawn(spawnX, spawnZ);
88 WorldSpawnProvider.setWorldSpawn(spawnX, spawnZ);