]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/common/interop/CommonInterop.java
Port to 1.19
[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.config.BoundingBoxTypeHelper;
5 import com.irtimaled.bbor.client.config.ConfigManager;
6 import com.irtimaled.bbor.client.renderers.AbstractRenderer;
7 import com.irtimaled.bbor.common.BoundingBoxType;
8 import com.irtimaled.bbor.common.EventBus;
9 import com.irtimaled.bbor.common.StructureProcessor;
10 import com.irtimaled.bbor.common.events.PlayerLoggedIn;
11 import com.irtimaled.bbor.common.events.PlayerLoggedOut;
12 import com.irtimaled.bbor.common.events.PlayerSubscribed;
13 import com.irtimaled.bbor.common.events.ServerTick;
14 import com.irtimaled.bbor.common.events.StructuresLoaded;
15 import com.irtimaled.bbor.common.events.WorldLoaded;
16 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
17 import com.irtimaled.bbor.common.models.DimensionId;
18 import com.irtimaled.bbor.common.models.ServerPlayer;
19 import net.fabricmc.api.EnvType;
20 import net.fabricmc.loader.api.FabricLoader;
21 import net.minecraft.network.ClientConnection;
22 import net.minecraft.server.network.ServerPlayNetworkHandler;
23 import net.minecraft.server.network.ServerPlayerEntity;
24 import net.minecraft.server.world.ServerWorld;
25 import net.minecraft.structure.StructureStart;
26 import net.minecraft.util.Identifier;
27 import net.minecraft.util.registry.Registry;
28 import net.minecraft.util.registry.RegistryKey;
29 import net.minecraft.world.World;
30 import net.minecraft.world.chunk.WorldChunk;
31 import net.minecraft.world.gen.structure.Structure;
32
33 import java.util.Arrays;
34 import java.util.Collection;
35 import java.util.HashMap;
36 import java.util.Map;
37 import java.util.Optional;
38 import java.util.function.Supplier;
39
40 public class CommonInterop {
41     public static void chunkLoaded(WorldChunk chunk) {
42         DimensionId dimensionId = DimensionId.from(chunk.getWorld().getRegistryKey());
43         Map<String, StructureStart> structures = new HashMap<>();
44         final Registry<Structure> structureRegistry = chunk.getWorld().getRegistryManager().get(Registry.STRUCTURE_KEY);
45         for (Map.Entry<Structure, StructureStart> es : chunk.getStructureStarts().entrySet()) {
46             final Optional<RegistryKey<Structure>> optional = structureRegistry.getKey(es.getKey());
47             optional.ifPresent(key -> structures.put(key.getValue().toString(), es.getValue()));
48         }
49         if (structures.size() > 0) EventBus.publish(new StructuresLoaded(structures, dimensionId));
50     }
51
52     public static void loadWorlds(Collection<ServerWorld> worlds) {
53         for (ServerWorld world : worlds) {
54             loadWorld(world);
55             loadWorldStructures(world);
56         }
57     }
58
59     public static void loadWorldStructures(World world) {
60         final Registry<Structure> structureRegistry = world.getRegistryManager().get(Registry.STRUCTURE_KEY);
61         System.out.println("Registring structures: " + Arrays.toString(structureRegistry.getEntrySet().stream().map(entry -> entry.getKey().getValue().toString()).distinct().toArray(String[]::new)));
62         for (var entry : structureRegistry.getEntrySet()) {
63             final Identifier value = entry.getKey().getValue();
64             final BoundingBoxType boundingBoxType = BoundingBoxType.register("structure:" + value);
65             StructureProcessor.registerSupportedStructure(boundingBoxType);
66             StructureProcessor.supportedStructureIds.add(value.toString());
67             BoundingBoxTypeHelper.registerType(boundingBoxType, ConfigManager.structureShouldRender(value.toString()), ConfigManager.structureColor(value.toString()));
68         }
69     }
70
71     public static void loadWorld(ServerWorld world) {
72         EventBus.publish(new WorldLoaded(world));
73     }
74
75     public static void tick() {
76         EventBus.publish(new ServerTick());
77     }
78
79     public static void playerLoggedIn(ServerPlayerEntity player) {
80         ServerPlayNetworkHandler connection = player.networkHandler;
81         if (connection == null) return;
82
83         ClientConnection networkManager = connection.connection;
84         if (networkManager.isLocal()) return;
85
86         EventBus.publish(new PlayerLoggedIn(new ServerPlayer(player)));
87     }
88
89     public static void playerLoggedOut(ServerPlayerEntity player) {
90         EventBus.publish(new PlayerLoggedOut(player.getId()));
91     }
92
93     public static void playerSubscribed(ServerPlayerEntity player) {
94         EventBus.publish(new PlayerSubscribed(player.getId(), new ServerPlayer(player)));
95     }
96
97     public static <T extends AbstractBoundingBox> AbstractRenderer<T> registerRenderer(Class<? extends T> type, Supplier<AbstractRenderer<T>> renderer) {
98         if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
99             return ClientRenderer.registerRenderer(type, renderer);
100         }
101         return null;
102     }
103 }