Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.cerbon.cerbons_api.api.network;

import com.cerbon.cerbons_api.api.network.data.PacketContext;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.ResourceLocation;

import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;

public record CommonNetwork(PacketRegistrationHandler packetRegistration) {
private static DelayedPacketRegistrationHandler delayedHandler;
Expand All @@ -30,10 +30,10 @@ private static DelayedPacketRegistrationHandler getDelayedHandler() {
return delayedHandler;
}

public static <T> IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, Consumer<PacketContext<T>> handler) {
public static <T extends CustomPacketPayload> IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, StreamCodec<RegistryFriendlyByteBuf, T> codec, Consumer<PacketContext<T>> handler) {
if (INSTANCE != null)
return INSTANCE.packetRegistration.registerPacket(packetIdentifier, messageType, encoder, decoder, handler);
return INSTANCE.packetRegistration.registerPacket(packetIdentifier, codec, handler);

return getDelayedHandler().registerPacket(packetIdentifier, messageType, encoder, decoder, handler);
return getDelayedHandler().registerPacket(packetIdentifier, codec, handler);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,30 @@
import com.cerbon.cerbons_api.api.network.data.PacketContainer;
import com.cerbon.cerbons_api.api.network.data.PacketContext;
import com.cerbon.cerbons_api.api.network.data.Side;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
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;

public class DelayedPacketRegistrationHandler implements IPacketRegistrar {
private static final Map<Class<?>, PacketContainer<?>> QUEUED_PACKET_MAP = new HashMap<>();
private static final Map<ResourceLocation, PacketContainer<?>> QUEUED_PACKET_MAP = new HashMap<>();

@Override
public Side getSide() {
return Side.CLIENT;
}

@Override
public <T> IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, Consumer<PacketContext<T>> handler) {
PacketContainer<T> container = new PacketContainer<>(packetIdentifier, messageType, encoder, decoder, handler);
QUEUED_PACKET_MAP.put(messageType, container);
public <T extends CustomPacketPayload> IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, StreamCodec<RegistryFriendlyByteBuf, T> codec, Consumer<PacketContext<T>> handler) {
PacketContainer<T> container = new PacketContainer<>(packetIdentifier, codec, handler);
QUEUED_PACKET_MAP.put(packetIdentifier, container);
return this;
}


public void registerQueuedPackets(PacketRegistrationHandler packetRegistration) {
if (!QUEUED_PACKET_MAP.isEmpty()) {
packetRegistration.PACKET_MAP.putAll(QUEUED_PACKET_MAP);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.cerbon.cerbons_api.api.network;

import net.minecraft.core.BlockPos;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerChunkCache;
import net.minecraft.server.level.ServerLevel;
Expand All @@ -19,7 +20,7 @@ public class Dispatcher {
* @param packet the packet
* @param <T> The type
*/
public static <T> void sendToServer(T packet) {
public static <T extends CustomPacketPayload> void sendToServer(T packet) {
Network.getNetworkHandler().sendToServer(packet);
}

Expand All @@ -31,7 +32,7 @@ public static <T> void sendToServer(T packet) {
* @param ignoreCheck ignore the check if the server has the packet registered.
* @param <T> The type
*/
public static <T> void sendToServer(T packet, boolean ignoreCheck) {
public static <T extends CustomPacketPayload> void sendToServer(T packet, boolean ignoreCheck) {
Network.getNetworkHandler().sendToServer(packet, ignoreCheck);
}

Expand All @@ -42,7 +43,7 @@ public static <T> void sendToServer(T packet, boolean ignoreCheck) {
* @param player the player
* @param <T> The type
*/
public static <T> void sendToClient(T packet, ServerPlayer player) {
public static <T extends CustomPacketPayload> void sendToClient(T packet, ServerPlayer player) {
Network.getNetworkHandler().sendToClient(packet, player);
}

Expand All @@ -53,7 +54,7 @@ public static <T> void sendToClient(T packet, ServerPlayer player) {
* @param players the players
* @param <T> The type
*/
public static <T> void sendToClients(T packet, List<ServerPlayer> players) {
public static <T extends CustomPacketPayload> void sendToClients(T packet, List<ServerPlayer> players) {
for (ServerPlayer player : players)
sendToClient(packet, player);
}
Expand All @@ -65,7 +66,7 @@ public static <T> void sendToClients(T packet, List<ServerPlayer> players) {
* @param server the server
* @param <T> The type
*/
public static <T> void sendToAllClients(T packet, MinecraftServer server) {
public static <T extends CustomPacketPayload> void sendToAllClients(T packet, MinecraftServer server) {
sendToClients(packet, server.getPlayerList().getPlayers());
}

Expand All @@ -76,7 +77,7 @@ public static <T> void sendToAllClients(T packet, MinecraftServer server) {
* @param level the level
* @param <T> The type
*/
public static <T> void sendToClientsInLevel(T packet, ServerLevel level) {
public static <T extends CustomPacketPayload> void sendToClientsInLevel(T packet, ServerLevel level) {
sendToClients(packet, level.players());
}

Expand All @@ -87,7 +88,7 @@ public static <T> void sendToClientsInLevel(T packet, ServerLevel level) {
* @param chunk the chunk
* @param <T> The type
*/
public static <T> void sendToClientsLoadingChunk(T packet, LevelChunk chunk) {
public static <T extends CustomPacketPayload> void sendToClientsLoadingChunk(T packet, LevelChunk chunk) {
ServerChunkCache chunkCache = (ServerChunkCache) chunk.getLevel().getChunkSource();
sendToClients(packet, chunkCache.chunkMap.getPlayers(chunk.getPos(), false));
}
Expand All @@ -101,7 +102,7 @@ public static <T> void sendToClientsLoadingChunk(T packet, LevelChunk chunk) {
* @param pos the chunkpos
* @param <T> The type
*/
public static <T> void sendToClientsLoadingPos(T packet, ServerLevel level, ChunkPos pos) {
public static <T extends CustomPacketPayload> void sendToClientsLoadingPos(T packet, ServerLevel level, ChunkPos pos) {
sendToClientsLoadingChunk(packet, level.getChunk(pos.x, pos.z));
}

Expand All @@ -113,7 +114,7 @@ public static <T> void sendToClientsLoadingPos(T packet, ServerLevel level, Chun
* @param pos the blockpos
* @param <T> The type
*/
public static <T> void sendToClientsLoadingPos(T packet, ServerLevel level, BlockPos pos) {
public static <T extends CustomPacketPayload> void sendToClientsLoadingPos(T packet, ServerLevel level, BlockPos pos) {
sendToClientsLoadingPos(packet, level, new ChunkPos(pos));
}

Expand All @@ -125,7 +126,7 @@ public static <T> void sendToClientsLoadingPos(T packet, ServerLevel level, Bloc
* @param pos the vec3 pos
* @param <T> The type
*/
public static <T> void sendToClientsLoadingPos(T packet, ServerLevel level, Vec3 pos) {
public static <T extends CustomPacketPayload> void sendToClientsLoadingPos(T packet, ServerLevel level, Vec3 pos) {
sendToClientsLoadingPos(packet, level, BlockPos.containing(pos));
}

Expand All @@ -138,7 +139,7 @@ public static <T> void sendToClientsLoadingPos(T packet, ServerLevel level, Vec
* @param range the range
* @param <T> The type
*/
public static <T> void sendToClientsInRange(T packet, ServerLevel level, BlockPos pos, double range) {
public static <T extends CustomPacketPayload> void sendToClientsInRange(T packet, ServerLevel level, BlockPos pos, double range) {
for (ServerPlayer player : level.players())
if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) <= range * range)
sendToClient(packet, player);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.cerbon.cerbons_api.api.network;

import net.minecraft.core.BlockPos;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerChunkCache;
import net.minecraft.server.level.ServerLevel;
Expand All @@ -19,7 +20,7 @@ public interface INetworkHandler {
* @param packet the packet
* @param <T> The type
*/
<T> void sendToServer(T packet);
<T extends CustomPacketPayload> void sendToServer(T packet);

/**
* Sends the packet to the server. Can ignore the check if the server has the packet registered.
Expand All @@ -29,7 +30,7 @@ public interface INetworkHandler {
* @param ignoreCheck ignore the check if the server has the packet registered.
* @param <T> The type
*/
<T> void sendToServer(T packet, boolean ignoreCheck);
<T extends CustomPacketPayload> void sendToServer(T packet, boolean ignoreCheck);

/**
* Sends the packet to the client player, only if the player has the packet registered.
Expand All @@ -38,7 +39,7 @@ public interface INetworkHandler {
* @param player the player
* @param <T> The type
*/
<T> void sendToClient(T packet, ServerPlayer player);
<T extends CustomPacketPayload> void sendToClient(T packet, ServerPlayer player);

/**
* Sends the packet to the client players, only if the players has the packet registered.
Expand All @@ -47,7 +48,7 @@ public interface INetworkHandler {
* @param players the players
* @param <T> The type
*/
default <T> void sendToClients(T packet, List<ServerPlayer> players) {
default <T extends CustomPacketPayload> void sendToClients(T packet, List<ServerPlayer> players) {
for (ServerPlayer player : players)
sendToClient(packet, player);
}
Expand All @@ -59,7 +60,7 @@ default <T> void sendToClients(T packet, List<ServerPlayer> players) {
* @param server the server
* @param <T> The type
*/
default <T> void sendToAllClients(T packet, MinecraftServer server) {
default <T extends CustomPacketPayload> void sendToAllClients(T packet, MinecraftServer server) {
sendToClients(packet, server.getPlayerList().getPlayers());
}

Expand All @@ -70,7 +71,7 @@ default <T> void sendToAllClients(T packet, MinecraftServer server) {
* @param level the level
* @param <T> The type
*/
default <T> void sendToClientsInLevel(T packet, ServerLevel level) {
default <T extends CustomPacketPayload> void sendToClientsInLevel(T packet, ServerLevel level) {
sendToClients(packet, level.players());
}

Expand All @@ -81,7 +82,7 @@ default <T> void sendToClientsInLevel(T packet, ServerLevel level) {
* @param chunk the chunk
* @param <T> The type
*/
default <T> void sendToClientsLoadingChunk(T packet, LevelChunk chunk) {
default <T extends CustomPacketPayload> void sendToClientsLoadingChunk(T packet, LevelChunk chunk) {
ServerChunkCache chunkCache = (ServerChunkCache) chunk.getLevel().getChunkSource();
sendToClients(packet, chunkCache.chunkMap.getPlayers(chunk.getPos(), false));
}
Expand All @@ -95,7 +96,7 @@ default <T> void sendToClientsLoadingChunk(T packet, LevelChunk chunk) {
* @param pos the chunkpos
* @param <T> The type
*/
default <T> void sendToClientsLoadingPos(T packet, ServerLevel level, ChunkPos pos) {
default <T extends CustomPacketPayload> void sendToClientsLoadingPos(T packet, ServerLevel level, ChunkPos pos) {
sendToClientsLoadingChunk(packet, level.getChunk(pos.x, pos.z));
}

Expand All @@ -107,7 +108,7 @@ default <T> void sendToClientsLoadingPos(T packet, ServerLevel level, ChunkPos p
* @param pos the blockpos
* @param <T> The type
*/
default <T> void sendToClientsLoadingPos(T packet, ServerLevel level, BlockPos pos) {
default <T extends CustomPacketPayload> void sendToClientsLoadingPos(T packet, ServerLevel level, BlockPos pos) {
sendToClientsLoadingPos(packet, level, new ChunkPos(pos));
}

Expand All @@ -119,7 +120,7 @@ default <T> void sendToClientsLoadingPos(T packet, ServerLevel level, BlockPos p
* @param pos the vec3 pos
* @param <T> The type
*/
default <T> void sendToClientsLoadingPos(T packet, ServerLevel level, Vec3 pos) {
default <T extends CustomPacketPayload> void sendToClientsLoadingPos(T packet, ServerLevel level, Vec3 pos) {
sendToClientsLoadingPos(packet, level, BlockPos.containing(pos));
}

Expand All @@ -132,7 +133,7 @@ default <T> void sendToClientsLoadingPos(T packet, ServerLevel level, Vec3 pos)
* @param range the range
* @param <T> The type
*/
default <T> void sendToClientsInRange(T packet, ServerLevel level, BlockPos pos, double range) {
default <T extends CustomPacketPayload> void sendToClientsInRange(T packet, ServerLevel level, BlockPos pos, double range) {
for (ServerPlayer player : level.players())
if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) <= range * range)
sendToClient(packet, player);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import com.cerbon.cerbons_api.api.network.data.PacketContext;
import com.cerbon.cerbons_api.api.network.data.Side;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.ResourceLocation;

import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;

public interface IPacketRegistrar {

Expand All @@ -20,12 +20,10 @@ public interface IPacketRegistrar {
* Packet Registration
*
* @param packetIdentifier The unique {@link ResourceLocation} packet id.
* @param messageType The class of the packet.
* @param encoder The encoder method.
* @param decoder The decoder method.
* @param handler The handler method.
* @param codec The codec of the packet.
* @param <T> The class type
* @param handler The handler method.
* @return The registrar for chaining registrations.
*/
<T> IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, Consumer<PacketContext<T>> handler);
<T extends CustomPacketPayload> IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, StreamCodec<RegistryFriendlyByteBuf, T> codec, Consumer<PacketContext<T>> handler);
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,29 @@
package com.cerbon.cerbons_api.api.network;

import com.cerbon.cerbons_api.api.network.data.PacketContext;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.ResourceLocation;

import java.util.function.BiConsumer;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;

public class Network {
private static final Map<ResourceLocation, CustomPacketPayload.Type<?>> TYPES = new HashMap<>();

/**
* Packet Registration
*
* @param packetIdentifier The unique {@link ResourceLocation} packet id.
* @param messageType The class of the packet.
* @param encoder The encoder method.
* @param decoder The decoder method.
* @param codec The codec.
* @param handler The handler method.
* @param <T> The type
* @return The registrar for chaining registrations.
*/
public static <T> IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, Class<T> messageType, Function<FriendlyByteBuf, T> decoder, BiConsumer<T, FriendlyByteBuf> encoder, Consumer<PacketContext<T>> handler) {
return CommonNetwork.registerPacket(packetIdentifier, messageType, encoder, decoder, handler);
public static <T extends CustomPacketPayload> IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, StreamCodec<RegistryFriendlyByteBuf, T> codec, Consumer<PacketContext<T>> handler) {
return CommonNetwork.registerPacket(packetIdentifier, codec, handler);
}

/**
Expand All @@ -33,4 +34,15 @@ public static <T> IPacketRegistrar registerPacket(ResourceLocation packetIdentif
public static INetworkHandler getNetworkHandler() {
return CommonNetwork.INSTANCE.packetRegistration();
}

/**
* Returns the type of the network packet.
*
* @param packetIdentifier The unique {@link ResourceLocation} packet id.
* @param <T> The class type.
* @return The payload type.
*/
public static <T extends CustomPacketPayload> CustomPacketPayload.Type<T> getType(ResourceLocation packetIdentifier) {
return (CustomPacketPayload.Type<T>) TYPES.computeIfAbsent(packetIdentifier, id -> new CustomPacketPayload.Type<>(id));
}
}
Loading