]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/ClientProxy.java
Add logic to load structures from save files
[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.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;
14
15 public class ClientProxy extends CommonProxy {
16     static {
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     @Override
28     public void init() {
29         super.init();
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());
36
37         ClientRenderer.registerProvider(new CacheProvider(this::getCache));
38
39         KeyListener.init();
40     }
41
42     private void disconnectedFromServer() {
43         ClientRenderer.deactivate();
44         if (ConfigManager.keepCacheBetweenSessions.get()) return;
45         clear();
46     }
47
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();
56         clearCaches();
57     }
58
59     private void addBoundingBox(AddBoundingBoxReceived event) {
60         BoundingBoxCache cache = getOrCreateCache(event.getDimensionId());
61         if (cache == null) return;
62
63         cache.addBoundingBoxes(event.getKey(), event.getBoundingBoxes());
64     }
65
66     private void onRemoveBoundingBoxReceived(RemoveBoundingBoxReceived event) {
67         super.removeBoundingBox(event.getDimensionId(), event.getKey());
68     }
69
70     private void onInitializeClientReceived(InitializeClientReceived event) {
71         setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
72         setSeed(event.getSeed());
73     }
74
75     private void onUpdateWorldSpawnReceived(UpdateWorldSpawnReceived event) {
76         setWorldSpawn(event.getSpawnX(), event.getSpawnZ());
77     }
78
79     @Override
80     protected void setSeed(long seed) {
81         super.setSeed(seed);
82         SlimeChunkProvider.setSeed(seed);
83     }
84
85     @Override
86     protected void setWorldSpawn(int spawnX, int spawnZ) {
87         super.setWorldSpawn(spawnX, spawnZ);
88         WorldSpawnProvider.setWorldSpawn(spawnX, spawnZ);
89     }
90 }