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.Key;
6 import com.irtimaled.bbor.client.keyboard.KeyListener;
7 import com.irtimaled.bbor.client.providers.*;
8 import com.irtimaled.bbor.common.BoundingBoxCache;
9 import com.irtimaled.bbor.common.CommonProxy;
10 import com.irtimaled.bbor.common.EventBus;
11 import com.irtimaled.bbor.common.VillageColorCache;
12 import com.irtimaled.bbor.config.ConfigManager;
14 public class ClientProxy extends CommonProxy {
16 Key mainKey = KeyListener.register("Toggle Active", "key.keyboard.b")
17 .onKeyPressHandler(ClientRenderer::toggleActive);
18 mainKey.register("key.keyboard.g")
19 .onKeyPressHandler(SettingsScreen::show);
20 mainKey.register("key.keyboard.o")
21 .onKeyPressHandler(() -> ConfigManager.Toggle(ConfigManager.outerBoxesOnly));
24 private ClientRenderer renderer;
29 EventBus.subscribe(Render.class, this::render);
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);
36 renderer = new ClientRenderer(this::getCache)
37 .registerProvider(new SlimeChunkProvider())
38 .registerProvider(new WorldSpawnProvider())
39 .registerProvider(new SpawningSphereProvider());
44 private void render(Render event) {
45 renderer.render(event.getDimensionId());
48 private void disconnectedFromServer() {
49 ClientRenderer.deactivate();
50 if (ConfigManager.keepCacheBetweenSessions.get()) return;
51 SlimeChunkProvider.clear();
52 WorldSpawnProvider.clear();
53 SpawningSphereProvider.clear();
54 VillageColorCache.clear();
58 private void addBoundingBox(AddBoundingBoxReceived event) {
59 BoundingBoxCache cache = getOrCreateCache(event.getDimensionId());
60 if (cache == null) return;
62 cache.addBoundingBoxes(event.getKey(), event.getBoundingBoxes());
65 private void onRemoveBoundingBoxReceived(RemoveBoundingBoxReceived event) {
66 super.removeBoundingBox(event.getDimensionId(), event.getKey());
69 private void onInitializeClientReceived(InitializeClientReceived event) {
70 setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
71 setSeed(event.getSeed());
74 private void onUpdateWorldSpawnReceived(UpdateWorldSpawnReceived event) {
75 setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
79 public void setSeed(long seed) {
81 SlimeChunkProvider.setSeed(seed);
85 protected void setWorldSpawn(int spawnX, int spawnZ) {
86 super.setWorldSpawn(spawnX, spawnZ);
87 WorldSpawnProvider.setWorldSpan(spawnX, spawnZ);