]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/ClientProxy.java
Add spawning spheres and spawnable spaces
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / ClientProxy.java
1 package com.irtimaled.bbor.client;
2
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;
13
14 public class ClientProxy extends CommonProxy {
15     static {
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));
22     }
23
24     private ClientRenderer renderer;
25
26     @Override
27     public void init() {
28         super.init();
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);
35
36         renderer = new ClientRenderer(this::getCache)
37                 .registerProvider(new SlimeChunkProvider())
38                 .registerProvider(new WorldSpawnProvider())
39                 .registerProvider(new SpawningSphereProvider());
40
41         KeyListener.init();
42     }
43
44     private void render(Render event) {
45         renderer.render(event.getDimensionId());
46     }
47
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();
55         clearCaches();
56     }
57
58     private void addBoundingBox(AddBoundingBoxReceived event) {
59         BoundingBoxCache cache = getOrCreateCache(event.getDimensionId());
60         if (cache == null) return;
61
62         cache.addBoundingBoxes(event.getKey(), event.getBoundingBoxes());
63     }
64
65     private void onRemoveBoundingBoxReceived(RemoveBoundingBoxReceived event) {
66         super.removeBoundingBox(event.getDimensionId(), event.getKey());
67     }
68
69     private void onInitializeClientReceived(InitializeClientReceived event) {
70         setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
71         setSeed(event.getSeed());
72     }
73
74     private void onUpdateWorldSpawnReceived(UpdateWorldSpawnReceived event) {
75         setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
76     }
77
78     @Override
79     public void setSeed(long seed) {
80         super.setSeed(seed);
81         SlimeChunkProvider.setSeed(seed);
82     }
83
84     @Override
85     protected void setWorldSpawn(int spawnX, int spawnZ) {
86         super.setWorldSpawn(spawnX, spawnZ);
87         WorldSpawnProvider.setWorldSpan(spawnX, spawnZ);
88     }
89 }