Just for sanity sake
This commit is contained in:
@@ -15,14 +15,27 @@ public class CraterPacketNetwork {
|
|||||||
|
|
||||||
private final PacketRegistry packetRegistry;
|
private final PacketRegistry packetRegistry;
|
||||||
public static CraterPacketNetwork INSTANCE;
|
public static CraterPacketNetwork INSTANCE;
|
||||||
|
private static DeferredPacketRegistrar delayedHandler;
|
||||||
|
|
||||||
public CraterPacketNetwork(PacketRegistry registry) {
|
public CraterPacketNetwork(PacketRegistry registry) {
|
||||||
INSTANCE = this;
|
INSTANCE = this;
|
||||||
this.packetRegistry = registry;
|
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) {
|
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() {
|
public PacketRegistry getPacketRegistry() {
|
||||||
|
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user