From 74f7fb34cfa6068927ae815b1aaeca08db4245ef Mon Sep 17 00:00:00 2001 From: shedaniel Date: Fri, 22 Sep 2023 22:37:31 +0800 Subject: [PATCH] Forge 1.20.2 Signed-off-by: shedaniel --- fabric/build.gradle | 2 +- forge/build.gradle | 4 +-- .../event/forge/EventHandlerImplClient.java | 8 ++--- .../forge/ClientNetworkingManager.java | 4 +-- .../networking/forge/NetworkManagerImpl.java | 36 ++++++++++++------- .../registry/menu/forge/MenuRegistryImpl.java | 3 +- .../forge/RegistrarManagerImpl.java | 7 ++-- forge/src/main/resources/META-INF/mods.toml | 2 +- gradle.properties | 12 +++---- settings.gradle | 4 +-- .../architectury/test/entity/TestEntity.java | 3 +- 11 files changed, 45 insertions(+), 40 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index d5b79c1e..35acd9f0 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -128,7 +128,7 @@ unifiedPublishing { curseforge { token = CURSE_API_KEY id = rootProject.curseforge_id - gameVersions.addAll "Java 17", "1.20.2-Snapshot" + gameVersions.addAll "Java 17", "1.20.2-Snapshot", project.minecraft_version } } diff --git a/forge/build.gradle b/forge/build.gradle index 9f4719ed..7c7d84f6 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -123,10 +123,10 @@ publishing { unifiedPublishing { project { - displayName = "[Forge $rootProject.supported_version] v$project.version" + displayName = "[MinecraftForge $rootProject.supported_version] v$project.version" releaseType = "$rootProject.artifact_type" changelog = releaseChangelog() - gameVersions = ["1.20", "1.20.1"] + gameVersions = ["1.20.2"] gameLoaders = ["forge"] mainPublication renameJarForPublication diff --git a/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java b/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java index 97edb06a..643d4aa5 100644 --- a/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java +++ b/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java @@ -91,7 +91,7 @@ public class EventHandlerImplClient { @SubscribeEvent(priority = EventPriority.HIGH) public static void eventRenderGameOverlayEvent(CustomizeGuiOverlayEvent.DebugText event) { - if (Minecraft.getInstance().options.renderDebug) { + if (Minecraft.getInstance().gui.getDebugOverlay().showDebugScreen()) { ClientGuiEvent.DEBUG_TEXT_LEFT.invoker().gatherText(event.getLeft()); ClientGuiEvent.DEBUG_TEXT_RIGHT.invoker().gatherText(event.getRight()); } @@ -217,14 +217,14 @@ public class EventHandlerImplClient { @SubscribeEvent(priority = EventPriority.HIGH) public static void eventMouseScrollEvent(ScreenEvent.MouseScrolled.Pre event) { - if (ClientScreenInputEvent.MOUSE_SCROLLED_PRE.invoker().mouseScrolled(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getScrollDelta()).isFalse()) { + if (ClientScreenInputEvent.MOUSE_SCROLLED_PRE.invoker().mouseScrolled(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getDeltaX(), event.getDeltaY()).isFalse()) { event.setCanceled(true); } } @SubscribeEvent(priority = EventPriority.HIGH) public static void eventMouseScrollEvent(ScreenEvent.MouseScrolled.Post event) { - ClientScreenInputEvent.MOUSE_SCROLLED_POST.invoker().mouseScrolled(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getScrollDelta()); + ClientScreenInputEvent.MOUSE_SCROLLED_POST.invoker().mouseScrolled(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), event.getDeltaX(), event.getDeltaY()); } @SubscribeEvent(priority = EventPriority.HIGH) @@ -301,7 +301,7 @@ public class EventHandlerImplClient { @SubscribeEvent(priority = EventPriority.HIGH) public static void eventInputEvent(InputEvent.MouseScrollingEvent event) { - if (ClientRawInputEvent.MOUSE_SCROLLED.invoker().mouseScrolled(Minecraft.getInstance(), event.getScrollDelta()).isFalse()) { + if (ClientRawInputEvent.MOUSE_SCROLLED.invoker().mouseScrolled(Minecraft.getInstance(), event.getDeltaX(), event.getDeltaY()).isFalse()) { event.setCanceled(true); } } diff --git a/forge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java b/forge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java index e74dc95c..266b2ea8 100644 --- a/forge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java +++ b/forge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java @@ -28,7 +28,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.event.ClientPlayerNetworkEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.NetworkDirection; import java.util.Collections; import java.util.Set; @@ -36,7 +36,7 @@ import java.util.Set; @OnlyIn(Dist.CLIENT) public class ClientNetworkingManager { public static void initClient() { - NetworkManagerImpl.CHANNEL.addListener(NetworkManagerImpl.createPacketHandler(NetworkEvent.ServerCustomPayloadEvent.class, NetworkManagerImpl.S2C_TRANSFORMERS)); + NetworkManagerImpl.CHANNEL.addListener(NetworkManagerImpl.createPacketHandler(NetworkDirection.PLAY_TO_CLIENT, NetworkManagerImpl.S2C_TRANSFORMERS)); MinecraftForge.EVENT_BUS.register(ClientNetworkingManager.class); NetworkManagerImpl.registerS2CReceiver(NetworkManagerImpl.SYNC_IDS, Collections.emptyList(), (buffer, context) -> { diff --git a/forge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java b/forge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java index 541af373..3f1d2170 100644 --- a/forge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java +++ b/forge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java @@ -39,18 +39,16 @@ import net.minecraft.world.entity.player.Player; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; 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.NetworkDirection; -import net.minecraftforge.network.NetworkEvent; -import net.minecraftforge.network.NetworkHooks; -import net.minecraftforge.network.NetworkRegistry; -import net.minecraftforge.network.event.EventNetworkChannel; -import org.apache.commons.lang3.tuple.Pair; +import net.minecraftforge.network.*; import org.slf4j.Logger; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.function.Consumer; @@ -71,7 +69,7 @@ public class NetworkManagerImpl { FriendlyByteBuf packetBuffer = new FriendlyByteBuf(Unpooled.buffer()); packetBuffer.writeResourceLocation(id); packetBuffer.writeBytes(buffer); - return (side == NetworkManager.Side.C2S ? NetworkDirection.PLAY_TO_SERVER : NetworkDirection.PLAY_TO_CLIENT).buildPacket(Pair.of(packetBuffer, 0), CHANNEL_ID).getThis(); + return (side == NetworkManager.Side.C2S ? NetworkDirection.PLAY_TO_SERVER : NetworkDirection.PLAY_TO_CLIENT).buildPacket(packetBuffer, CHANNEL_ID).getThis(); } public static void collectPackets(PacketSink sink, NetworkManager.Side side, ResourceLocation id, FriendlyByteBuf buf) { @@ -88,7 +86,7 @@ public class NetworkManagerImpl { 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.newEventChannel(CHANNEL_ID, () -> "1", version -> true, version -> true); + static final EventNetworkChannel CHANNEL = ChannelBuilder.named(CHANNEL_ID).acceptedVersions((status, version) -> true).optional().eventNetworkChannel(); static final Map S2C = Maps.newHashMap(); static final Map C2S = Maps.newHashMap(); static final Map S2C_TRANSFORMERS = Maps.newHashMap(); @@ -97,7 +95,7 @@ public class NetworkManagerImpl { private static final Multimap clientReceivables = Multimaps.newMultimap(Maps.newHashMap(), Sets::newHashSet); static { - CHANNEL.addListener(createPacketHandler(NetworkEvent.ClientCustomPayloadEvent.class, C2S_TRANSFORMERS)); + CHANNEL.addListener(createPacketHandler(NetworkDirection.PLAY_TO_SERVER, C2S_TRANSFORMERS)); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientNetworkingManager::initClient); @@ -111,10 +109,10 @@ public class NetworkManagerImpl { }); } - static Consumer createPacketHandler(Class clazz, Map map) { + static Consumer createPacketHandler(NetworkDirection direction, Map map) { return event -> { - if (event.getClass() != clazz) return; - NetworkEvent.Context context = event.getSource().get(); + CustomPayloadEvent.Context context = event.getSource(); + if (context.getDirection() != direction) return; if (context.getPacketHandled()) return; FriendlyByteBuf buffer = event.getPayload(); if (buffer == null) return; @@ -182,7 +180,19 @@ public class NetworkManagerImpl { } public static Packet createAddEntityPacket(Entity entity) { - return (Packet) NetworkHooks.getEntitySpawningPacket(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); + } } static FriendlyByteBuf sendSyncPacket(Map map) { diff --git a/forge/src/main/java/dev/architectury/registry/menu/forge/MenuRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/menu/forge/MenuRegistryImpl.java index 3fee0e3c..be5c8f56 100644 --- a/forge/src/main/java/dev/architectury/registry/menu/forge/MenuRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/menu/forge/MenuRegistryImpl.java @@ -33,11 +33,10 @@ import net.minecraft.world.inventory.MenuType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.extensions.IForgeMenuType; -import net.minecraftforge.network.NetworkHooks; public class MenuRegistryImpl { public static void openExtendedMenu(ServerPlayer player, ExtendedMenuProvider provider) { - NetworkHooks.openScreen(player, provider, provider::saveExtraData); + player.openMenu(provider, provider::saveExtraData); } public static MenuType of(SimpleMenuTypeFactory factory) { diff --git a/forge/src/main/java/dev/architectury/registry/registries/forge/RegistrarManagerImpl.java b/forge/src/main/java/dev/architectury/registry/registries/forge/RegistrarManagerImpl.java index ee25e5bd..4f454f52 100644 --- a/forge/src/main/java/dev/architectury/registry/registries/forge/RegistrarManagerImpl.java +++ b/forge/src/main/java/dev/architectury/registry/registries/forge/RegistrarManagerImpl.java @@ -271,7 +271,6 @@ public class RegistrarManagerImpl { private final RegistryProviderImpl provider; private final net.minecraftforge.registries.RegistryBuilder builder; private final ResourceLocation registryId; - private boolean saveToDisk = false; private boolean syncToClients = false; public RegistryBuilderWrapper(RegistryProviderImpl provider, RegistryBuilder builder, ResourceLocation registryId) { @@ -283,7 +282,7 @@ public class RegistrarManagerImpl { @Override public Registrar build() { if (!syncToClients) builder.disableSync(); - if (!saveToDisk) builder.disableSaving(); + builder.disableSaving(); if (provider.builders == null) { throw new IllegalStateException("Cannot create registries when registries are already aggregated!"); } @@ -301,9 +300,7 @@ public class RegistrarManagerImpl { @Override public RegistrarBuilder option(RegistrarOption option) { - if (option == StandardRegistrarOption.SAVE_TO_DISC) { - this.saveToDisk = true; - } else if (option == StandardRegistrarOption.SYNC_TO_CLIENTS) { + if (option == StandardRegistrarOption.SYNC_TO_CLIENTS) { this.syncToClients = true; } return this; diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index edb2e9d1..2bbdf31d 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -24,6 +24,6 @@ side = "BOTH" [[dependencies.architectury]] modId = "forge" mandatory = true -versionRange = "[46,)" +versionRange = "[48,)" ordering = "NONE" side = "BOTH" diff --git a/gradle.properties b/gradle.properties index 256f87db..9b5bfe49 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,12 @@ org.gradle.jvmargs=-Xmx6G org.gradle.daemon=false -platforms=fabric +platforms=fabric,forge -minecraft_version=1.20.2-pre4 -supported_version=1.20.2-pre4 +minecraft_version=1.20.2 +supported_version=1.20.2 -artifact_type=beta +artifact_type=release archives_base_name=architectury archives_base_name_snapshot=architectury-snapshot @@ -14,10 +14,10 @@ base_version=10.0 maven_group=dev.architectury fabric_loader_version=0.14.22 -fabric_api_version=0.88.4+1.20.2 +fabric_api_version=0.89.1+1.20.2 mod_menu_version=7.0.0 -forge_version=46.0.1 +forge_version=48.0.1 curseforge_id=419699 modrinth_id=lhGA9TYQ diff --git a/settings.gradle b/settings.gradle index 0f4b94fd..8bfde812 100644 --- a/settings.gradle +++ b/settings.gradle @@ -13,9 +13,9 @@ if (JavaVersion.current().ordinal() + 1 < 17) { include("common") include("fabric") -//include("forge") +include("forge") include("testmod-common") include("testmod-fabric") -//include("testmod-forge") +include("testmod-forge") rootProject.name = "architectury" 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 367d3230..9232bef2 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 @@ -41,7 +41,6 @@ public class TestEntity extends Cow { @Override public Packet getAddEntityPacket() { // Custom packets broken in BundlePacket - // return NetworkManager.createAddEntityPacket(this); - return super.getAddEntityPacket(); + return NetworkManager.createAddEntityPacket(this); } }