1 package com.irtimaled.bbor.common.interop;
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;
24 import java.util.Collection;
25 import java.util.HashMap;
27 import java.util.function.Supplier;
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));
37 public static void loadWorlds(Collection<ServerWorld> worlds) {
38 for (ServerWorld world : worlds) {
43 public static void loadWorld(ServerWorld world) {
44 EventBus.publish(new WorldLoaded(world));
47 public static void tick() {
48 EventBus.publish(new ServerTick());
51 public static void playerLoggedIn(ServerPlayerEntity player) {
52 ServerPlayNetworkHandler connection = player.networkHandler;
53 if (connection == null) return;
55 ClientConnection networkManager = connection.connection;
56 if (networkManager.isLocal()) return;
58 EventBus.publish(new PlayerLoggedIn(new ServerPlayer(player)));
61 public static void playerLoggedOut(ServerPlayerEntity player) {
62 EventBus.publish(new PlayerLoggedOut(player.getId()));
65 public static void playerSubscribed(ServerPlayerEntity player) {
66 EventBus.publish(new PlayerSubscribed(player.getId(), new ServerPlayer(player)));
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);