]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/common/interop/CommonInterop.java
Performance improvements
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / common / interop / CommonInterop.java
1 package com.irtimaled.bbor.common.interop;
2
3 import com.irtimaled.bbor.client.ClientRenderer;
4 import com.irtimaled.bbor.client.renderers.AbstractRenderer;
5 import com.irtimaled.bbor.common.EventBus;
6 import com.irtimaled.bbor.common.events.PlayerLoggedIn;
7 import com.irtimaled.bbor.common.events.PlayerLoggedOut;
8 import com.irtimaled.bbor.common.events.PlayerSubscribed;
9 import com.irtimaled.bbor.common.events.ServerTick;
10 import com.irtimaled.bbor.common.events.StructuresLoaded;
11 import com.irtimaled.bbor.common.events.WorldLoaded;
12 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
13 import com.irtimaled.bbor.common.models.DimensionId;
14 import com.irtimaled.bbor.common.models.ServerPlayer;
15 import net.fabricmc.api.EnvType;
16 import net.fabricmc.loader.api.FabricLoader;
17 import net.minecraft.network.ClientConnection;
18 import net.minecraft.server.network.ServerPlayNetworkHandler;
19 import net.minecraft.server.network.ServerPlayerEntity;
20 import net.minecraft.server.world.ServerWorld;
21 import net.minecraft.structure.StructureStart;
22 import net.minecraft.world.chunk.WorldChunk;
23
24 import java.util.Collection;
25 import java.util.HashMap;
26 import java.util.Map;
27 import java.util.function.Supplier;
28
29 public class CommonInterop {
30     public static void chunkLoaded(WorldChunk chunk) {
31         DimensionId dimensionId = DimensionId.from(chunk.getWorld().getRegistryKey());
32         Map<String, StructureStart<?>> structures = new HashMap<>();
33         chunk.getStructureStarts().entrySet().forEach(es -> structures.put(es.getKey().getName(), es.getValue()));
34         if (structures.size() > 0) EventBus.publish(new StructuresLoaded(structures, dimensionId));
35     }
36
37     public static void loadWorlds(Collection<ServerWorld> worlds) {
38         for (ServerWorld world : worlds) {
39             loadWorld(world);
40         }
41     }
42
43     public static void loadWorld(ServerWorld world) {
44         EventBus.publish(new WorldLoaded(world));
45     }
46
47     public static void tick() {
48         EventBus.publish(new ServerTick());
49     }
50
51     public static void playerLoggedIn(ServerPlayerEntity player) {
52         ServerPlayNetworkHandler connection = player.networkHandler;
53         if (connection == null) return;
54
55         ClientConnection networkManager = connection.connection;
56         if (networkManager.isLocal()) return;
57
58         EventBus.publish(new PlayerLoggedIn(new ServerPlayer(player)));
59     }
60
61     public static void playerLoggedOut(ServerPlayerEntity player) {
62         EventBus.publish(new PlayerLoggedOut(player.getId()));
63     }
64
65     public static void playerSubscribed(ServerPlayerEntity player) {
66         EventBus.publish(new PlayerSubscribed(player.getId(), new ServerPlayer(player)));
67     }
68
69     public static <T extends AbstractBoundingBox> AbstractRenderer<T> registerRenderer(Class<? extends T> type, Supplier<AbstractRenderer<T>> renderer) {
70         if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
71             return ClientRenderer.registerRenderer(type, renderer);
72         }
73         return null;
74     }
75 }