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.KeyListener;
6 import com.irtimaled.bbor.common.BoundingBoxType;
7 import com.irtimaled.bbor.common.CommonProxy;
8 import com.irtimaled.bbor.common.EventBus;
9 import com.irtimaled.bbor.common.VillageColorCache;
10 import com.irtimaled.bbor.common.models.BoundingBox;
11 import com.irtimaled.bbor.common.models.BoundingBoxWorldSpawn;
12 import com.irtimaled.bbor.config.ConfigManager;
13 import com.irtimaled.bbor.config.Setting;
14 import net.minecraft.client.Minecraft;
15 import net.minecraft.entity.player.EntityPlayer;
16 import net.minecraft.network.NetworkManager;
17 import net.minecraft.util.math.BlockPos;
18 import net.minecraft.world.dimension.DimensionType;
20 import java.net.InetSocketAddress;
21 import java.net.SocketAddress;
23 import static com.irtimaled.bbor.client.Constants.CHUNK_SIZE;
25 public class ClientProxy extends CommonProxy {
26 public static final String Name = "Bounding Box Outline Reloaded";
27 public static boolean active;
30 KeyListener.register("Toggle Active", 0x42, Name)
31 .onKeyPressHandler(ClientProxy::toggleActive)
32 .onLongKeyPressHandler(60, SettingsScreen::show);
33 KeyListener.register("Toggle Outer Box Only", 0x4f, Name)
34 .onKeyPressHandler(ClientProxy::toggleOuterBoxesOnly);
37 public static void toggleActive() {
40 PlayerData.setActiveY();
43 private static void toggleOuterBoxesOnly() {
44 Setting<Boolean> outerBoxesOnly = ConfigManager.outerBoxesOnly;
45 outerBoxesOnly.set(!outerBoxesOnly.get());
48 private ClientRenderer renderer;
53 EventBus.subscribe(Render.class, e -> render(e.getPartialTicks()));
54 EventBus.subscribe(ConnectedToRemoteServer.class, e -> connectedToServer(e.getNetworkManager()));
55 EventBus.subscribe(DisconnectedFromRemoteServer.class, e -> disconnectedFromServer());
56 EventBus.subscribe(InitializeClientReceived.class, e -> setWorldData(e.getSeed(), e.getSpawnX(), e.getSpawnZ()));
57 EventBus.subscribe(AddBoundingBoxReceived.class, e -> runOnCache(e.getDimensionType(), cache -> cache.addBoundingBoxes(e.getKey(), e.getBoundingBoxes())));
58 EventBus.subscribe(RemoveBoundingBoxReceived.class, e -> removeBoundingBox(e.getDimensionType(), e.getKey()));
60 renderer = new ClientRenderer(this::getCache);
64 private void render(float partialTicks) {
65 EntityPlayer entityPlayer = Minecraft.getInstance().player;
66 PlayerData.setPlayerPosition(partialTicks, entityPlayer);
69 renderer.render(DimensionType.getById(entityPlayer.dimension), ConfigManager.outerBoxesOnly.get());
73 private void connectedToServer(NetworkManager networkManager) {
74 SocketAddress remoteAddress = networkManager.getRemoteAddress();
75 if (remoteAddress instanceof InetSocketAddress) {
76 InetSocketAddress socketAddress = (InetSocketAddress) remoteAddress;
77 NBTFileParser.loadLocalDatFiles(socketAddress.getHostName(), socketAddress.getPort(), this::setWorldData, this::getOrCreateCache);
81 private void disconnectedFromServer() {
83 if (ConfigManager.keepCacheBetweenSessions.get()) return;
84 VillageColorCache.clear();
89 protected void setWorldData(long seed, int spawnX, int spawnZ) {
90 super.setWorldData(seed, spawnX, spawnZ);
91 renderer.setWorldData(seed, spawnX, spawnZ);