Just for sanity sake
This commit is contained in:
@@ -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() {
|
||||
|
@@ -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