Just for sanity sake

This commit is contained in:
2024-01-02 15:20:56 +02:00
parent 0813bc416c
commit 8e629a674c
2 changed files with 55 additions and 1 deletions

View File

@@ -15,14 +15,27 @@ public class CraterPacketNetwork {
private final PacketRegistry packetRegistry;
public static CraterPacketNetwork INSTANCE;
private static DeferredPacketRegistrar delayedHandler;
public CraterPacketNetwork(PacketRegistry registry) {
INSTANCE = this;
this.packetRegistry = registry;
getDelayedHandler().registerQueuedPackets(registry);
}
private static DeferredPacketRegistrar getDelayedHandler() {
if (delayedHandler == null) {
delayedHandler = new DeferredPacketRegistrar();
}
return delayedHandler;
}
public static <T> PacketRegistrar registerPacket(ResourceLocation id, Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, Consumer<PacketContext<T>> handler) {
return INSTANCE.packetRegistry.registerPacket(id, messageType, encoder, decoder, handler);
if (INSTANCE != null) {
return INSTANCE.packetRegistry.registerPacket(id, messageType, encoder, decoder, handler);
} else {
return getDelayedHandler().registerPacket(id, messageType, encoder, decoder, handler);
}
}
public PacketRegistry getPacketRegistry() {

View File

@@ -0,0 +1,41 @@
package com.hypherionmc.craterlib.core.networking;
import com.hypherionmc.craterlib.core.networking.data.PacketContext;
import com.hypherionmc.craterlib.core.networking.data.PacketHolder;
import com.hypherionmc.craterlib.core.networking.data.PacketSide;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
/**
* Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
*/
public class DeferredPacketRegistrar implements PacketRegistrar {
private static final Map<Class<?>, PacketHolder<?>> QUEUED_PACKET_MAP = new HashMap<>();
@Override
public PacketSide side() {
return PacketSide.CLIENT;
}
@Override
public <T> PacketRegistrar registerPacket(ResourceLocation packetIdentifier, Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, Consumer<PacketContext<T>> handler) {
PacketHolder<T> container = new PacketHolder<>(packetIdentifier, messageType, encoder, decoder, handler);
QUEUED_PACKET_MAP.put(messageType, container);
return this;
}
public void registerQueuedPackets(PacketRegistry packetRegistration) {
if (!QUEUED_PACKET_MAP.isEmpty()) {
packetRegistration.PACKET_MAP.putAll(QUEUED_PACKET_MAP);
QUEUED_PACKET_MAP.forEach((aClass, container) -> packetRegistration.registerPacket(container));
}
}
}