From b7cd53545e9b42c50b57236f235499f6a708242f Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 12:55:57 +1100 Subject: [PATCH 01/17] bump all versions --- gradle.properties | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index bea439f7..2e770191 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,12 +13,12 @@ archives_base_name_snapshot=architectury-snapshot base_version=11.0 maven_group=dev.architectury -fabric_loader_version=0.15.1 -fabric_api_version=0.91.1+1.20.4 -mod_menu_version=7.0.0 +fabric_loader_version=0.15.3 +fabric_api_version=0.92.0+1.20.4 +mod_menu_version=9.0.0 -forge_version=49.0.3 -neoforge_version=20.4.46-beta +forge_version=49.0.14 +neoforge_version=20.4.77-beta curseforge_id=419699 modrinth_id=lhGA9TYQ From dc2639835afea6c42304218c22902b479bc0b8f0 Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 12:56:09 +1100 Subject: [PATCH 02/17] fix explosion hooks --- .../dev/architectury/hooks/level/forge/ExplosionHooksImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge/src/main/java/dev/architectury/hooks/level/forge/ExplosionHooksImpl.java b/forge/src/main/java/dev/architectury/hooks/level/forge/ExplosionHooksImpl.java index 60041716..9030149a 100644 --- a/forge/src/main/java/dev/architectury/hooks/level/forge/ExplosionHooksImpl.java +++ b/forge/src/main/java/dev/architectury/hooks/level/forge/ExplosionHooksImpl.java @@ -24,6 +24,6 @@ public class ExplosionHooksImpl { public static Vec3 getPosition(Explosion explosion) { - return explosion.getPosition(); + return explosion.center(); } } From 5a040b12f374610a6bda87d652f41da0e020747d Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 12:56:24 +1100 Subject: [PATCH 03/17] require neoforge 20.4.77 --- neoforge/src/main/resources/META-INF/mods.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neoforge/src/main/resources/META-INF/mods.toml b/neoforge/src/main/resources/META-INF/mods.toml index 56393a32..c48ce5bf 100644 --- a/neoforge/src/main/resources/META-INF/mods.toml +++ b/neoforge/src/main/resources/META-INF/mods.toml @@ -24,7 +24,7 @@ side = "BOTH" [[dependencies.architectury]] modId = "neoforge" type = "required" -versionRange = "[20.4.40-beta,)" +versionRange = "[20.4.77-beta,)" ordering = "NONE" side = "BOTH" From eded9b07f0eda7cb23debaa95aec3c76607c1b05 Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:15:24 +1100 Subject: [PATCH 04/17] try fix neoforge networking --- .../forge/BufCustomPacketPayload.java | 27 +++++ .../forge/ClientNetworkingManager.java | 3 +- .../networking/forge/NetworkManagerImpl.java | 101 +++++++++++------- .../registry/menu/forge/MenuRegistryImpl.java | 4 +- .../architectury/test/entity/TestEntity.java | 2 + 5 files changed, 97 insertions(+), 40 deletions(-) create mode 100644 neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java b/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java new file mode 100644 index 00000000..204cf33c --- /dev/null +++ b/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java @@ -0,0 +1,27 @@ +package dev.architectury.networking.forge; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public class BufCustomPacketPayload implements CustomPacketPayload { + + private final FriendlyByteBuf buf; + + public BufCustomPacketPayload(FriendlyByteBuf buf) { + this.buf = buf; + } + @Override + public void write(FriendlyByteBuf arg) { + arg.writeBytes(buf); + } + + @Override + public ResourceLocation id() { + return new ResourceLocation("architectury:network"); + } + + public FriendlyByteBuf getBuf() { + return buf; + } +} diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java b/neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java index 0c15977b..c883373d 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java @@ -28,7 +28,6 @@ import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent; import net.neoforged.neoforge.common.NeoForge; -import net.neoforged.neoforge.network.PlayNetworkDirection; import java.util.Collections; import java.util.Set; @@ -36,7 +35,7 @@ @OnlyIn(Dist.CLIENT) public class ClientNetworkingManager { public static void initClient() { - NetworkManagerImpl.CHANNEL.addListener(NetworkManagerImpl.createPacketHandler(PlayNetworkDirection.PLAY_TO_CLIENT, NetworkManagerImpl.S2C_TRANSFORMERS)); + NetworkManagerImpl.s2c = NetworkManagerImpl.createPacketHandler(NetworkManager.Side.S2C, NetworkManagerImpl.S2C_TRANSFORMERS); NeoForge.EVENT_BUS.register(ClientNetworkingManager.class); NetworkManagerImpl.registerS2CReceiver(NetworkManagerImpl.SYNC_IDS, Collections.emptyList(), (buffer, context) -> { diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java index 05241d3f..271d9697 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java @@ -31,6 +31,9 @@ import io.netty.buffer.Unpooled; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.PacketFlow; +import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; +import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; @@ -43,12 +46,14 @@ import net.neoforged.fml.LogicalSide; import net.neoforged.fml.common.Mod; import net.neoforged.neoforge.event.entity.player.PlayerEvent; -import net.neoforged.neoforge.network.*; -import net.neoforged.neoforge.network.event.EventNetworkChannel; +// import net.neoforged.neoforge.network.event.EventNetworkChannel; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent; +import net.neoforged.neoforge.network.handling.IPayloadContext; +import net.neoforged.neoforge.network.handling.IPlayPayloadHandler; +import net.neoforged.neoforge.network.registration.IPayloadRegistrar; import org.slf4j.Logger; import java.util.*; -import java.util.function.Consumer; @Mod.EventBusSubscriber(modid = ArchitecturyConstants.MOD_ID) public class NetworkManagerImpl { @@ -67,7 +72,8 @@ public static Packet toPacket(NetworkManager.Side side, ResourceLocation id, FriendlyByteBuf packetBuffer = new FriendlyByteBuf(Unpooled.buffer()); packetBuffer.writeResourceLocation(id); packetBuffer.writeBytes(buffer); - return (side == NetworkManager.Side.C2S ? PlayNetworkDirection.PLAY_TO_SERVER : PlayNetworkDirection.PLAY_TO_CLIENT).buildPacket(new INetworkDirection.PacketData(packetBuffer, 0), CHANNEL_ID); + Packet packet = side == NetworkManager.Side.C2S ? new ServerboundCustomPayloadPacket(new BufCustomPacketPayload(packetBuffer)) : new ClientboundCustomPayloadPacket(new BufCustomPacketPayload(packetBuffer)); + return packet; } public static void collectPackets(PacketSink sink, NetworkManager.Side side, ResourceLocation id, FriendlyByteBuf buf) { @@ -84,7 +90,7 @@ public static void collectPackets(PacketSink sink, NetworkManager.Side side, Res private static final Logger LOGGER = LogUtils.getLogger(); private static final ResourceLocation CHANNEL_ID = new ResourceLocation("architectury:network"); static final ResourceLocation SYNC_IDS = new ResourceLocation("architectury:sync_ids"); - static final EventNetworkChannel CHANNEL = NetworkRegistry.ChannelBuilder.named(CHANNEL_ID).networkProtocolVersion(() -> "").clientAcceptedVersions(version -> true).serverAcceptedVersions(version -> true).eventNetworkChannel(); + //static final EventNetworkChannel CHANNEL = NetworkRegistry.ChannelBuilder.named(CHANNEL_ID).networkProtocolVersion(() -> "").clientAcceptedVersions(version -> true).serverAcceptedVersions(version -> true).eventNetworkChannel(); static final Map S2C = Maps.newHashMap(); static final Map C2S = Maps.newHashMap(); static final Map S2C_TRANSFORMERS = Maps.newHashMap(); @@ -92,54 +98,45 @@ public static void collectPackets(PacketSink sink, NetworkManager.Side side, Res static final Set serverReceivables = Sets.newHashSet(); private static final Multimap clientReceivables = Multimaps.newMultimap(Maps.newHashMap(), Sets::newHashSet); - static { - CHANNEL.addListener(createPacketHandler(PlayNetworkDirection.PLAY_TO_SERVER, C2S_TRANSFORMERS)); - - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientNetworkingManager::initClient); - - registerC2SReceiver(SYNC_IDS, Collections.emptyList(), (buffer, context) -> { - Set receivables = (Set) clientReceivables.get(context.getPlayer()); - int size = buffer.readInt(); - receivables.clear(); - for (int i = 0; i < size; i++) { - receivables.add(buffer.readResourceLocation()); - } - }); - } - - static Consumer createPacketHandler(INetworkDirection direction, Map map) { - return event -> { - NetworkEvent.Context context = event.getSource(); - if (context.getDirection() != direction) return; - if (context.getPacketHandled()) return; - FriendlyByteBuf buffer = event.getPayload(); - if (buffer == null) return; - ResourceLocation type = buffer.readResourceLocation(); + static IPlayPayloadHandler createPacketHandler(NetworkManager.Side direction, Map map) { + return (arg, iPayloadContext) -> { + LOGGER.info("handling packet " + arg + " " + iPayloadContext.flow().getReceptionSide()); + IPayloadContext context = iPayloadContext; + + NetworkManager.Side side = side(context.flow()); + if (side != direction) return; + // TODO: if (context.getPacketHandled()) return; + // TODO: FriendlyByteBuf buffer = event.getPayload(); + // if (buffer == null) return; + ResourceLocation type = arg.getBuf().readResourceLocation(); PacketTransformer transformer = map.get(type); + if (transformer != null) { - NetworkManager.Side side = context.getDirection().getReceptionSide() == LogicalSide.CLIENT ? NetworkManager.Side.S2C : NetworkManager.Side.C2S; + //NetworkManager.Side side = context.getDirection().getReceptionSide() == LogicalSide.CLIENT ? NetworkManager.Side.S2C : NetworkManager.Side.C2S; NetworkManager.PacketContext packetContext = new NetworkManager.PacketContext() { @Override public Player getPlayer() { - return getEnvironment() == Env.CLIENT ? getClientPlayer() : context.getSender(); + return getEnvironment() == Env.CLIENT ? getClientPlayer() : context.player().orElse(null); } @Override public void queue(Runnable runnable) { - context.enqueueWork(runnable); + context.workHandler().submitAsync(runnable); // FIXME: is this correct? } @Override public Env getEnvironment() { - return context.getDirection().getReceptionSide() == LogicalSide.CLIENT ? Env.CLIENT : Env.SERVER; + return context.flow().getReceptionSide() == LogicalSide.CLIENT ? Env.CLIENT : Env.SERVER; } + @SuppressWarnings("removal") private Player getClientPlayer() { return DistExecutor.unsafeCallWhenOn(Dist.CLIENT, () -> ClientNetworkingManager::getClientPlayer); } }; - transformer.inbound(side, type, buffer, packetContext, (side1, id1, buf1) -> { + + transformer.inbound(side, type, arg.getBuf(), packetContext, (side1, id1, buf1) -> { NetworkReceiver networkReceiver = side == NetworkManager.Side.C2S ? C2S.get(id1) : S2C.get(id1); if (networkReceiver == null) { throw new IllegalArgumentException("Network Receiver not found! " + id1); @@ -149,8 +146,6 @@ private Player getClientPlayer() { } else { LOGGER.error("Unknown message ID: " + type); } - - context.setPacketHandled(true); }; } @@ -178,7 +173,7 @@ public static boolean canPlayerReceive(ServerPlayer player, ResourceLocation id) } public static Packet createAddEntityPacket(Entity entity) { - return NetworkHooks.getEntitySpawningPacket(entity); + return entity.getAddEntityPacket(); } static FriendlyByteBuf sendSyncPacket(Map map) { @@ -200,4 +195,38 @@ public static void loggedIn(PlayerEvent.PlayerLoggedInEvent event) { public static void loggedOut(PlayerEvent.PlayerLoggedOutEvent event) { clientReceivables.removeAll(event.getEntity()); } + + @Mod.EventBusSubscriber(modid = ArchitecturyConstants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) + static class P { + @SubscribeEvent + public static void registerPackets(RegisterPayloadHandlerEvent event) { + //noinspection removal + LOGGER.info("Architectury Packet registered."); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientNetworkingManager::initClient); + + IPayloadRegistrar registrar = event.registrar("architectury")/*.versioned(Platform.getMod("architectury-api").getVersion())*/.optional(); + registrar.play(CHANNEL_ID, BufCustomPacketPayload::new, bufCustomPacketPayloadIPayloadHandlerIDirectionAwarePayloadHandlerBuilder -> { + bufCustomPacketPayloadIPayloadHandlerIDirectionAwarePayloadHandlerBuilder.server(createPacketHandler(NetworkManager.Side.C2S, C2S_TRANSFORMERS)).client(s2c); + }); + //registrar.play() + + + registerC2SReceiver(SYNC_IDS, Collections.emptyList(), (buffer, context) -> { + Set receivables = (Set) clientReceivables.get(context.getPlayer()); + int size = buffer.readInt(); + receivables.clear(); + for (int i = 0; i < size; i++) { + receivables.add(buffer.readResourceLocation()); + } + }); + } + } + + static IPlayPayloadHandler s2c; + + + + static NetworkManager.Side side(PacketFlow flow) { + return flow.isClientbound() ? NetworkManager.Side.S2C : flow.isServerbound() ? NetworkManager.Side.C2S : null; + } } diff --git a/neoforge/src/main/java/dev/architectury/registry/menu/forge/MenuRegistryImpl.java b/neoforge/src/main/java/dev/architectury/registry/menu/forge/MenuRegistryImpl.java index c1c380eb..abc395d2 100644 --- a/neoforge/src/main/java/dev/architectury/registry/menu/forge/MenuRegistryImpl.java +++ b/neoforge/src/main/java/dev/architectury/registry/menu/forge/MenuRegistryImpl.java @@ -33,13 +33,13 @@ import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.OnlyIn; import net.neoforged.neoforge.common.extensions.IMenuTypeExtension; -import net.neoforged.neoforge.network.NetworkHooks; public class MenuRegistryImpl { public static void openExtendedMenu(ServerPlayer player, ExtendedMenuProvider provider) { - NetworkHooks.openScreen(player, provider, provider::saveExtraData); + player.openMenu(provider, provider::saveExtraData); } + @SuppressWarnings("removal") public static MenuType of(SimpleMenuTypeFactory factory) { return new MenuType<>(factory::create, FeatureFlags.VANILLA_SET); } diff --git a/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java b/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java index 9232bef2..a026dc3f 100644 --- a/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java +++ b/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java @@ -20,6 +20,7 @@ package dev.architectury.test.entity; import com.google.common.base.Suppliers; +import dev.architectury.injectables.targets.ArchitecturyTarget; import dev.architectury.networking.NetworkManager; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -41,6 +42,7 @@ public TestEntity(EntityType entityType, Level level) { @Override public Packet getAddEntityPacket() { // Custom packets broken in BundlePacket + if (ArchitecturyTarget.getCurrentTarget().equals("neoforge")) return super.getAddEntityPacket(); return NetworkManager.createAddEntityPacket(this); } } From 52627f1c55bd0b736f5e2f0cd469048b5250fc22 Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:18:28 +1100 Subject: [PATCH 05/17] Update NetworkManagerImpl.java --- .../architectury/networking/forge/NetworkManagerImpl.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java index 271d9697..fa1a6fb1 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java @@ -46,7 +46,6 @@ import net.neoforged.fml.LogicalSide; import net.neoforged.fml.common.Mod; import net.neoforged.neoforge.event.entity.player.PlayerEvent; -// import net.neoforged.neoforge.network.event.EventNetworkChannel; import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent; import net.neoforged.neoforge.network.handling.IPayloadContext; import net.neoforged.neoforge.network.handling.IPlayPayloadHandler; @@ -100,20 +99,15 @@ public static void collectPackets(PacketSink sink, NetworkManager.Side side, Res static IPlayPayloadHandler createPacketHandler(NetworkManager.Side direction, Map map) { return (arg, iPayloadContext) -> { - LOGGER.info("handling packet " + arg + " " + iPayloadContext.flow().getReceptionSide()); IPayloadContext context = iPayloadContext; NetworkManager.Side side = side(context.flow()); if (side != direction) return; - // TODO: if (context.getPacketHandled()) return; - // TODO: FriendlyByteBuf buffer = event.getPayload(); - // if (buffer == null) return; ResourceLocation type = arg.getBuf().readResourceLocation(); PacketTransformer transformer = map.get(type); if (transformer != null) { - //NetworkManager.Side side = context.getDirection().getReceptionSide() == LogicalSide.CLIENT ? NetworkManager.Side.S2C : NetworkManager.Side.C2S; NetworkManager.PacketContext packetContext = new NetworkManager.PacketContext() { @Override public Player getPlayer() { From b7eccf5052c3432cd9642883625f7a481f10660d Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:32:37 +1100 Subject: [PATCH 06/17] make the test entity send packet to client --- .../architectury/test/entity/TestEntity.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java b/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java index a026dc3f..c842d722 100644 --- a/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java +++ b/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java @@ -22,8 +22,13 @@ import com.google.common.base.Suppliers; import dev.architectury.injectables.targets.ArchitecturyTarget; import dev.architectury.networking.NetworkManager; +import io.netty.buffer.Unpooled; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.entity.animal.Cow; @@ -45,4 +50,18 @@ public Packet getAddEntityPacket() { if (ArchitecturyTarget.getCurrentTarget().equals("neoforge")) return super.getAddEntityPacket(); return NetworkManager.createAddEntityPacket(this); } + + @Override + protected void tickDeath() { + super.tickDeath(); + if (!this.level().isClientSide()) { + if (this.getLastAttacker() instanceof ServerPlayer player) { + CompoundTag compoundTag = new CompoundTag(); + compoundTag.putString("DeathCauser", player.getStringUUID()); + FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); + buf.writeNbt(compoundTag); + NetworkManager.sendToPlayer(player, new ResourceLocation("architectury_test", "sync_data"), buf); + } + } + } } From ea6ae1687a2d2c6dd9c89ba3c9256e1ccd2e551f Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:35:29 +1100 Subject: [PATCH 07/17] convert BufCustomPacketPayload to a record --- .../networking/forge/BufCustomPacketPayload.java | 12 ++---------- .../networking/forge/NetworkManagerImpl.java | 4 ++-- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java b/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java index 204cf33c..d8fe6bf4 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java @@ -4,24 +4,16 @@ import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; -public class BufCustomPacketPayload implements CustomPacketPayload { +public record BufCustomPacketPayload(FriendlyByteBuf buf) implements CustomPacketPayload { - private final FriendlyByteBuf buf; - - public BufCustomPacketPayload(FriendlyByteBuf buf) { - this.buf = buf; - } @Override public void write(FriendlyByteBuf arg) { arg.writeBytes(buf); } + @SuppressWarnings("NullableProblems") @Override public ResourceLocation id() { return new ResourceLocation("architectury:network"); } - - public FriendlyByteBuf getBuf() { - return buf; - } } diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java index fa1a6fb1..eb7f9e3b 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java @@ -103,7 +103,7 @@ static IPlayPayloadHandler createPacketHandler(NetworkMa NetworkManager.Side side = side(context.flow()); if (side != direction) return; - ResourceLocation type = arg.getBuf().readResourceLocation(); + ResourceLocation type = arg.buf().readResourceLocation(); PacketTransformer transformer = map.get(type); @@ -130,7 +130,7 @@ private Player getClientPlayer() { } }; - transformer.inbound(side, type, arg.getBuf(), packetContext, (side1, id1, buf1) -> { + transformer.inbound(side, type, arg.buf(), packetContext, (side1, id1, buf1) -> { NetworkReceiver networkReceiver = side == NetworkManager.Side.C2S ? C2S.get(id1) : S2C.get(id1); if (networkReceiver == null) { throw new IllegalArgumentException("Network Receiver not found! " + id1); From 962bebeb9ee4eb82843c285bea45c250f970ff13 Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:40:14 +1100 Subject: [PATCH 08/17] some cleanup --- .../networking/forge/BufCustomPacketPayload.java | 5 ++++- .../networking/forge/NetworkManagerImpl.java | 13 +++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java b/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java index d8fe6bf4..cbbe5911 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java @@ -4,6 +4,9 @@ import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; +/** + * Wraps a {@link FriendlyByteBuf} because NeoForge doesn't easily let us use the buf directly. + */ public record BufCustomPacketPayload(FriendlyByteBuf buf) implements CustomPacketPayload { @Override @@ -14,6 +17,6 @@ public void write(FriendlyByteBuf arg) { @SuppressWarnings("NullableProblems") @Override public ResourceLocation id() { - return new ResourceLocation("architectury:network"); + return NetworkManagerImpl.CHANNEL_ID; } } diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java index eb7f9e3b..ce47400d 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java @@ -87,9 +87,8 @@ public static void collectPackets(PacketSink sink, NetworkManager.Side side, Res } private static final Logger LOGGER = LogUtils.getLogger(); - private static final ResourceLocation CHANNEL_ID = new ResourceLocation("architectury:network"); + static final ResourceLocation CHANNEL_ID = new ResourceLocation("architectury:network"); static final ResourceLocation SYNC_IDS = new ResourceLocation("architectury:sync_ids"); - //static final EventNetworkChannel CHANNEL = NetworkRegistry.ChannelBuilder.named(CHANNEL_ID).networkProtocolVersion(() -> "").clientAcceptedVersions(version -> true).serverAcceptedVersions(version -> true).eventNetworkChannel(); static final Map S2C = Maps.newHashMap(); static final Map C2S = Maps.newHashMap(); static final Map S2C_TRANSFORMERS = Maps.newHashMap(); @@ -98,9 +97,8 @@ public static void collectPackets(PacketSink sink, NetworkManager.Side side, Res private static final Multimap clientReceivables = Multimaps.newMultimap(Maps.newHashMap(), Sets::newHashSet); static IPlayPayloadHandler createPacketHandler(NetworkManager.Side direction, Map map) { - return (arg, iPayloadContext) -> { - IPayloadContext context = iPayloadContext; - + return (arg, context) -> { + NetworkManager.Side side = side(context.flow()); if (side != direction) return; ResourceLocation type = arg.buf().readResourceLocation(); @@ -170,6 +168,7 @@ public static Packet createAddEntityPacket(Entity enti return entity.getAddEntityPacket(); } + @SuppressWarnings("SameParameterValue") static FriendlyByteBuf sendSyncPacket(Map map) { List availableIds = Lists.newArrayList(map.keySet()); FriendlyByteBuf packetBuffer = new FriendlyByteBuf(Unpooled.buffer()); @@ -190,12 +189,14 @@ public static void loggedOut(PlayerEvent.PlayerLoggedOutEvent event) { clientReceivables.removeAll(event.getEntity()); } + /** + * Needs to be on the mod bus for some reason... + */ @Mod.EventBusSubscriber(modid = ArchitecturyConstants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) static class P { @SubscribeEvent public static void registerPackets(RegisterPayloadHandlerEvent event) { //noinspection removal - LOGGER.info("Architectury Packet registered."); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientNetworkingManager::initClient); IPayloadRegistrar registrar = event.registrar("architectury")/*.versioned(Platform.getMod("architectury-api").getVersion())*/.optional(); From ea96e037a9abf68777dba4c6515a53e937bb914f Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:44:45 +1100 Subject: [PATCH 09/17] cleanup explosion hooks --- .../hooks/level/ExplosionHooks.java | 8 +++-- .../level/fabric/ExplosionHooksImpl.java | 33 ------------------- .../mixin/fabric/MixinExplosion.java | 12 +------ .../hooks/level/forge/ExplosionHooksImpl.java | 29 ---------------- 4 files changed, 7 insertions(+), 75 deletions(-) delete mode 100644 fabric/src/main/java/dev/architectury/hooks/level/fabric/ExplosionHooksImpl.java delete mode 100644 forge/src/main/java/dev/architectury/hooks/level/forge/ExplosionHooksImpl.java diff --git a/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java b/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java index 77fb93d5..1713f9a1 100644 --- a/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java +++ b/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java @@ -27,8 +27,12 @@ public final class ExplosionHooks { private ExplosionHooks() { } - @ExpectPlatform + /** + * @deprecated no longer needed. + * @see Explosion#center() + */ + @Deprecated(forRemoval = true) public static Vec3 getPosition(Explosion explosion) { - throw new AssertionError(); + return explosion.center(); } } diff --git a/fabric/src/main/java/dev/architectury/hooks/level/fabric/ExplosionHooksImpl.java b/fabric/src/main/java/dev/architectury/hooks/level/fabric/ExplosionHooksImpl.java deleted file mode 100644 index 96525346..00000000 --- a/fabric/src/main/java/dev/architectury/hooks/level/fabric/ExplosionHooksImpl.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of architectury. - * Copyright (C) 2020, 2021, 2022 architectury - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -package dev.architectury.hooks.level.fabric; - -import net.minecraft.world.level.Explosion; -import net.minecraft.world.phys.Vec3; - -public class ExplosionHooksImpl { - public static Vec3 getPosition(Explosion explosion) { - return ((ExplosionExtensions) explosion).architectury_getPosition(); - } - - public interface ExplosionExtensions { - Vec3 architectury_getPosition(); - } -} diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java index 22b33c78..80c9874f 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java @@ -37,7 +37,7 @@ import java.util.Set; @Mixin(Explosion.class) -public class MixinExplosion implements ExplosionHooksImpl.ExplosionExtensions { +public class MixinExplosion { @Shadow @Final private Level level; @@ -50,20 +50,10 @@ public class MixinExplosion implements ExplosionHooksImpl.ExplosionExtensions { @Shadow @Final private double z; - @Unique - Vec3 position; @Inject(method = "explode", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;(DDD)V", ordinal = 1), locals = LocalCapture.CAPTURE_FAILHARD) private void explodePost(CallbackInfo ci, Set set, int i, float q, int r, int s, int t, int u, int v, int w, List list) { ExplosionEvent.DETONATE.invoker().explode(level, (Explosion) (Object) this, list); } - - @Override - public Vec3 architectury_getPosition() { - if (position == null) { - return position = new Vec3(x, y, z); - } - return position; - } } diff --git a/forge/src/main/java/dev/architectury/hooks/level/forge/ExplosionHooksImpl.java b/forge/src/main/java/dev/architectury/hooks/level/forge/ExplosionHooksImpl.java deleted file mode 100644 index 9030149a..00000000 --- a/forge/src/main/java/dev/architectury/hooks/level/forge/ExplosionHooksImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of architectury. - * Copyright (C) 2020, 2021, 2022 architectury - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -package dev.architectury.hooks.level.forge; - -import net.minecraft.world.level.Explosion; -import net.minecraft.world.phys.Vec3; - -public class ExplosionHooksImpl { - public static Vec3 getPosition(Explosion explosion) { - return explosion.center(); - } -} From 1e977c8d65d62e897dba19f8925da1cae7e19ffd Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:49:17 +1100 Subject: [PATCH 10/17] Update MixinExplosion.java --- .../main/java/dev/architectury/mixin/fabric/MixinExplosion.java | 1 + 1 file changed, 1 insertion(+) diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java index 80c9874f..ef9b317b 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java @@ -51,6 +51,7 @@ public class MixinExplosion { @Final private double z; + @SuppressWarnings("InvalidInjectorMethodSignature") @Inject(method = "explode", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;(DDD)V", ordinal = 1), locals = LocalCapture.CAPTURE_FAILHARD) private void explodePost(CallbackInfo ci, Set set, int i, float q, int r, int s, int t, int u, int v, int w, List list) { From eb6a072a54cd34c103e265658640545211879794 Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:56:55 +1100 Subject: [PATCH 11/17] don't need that --- .../dev/architectury/mixin/fabric/MixinExplosion.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java index ef9b317b..a9c4937d 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java @@ -41,15 +41,6 @@ public class MixinExplosion { @Shadow @Final private Level level; - @Shadow - @Final - private double x; - @Shadow - @Final - private double y; - @Shadow - @Final - private double z; @SuppressWarnings("InvalidInjectorMethodSignature") @Inject(method = "explode", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;(DDD)V", ordinal = 1), From df7d7f668a77d064b0b99d536e4565e6ce568a0e Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:57:29 +1100 Subject: [PATCH 12/17] Update ExplosionHooks.java --- .../java/dev/architectury/hooks/level/ExplosionHooks.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java b/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java index 1713f9a1..84d2abe8 100644 --- a/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java +++ b/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java @@ -23,6 +23,11 @@ import net.minecraft.world.level.Explosion; import net.minecraft.world.phys.Vec3; +/** + * @deprecated no longer needed. + * + */ +@Deprecated(forRemoval = true) public final class ExplosionHooks { private ExplosionHooks() { } From a12d78f66b1c7381ab8879d98c499d0ed5dcc826 Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 17:08:09 +1100 Subject: [PATCH 13/17] there's no point in keeping 1.20.3 support when the networking refactor is 1.20.4 exclusive --- neoforge/src/main/resources/META-INF/mods.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neoforge/src/main/resources/META-INF/mods.toml b/neoforge/src/main/resources/META-INF/mods.toml index c48ce5bf..b4b44a1a 100644 --- a/neoforge/src/main/resources/META-INF/mods.toml +++ b/neoforge/src/main/resources/META-INF/mods.toml @@ -17,7 +17,7 @@ license = "LGPL-3" [[dependencies.architectury]] modId = "minecraft" type = "required" -versionRange = "[1.20.3,)" +versionRange = "[1.20.4,)" ordering = "NONE" side = "BOTH" From 42d05f80f6bbba2257a596c0e3fbb5b5d84d657f Mon Sep 17 00:00:00 2001 From: Jab125 <67534807+Jab125@users.noreply.github.com> Date: Fri, 5 Jan 2024 17:35:17 +1100 Subject: [PATCH 14/17] run `licenseFormat` --- .../forge/BufCustomPacketPayload.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java b/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java index cbbe5911..ffcc0c2b 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java @@ -1,3 +1,22 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + package dev.architectury.networking.forge; import net.minecraft.network.FriendlyByteBuf; From 2d81faba66c5a7b30cfbb348fef6b86908953d84 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 6 Jan 2024 21:15:34 +0800 Subject: [PATCH 15/17] Change styling, fix entity spawn packets on NeoForge, simplify networking code for NeoForge --- .../hooks/level/ExplosionHooks.java | 2 - .../networking}/SpawnEntityPacket.java | 7 +-- .../init/fabric/ArchitecturyClient.java | 2 +- .../networking/fabric/NetworkManagerImpl.java | 1 + .../main/resources/architectury.mixins.json | 1 - .../MixinEntitySpawnExtension.java | 2 +- .../networking/forge/NetworkManagerImpl.java | 21 ++----- .../resources/architectury-forge.mixins.json | 3 +- .../forge/BufCustomPacketPayload.java | 1 - .../forge/ClientNetworkingManager.java | 7 ++- .../networking/forge/NetworkManagerImpl.java | 60 +++++++++---------- .../architectury/test/entity/TestEntity.java | 2 - 12 files changed, 47 insertions(+), 62 deletions(-) rename {fabric/src/main/java/dev/architectury/networking/fabric => common/src/main/java/dev/architectury/networking}/SpawnEntityPacket.java (96%) rename {forge/src/main/java/dev/architectury/mixin/forge => minecraftforge/src/main/java/dev/architectury/mixin/forge/minecraftforge}/MixinEntitySpawnExtension.java (96%) diff --git a/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java b/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java index 84d2abe8..a2f22d2e 100644 --- a/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java +++ b/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java @@ -18,14 +18,12 @@ */ package dev.architectury.hooks.level; - import dev.architectury.injectables.annotations.ExpectPlatform; import net.minecraft.world.level.Explosion; import net.minecraft.world.phys.Vec3; /** * @deprecated no longer needed. - * */ @Deprecated(forRemoval = true) public final class ExplosionHooks { diff --git a/fabric/src/main/java/dev/architectury/networking/fabric/SpawnEntityPacket.java b/common/src/main/java/dev/architectury/networking/SpawnEntityPacket.java similarity index 96% rename from fabric/src/main/java/dev/architectury/networking/fabric/SpawnEntityPacket.java rename to common/src/main/java/dev/architectury/networking/SpawnEntityPacket.java index 2d0435d0..c5b6e73d 100644 --- a/fabric/src/main/java/dev/architectury/networking/fabric/SpawnEntityPacket.java +++ b/common/src/main/java/dev/architectury/networking/SpawnEntityPacket.java @@ -17,13 +17,12 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package dev.architectury.networking.fabric; +package dev.architectury.networking; import dev.architectury.extensions.network.EntitySpawnExtension; -import dev.architectury.networking.NetworkManager; +import io.netty.buffer.Unpooled; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.minecraft.client.Minecraft; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.FriendlyByteBuf; @@ -42,7 +41,7 @@ public static Packet create(Entity entity) { if (entity.level().isClientSide()) { throw new IllegalStateException("SpawnPacketUtil.create called on the logical client!"); } - var buffer = PacketByteBufs.create(); + var buffer = new FriendlyByteBuf(Unpooled.buffer()); buffer.writeVarInt(BuiltInRegistries.ENTITY_TYPE.getId(entity.getType())); buffer.writeUUID(entity.getUUID()); buffer.writeVarInt(entity.getId()); diff --git a/fabric/src/main/java/dev/architectury/init/fabric/ArchitecturyClient.java b/fabric/src/main/java/dev/architectury/init/fabric/ArchitecturyClient.java index 1a9dc0f9..8a248c93 100644 --- a/fabric/src/main/java/dev/architectury/init/fabric/ArchitecturyClient.java +++ b/fabric/src/main/java/dev/architectury/init/fabric/ArchitecturyClient.java @@ -21,7 +21,7 @@ import dev.architectury.event.events.client.ClientLifecycleEvent; import dev.architectury.event.events.common.LifecycleEvent; -import dev.architectury.networking.fabric.SpawnEntityPacket; +import dev.architectury.networking.SpawnEntityPacket; import net.minecraft.client.Minecraft; public class ArchitecturyClient { diff --git a/fabric/src/main/java/dev/architectury/networking/fabric/NetworkManagerImpl.java b/fabric/src/main/java/dev/architectury/networking/fabric/NetworkManagerImpl.java index f1ece981..2401a39c 100644 --- a/fabric/src/main/java/dev/architectury/networking/fabric/NetworkManagerImpl.java +++ b/fabric/src/main/java/dev/architectury/networking/fabric/NetworkManagerImpl.java @@ -22,6 +22,7 @@ import com.mojang.logging.LogUtils; import dev.architectury.networking.NetworkManager; import dev.architectury.networking.NetworkManager.NetworkReceiver; +import dev.architectury.networking.SpawnEntityPacket; import dev.architectury.networking.transformers.PacketSink; import dev.architectury.networking.transformers.PacketTransformer; import dev.architectury.utils.Env; diff --git a/forge/src/main/resources/architectury.mixins.json b/forge/src/main/resources/architectury.mixins.json index 2ebafd4d..92aaea83 100644 --- a/forge/src/main/resources/architectury.mixins.json +++ b/forge/src/main/resources/architectury.mixins.json @@ -9,7 +9,6 @@ "MixinMinecraft" ], "mixins": [ - "MixinEntitySpawnExtension", "MixinFallingBlockEntity", "MixinItemExtension", "MixinLevelEvent", diff --git a/forge/src/main/java/dev/architectury/mixin/forge/MixinEntitySpawnExtension.java b/minecraftforge/src/main/java/dev/architectury/mixin/forge/minecraftforge/MixinEntitySpawnExtension.java similarity index 96% rename from forge/src/main/java/dev/architectury/mixin/forge/MixinEntitySpawnExtension.java rename to minecraftforge/src/main/java/dev/architectury/mixin/forge/minecraftforge/MixinEntitySpawnExtension.java index da75b60d..fd04a90d 100644 --- a/forge/src/main/java/dev/architectury/mixin/forge/MixinEntitySpawnExtension.java +++ b/minecraftforge/src/main/java/dev/architectury/mixin/forge/minecraftforge/MixinEntitySpawnExtension.java @@ -17,7 +17,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package dev.architectury.mixin.forge; +package dev.architectury.mixin.forge.minecraftforge; import dev.architectury.extensions.network.EntitySpawnExtension; import net.minecraft.network.FriendlyByteBuf; diff --git a/minecraftforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java b/minecraftforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java index 635d6410..10052b4b 100644 --- a/minecraftforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java +++ b/minecraftforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java @@ -37,17 +37,18 @@ import net.minecraft.world.entity.player.Player; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.network.CustomPayloadEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.LogicalSide; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.network.*; +import net.minecraftforge.network.ChannelBuilder; +import net.minecraftforge.network.EventNetworkChannel; +import net.minecraftforge.network.NetworkDirection; import org.slf4j.Logger; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.function.Consumer; @@ -179,19 +180,7 @@ public static boolean canPlayerReceive(ServerPlayer player, ResourceLocation id) } public static Packet createAddEntityPacket(Entity entity) { - try { - // I love forge - Constructor constructor = Class.forName("net.minecraftforge.network.packets.SpawnEntity").getDeclaredConstructor(Entity.class); - constructor.setAccessible(true); - Object message = constructor.newInstance(entity); - Packet[] packet = new Packet[1]; - NetworkInitialization.PLAY.send(message, new PacketDistributor.PacketTarget(p -> { - packet[0] = (Packet) p; - }, NetworkDirection.PLAY_TO_CLIENT)); - return Objects.requireNonNull(packet[0], "Expected packet to be sent!"); - } catch (InstantiationException | ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { - throw new RuntimeException(e); - } + return ForgeHooks.getEntitySpawnPacket(entity); } static FriendlyByteBuf sendSyncPacket(Map map) { diff --git a/minecraftforge/src/main/resources/architectury-forge.mixins.json b/minecraftforge/src/main/resources/architectury-forge.mixins.json index a95e797e..a02097dc 100644 --- a/minecraftforge/src/main/resources/architectury-forge.mixins.json +++ b/minecraftforge/src/main/resources/architectury-forge.mixins.json @@ -6,7 +6,8 @@ "client": [ ], "mixins": [ - "minecraftforge.MixinChunkSerializer" + "minecraftforge.MixinChunkSerializer", + "minecraftforge.MixinEntitySpawnExtension" ], "injectors": { "defaultRequire": 1 diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java b/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java index ffcc0c2b..7d7a766d 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/BufCustomPacketPayload.java @@ -27,7 +27,6 @@ * Wraps a {@link FriendlyByteBuf} because NeoForge doesn't easily let us use the buf directly. */ public record BufCustomPacketPayload(FriendlyByteBuf buf) implements CustomPacketPayload { - @Override public void write(FriendlyByteBuf arg) { arg.writeBytes(buf); diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java b/neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java index c883373d..e5532f4f 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java @@ -28,14 +28,15 @@ import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent; import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.network.handling.IPlayPayloadHandler; import java.util.Collections; import java.util.Set; @OnlyIn(Dist.CLIENT) public class ClientNetworkingManager { - public static void initClient() { - NetworkManagerImpl.s2c = NetworkManagerImpl.createPacketHandler(NetworkManager.Side.S2C, NetworkManagerImpl.S2C_TRANSFORMERS); + public static IPlayPayloadHandler initClient() { + var handler = NetworkManagerImpl.createPacketHandler(NetworkManager.Side.S2C, NetworkManagerImpl.S2C_TRANSFORMERS); NeoForge.EVENT_BUS.register(ClientNetworkingManager.class); NetworkManagerImpl.registerS2CReceiver(NetworkManagerImpl.SYNC_IDS, Collections.emptyList(), (buffer, context) -> { @@ -49,6 +50,8 @@ public static void initClient() { NetworkManager.sendToServer(NetworkManagerImpl.SYNC_IDS, NetworkManagerImpl.sendSyncPacket(NetworkManagerImpl.C2S)); }); }); + + return handler; } public static Player getClientPlayer() { diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java index ce47400d..1ffd1bb9 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java @@ -24,8 +24,10 @@ import com.mojang.logging.LogUtils; import dev.architectury.networking.NetworkManager; import dev.architectury.networking.NetworkManager.NetworkReceiver; +import dev.architectury.networking.SpawnEntityPacket; import dev.architectury.networking.transformers.PacketSink; import dev.architectury.networking.transformers.PacketTransformer; +import dev.architectury.platform.hooks.forge.EventBusesHooksImpl; import dev.architectury.utils.ArchitecturyConstants; import dev.architectury.utils.Env; import io.netty.buffer.Unpooled; @@ -47,9 +49,9 @@ import net.neoforged.fml.common.Mod; import net.neoforged.neoforge.event.entity.player.PlayerEvent; import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent; -import net.neoforged.neoforge.network.handling.IPayloadContext; import net.neoforged.neoforge.network.handling.IPlayPayloadHandler; import net.neoforged.neoforge.network.registration.IPayloadRegistrar; +import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import java.util.*; @@ -71,8 +73,7 @@ public static Packet toPacket(NetworkManager.Side side, ResourceLocation id, FriendlyByteBuf packetBuffer = new FriendlyByteBuf(Unpooled.buffer()); packetBuffer.writeResourceLocation(id); packetBuffer.writeBytes(buffer); - Packet packet = side == NetworkManager.Side.C2S ? new ServerboundCustomPayloadPacket(new BufCustomPacketPayload(packetBuffer)) : new ClientboundCustomPayloadPacket(new BufCustomPacketPayload(packetBuffer)); - return packet; + return side == NetworkManager.Side.C2S ? new ServerboundCustomPayloadPacket(new BufCustomPacketPayload(packetBuffer)) : new ClientboundCustomPayloadPacket(new BufCustomPacketPayload(packetBuffer)); } public static void collectPackets(PacketSink sink, NetworkManager.Side side, ResourceLocation id, FriendlyByteBuf buf) { @@ -96,9 +97,15 @@ public static void collectPackets(PacketSink sink, NetworkManager.Side side, Res static final Set serverReceivables = Sets.newHashSet(); private static final Multimap clientReceivables = Multimaps.newMultimap(Maps.newHashMap(), Sets::newHashSet); + static { + EventBusesHooksImpl.whenAvailable(ArchitecturyConstants.MOD_ID, bus -> { + bus.addListener(NetworkManagerImpl::registerPackets); + }); + } + static IPlayPayloadHandler createPacketHandler(NetworkManager.Side direction, Map map) { return (arg, context) -> { - + NetworkManager.Side side = side(context.flow()); if (side != direction) return; ResourceLocation type = arg.buf().readResourceLocation(); @@ -114,7 +121,7 @@ public Player getPlayer() { @Override public void queue(Runnable runnable) { - context.workHandler().submitAsync(runnable); // FIXME: is this correct? + context.workHandler().submitAsync(runnable); } @Override @@ -165,10 +172,9 @@ public static boolean canPlayerReceive(ServerPlayer player, ResourceLocation id) } public static Packet createAddEntityPacket(Entity entity) { - return entity.getAddEntityPacket(); + return SpawnEntityPacket.create(entity); } - @SuppressWarnings("SameParameterValue") static FriendlyByteBuf sendSyncPacket(Map map) { List availableIds = Lists.newArrayList(map.keySet()); FriendlyByteBuf packetBuffer = new FriendlyByteBuf(Unpooled.buffer()); @@ -192,34 +198,26 @@ public static void loggedOut(PlayerEvent.PlayerLoggedOutEvent event) { /** * Needs to be on the mod bus for some reason... */ - @Mod.EventBusSubscriber(modid = ArchitecturyConstants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) - static class P { - @SubscribeEvent - public static void registerPackets(RegisterPayloadHandlerEvent event) { - //noinspection removal - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientNetworkingManager::initClient); + public static void registerPackets(RegisterPayloadHandlerEvent event) { + //noinspection removal + @Nullable + IPlayPayloadHandler s2c = DistExecutor.unsafeCallWhenOn(Dist.CLIENT, () -> ClientNetworkingManager::initClient); - IPayloadRegistrar registrar = event.registrar("architectury")/*.versioned(Platform.getMod("architectury-api").getVersion())*/.optional(); - registrar.play(CHANNEL_ID, BufCustomPacketPayload::new, bufCustomPacketPayloadIPayloadHandlerIDirectionAwarePayloadHandlerBuilder -> { - bufCustomPacketPayloadIPayloadHandlerIDirectionAwarePayloadHandlerBuilder.server(createPacketHandler(NetworkManager.Side.C2S, C2S_TRANSFORMERS)).client(s2c); - }); - //registrar.play() + IPayloadRegistrar registrar = event.registrar("architectury")/*.versioned(Platform.getMod("architectury-api").getVersion())*/.optional(); + registrar.play(CHANNEL_ID, BufCustomPacketPayload::new, builder -> { + builder.server(createPacketHandler(NetworkManager.Side.C2S, C2S_TRANSFORMERS)).client(s2c); + }); - registerC2SReceiver(SYNC_IDS, Collections.emptyList(), (buffer, context) -> { - Set receivables = (Set) clientReceivables.get(context.getPlayer()); - int size = buffer.readInt(); - receivables.clear(); - for (int i = 0; i < size; i++) { - receivables.add(buffer.readResourceLocation()); - } - }); - } + registerC2SReceiver(SYNC_IDS, Collections.emptyList(), (buffer, context) -> { + Set receivables = (Set) clientReceivables.get(context.getPlayer()); + int size = buffer.readInt(); + receivables.clear(); + for (int i = 0; i < size; i++) { + receivables.add(buffer.readResourceLocation()); + } + }); } - - static IPlayPayloadHandler s2c; - - static NetworkManager.Side side(PacketFlow flow) { return flow.isClientbound() ? NetworkManager.Side.S2C : flow.isServerbound() ? NetworkManager.Side.C2S : null; diff --git a/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java b/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java index c842d722..60673d5a 100644 --- a/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java +++ b/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java @@ -46,8 +46,6 @@ public TestEntity(EntityType entityType, Level level) { @Override public Packet getAddEntityPacket() { - // Custom packets broken in BundlePacket - if (ArchitecturyTarget.getCurrentTarget().equals("neoforge")) return super.getAddEntityPacket(); return NetworkManager.createAddEntityPacket(this); } From 0f53eecb5a0340f5ddb841dc5ee2e7bb43a5401e Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 6 Jan 2024 21:16:58 +0800 Subject: [PATCH 16/17] Fix empty lines styling --- .../main/java/dev/architectury/hooks/level/ExplosionHooks.java | 2 +- .../dev/architectury/networking/forge/NetworkManagerImpl.java | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java b/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java index a2f22d2e..7eeee2ba 100644 --- a/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java +++ b/common/src/main/java/dev/architectury/hooks/level/ExplosionHooks.java @@ -18,7 +18,7 @@ */ package dev.architectury.hooks.level; -import dev.architectury.injectables.annotations.ExpectPlatform; + import net.minecraft.world.level.Explosion; import net.minecraft.world.phys.Vec3; diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java index 1ffd1bb9..8700c099 100644 --- a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java +++ b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java @@ -105,13 +105,11 @@ public static void collectPackets(PacketSink sink, NetworkManager.Side side, Res static IPlayPayloadHandler createPacketHandler(NetworkManager.Side direction, Map map) { return (arg, context) -> { - NetworkManager.Side side = side(context.flow()); if (side != direction) return; ResourceLocation type = arg.buf().readResourceLocation(); PacketTransformer transformer = map.get(type); - if (transformer != null) { NetworkManager.PacketContext packetContext = new NetworkManager.PacketContext() { @Override From c8f63ae2e146ba1dae5e36bca8965ca6d71fde14 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 7 Jan 2024 13:02:48 +0800 Subject: [PATCH 17/17] Fix build error --- .../java/dev/architectury/mixin/fabric/MixinExplosion.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java index a9c4937d..4988b0d8 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinExplosion.java @@ -20,14 +20,13 @@ package dev.architectury.mixin.fabric; import dev.architectury.event.events.common.ExplosionEvent; -import dev.architectury.hooks.level.fabric.ExplosionHooksImpl; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;