From 0bc2050f2893e8462e2e8153ded43aac0cc522a5 Mon Sep 17 00:00:00 2001 From: Naz Date: Fri, 18 Oct 2024 13:37:12 +0800 Subject: [PATCH] Port to 1.20.6 --- .../api/network/CommonNetwork.java | 12 ++-- .../DelayedPacketRegistrationHandler.java | 15 ++--- .../cerbons_api/api/network/Dispatcher.java | 23 +++---- .../api/network/INetworkHandler.java | 23 +++---- .../api/network/IPacketRegistrar.java | 14 ++-- .../cerbons_api/api/network/Network.java | 28 +++++--- .../network/PacketRegistrationHandler.java | 16 ++--- .../api/network/data/PacketContainer.java | 14 ++-- .../client/MultiplayerGameModeMixin.java | 4 +- .../packet/CerbonsApiPacketHandler.java | 7 +- .../MultipartEntityInteractionC2SPacket.java | 40 +++++++----- .../cerbons_api/util/PacketCodecUtil.java | 10 +++ Fabric/build.gradle | 2 +- .../fabric/cardinalComponents/Components.java | 8 +-- .../ILevelEventSchedulerComponent.java | 2 +- .../LevelEventScheduler.java | 9 +-- .../fabric/network/FabricNetworkHandler.java | 65 +++++++++---------- Forge/build.gradle | 2 +- .../cerbons_api/forge/CerbonsAPIForge.java | 11 ++++ .../forge/event/CerbonsApiForgeEvents.java | 6 +- .../forge/network/ForgeNetworkHandler.java | 43 ++++++------ NeoForge/build.gradle | 2 +- .../saved_data/LevelEventScheduler.java | 7 +- .../neoforge/event/NeoForgeEvents.java | 12 ++-- .../network/NeoForgeNetworkHandler.java | 65 +++++++++---------- .../neoforge/network/NeoForgePacket.java | 19 ------ .../network/NeoForgePacketContainer.java | 14 ++-- build.gradle | 6 +- gradle.properties | 28 ++++---- gradle/wrapper/gradle-wrapper.properties | 2 +- 30 files changed, 257 insertions(+), 252 deletions(-) create mode 100644 Common/src/main/java/com/cerbon/cerbons_api/util/PacketCodecUtil.java delete mode 100644 NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgePacket.java diff --git a/Common/src/main/java/com/cerbon/cerbons_api/api/network/CommonNetwork.java b/Common/src/main/java/com/cerbon/cerbons_api/api/network/CommonNetwork.java index 0a48a88..f50a148 100644 --- a/Common/src/main/java/com/cerbon/cerbons_api/api/network/CommonNetwork.java +++ b/Common/src/main/java/com/cerbon/cerbons_api/api/network/CommonNetwork.java @@ -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; @@ -30,10 +30,10 @@ private static DelayedPacketRegistrationHandler getDelayedHandler() { return delayedHandler; } - public static IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler) { + public static IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, StreamCodec codec, Consumer> 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); } } diff --git a/Common/src/main/java/com/cerbon/cerbons_api/api/network/DelayedPacketRegistrationHandler.java b/Common/src/main/java/com/cerbon/cerbons_api/api/network/DelayedPacketRegistrationHandler.java index aa168c1..c2e66e8 100644 --- a/Common/src/main/java/com/cerbon/cerbons_api/api/network/DelayedPacketRegistrationHandler.java +++ b/Common/src/main/java/com/cerbon/cerbons_api/api/network/DelayedPacketRegistrationHandler.java @@ -3,17 +3,17 @@ 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, PacketContainer> QUEUED_PACKET_MAP = new HashMap<>(); + private static final Map> QUEUED_PACKET_MAP = new HashMap<>(); @Override public Side getSide() { @@ -21,13 +21,12 @@ public Side getSide() { } @Override - public IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler) { - PacketContainer container = new PacketContainer<>(packetIdentifier, messageType, encoder, decoder, handler); - QUEUED_PACKET_MAP.put(messageType, container); + public IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, StreamCodec codec, Consumer> handler) { + PacketContainer 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); diff --git a/Common/src/main/java/com/cerbon/cerbons_api/api/network/Dispatcher.java b/Common/src/main/java/com/cerbon/cerbons_api/api/network/Dispatcher.java index bebb363..53ed2b2 100644 --- a/Common/src/main/java/com/cerbon/cerbons_api/api/network/Dispatcher.java +++ b/Common/src/main/java/com/cerbon/cerbons_api/api/network/Dispatcher.java @@ -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; @@ -19,7 +20,7 @@ public class Dispatcher { * @param packet the packet * @param The type */ - public static void sendToServer(T packet) { + public static void sendToServer(T packet) { Network.getNetworkHandler().sendToServer(packet); } @@ -31,7 +32,7 @@ public static void sendToServer(T packet) { * @param ignoreCheck ignore the check if the server has the packet registered. * @param The type */ - public static void sendToServer(T packet, boolean ignoreCheck) { + public static void sendToServer(T packet, boolean ignoreCheck) { Network.getNetworkHandler().sendToServer(packet, ignoreCheck); } @@ -42,7 +43,7 @@ public static void sendToServer(T packet, boolean ignoreCheck) { * @param player the player * @param The type */ - public static void sendToClient(T packet, ServerPlayer player) { + public static void sendToClient(T packet, ServerPlayer player) { Network.getNetworkHandler().sendToClient(packet, player); } @@ -53,7 +54,7 @@ public static void sendToClient(T packet, ServerPlayer player) { * @param players the players * @param The type */ - public static void sendToClients(T packet, List players) { + public static void sendToClients(T packet, List players) { for (ServerPlayer player : players) sendToClient(packet, player); } @@ -65,7 +66,7 @@ public static void sendToClients(T packet, List players) { * @param server the server * @param The type */ - public static void sendToAllClients(T packet, MinecraftServer server) { + public static void sendToAllClients(T packet, MinecraftServer server) { sendToClients(packet, server.getPlayerList().getPlayers()); } @@ -76,7 +77,7 @@ public static void sendToAllClients(T packet, MinecraftServer server) { * @param level the level * @param The type */ - public static void sendToClientsInLevel(T packet, ServerLevel level) { + public static void sendToClientsInLevel(T packet, ServerLevel level) { sendToClients(packet, level.players()); } @@ -87,7 +88,7 @@ public static void sendToClientsInLevel(T packet, ServerLevel level) { * @param chunk the chunk * @param The type */ - public static void sendToClientsLoadingChunk(T packet, LevelChunk chunk) { + public static void sendToClientsLoadingChunk(T packet, LevelChunk chunk) { ServerChunkCache chunkCache = (ServerChunkCache) chunk.getLevel().getChunkSource(); sendToClients(packet, chunkCache.chunkMap.getPlayers(chunk.getPos(), false)); } @@ -101,7 +102,7 @@ public static void sendToClientsLoadingChunk(T packet, LevelChunk chunk) { * @param pos the chunkpos * @param The type */ - public static void sendToClientsLoadingPos(T packet, ServerLevel level, ChunkPos pos) { + public static void sendToClientsLoadingPos(T packet, ServerLevel level, ChunkPos pos) { sendToClientsLoadingChunk(packet, level.getChunk(pos.x, pos.z)); } @@ -113,7 +114,7 @@ public static void sendToClientsLoadingPos(T packet, ServerLevel level, Chun * @param pos the blockpos * @param The type */ - public static void sendToClientsLoadingPos(T packet, ServerLevel level, BlockPos pos) { + public static void sendToClientsLoadingPos(T packet, ServerLevel level, BlockPos pos) { sendToClientsLoadingPos(packet, level, new ChunkPos(pos)); } @@ -125,7 +126,7 @@ public static void sendToClientsLoadingPos(T packet, ServerLevel level, Bloc * @param pos the vec3 pos * @param The type */ - public static void sendToClientsLoadingPos(T packet, ServerLevel level, Vec3 pos) { + public static void sendToClientsLoadingPos(T packet, ServerLevel level, Vec3 pos) { sendToClientsLoadingPos(packet, level, BlockPos.containing(pos)); } @@ -138,7 +139,7 @@ public static void sendToClientsLoadingPos(T packet, ServerLevel level, Vec * @param range the range * @param The type */ - public static void sendToClientsInRange(T packet, ServerLevel level, BlockPos pos, double range) { + public static 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); diff --git a/Common/src/main/java/com/cerbon/cerbons_api/api/network/INetworkHandler.java b/Common/src/main/java/com/cerbon/cerbons_api/api/network/INetworkHandler.java index ed5c761..a798a3f 100644 --- a/Common/src/main/java/com/cerbon/cerbons_api/api/network/INetworkHandler.java +++ b/Common/src/main/java/com/cerbon/cerbons_api/api/network/INetworkHandler.java @@ -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; @@ -19,7 +20,7 @@ public interface INetworkHandler { * @param packet the packet * @param The type */ - void sendToServer(T packet); + void sendToServer(T packet); /** * Sends the packet to the server. Can ignore the check if the server has the packet registered. @@ -29,7 +30,7 @@ public interface INetworkHandler { * @param ignoreCheck ignore the check if the server has the packet registered. * @param The type */ - void sendToServer(T packet, boolean ignoreCheck); + void sendToServer(T packet, boolean ignoreCheck); /** * Sends the packet to the client player, only if the player has the packet registered. @@ -38,7 +39,7 @@ public interface INetworkHandler { * @param player the player * @param The type */ - void sendToClient(T packet, ServerPlayer player); + void sendToClient(T packet, ServerPlayer player); /** * Sends the packet to the client players, only if the players has the packet registered. @@ -47,7 +48,7 @@ public interface INetworkHandler { * @param players the players * @param The type */ - default void sendToClients(T packet, List players) { + default void sendToClients(T packet, List players) { for (ServerPlayer player : players) sendToClient(packet, player); } @@ -59,7 +60,7 @@ default void sendToClients(T packet, List players) { * @param server the server * @param The type */ - default void sendToAllClients(T packet, MinecraftServer server) { + default void sendToAllClients(T packet, MinecraftServer server) { sendToClients(packet, server.getPlayerList().getPlayers()); } @@ -70,7 +71,7 @@ default void sendToAllClients(T packet, MinecraftServer server) { * @param level the level * @param The type */ - default void sendToClientsInLevel(T packet, ServerLevel level) { + default void sendToClientsInLevel(T packet, ServerLevel level) { sendToClients(packet, level.players()); } @@ -81,7 +82,7 @@ default void sendToClientsInLevel(T packet, ServerLevel level) { * @param chunk the chunk * @param The type */ - default void sendToClientsLoadingChunk(T packet, LevelChunk chunk) { + default void sendToClientsLoadingChunk(T packet, LevelChunk chunk) { ServerChunkCache chunkCache = (ServerChunkCache) chunk.getLevel().getChunkSource(); sendToClients(packet, chunkCache.chunkMap.getPlayers(chunk.getPos(), false)); } @@ -95,7 +96,7 @@ default void sendToClientsLoadingChunk(T packet, LevelChunk chunk) { * @param pos the chunkpos * @param The type */ - default void sendToClientsLoadingPos(T packet, ServerLevel level, ChunkPos pos) { + default void sendToClientsLoadingPos(T packet, ServerLevel level, ChunkPos pos) { sendToClientsLoadingChunk(packet, level.getChunk(pos.x, pos.z)); } @@ -107,7 +108,7 @@ default void sendToClientsLoadingPos(T packet, ServerLevel level, ChunkPos p * @param pos the blockpos * @param The type */ - default void sendToClientsLoadingPos(T packet, ServerLevel level, BlockPos pos) { + default void sendToClientsLoadingPos(T packet, ServerLevel level, BlockPos pos) { sendToClientsLoadingPos(packet, level, new ChunkPos(pos)); } @@ -119,7 +120,7 @@ default void sendToClientsLoadingPos(T packet, ServerLevel level, BlockPos p * @param pos the vec3 pos * @param The type */ - default void sendToClientsLoadingPos(T packet, ServerLevel level, Vec3 pos) { + default void sendToClientsLoadingPos(T packet, ServerLevel level, Vec3 pos) { sendToClientsLoadingPos(packet, level, BlockPos.containing(pos)); } @@ -132,7 +133,7 @@ default void sendToClientsLoadingPos(T packet, ServerLevel level, Vec3 pos) * @param range the range * @param The type */ - default void sendToClientsInRange(T packet, ServerLevel level, BlockPos pos, double range) { + default 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); diff --git a/Common/src/main/java/com/cerbon/cerbons_api/api/network/IPacketRegistrar.java b/Common/src/main/java/com/cerbon/cerbons_api/api/network/IPacketRegistrar.java index 7124e30..42e5515 100644 --- a/Common/src/main/java/com/cerbon/cerbons_api/api/network/IPacketRegistrar.java +++ b/Common/src/main/java/com/cerbon/cerbons_api/api/network/IPacketRegistrar.java @@ -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 { @@ -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 The class type + * @param handler The handler method. * @return The registrar for chaining registrations. */ - IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler); + IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, StreamCodec codec, Consumer> handler); } diff --git a/Common/src/main/java/com/cerbon/cerbons_api/api/network/Network.java b/Common/src/main/java/com/cerbon/cerbons_api/api/network/Network.java index 2539857..180dc4d 100644 --- a/Common/src/main/java/com/cerbon/cerbons_api/api/network/Network.java +++ b/Common/src/main/java/com/cerbon/cerbons_api/api/network/Network.java @@ -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> 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 The type * @return The registrar for chaining registrations. */ - public static IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, Class messageType, Function decoder, BiConsumer encoder, Consumer> handler) { - return CommonNetwork.registerPacket(packetIdentifier, messageType, encoder, decoder, handler); + public static IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, StreamCodec codec, Consumer> handler) { + return CommonNetwork.registerPacket(packetIdentifier, codec, handler); } /** @@ -33,4 +34,15 @@ public static 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 The class type. + * @return The payload type. + */ + public static CustomPacketPayload.Type getType(ResourceLocation packetIdentifier) { + return (CustomPacketPayload.Type) TYPES.computeIfAbsent(packetIdentifier, id -> new CustomPacketPayload.Type<>(id)); + } } diff --git a/Common/src/main/java/com/cerbon/cerbons_api/api/network/PacketRegistrationHandler.java b/Common/src/main/java/com/cerbon/cerbons_api/api/network/PacketRegistrationHandler.java index 70aab61..84bb25d 100644 --- a/Common/src/main/java/com/cerbon/cerbons_api/api/network/PacketRegistrationHandler.java +++ b/Common/src/main/java/com/cerbon/cerbons_api/api/network/PacketRegistrationHandler.java @@ -3,17 +3,17 @@ 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 abstract class PacketRegistrationHandler implements INetworkHandler, IPacketRegistrar { - final Map, PacketContainer> PACKET_MAP = new HashMap<>(); + final Map> PACKET_MAP = new HashMap<>(); protected final Side side; @@ -26,9 +26,9 @@ public PacketRegistrationHandler(Side side) { this.side = side; } - public IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler) { - PacketContainer container = new PacketContainer<>(packetIdentifier, messageType, encoder, decoder, handler); - PACKET_MAP.put(messageType, container); + public IPacketRegistrar registerPacket(ResourceLocation packetIdentifier, StreamCodec codec, Consumer> handler) { + PacketContainer container = new PacketContainer<>(packetIdentifier, codec, handler); + PACKET_MAP.put(packetIdentifier, container); registerPacket(container); return this; } @@ -37,5 +37,5 @@ public Side getSide() { return side; } - protected abstract void registerPacket(PacketContainer container); + protected abstract void registerPacket(PacketContainer container); } diff --git a/Common/src/main/java/com/cerbon/cerbons_api/api/network/data/PacketContainer.java b/Common/src/main/java/com/cerbon/cerbons_api/api/network/data/PacketContainer.java index a9a8316..2c70486 100644 --- a/Common/src/main/java/com/cerbon/cerbons_api/api/network/data/PacketContainer.java +++ b/Common/src/main/java/com/cerbon/cerbons_api/api/network/data/PacketContainer.java @@ -1,15 +1,13 @@ package com.cerbon.cerbons_api.api.network.data; -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 PacketContainer(ResourceLocation packetIdentifier, - Class messageType, - BiConsumer encoder, - Function decoder, - Consumer> handler) { +public record PacketContainer(ResourceLocation packetIdentifier, + StreamCodec codec, + Consumer> handler) { } diff --git a/Common/src/main/java/com/cerbon/cerbons_api/mixin/multipart_entities/client/MultiplayerGameModeMixin.java b/Common/src/main/java/com/cerbon/cerbons_api/mixin/multipart_entities/client/MultiplayerGameModeMixin.java index ac2a40d..04c19bf 100644 --- a/Common/src/main/java/com/cerbon/cerbons_api/mixin/multipart_entities/client/MultiplayerGameModeMixin.java +++ b/Common/src/main/java/com/cerbon/cerbons_api/mixin/multipart_entities/client/MultiplayerGameModeMixin.java @@ -34,7 +34,7 @@ private void attackHook(final Player player, final Entity target, final Callback Minecraft client = Minecraft.getInstance(); final Vec3 pos = client.cameraEntity.getEyePosition(client.getFrameTime()); final Vec3 dir = client.cameraEntity.getViewVector(client.getFrameTime()); - final double reach = client.gameMode.getPickRange(); + final double reach = client.player.entityInteractionRange(); String part = multipartAwareEntity.getBounds().raycast(pos, pos.add(dir.scale(reach))); if (part == null) return; @@ -57,7 +57,7 @@ private void interactHook(final Player player, final Entity entity, final Intera Minecraft client = Minecraft.getInstance(); final Vec3 pos = client.cameraEntity.getEyePosition(client.getFrameTime()); final Vec3 dir = client.cameraEntity.getViewVector(client.getFrameTime()); - final double reach = client.gameMode.getPickRange(); + final double reach = client.player.entityInteractionRange(); String part = multipartAwareEntity.getBounds().raycast(pos, pos.add(dir.scale(reach))); if (part == null) return; diff --git a/Common/src/main/java/com/cerbon/cerbons_api/packet/CerbonsApiPacketHandler.java b/Common/src/main/java/com/cerbon/cerbons_api/packet/CerbonsApiPacketHandler.java index 7902b9c..e23ddfa 100644 --- a/Common/src/main/java/com/cerbon/cerbons_api/packet/CerbonsApiPacketHandler.java +++ b/Common/src/main/java/com/cerbon/cerbons_api/packet/CerbonsApiPacketHandler.java @@ -6,12 +6,11 @@ import net.minecraft.resources.ResourceLocation; public class CerbonsApiPacketHandler { - private final ResourceLocation CHANNEL = new ResourceLocation(Constants.MOD_ID, "packets"); + public static final ResourceLocation MULTIPART_ENTITY_INTERACTION = new ResourceLocation(Constants.MOD_ID, "multipart_entity_interaction"); public void register() { - Network.registerPacket(CHANNEL, MultipartEntityInteractionC2SPacket.class, - MultipartEntityInteractionC2SPacket::new, - MultipartEntityInteractionC2SPacket::write, + Network.registerPacket(MULTIPART_ENTITY_INTERACTION, + MultipartEntityInteractionC2SPacket.CODEC, MultipartEntityInteractionC2SPacket::handle ); } diff --git a/Common/src/main/java/com/cerbon/cerbons_api/packet/custom/MultipartEntityInteractionC2SPacket.java b/Common/src/main/java/com/cerbon/cerbons_api/packet/custom/MultipartEntityInteractionC2SPacket.java index 228be39..f4552e4 100644 --- a/Common/src/main/java/com/cerbon/cerbons_api/packet/custom/MultipartEntityInteractionC2SPacket.java +++ b/Common/src/main/java/com/cerbon/cerbons_api/packet/custom/MultipartEntityInteractionC2SPacket.java @@ -2,15 +2,30 @@ import com.cerbon.cerbons_api.api.multipart_entities.client.PlayerInteractMultipartEntity; import com.cerbon.cerbons_api.api.multipart_entities.entity.MultipartAwareEntity; +import com.cerbon.cerbons_api.api.network.Network; import com.cerbon.cerbons_api.api.network.data.PacketContext; import com.cerbon.cerbons_api.api.network.data.Side; -import net.minecraft.network.FriendlyByteBuf; +import com.cerbon.cerbons_api.packet.CerbonsApiPacketHandler; +import com.cerbon.cerbons_api.util.PacketCodecUtil; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.Entity; -public class MultipartEntityInteractionC2SPacket { +public class MultipartEntityInteractionC2SPacket implements CustomPacketPayload { + public static final StreamCodec CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT, e -> e.entityId, + ByteBufCodecs.STRING_UTF8, e -> e.part, + PacketCodecUtil.getEnumCodec(InteractionHand.class), e -> e.hand, + ByteBufCodecs.BOOL, e -> e.isSneaking, + PacketCodecUtil.getEnumCodec(PlayerInteractMultipartEntity.InteractionType.class), e -> e.interactionType, + MultipartEntityInteractionC2SPacket::new + ); + private final int entityId; private final String part; private final InteractionHand hand; @@ -25,22 +40,6 @@ public MultipartEntityInteractionC2SPacket(int entityId, String part, Interactio this.interactionType = interactionType; } - public MultipartEntityInteractionC2SPacket(FriendlyByteBuf buf) { - this.entityId = buf.readInt(); - this.part = buf.readUtf(32767); - this.hand = buf.readEnum(InteractionHand.class); - this.isSneaking = buf.readBoolean(); - this.interactionType = buf.readEnum(PlayerInteractMultipartEntity.InteractionType.class); - } - - public void write(FriendlyByteBuf buf) { - buf.writeInt(entityId); - buf.writeUtf(part); - buf.writeEnum(hand); - buf.writeBoolean(isSneaking); - buf.writeEnum(interactionType); - } - public static void handle(PacketContext ctx) { if (ctx.side().equals(Side.CLIENT) || ctx.sender() == null) return; @@ -66,4 +65,9 @@ private static void setNextDamagedPart(ServerPlayer serverPlayer, Entity entity, serverPlayer.attack(entity); } + + @Override + public Type type() { + return Network.getType(CerbonsApiPacketHandler.MULTIPART_ENTITY_INTERACTION); + } } diff --git a/Common/src/main/java/com/cerbon/cerbons_api/util/PacketCodecUtil.java b/Common/src/main/java/com/cerbon/cerbons_api/util/PacketCodecUtil.java new file mode 100644 index 0000000..5eac05c --- /dev/null +++ b/Common/src/main/java/com/cerbon/cerbons_api/util/PacketCodecUtil.java @@ -0,0 +1,10 @@ +package com.cerbon.cerbons_api.util; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; + +public class PacketCodecUtil { + public static > StreamCodec getEnumCodec(Class enumClass) { + return StreamCodec.of(FriendlyByteBuf::writeEnum, (buf) -> buf.readEnum(enumClass)); + } +} diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 42c080d..0525333 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -1,7 +1,7 @@ import net.darkhax.curseforgegradle.TaskPublishCurseForge plugins { - id "com.github.johnrengelman.shadow" version "7.1.2" + id "com.gradleup.shadow" version "8.3.3" id 'net.darkhax.curseforgegradle' version '1.1.18' id "com.modrinth.minotaur" version "2.+" } diff --git a/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/Components.java b/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/Components.java index 759e763..aeaaada 100644 --- a/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/Components.java +++ b/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/Components.java @@ -2,12 +2,12 @@ import com.cerbon.cerbons_api.api.general.event.EventScheduler; import com.cerbon.cerbons_api.util.Constants; -import dev.onyxstudios.cca.api.v3.component.ComponentKey; -import dev.onyxstudios.cca.api.v3.component.ComponentRegistryV3; -import dev.onyxstudios.cca.api.v3.world.WorldComponentFactoryRegistry; -import dev.onyxstudios.cca.api.v3.world.WorldComponentInitializer; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; +import org.ladysnake.cca.api.v3.component.ComponentKey; +import org.ladysnake.cca.api.v3.component.ComponentRegistryV3; +import org.ladysnake.cca.api.v3.world.WorldComponentFactoryRegistry; +import org.ladysnake.cca.api.v3.world.WorldComponentInitializer; public class Components implements WorldComponentInitializer { private static final ComponentKey eventSchedulerComponentKey = ComponentRegistryV3.INSTANCE.getOrCreate( diff --git a/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/ILevelEventSchedulerComponent.java b/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/ILevelEventSchedulerComponent.java index f527a37..5da5ae2 100644 --- a/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/ILevelEventSchedulerComponent.java +++ b/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/ILevelEventSchedulerComponent.java @@ -1,7 +1,7 @@ package com.cerbon.cerbons_api.fabric.cardinalComponents; import com.cerbon.cerbons_api.api.general.event.EventScheduler; -import dev.onyxstudios.cca.api.v3.component.ComponentV3; +import org.ladysnake.cca.api.v3.component.ComponentV3; public interface ILevelEventSchedulerComponent extends ComponentV3 { diff --git a/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/LevelEventScheduler.java b/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/LevelEventScheduler.java index 05f61a5..5af1ace 100644 --- a/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/LevelEventScheduler.java +++ b/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/cardinalComponents/LevelEventScheduler.java @@ -1,10 +1,11 @@ package com.cerbon.cerbons_api.fabric.cardinalComponents; import com.cerbon.cerbons_api.api.general.event.EventScheduler; -import dev.onyxstudios.cca.api.v3.component.tick.ClientTickingComponent; -import dev.onyxstudios.cca.api.v3.component.tick.ServerTickingComponent; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.Level; +import org.ladysnake.cca.api.v3.component.tick.ClientTickingComponent; +import org.ladysnake.cca.api.v3.component.tick.ServerTickingComponent; public class LevelEventScheduler implements ILevelEventSchedulerComponent, ServerTickingComponent, ClientTickingComponent { private final EventScheduler eventScheduler = new EventScheduler(); @@ -27,12 +28,12 @@ public void serverTick() { } @Override - public void readFromNbt(CompoundTag tag) { + public void readFromNbt(CompoundTag tag, HolderLookup.Provider provider) { // NO-OP } @Override - public void writeToNbt(CompoundTag tag) { + public void writeToNbt(CompoundTag tag, HolderLookup.Provider provider) { // NO-OP } } diff --git a/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/network/FabricNetworkHandler.java b/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/network/FabricNetworkHandler.java index b5ca3be..d726617 100644 --- a/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/network/FabricNetworkHandler.java +++ b/Fabric/src/main/java/com/cerbon/cerbons_api/fabric/network/FabricNetworkHandler.java @@ -1,79 +1,76 @@ package com.cerbon.cerbons_api.fabric.network; +import com.cerbon.cerbons_api.api.network.Network; import com.cerbon.cerbons_api.api.network.PacketRegistrationHandler; 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 com.cerbon.cerbons_api.util.Constants; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; -import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; -import java.util.function.BiConsumer; +import java.util.Set; public class FabricNetworkHandler extends PacketRegistrationHandler { - private final Map, Message> CHANNELS = new HashMap<>(); + private static final Set REGISTERED_CHANNELS = new HashSet<>(); + private final Map> CHANNELS = new HashMap<>(); public FabricNetworkHandler(Side side) { super(side); } @Override - protected void registerPacket(PacketContainer container) { - if (CHANNELS.get(container.messageType()) == null) { - CHANNELS.put(container.messageType(), new Message<>(container.packetIdentifier(), container.encoder())); + protected void registerPacket(PacketContainer container) { + if (!CHANNELS.containsKey(container.packetIdentifier())) { + CustomPacketPayload.Type type = Network.getType(container.packetIdentifier()); + CHANNELS.put(container.packetIdentifier(), type); + + if (!REGISTERED_CHANNELS.contains(container.packetIdentifier())) { + PayloadTypeRegistry.playS2C().register(type, container.codec()); + PayloadTypeRegistry.playC2S().register(type, container.codec()); + REGISTERED_CHANNELS.add(container.packetIdentifier()); + } + if (Side.CLIENT.equals(this.side)) { - Constants.LOGGER.debug("Registering packet {} : {} on the: {}", container.packetIdentifier(), container.messageType(), Side.CLIENT); + Constants.LOGGER.debug("Registering packet {} on the: {}", container.packetIdentifier(), Side.CLIENT); - ClientPlayNetworking.registerGlobalReceiver(container.packetIdentifier(), ((client, listener, buf, responseSender) -> { - buf.readByte(); // handle forge discriminator - T message = container.decoder().apply(buf); - client.execute(() -> container.handler().accept(new PacketContext<>(message, Side.CLIENT))); + ClientPlayNetworking.registerGlobalReceiver(type, ((message, ctx) -> { + ctx.client().execute(() -> container.handler().accept(new PacketContext<>(message, Side.CLIENT))); })); } else { - Constants.LOGGER.debug("Registering packet {} : {} on the: {}", container.packetIdentifier(), container.messageType(), Side.SERVER); + Constants.LOGGER.debug("Registering packet {} on the: {}", container.packetIdentifier(), Side.SERVER); - ServerPlayNetworking.registerGlobalReceiver(container.packetIdentifier(), ((server, player, listener, buf, responseSender) -> { - buf.readByte(); // handle forge discriminator - T message = container.decoder().apply(buf); - server.execute(() -> container.handler().accept(new PacketContext<>(player, message, Side.SERVER))); + ServerPlayNetworking.registerGlobalReceiver(type, ((message, ctx) -> { + ctx.server().execute(() -> container.handler().accept(new PacketContext<>(ctx.player(), message, Side.SERVER))); })); } } } @Override - public void sendToServer(T packet) { + public void sendToServer(T packet) { this.sendToServer(packet, false); } @Override - public void sendToServer(T packet, boolean ignoreCheck) { - Message message = (Message) CHANNELS.get(packet.getClass()); - if (ClientPlayNetworking.canSend(message.id()) || ignoreCheck) { - FriendlyByteBuf buf = PacketByteBufs.create(); - buf.writeByte(0); // handle forge discriminator - message.encoder().accept(packet, buf); - ClientPlayNetworking.send(message.id(), buf); + public void sendToServer(T packet, boolean ignoreCheck) { + if (ClientPlayNetworking.canSend(packet.type().id()) || ignoreCheck) { + ClientPlayNetworking.send(packet); } } @Override - public void sendToClient(T packet, ServerPlayer player) { - Message message = (Message) CHANNELS.get(packet.getClass()); - if (ServerPlayNetworking.canSend(player, message.id())) { - FriendlyByteBuf buf = PacketByteBufs.create(); - buf.writeByte(0); // handle forge discriminator - message.encoder().accept(packet, buf); - ServerPlayNetworking.send(player, message.id(), buf); + public void sendToClient(T packet, ServerPlayer player) { + if (ServerPlayNetworking.canSend(player, packet.type().id())) { + ServerPlayNetworking.send(player, packet); } } - - public record Message(ResourceLocation id, BiConsumer encoder) {} } diff --git a/Forge/build.gradle b/Forge/build.gradle index 5614a2c..dc2e290 100644 --- a/Forge/build.gradle +++ b/Forge/build.gradle @@ -1,7 +1,7 @@ import net.darkhax.curseforgegradle.TaskPublishCurseForge plugins { - id "com.github.johnrengelman.shadow" version "7.1.2" + id "com.gradleup.shadow" version "8.3.3" id 'net.darkhax.curseforgegradle' version '1.1.18' id "com.modrinth.minotaur" version "2.+" } diff --git a/Forge/src/main/java/com/cerbon/cerbons_api/forge/CerbonsAPIForge.java b/Forge/src/main/java/com/cerbon/cerbons_api/forge/CerbonsAPIForge.java index 833e43b..38a025e 100644 --- a/Forge/src/main/java/com/cerbon/cerbons_api/forge/CerbonsAPIForge.java +++ b/Forge/src/main/java/com/cerbon/cerbons_api/forge/CerbonsAPIForge.java @@ -1,15 +1,26 @@ package com.cerbon.cerbons_api.forge; import com.cerbon.cerbons_api.CerbonsAPI; +import com.cerbon.cerbons_api.api.network.data.Side; +import com.cerbon.cerbons_api.forge.network.ForgeNetworkHandler; import com.cerbon.cerbons_api.util.Constants; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.fml.loading.FMLLoader; @Mod(Constants.MOD_ID) public class CerbonsAPIForge { + private static ForgeNetworkHandler handler; + + public static ForgeNetworkHandler getHandler() { + return handler; + } public CerbonsAPIForge() { CerbonsAPI.init(); MinecraftForge.EVENT_BUS.register(this); + handler = new ForgeNetworkHandler(FMLLoader.getDist().isClient() ? Side.CLIENT : Side.SERVER); + FMLJavaModLoadingContext.get().getModEventBus().register(handler); } } \ No newline at end of file diff --git a/Forge/src/main/java/com/cerbon/cerbons_api/forge/event/CerbonsApiForgeEvents.java b/Forge/src/main/java/com/cerbon/cerbons_api/forge/event/CerbonsApiForgeEvents.java index 314ea0e..f291293 100644 --- a/Forge/src/main/java/com/cerbon/cerbons_api/forge/event/CerbonsApiForgeEvents.java +++ b/Forge/src/main/java/com/cerbon/cerbons_api/forge/event/CerbonsApiForgeEvents.java @@ -1,19 +1,17 @@ package com.cerbon.cerbons_api.forge.event; import com.cerbon.cerbons_api.api.network.CommonNetwork; -import com.cerbon.cerbons_api.api.network.data.Side; -import com.cerbon.cerbons_api.forge.network.ForgeNetworkHandler; +import com.cerbon.cerbons_api.forge.CerbonsAPIForge; import com.cerbon.cerbons_api.util.Constants; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.loading.FMLLoader; @Mod.EventBusSubscriber(modid = Constants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public class CerbonsApiForgeEvents { @SubscribeEvent public static void onCommonSetupEvent(FMLCommonSetupEvent event) { - new CommonNetwork(new ForgeNetworkHandler(FMLLoader.getDist().isClient() ? Side.CLIENT : Side.SERVER)); + new CommonNetwork(CerbonsAPIForge.getHandler()); } } diff --git a/Forge/src/main/java/com/cerbon/cerbons_api/forge/network/ForgeNetworkHandler.java b/Forge/src/main/java/com/cerbon/cerbons_api/forge/network/ForgeNetworkHandler.java index 9d6ae0e..8e8c8bd 100644 --- a/Forge/src/main/java/com/cerbon/cerbons_api/forge/network/ForgeNetworkHandler.java +++ b/Forge/src/main/java/com/cerbon/cerbons_api/forge/network/ForgeNetworkHandler.java @@ -1,5 +1,6 @@ package com.cerbon.cerbons_api.forge.network; +import com.cerbon.cerbons_api.api.network.Network; import com.cerbon.cerbons_api.api.network.PacketRegistrationHandler; import com.cerbon.cerbons_api.api.network.data.PacketContainer; import com.cerbon.cerbons_api.api.network.data.PacketContext; @@ -7,11 +8,14 @@ import com.cerbon.cerbons_api.util.Constants; import net.minecraft.client.Minecraft; import net.minecraft.network.Connection; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.event.network.CustomPayloadEvent; +import net.minecraftforge.network.Channel; import net.minecraftforge.network.ChannelBuilder; import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.network.SimpleChannel; +import net.minecraftforge.network.payload.PayloadConnection; import java.util.HashMap; import java.util.Map; @@ -19,39 +23,38 @@ import java.util.function.Consumer; public class ForgeNetworkHandler extends PacketRegistrationHandler { - private final Map, SimpleChannel> CHANNELS = new HashMap<>(); + private final Map> CHANNELS = new HashMap<>(); public ForgeNetworkHandler(Side side) { super(side); } - protected void registerPacket(PacketContainer container) { - if (CHANNELS.get(container.messageType()) == null) { + protected void registerPacket(PacketContainer container) { + if (CHANNELS.get(container.packetIdentifier()) == null) { - SimpleChannel channel = ChannelBuilder + PayloadConnection builder = ChannelBuilder .named(container.packetIdentifier()) .clientAcceptedVersions((s, v) -> true) .serverAcceptedVersions((s, v) -> true) .networkProtocolVersion(1) - .simpleChannel(); + .payloadChannel(); - channel.messageBuilder(container.messageType()) - .decoder(container.decoder()) - .encoder(container.encoder()) - .consumerNetworkThread(buildHandler(container.handler())) - .add(); + var channel = builder.play() + .bidirectional() + .add(Network.getType(container.packetIdentifier()), container.codec(), buildHandler(container.handler())) + .build(); - Constants.LOGGER.debug("Registering packet {} : {} on the: {}", container.packetIdentifier(), container.messageType(), this.side); - CHANNELS.put(container.messageType(), channel); + Constants.LOGGER.debug("Registering packet {} on the: {}", container.packetIdentifier(), this.side); + CHANNELS.put(container.packetIdentifier(), channel); } } - public void sendToServer(T packet) { + public void sendToServer(T packet) { this.sendToServer(packet, false); } - public void sendToServer(T packet, boolean ignoreCheck) { - SimpleChannel channel = CHANNELS.get(packet.getClass()); + public void sendToServer(T packet, boolean ignoreCheck) { + Channel channel = CHANNELS.get(packet.type().id()); Connection connection = Minecraft.getInstance().getConnection().getConnection(); try { if (ignoreCheck || channel.isRemotePresent(connection)) @@ -62,8 +65,8 @@ public void sendToServer(T packet, boolean ignoreCheck) { } } - public void sendToClient(T packet, ServerPlayer player) { - SimpleChannel channel = CHANNELS.get(packet.getClass()); + public void sendToClient(T packet, ServerPlayer player) { + Channel channel = CHANNELS.get(packet.type().id()); Connection connection = player.connection.getConnection(); try { if (channel.isRemotePresent(connection)) @@ -74,10 +77,10 @@ public void sendToClient(T packet, ServerPlayer player) { } } - private BiConsumer buildHandler(Consumer> handler) { + private BiConsumer buildHandler(Consumer> handler) { return (message, ctx) -> { ctx.enqueueWork(() -> { - Side side = ctx.getDirection().getReceptionSide().isServer() ? Side.SERVER : Side.CLIENT; + Side side = ctx.isServerSide() ? Side.SERVER : Side.CLIENT; ServerPlayer player = ctx.getSender(); handler.accept(new PacketContext<>(player, message, side)); }); diff --git a/NeoForge/build.gradle b/NeoForge/build.gradle index 134870c..46dbebb 100644 --- a/NeoForge/build.gradle +++ b/NeoForge/build.gradle @@ -1,7 +1,7 @@ import net.darkhax.curseforgegradle.TaskPublishCurseForge plugins { - id "com.github.johnrengelman.shadow" version "7.1.2" + id "com.gradleup.shadow" version "8.3.3" id 'net.darkhax.curseforgegradle' version '1.1.18' id "com.modrinth.minotaur" version "2.+" } diff --git a/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/attachment/saved_data/LevelEventScheduler.java b/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/attachment/saved_data/LevelEventScheduler.java index f50d51c..2a0c562 100644 --- a/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/attachment/saved_data/LevelEventScheduler.java +++ b/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/attachment/saved_data/LevelEventScheduler.java @@ -1,6 +1,7 @@ package com.cerbon.cerbons_api.neoforge.attachment.saved_data; import com.cerbon.cerbons_api.api.general.event.EventScheduler; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; @@ -14,13 +15,13 @@ public class LevelEventScheduler extends SavedData { private EventScheduler eventScheduler; public LevelEventScheduler() { - this(new CompoundTag()); + this(new CompoundTag(), null); } - public LevelEventScheduler(CompoundTag tag) {} + public LevelEventScheduler(CompoundTag tag, HolderLookup.Provider provider) {} @Override - public @NotNull CompoundTag save(@NotNull CompoundTag tag) { + public @NotNull CompoundTag save(@NotNull CompoundTag tag, HolderLookup.Provider provider) { return tag; } diff --git a/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/event/NeoForgeEvents.java b/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/event/NeoForgeEvents.java index bba8fe3..46ea9aa 100644 --- a/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/event/NeoForgeEvents.java +++ b/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/event/NeoForgeEvents.java @@ -3,11 +3,11 @@ import com.cerbon.cerbons_api.neoforge.attachment.saved_data.LevelEventScheduler; import com.cerbon.cerbons_api.util.Constants; import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.Mod; +import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent; -import net.neoforged.neoforge.event.TickEvent; +import net.neoforged.neoforge.event.tick.LevelTickEvent; -@Mod.EventBusSubscriber(modid = Constants.MOD_ID) +@EventBusSubscriber(modid = Constants.MOD_ID) public class NeoForgeEvents { @SubscribeEvent @@ -16,8 +16,8 @@ public static void onPlayerLogging(ClientPlayerNetworkEvent.LoggingIn event) { } @SubscribeEvent - public static void onLevelTick(TickEvent.LevelTickEvent event) { - if (event.level.getGameTime() % 2 == 0) - LevelEventScheduler.get(event.level).updateEvents(); + public static void onLevelTick(LevelTickEvent event) { + if (event.getLevel().getGameTime() % 2 == 0) + LevelEventScheduler.get(event.getLevel()).updateEvents(); } } diff --git a/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgeNetworkHandler.java b/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgeNetworkHandler.java index d58d023..8a867fa 100644 --- a/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgeNetworkHandler.java +++ b/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgeNetworkHandler.java @@ -1,100 +1,93 @@ package com.cerbon.cerbons_api.neoforge.network; +import com.cerbon.cerbons_api.api.network.Network; import com.cerbon.cerbons_api.api.network.PacketRegistrationHandler; 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 com.cerbon.cerbons_api.util.Constants; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.LogicalSide; import net.neoforged.neoforge.network.PacketDistributor; -import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; import net.neoforged.neoforge.network.handling.IPayloadHandler; -import net.neoforged.neoforge.network.registration.IPayloadRegistrar; +import net.neoforged.neoforge.network.registration.NetworkRegistry; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; -import java.util.function.Function; public class NeoForgeNetworkHandler extends PacketRegistrationHandler { - private final Map, NeoForgePacketContainer> PACKETS = new HashMap<>(); + private final Map> PACKETS = new HashMap<>(); public NeoForgeNetworkHandler(Side side) { super(side); } @SubscribeEvent - public void register(final RegisterPayloadHandlerEvent event) { + public void register(final RegisterPayloadHandlersEvent event) { if (!PACKETS.isEmpty()) { PACKETS.forEach((type, container) -> { - final IPayloadRegistrar registrar = event.registrar(container.packetIdentifier().getNamespace()); - registrar.common( - container.packetIdentifier(), - container.decoder(), - container.handler()); + final PayloadRegistrar registrar = event.registrar(container.packetIdentifier().getNamespace()); + registrar.commonBidirectional( + Network.getType(container.packetIdentifier()), + (StreamCodec) (Object) container.codec(), + (IPayloadHandler) container.handler()); }); } } - protected void registerPacket(PacketContainer container) { - if (PACKETS.get(container.messageType()) == null) { - var packetContainer = new NeoForgePacketContainer<>( - container.messageType(), + protected void registerPacket(PacketContainer container) { + if (PACKETS.get(container.packetIdentifier()) == null) { + var packetContainer = new NeoForgePacketContainer( container.packetIdentifier(), - container.encoder(), - decoder(container.decoder()), + container.codec(), buildHandler(container.handler()) ); - PACKETS.put(container.messageType(), packetContainer); + PACKETS.put(container.packetIdentifier(), packetContainer); } } - private FriendlyByteBuf.Reader> decoder(Function decoder) { - return (buf -> { - T packet = decoder.apply(buf); - return new NeoForgePacket(PACKETS.get(packet.getClass()), packet); - }); - } - - public void sendToServer(T packet) { + public void sendToServer(T packet) { this.sendToServer(packet, false); } - public void sendToServer(T packet, boolean ignoreCheck) { - NeoForgePacketContainer container = PACKETS.get(packet.getClass()); + public void sendToServer(T packet, boolean ignoreCheck) { try { - PacketDistributor.SERVER.noArg().send(new NeoForgePacket<>(container, packet)); + PacketDistributor.sendToServer(packet); } catch (Throwable t) { Constants.LOGGER.error("{} packet not registered on the client, this is needed.", packet.getClass(), t); } } - public void sendToClient(T packet, ServerPlayer player) { - NeoForgePacketContainer container = PACKETS.get(packet.getClass()); + public void sendToClient(T packet, ServerPlayer player) { try { - if (player.connection.isConnected(container.packetIdentifier())) - PacketDistributor.PLAYER.with(player).send(new NeoForgePacket<>(container, packet)); + if (NetworkRegistry.hasChannel(player.connection, packet.type().id())) + PacketDistributor.sendToPlayer(player, packet); } catch (Throwable t) { Constants.LOGGER.error("{} packet not registered on the server, this is needed.", packet.getClass(), t); } } - private > IPayloadHandler buildHandler(Consumer> handler) { + private IPayloadHandler buildHandler(Consumer> handler) { return (payload, ctx) -> { try { Side side = ctx.flow().getReceptionSide().equals(LogicalSide.SERVER) ? Side.SERVER : Side.CLIENT; - Player player = ctx.player().orElse(null); - handler.accept(new PacketContext<>(player instanceof ServerPlayer serverPlayer ? serverPlayer : null, payload.packet(), side)); + Player player = ctx.player(); + handler.accept(new PacketContext<>(player instanceof ServerPlayer serverPlayer ? serverPlayer : null, payload, side)); } catch (Throwable t) { - Constants.LOGGER.error("Error handling packet: {} -> ", payload.packet().getClass(), t); + Constants.LOGGER.error("Error handling packet: {} -> ", payload.type().id(), t); } }; } diff --git a/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgePacket.java b/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgePacket.java deleted file mode 100644 index c2f7116..0000000 --- a/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgePacket.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.cerbon.cerbons_api.neoforge.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.NotNull; - -public record NeoForgePacket(NeoForgePacketContainer container, T packet) implements CustomPacketPayload { - - @Override - public void write(@NotNull FriendlyByteBuf buff) { - container().encoder().accept(packet(), buff); - } - - @Override - public @NotNull ResourceLocation id() { - return container().packetIdentifier(); - } -} \ No newline at end of file diff --git a/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgePacketContainer.java b/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgePacketContainer.java index 6ea1c53..cec7d2d 100644 --- a/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgePacketContainer.java +++ b/NeoForge/src/main/java/com/cerbon/cerbons_api/neoforge/network/NeoForgePacketContainer.java @@ -1,15 +1,13 @@ package com.cerbon.cerbons_api.neoforge.network; -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 net.neoforged.neoforge.network.handling.IPayloadHandler; -import java.util.function.BiConsumer; - -public record NeoForgePacketContainer(Class messageType, - ResourceLocation packetIdentifier, - BiConsumer encoder, - FriendlyByteBuf.Reader> decoder, - IPayloadHandler> handler) +public record NeoForgePacketContainer(ResourceLocation packetIdentifier, + StreamCodec codec, + IPayloadHandler handler) { } diff --git a/build.gradle b/build.gradle index e322eca..16c1cea 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.4-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.7-SNAPSHOT" apply false } architectury { @@ -19,7 +19,7 @@ subprojects { mappings loom.layered() { officialMojangMappings() - parchment("org.parchmentmc.data:parchment-1.20.2:${mapping_version}@zip") + parchment("org.parchmentmc.data:parchment-1.20.6:${mapping_version}@zip") } } } @@ -48,7 +48,7 @@ allprojects { tasks.withType(JavaCompile) { options.encoding = "UTF-8" - options.release.set(17) + options.release.set(21) } java { diff --git a/gradle.properties b/gradle.properties index 060ce48..77f03e6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,27 +3,27 @@ mod_version=1.1.1 maven_group=com.cerbon.cerbons_api # Minecraft -minecraft_version=1.20.4 -minecraft_version_range_forge=[1.20.4,1.21) -minecraft_version_range_fabric=>=1.20.4 +minecraft_version=1.20.6 +minecraft_version_range_forge=[1.20.6,1.21) +minecraft_version_range_fabric=>=1.20.6 # Forge -forge_version=49.0.19 -forge_version_range=[49,) -loader_version_range=[49,) +forge_version=50.0.20 +forge_version_range=[50,) +loader_version_range=[50,) # Fabric -fabric_loader_version=0.15.6 -fabric_api_version=0.91.1 -fabric_loader_version_range=>=0.15.6 +fabric_loader_version=0.16.7 +fabric_api_version=0.100.8 +fabric_loader_version_range=>=0.16.7 # NeoForge -neo_version=20.4.117-beta -neo_version_range=[20.4,) +neo_version=20.6.121 +neo_version_range=[20.6,) neo_loader_version_range=[1,) # Mappings -mapping_version=2023.12.10 +mapping_version=2024.06.16 # Mod Properties mod_id=cerbons_api @@ -38,7 +38,7 @@ curseforge_url=https://www.curseforge.com/minecraft/mc-mods/cerbons-api logo_file=logo.png # Fabric dependencies -cardinal_components_version=5.4.0 +cardinal_components_version=6.0.0 # CurseForge Gradle and Minotaur curseforge_project_id=955605 @@ -48,7 +48,7 @@ release_type=release changelog_type=markdown changelog=CHANGELOG.md -game_versions=1.20.4 +game_versions=1.20.6 required_dependencies_forge=cerbons-api required_dependencies_fabric=fabric-api, cerbons-api diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 136ea08..0d8ab51 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1 +1 @@ -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip