From d309d26bff478fa4a939d03377745b9a004fd44f Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 15 Nov 2023 03:56:31 +0800 Subject: [PATCH] NeoForge 1.20.2 Port --- build.gradle | 4 + common/build.gradle | 4 +- .../dev/architectury/platform/Platform.java | 15 ++ .../utils/ArchitecturyConstants.java | 24 +++ forge/build.gradle | 131 +---------- .../event/forge/EventHandlerImpl.java | 16 +- .../event/forge/EventHandlerImplClient.java | 33 ++- .../LootTableModificationContextImpl.java | 34 +-- .../client/screen/forge/ScreenHooksImpl.java | 21 +- .../mixin/forge/ScreenAccessor.java | 39 ++++ .../platform/hooks/EventBusesHooks.java | 41 ++++ .../plugin/forge/ArchitecturyMixinPlugin.java | 13 +- .../forge/KeyMappingRegistryImpl.java | 14 +- .../forge/EntityModelLayerRegistryImpl.java | 6 +- .../forge/EntityRendererRegistryImpl.java | 6 +- .../forge/ParticleProviderRegistryImpl.java | 15 +- .../forge/ColorHandlerRegistryImpl.java | 6 +- .../forge/CreativeTabRegistryImpl.java | 12 +- .../forge/ReloadListenerRegistryImpl.java | 12 +- .../biome/forge/BiomeModificationsImpl.java | 8 +- .../forge/EntityAttributeRegistryImpl.java | 6 +- .../entity/trade/forge/TradeRegistryImpl.java | 12 +- .../forge/RegistrarManagerImpl.java | 4 +- .../main/resources/architectury.mixins.json | 4 +- gradle.properties | 3 +- minecraftforge/build.gradle | 154 +++++++++++++ minecraftforge/gradle.properties | 1 + .../architectury/forge/ArchitecturyForge.java | 9 +- .../minecraftforge}/MixinChunkSerializer.java | 2 +- .../forge/ClientNetworkingManager.java | 0 .../networking/forge/NetworkManagerImpl.java | 3 +- .../platform/forge/EventBuses.java | 0 .../platform/forge/PlatformImpl.java | 0 .../hooks/forge/EventBusesHooksImpl.java | 36 ++++ .../src/main/resources/META-INF/mods.toml | 0 .../src/main/resources/icon.png | Bin .../src/main/resources/pack.mcmeta | 0 neoforge/build.gradle | 155 +++++++++++++ neoforge/gradle.properties | 1 + .../forge/neoforge/MixinChunkSerializer.java | 64 ++++++ .../neoforge/ArchitecturyNeoForge.java | 33 +++ .../forge/ClientNetworkingManager.java | 63 ++++++ .../networking/forge/NetworkManagerImpl.java | 203 ++++++++++++++++++ .../platform/forge/PlatformImpl.java | 185 ++++++++++++++++ .../hooks/forge/EventBusesHooksImpl.java | 39 ++++ .../src/main/resources/META-INF/mods.toml | 35 +++ neoforge/src/main/resources/icon.png | Bin 0 -> 153209 bytes neoforge/src/main/resources/pack.mcmeta | 6 + settings.gradle | 3 + testmod-forge/build.gradle | 5 +- testmod-neoforge/build.gradle | 44 ++++ testmod-neoforge/gradle.properties | 1 + .../architectury/test/forge/TestModForge.java | 30 +++ .../src/main/resources/META-INF/mods.toml | 14 ++ .../src/main/resources/pack.mcmeta | 6 + 55 files changed, 1348 insertions(+), 227 deletions(-) create mode 100644 common/src/main/java/dev/architectury/utils/ArchitecturyConstants.java create mode 100644 forge/src/main/java/dev/architectury/mixin/forge/ScreenAccessor.java create mode 100644 forge/src/main/java/dev/architectury/platform/hooks/EventBusesHooks.java create mode 100644 minecraftforge/build.gradle create mode 100644 minecraftforge/gradle.properties rename {forge => minecraftforge}/src/main/java/dev/architectury/forge/ArchitecturyForge.java (86%) rename {forge/src/main/java/dev/architectury/mixin/forge => minecraftforge/src/main/java/dev/architectury/mixin/forge/minecraftforge}/MixinChunkSerializer.java (98%) rename {forge => minecraftforge}/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java (100%) rename {forge => minecraftforge}/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java (99%) rename {forge => minecraftforge}/src/main/java/dev/architectury/platform/forge/EventBuses.java (100%) rename {forge => minecraftforge}/src/main/java/dev/architectury/platform/forge/PlatformImpl.java (100%) create mode 100644 minecraftforge/src/main/java/dev/architectury/platform/hooks/forge/EventBusesHooksImpl.java rename {forge => minecraftforge}/src/main/resources/META-INF/mods.toml (100%) rename {forge => minecraftforge}/src/main/resources/icon.png (100%) rename {forge => minecraftforge}/src/main/resources/pack.mcmeta (100%) create mode 100644 neoforge/build.gradle create mode 100644 neoforge/gradle.properties create mode 100644 neoforge/src/main/java/dev/architectury/mixin/forge/neoforge/MixinChunkSerializer.java create mode 100644 neoforge/src/main/java/dev/architectury/neoforge/ArchitecturyNeoForge.java create mode 100644 neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java create mode 100644 neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java create mode 100644 neoforge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java create mode 100644 neoforge/src/main/java/dev/architectury/platform/hooks/forge/EventBusesHooksImpl.java create mode 100644 neoforge/src/main/resources/META-INF/mods.toml create mode 100644 neoforge/src/main/resources/icon.png create mode 100644 neoforge/src/main/resources/pack.mcmeta create mode 100644 testmod-neoforge/build.gradle create mode 100644 testmod-neoforge/gradle.properties create mode 100644 testmod-neoforge/src/main/java/dev/architectury/test/forge/TestModForge.java create mode 100644 testmod-neoforge/src/main/resources/META-INF/mods.toml create mode 100644 testmod-neoforge/src/main/resources/pack.mcmeta diff --git a/build.gradle b/build.gradle index f451aff1..adabc626 100644 --- a/build.gradle +++ b/build.gradle @@ -29,6 +29,10 @@ subprojects { minecraft "com.mojang:minecraft:${rootProject.architectury.minecraft}" mappings loom.officialMojangMappings() } + + repositories { + maven { url "https://maven.neoforged.net/releases/" } + } } allprojects { diff --git a/common/build.gradle b/common/build.gradle index ecfa9e1d..da395085 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -9,7 +9,9 @@ dependencies { } architectury { - common(rootProject.platforms.split(",")) + common(rootProject.platforms.split(",")) { + it.platformPackage "neoforge", "forge" + } } /** diff --git a/common/src/main/java/dev/architectury/platform/Platform.java b/common/src/main/java/dev/architectury/platform/Platform.java index ae864ec4..2380d1e5 100644 --- a/common/src/main/java/dev/architectury/platform/Platform.java +++ b/common/src/main/java/dev/architectury/platform/Platform.java @@ -41,11 +41,25 @@ public final class Platform { return simpleLoaderCache == 0; } + @Deprecated(forRemoval = true) public static boolean isForge() { + return isForgeLike(); + } + + public static boolean isForgeLike() { + return isMinecraftForge() || isNeoForge(); + } + + public static boolean isMinecraftForge() { updateLoaderCache(); return simpleLoaderCache == 1; } + public static boolean isNeoForge() { + updateLoaderCache(); + return simpleLoaderCache == 2; + } + private static void updateLoaderCache() { if (simpleLoaderCache != -1) { return; @@ -54,6 +68,7 @@ public final class Platform { switch (ArchitecturyTarget.getCurrentTarget()) { case "fabric" -> simpleLoaderCache = 0; case "forge" -> simpleLoaderCache = 1; + case "neoforge" -> simpleLoaderCache = 2; } } diff --git a/common/src/main/java/dev/architectury/utils/ArchitecturyConstants.java b/common/src/main/java/dev/architectury/utils/ArchitecturyConstants.java new file mode 100644 index 00000000..39e5d512 --- /dev/null +++ b/common/src/main/java/dev/architectury/utils/ArchitecturyConstants.java @@ -0,0 +1,24 @@ +/* + * 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.utils; + +public class ArchitecturyConstants { + public static final String MOD_ID = "architectury"; +} diff --git a/forge/build.gradle b/forge/build.gradle index 7c7d84f6..d9384cce 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -1,109 +1,28 @@ -plugins { - id "com.github.johnrengelman.shadow" version "7.1.2" - id "me.shedaniel.unified-publishing" -} - loom { accessWidenerPath = project(":common").loom.accessWidenerPath - - forge { - mixinConfig "architectury.mixins.json" - mixinConfig "architectury-common.mixins.json" - - convertAccessWideners = true - extraAccessWideners.add loom.accessWidenerPath.get().asFile.name - } } architectury { - platformSetupLoomIde() - forge() -} - -configurations { - common - shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. - compileClasspath.extendsFrom common - runtimeClasspath.extendsFrom common - developmentForge.extendsFrom common + forgeLike(["forge", "neoforge"]) { + it.platformPackage "neoforge", "forge" + it.remapForgeLike "net/minecraftforge/common/extensions/IForgeItem", "net/neoforged/neoforge/common/extensions/IItemExtension" + it.remapForgeLike "net/minecraftforge/client/event/TextureStitchEvent\$Post", "net/neoforged/neoforge/client/event/TextureAtlasStitchedEvent" + it.remapForgeLike "net/minecraftforge/fluids/ForgeFlowingFluid", "net/neoforged/neoforge/fluids/BaseFlowingFluid" + it.remapForgeLike "net/minecraftforge/fluids/ForgeFlowingFluid\$Properties", "net/neoforged/neoforge/fluids/BaseFlowingFluid\$Properties" + it.remapForgeLike "net/minecraftforge/common/ForgeHooks", "net/neoforged/neoforge/common/CommonHooks" + } } dependencies { forge "net.minecraftforge:forge:${rootProject.architectury.minecraft}-${rootProject.forge_version}" - common(project(path: ":common", configuration: "namedElements")) { transitive false } - shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive false } -} - -processResources { - filesMatching("META-INF/mods.toml") { - expand "version": project.version - } - inputs.property "META-INF/mods.toml", project.version -} - -shadowJar { - exclude "fabric.mod.json" - exclude "architectury-common.accessWidener" - exclude "architectury.common.json" - - configurations = [project.configurations.shadowCommon] - archiveClassifier = "dev-shadow" - - // Replace classes with forge's version - exclude "dev/architectury/core/block/ArchitecturyLiquidBlock.class" - exclude "dev/architectury/core/fluid/ArchitecturyFlowingFluid.class" - exclude 'dev/architectury/core/fluid/ArchitecturyFlowingFluid$Source.class' - exclude 'dev/architectury/core/fluid/ArchitecturyFlowingFluid$Flowing.class' - exclude 'dev/architectury/core/item/ArchitecturyBucketItem.class' - exclude 'dev/architectury/core/item/ArchitecturyMobBucketItem.class' - relocate "dev.architectury.core.block.forge.imitator", "dev.architectury.core.block" - relocate "dev.architectury.core.fluid.forge.imitator", "dev.architectury.core.fluid" - relocate "dev.architectury.core.item.forge.imitator", "dev.architectury.core.item" -} - -remapJar { - input.set shadowJar.archiveFile - dependsOn shadowJar - archiveClassifier = null -} - -task renameJarForPublication(type: Zip, dependsOn: remapJar) { - from remapJar.archiveFile.map { zipTree(it) } - archiveExtension = "jar" - metadataCharset "UTF-8" - destinationDirectory = base.libsDirectory - archiveClassifier = project.name -} - -assemble.dependsOn renameJarForPublication - -jar { - archiveClassifier = "dev" -} - -sourcesJar { - afterEvaluate { - [":common"].forEach { - def depSources = project(it).sourcesJar - dependsOn depSources - from(depSources.archiveFile.map { zipTree(it) }) { - exclude "architectury.accessWidener" - } - } - } -} - -components.java { - withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { - skip() - } + compileOnly(project(path: ":common", configuration: "namedElements")) { transitive false } } publishing { publications { mavenForge(MavenPublication) { - artifactId = rootProject.archivesBaseName + "-forge" + artifactId = rootProject.archivesBaseName + "-forge-like" from components.java } } @@ -120,33 +39,3 @@ publishing { } } } - -unifiedPublishing { - project { - displayName = "[MinecraftForge $rootProject.supported_version] v$project.version" - releaseType = "$rootProject.artifact_type" - changelog = releaseChangelog() - gameVersions = ["1.20.2"] - gameLoaders = ["forge"] - mainPublication renameJarForPublication - - var CURSE_API_KEY = project.findProperty("CURSE_API_KEY") ?: System.getenv("CURSE_API_KEY") - if (CURSE_API_KEY != null) { - curseforge { - token = CURSE_API_KEY - id = rootProject.curseforge_id - gameVersions.addAll "Java 17" - } - } - - var MODRINTH_TOKEN = project.findProperty("MODRINTH_TOKEN") ?: System.getenv("MODRINTH_TOKEN") - if (MODRINTH_TOKEN != null) { - modrinth { - token = MODRINTH_TOKEN - id = rootProject.modrinth_id - version = "$project.version+$project.name" - } - } - } -} - diff --git a/forge/src/main/java/dev/architectury/event/forge/EventHandlerImpl.java b/forge/src/main/java/dev/architectury/event/forge/EventHandlerImpl.java index 86137582..690f5c15 100644 --- a/forge/src/main/java/dev/architectury/event/forge/EventHandlerImpl.java +++ b/forge/src/main/java/dev/architectury/event/forge/EventHandlerImpl.java @@ -19,8 +19,8 @@ package dev.architectury.event.forge; -import dev.architectury.forge.ArchitecturyForge; -import dev.architectury.platform.forge.EventBuses; +import dev.architectury.platform.hooks.EventBusesHooks; +import dev.architectury.utils.ArchitecturyConstants; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.MinecraftForge; @@ -29,23 +29,23 @@ public class EventHandlerImpl { @OnlyIn(Dist.CLIENT) public static void registerClient() { MinecraftForge.EVENT_BUS.register(EventHandlerImplClient.class); - EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> { + EventBusesHooks.whenAvailable(ArchitecturyConstants.MOD_ID, bus -> { bus.register(EventHandlerImplClient.ModBasedEventHandler.class); }); } public static void registerCommon() { MinecraftForge.EVENT_BUS.register(EventHandlerImplCommon.class); - EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> { + EventBusesHooks.whenAvailable(ArchitecturyConstants.MOD_ID, bus -> { bus.register(EventHandlerImplCommon.ModBasedEventHandler.class); }); } @OnlyIn(Dist.DEDICATED_SERVER) public static void registerServer() { - MinecraftForge.EVENT_BUS.register(EventHandlerImplServer.class); - EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> { - bus.register(EventHandlerImplServer.ModBasedEventHandler.class); - }); + // MinecraftForge.EVENT_BUS.register(EventHandlerImplServer.class); + // EventBusesHooks.whenAvailable(ArchitecturyConstants.MOD_ID, bus -> { + // bus.register(EventHandlerImplServer.ModBasedEventHandler.class); + // }); } } 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 643d4aa5..84473741 100644 --- a/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java +++ b/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java @@ -27,6 +27,7 @@ import dev.architectury.event.events.common.InteractionEvent; import dev.architectury.impl.ScreenAccessImpl; import dev.architectury.impl.TooltipEventColorContextImpl; import dev.architectury.impl.TooltipEventPositionContextImpl; +import dev.architectury.platform.Platform; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; @@ -42,6 +43,8 @@ import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import java.lang.reflect.InvocationTargetException; + @OnlyIn(Dist.CLIENT) public class EventHandlerImplClient { @SubscribeEvent(priority = EventPriority.HIGH) @@ -217,14 +220,40 @@ 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.getDeltaX(), event.getDeltaY()).isFalse()) { + double deltaX, deltaY; + if (Platform.isNeoForge()) { + try { + deltaX = (double) event.getClass().getMethod("getScrollDeltaX").invoke(event); + deltaY = (double) event.getClass().getMethod("getScrollDeltaY").invoke(event); + } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + throw new RuntimeException(e); + } + } else { + deltaX = event.getDeltaX(); + deltaY = event.getDeltaY(); + } + + if (ClientScreenInputEvent.MOUSE_SCROLLED_PRE.invoker().mouseScrolled(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), deltaX, deltaY).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.getDeltaX(), event.getDeltaY()); + double deltaX, deltaY; + if (Platform.isNeoForge()) { + try { + deltaX = (double) event.getClass().getMethod("getScrollDeltaX").invoke(event); + deltaY = (double) event.getClass().getMethod("getScrollDeltaY").invoke(event); + } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + throw new RuntimeException(e); + } + } else { + deltaX = event.getDeltaX(); + deltaY = event.getDeltaY(); + } + + ClientScreenInputEvent.MOUSE_SCROLLED_POST.invoker().mouseScrolled(Minecraft.getInstance(), event.getScreen(), event.getMouseX(), event.getMouseY(), deltaX, deltaY); } @SubscribeEvent(priority = EventPriority.HIGH) diff --git a/forge/src/main/java/dev/architectury/event/forge/LootTableModificationContextImpl.java b/forge/src/main/java/dev/architectury/event/forge/LootTableModificationContextImpl.java index a58c09de..a8c57862 100644 --- a/forge/src/main/java/dev/architectury/event/forge/LootTableModificationContextImpl.java +++ b/forge/src/main/java/dev/architectury/event/forge/LootTableModificationContextImpl.java @@ -57,20 +57,30 @@ final class LootTableModificationContextImpl implements LootEvent.LootTableModif throw new RuntimeException(e); } } catch (NoSuchFieldException ignored2) { - for (Field field : LootTable.class.getDeclaredFields()) { - if (field.getType().equals(List.class)) { - // This is probably the field - field.setAccessible(true); - try { - pools = (List) field.get(table); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); + try { + Field field = LootTable.class.getDeclaredField("pools"); + field.setAccessible(true); + try { + pools = (List) field.get(table); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } catch (NoSuchFieldException ignored3) { + for (Field field : LootTable.class.getDeclaredFields()) { + if (field.getType().equals(List.class)) { + // This is probably the field + field.setAccessible(true); + try { + pools = (List) field.get(table); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } } } - } - - if (pools == null) { - throw new RuntimeException("Unable to find pools field in LootTable!"); + + if (pools == null) { + throw new RuntimeException("Unable to find pools field in LootTable!"); + } } } } diff --git a/forge/src/main/java/dev/architectury/hooks/client/screen/forge/ScreenHooksImpl.java b/forge/src/main/java/dev/architectury/hooks/client/screen/forge/ScreenHooksImpl.java index 062bfff9..93461487 100644 --- a/forge/src/main/java/dev/architectury/hooks/client/screen/forge/ScreenHooksImpl.java +++ b/forge/src/main/java/dev/architectury/hooks/client/screen/forge/ScreenHooksImpl.java @@ -19,14 +19,13 @@ package dev.architectury.hooks.client.screen.forge; +import dev.architectury.mixin.forge.ScreenAccessor; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.narration.NarratableEntry; import net.minecraft.client.gui.screens.Screen; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; -import java.lang.reflect.InvocationTargetException; import java.util.List; public class ScreenHooksImpl { @@ -39,26 +38,14 @@ public class ScreenHooksImpl { } public static T addRenderableWidget(Screen screen, T widget) { - try { - return (T) ObfuscationReflectionHelper.findMethod(Screen.class, "m_142416_", GuiEventListener.class).invoke(screen, widget); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } + return ((ScreenAccessor) screen).invokeAddRenderableWidget(widget); } public static T addRenderableOnly(Screen screen, T listener) { - try { - return (T) ObfuscationReflectionHelper.findMethod(Screen.class, "m_169394_", Renderable.class).invoke(screen, listener); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } + return ((ScreenAccessor) screen).invokeAddRenderableOnly(listener); } public static T addWidget(Screen screen, T listener) { - try { - return (T) ObfuscationReflectionHelper.findMethod(Screen.class, "m_7787_", GuiEventListener.class).invoke(screen, listener); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } + return ((ScreenAccessor) screen).invokeAddWidget(listener); } } diff --git a/forge/src/main/java/dev/architectury/mixin/forge/ScreenAccessor.java b/forge/src/main/java/dev/architectury/mixin/forge/ScreenAccessor.java new file mode 100644 index 00000000..31977d40 --- /dev/null +++ b/forge/src/main/java/dev/architectury/mixin/forge/ScreenAccessor.java @@ -0,0 +1,39 @@ +/* + * 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.mixin.forge; + +import net.minecraft.client.gui.components.Renderable; +import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.narration.NarratableEntry; +import net.minecraft.client.gui.screens.Screen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(Screen.class) +public interface ScreenAccessor { + @Invoker("addRenderableWidget") + T invokeAddRenderableWidget(T arg); + + @Invoker("addRenderableOnly") + T invokeAddRenderableOnly(T arg); + + @Invoker("addWidget") + T invokeAddWidget(T arg); +} diff --git a/forge/src/main/java/dev/architectury/platform/hooks/EventBusesHooks.java b/forge/src/main/java/dev/architectury/platform/hooks/EventBusesHooks.java new file mode 100644 index 00000000..81b172f7 --- /dev/null +++ b/forge/src/main/java/dev/architectury/platform/hooks/EventBusesHooks.java @@ -0,0 +1,41 @@ +/* + * 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.platform.hooks; + +import dev.architectury.injectables.annotations.ExpectPlatform; +import net.minecraftforge.eventbus.api.IEventBus; + +import java.util.Optional; +import java.util.function.Consumer; + +public final class EventBusesHooks { + private EventBusesHooks() { + } + + @ExpectPlatform + public static void whenAvailable(String modId, Consumer busConsumer) { + throw new AssertionError(); + } + + @ExpectPlatform + public static Optional getModEventBus(String modId) { + throw new AssertionError(); + } +} diff --git a/forge/src/main/java/dev/architectury/plugin/forge/ArchitecturyMixinPlugin.java b/forge/src/main/java/dev/architectury/plugin/forge/ArchitecturyMixinPlugin.java index 59171e25..315b5356 100644 --- a/forge/src/main/java/dev/architectury/plugin/forge/ArchitecturyMixinPlugin.java +++ b/forge/src/main/java/dev/architectury/plugin/forge/ArchitecturyMixinPlugin.java @@ -19,6 +19,7 @@ package dev.architectury.plugin.forge; +import dev.architectury.injectables.targets.ArchitecturyTarget; import org.objectweb.asm.tree.ClassNode; import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; @@ -29,7 +30,7 @@ import java.util.Set; public class ArchitecturyMixinPlugin implements IMixinConfigPlugin { @Override public void onLoad(String mixinPackage) { - + } @Override @@ -44,21 +45,23 @@ public class ArchitecturyMixinPlugin implements IMixinConfigPlugin { @Override public void acceptTargets(Set myTargets, Set otherTargets) { - + } @Override public List getMixins() { - return null; + return ArchitecturyTarget.getCurrentTarget().equals("forge") + ? List.of("minecraftforge.MixinChunkSerializer") + : List.of("neoforge.MixinChunkSerializer"); } @Override public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - + } @Override public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - + } } diff --git a/forge/src/main/java/dev/architectury/registry/client/keymappings/forge/KeyMappingRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/client/keymappings/forge/KeyMappingRegistryImpl.java index 1f51d8c7..6cb52ce9 100644 --- a/forge/src/main/java/dev/architectury/registry/client/keymappings/forge/KeyMappingRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/client/keymappings/forge/KeyMappingRegistryImpl.java @@ -19,14 +19,12 @@ package dev.architectury.registry.client.keymappings.forge; -import dev.architectury.forge.ArchitecturyForge; +import dev.architectury.platform.hooks.EventBusesHooks; +import dev.architectury.utils.ArchitecturyConstants; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.Options; -import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RegisterKeyMappingsEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; import org.apache.commons.lang3.ArrayUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -34,12 +32,17 @@ import org.apache.logging.log4j.Logger; import java.util.ArrayList; import java.util.List; -@Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public class KeyMappingRegistryImpl { private static final Logger LOGGER = LogManager.getLogger(KeyMappingRegistryImpl.class); private static final List MAPPINGS = new ArrayList<>(); private static boolean eventCalled = false; + static { + EventBusesHooks.whenAvailable(ArchitecturyConstants.MOD_ID, bus -> { + bus.addListener(KeyMappingRegistryImpl::event); + }); + } + public static void register(KeyMapping mapping) { if (eventCalled) { Options options = Minecraft.getInstance().options; @@ -50,7 +53,6 @@ public class KeyMappingRegistryImpl { } } - @SubscribeEvent public static void event(RegisterKeyMappingsEvent event) { MAPPINGS.forEach(event::register); eventCalled = true; diff --git a/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityModelLayerRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityModelLayerRegistryImpl.java index ca20b084..95e3ff1f 100644 --- a/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityModelLayerRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityModelLayerRegistryImpl.java @@ -19,8 +19,8 @@ package dev.architectury.registry.client.level.entity.forge; -import dev.architectury.forge.ArchitecturyForge; -import dev.architectury.platform.forge.EventBuses; +import dev.architectury.platform.hooks.EventBusesHooks; +import dev.architectury.utils.ArchitecturyConstants; import net.minecraft.client.model.geom.ModelLayerLocation; import net.minecraft.client.model.geom.builders.LayerDefinition; import net.minecraftforge.client.event.EntityRenderersEvent; @@ -34,7 +34,7 @@ public class EntityModelLayerRegistryImpl { private static final Map> DEFINITIONS = new ConcurrentHashMap<>(); static { - EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> { + EventBusesHooks.whenAvailable(ArchitecturyConstants.MOD_ID, bus -> { bus.register(EntityModelLayerRegistryImpl.class); }); } diff --git a/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityRendererRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityRendererRegistryImpl.java index c47d9905..fa263c5b 100644 --- a/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityRendererRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityRendererRegistryImpl.java @@ -19,8 +19,8 @@ package dev.architectury.registry.client.level.entity.forge; -import dev.architectury.forge.ArchitecturyForge; -import dev.architectury.platform.forge.EventBuses; +import dev.architectury.platform.hooks.EventBusesHooks; +import dev.architectury.utils.ArchitecturyConstants; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -39,7 +39,7 @@ public class EntityRendererRegistryImpl { } static { - EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> { + EventBusesHooks.whenAvailable(ArchitecturyConstants.MOD_ID, bus -> { bus.register(EntityRendererRegistryImpl.class); }); } diff --git a/forge/src/main/java/dev/architectury/registry/client/particle/forge/ParticleProviderRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/client/particle/forge/ParticleProviderRegistryImpl.java index b081a03e..b0ff7900 100644 --- a/forge/src/main/java/dev/architectury/registry/client/particle/forge/ParticleProviderRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/client/particle/forge/ParticleProviderRegistryImpl.java @@ -20,8 +20,9 @@ package dev.architectury.registry.client.particle.forge; import com.mojang.logging.LogUtils; -import dev.architectury.forge.ArchitecturyForge; +import dev.architectury.platform.hooks.EventBusesHooks; import dev.architectury.registry.client.particle.ParticleProviderRegistry; +import dev.architectury.utils.ArchitecturyConstants; import net.minecraft.client.Minecraft; import net.minecraft.client.particle.ParticleEngine; import net.minecraft.client.particle.ParticleProvider; @@ -31,21 +32,22 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; import net.minecraft.util.RandomSource; -import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RegisterParticleProvidersEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; import org.slf4j.Logger; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; -@Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public class ParticleProviderRegistryImpl { - public static final Logger LOGGER = LogUtils.getLogger(); + static { + EventBusesHooks.whenAvailable(ArchitecturyConstants.MOD_ID, bus -> { + bus.addListener(ParticleProviderRegistryImpl::onParticleFactoryRegister); + }); + } + private static final class ExtendedSpriteSetImpl implements ParticleProviderRegistry.ExtendedSpriteSet { private final ParticleEngine engine; private final SpriteSet delegate; @@ -105,7 +107,6 @@ public class ParticleProviderRegistryImpl { } } - @SubscribeEvent public static void onParticleFactoryRegister(RegisterParticleProvidersEvent event) { if (deferred != null) { ParticleProviderRegistrar registrar = ParticleProviderRegistrar.ofForge(event); diff --git a/forge/src/main/java/dev/architectury/registry/client/rendering/forge/ColorHandlerRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/client/rendering/forge/ColorHandlerRegistryImpl.java index f473a186..15f32563 100644 --- a/forge/src/main/java/dev/architectury/registry/client/rendering/forge/ColorHandlerRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/client/rendering/forge/ColorHandlerRegistryImpl.java @@ -20,8 +20,8 @@ package dev.architectury.registry.client.rendering.forge; import com.google.common.collect.Lists; -import dev.architectury.forge.ArchitecturyForge; -import dev.architectury.platform.forge.EventBuses; +import dev.architectury.platform.hooks.EventBusesHooks; +import dev.architectury.utils.ArchitecturyConstants; import net.minecraft.client.Minecraft; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; @@ -40,7 +40,7 @@ public class ColorHandlerRegistryImpl { private static final List[]>> BLOCK_COLORS = Lists.newArrayList(); static { - EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> { + EventBusesHooks.whenAvailable(ArchitecturyConstants.MOD_ID, bus -> { bus.register(ColorHandlerRegistryImpl.class); }); } diff --git a/forge/src/main/java/dev/architectury/registry/forge/CreativeTabRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/forge/CreativeTabRegistryImpl.java index 7a3eedce..e7313b2e 100644 --- a/forge/src/main/java/dev/architectury/registry/forge/CreativeTabRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/forge/CreativeTabRegistryImpl.java @@ -22,21 +22,19 @@ package dev.architectury.registry.forge; import com.google.common.base.Suppliers; import com.google.common.collect.Multimap; import com.google.common.collect.MultimapBuilder; -import dev.architectury.forge.ArchitecturyForge; +import dev.architectury.platform.hooks.EventBusesHooks; import dev.architectury.registry.CreativeTabOutput; import dev.architectury.registry.CreativeTabRegistry; import dev.architectury.registry.registries.DeferredSupplier; +import dev.architectury.utils.ArchitecturyConstants; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.CreativeModeTabRegistry; import net.minecraftforge.common.util.MutableHashedLinkedMap; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.ApiStatus; @@ -46,7 +44,6 @@ import java.util.*; import java.util.function.Consumer; import java.util.function.Supplier; -@Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public class CreativeTabRegistryImpl { private static final Logger LOGGER = LogManager.getLogger(CreativeTabRegistryImpl.class); @@ -54,6 +51,10 @@ public class CreativeTabRegistryImpl { private static final Multimap> APPENDS = MultimapBuilder.hashKeys().arrayListValues().build(); static { + EventBusesHooks.whenAvailable(ArchitecturyConstants.MOD_ID, bus -> { + bus.addListener(CreativeTabRegistryImpl::event); + }); + BUILD_CONTENTS_LISTENERS.add(event -> { for (Map.Entry>> keyEntry : APPENDS.asMap().entrySet()) { Supplier> stacks = Suppliers.memoize(() -> keyEntry.getValue().stream() @@ -76,7 +77,6 @@ public class CreativeTabRegistryImpl { }); } - @SubscribeEvent public static void event(BuildCreativeModeTabContentsEvent event) { for (Consumer listener : BUILD_CONTENTS_LISTENERS) { listener.accept(event); diff --git a/forge/src/main/java/dev/architectury/registry/forge/ReloadListenerRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/forge/ReloadListenerRegistryImpl.java index ab0c59f9..b48ca9ea 100644 --- a/forge/src/main/java/dev/architectury/registry/forge/ReloadListenerRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/forge/ReloadListenerRegistryImpl.java @@ -20,7 +20,8 @@ package dev.architectury.registry.forge; import com.google.common.collect.Lists; -import dev.architectury.forge.ArchitecturyForge; +import dev.architectury.platform.hooks.EventBusesHooks; +import dev.architectury.utils.ArchitecturyConstants; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.PackType; @@ -28,18 +29,20 @@ import net.minecraft.server.packs.resources.PreparableReloadListener; import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.AddReloadListenerEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.List; -@Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID) public class ReloadListenerRegistryImpl { private static List serverDataReloadListeners = Lists.newArrayList(); + static { + MinecraftForge.EVENT_BUS.addListener(ReloadListenerRegistryImpl::addReloadListeners); + } + public static void register(PackType type, PreparableReloadListener listener, @Nullable ResourceLocation listenerId, Collection dependencies) { if (type == PackType.SERVER_DATA) { serverDataReloadListeners.add(listener); @@ -53,7 +56,6 @@ public class ReloadListenerRegistryImpl { ((ReloadableResourceManager) Minecraft.getInstance().getResourceManager()).registerReloadListener(listener); } - @SubscribeEvent public static void addReloadListeners(AddReloadListenerEvent event) { for (PreparableReloadListener listener : serverDataReloadListeners) { event.addListener(listener); diff --git a/forge/src/main/java/dev/architectury/registry/level/biome/forge/BiomeModificationsImpl.java b/forge/src/main/java/dev/architectury/registry/level/biome/forge/BiomeModificationsImpl.java index 48d0b4b0..a845e234 100644 --- a/forge/src/main/java/dev/architectury/registry/level/biome/forge/BiomeModificationsImpl.java +++ b/forge/src/main/java/dev/architectury/registry/level/biome/forge/BiomeModificationsImpl.java @@ -21,10 +21,10 @@ package dev.architectury.registry.level.biome.forge; import com.google.common.collect.Lists; import com.mojang.serialization.Codec; -import dev.architectury.forge.ArchitecturyForge; import dev.architectury.hooks.level.biome.*; -import dev.architectury.platform.forge.EventBuses; +import dev.architectury.platform.hooks.EventBusesHooks; import dev.architectury.registry.level.biome.BiomeModifications.BiomeContext; +import dev.architectury.utils.ArchitecturyConstants; import dev.architectury.utils.GameInstance; import net.minecraft.core.Holder; import net.minecraft.core.Registry; @@ -64,10 +64,10 @@ public class BiomeModificationsImpl { private static Codec noneBiomeModCodec = null; public static void init() { - EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> { + EventBusesHooks.whenAvailable(ArchitecturyConstants.MOD_ID,bus -> { bus.addListener(event -> { event.register(ForgeRegistries.Keys.BIOME_MODIFIER_SERIALIZERS, registry -> { - registry.register(new ResourceLocation(ArchitecturyForge.MOD_ID, "none_biome_mod_codec"), + registry.register(new ResourceLocation(ArchitecturyConstants.MOD_ID, "none_biome_mod_codec"), noneBiomeModCodec = Codec.unit(BiomeModifierImpl.INSTANCE)); }); }); diff --git a/forge/src/main/java/dev/architectury/registry/level/entity/forge/EntityAttributeRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/level/entity/forge/EntityAttributeRegistryImpl.java index cad28083..56a61b68 100644 --- a/forge/src/main/java/dev/architectury/registry/level/entity/forge/EntityAttributeRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/level/entity/forge/EntityAttributeRegistryImpl.java @@ -19,8 +19,8 @@ package dev.architectury.registry.level.entity.forge; -import dev.architectury.forge.ArchitecturyForge; -import dev.architectury.platform.forge.EventBuses; +import dev.architectury.platform.hooks.EventBusesHooks; +import dev.architectury.utils.ArchitecturyConstants; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; @@ -39,7 +39,7 @@ public class EntityAttributeRegistryImpl { } static { - EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> { + EventBusesHooks.whenAvailable(ArchitecturyConstants.MOD_ID, bus -> { bus.register(EntityAttributeRegistryImpl.class); }); } diff --git a/forge/src/main/java/dev/architectury/registry/level/entity/trade/forge/TradeRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/level/entity/trade/forge/TradeRegistryImpl.java index 2867a12a..00d88602 100644 --- a/forge/src/main/java/dev/architectury/registry/level/entity/trade/forge/TradeRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/level/entity/trade/forge/TradeRegistryImpl.java @@ -21,23 +21,25 @@ package dev.architectury.registry.level.entity.trade.forge; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import dev.architectury.forge.ArchitecturyForge; import net.minecraft.core.NonNullList; import net.minecraft.world.entity.npc.VillagerProfession; import net.minecraft.world.entity.npc.VillagerTrades; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.village.VillagerTradesEvent; import net.minecraftforge.event.village.WandererTradesEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; import java.util.*; -@Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID) public class TradeRegistryImpl { private static final Map>> TRADES_TO_ADD = new HashMap<>(); private static final List WANDERER_TRADER_TRADES_GENERIC = new ArrayList<>(); private static final List WANDERER_TRADER_TRADES_RARE = new ArrayList<>(); + static { + MinecraftForge.EVENT_BUS.addListener(TradeRegistryImpl::onTradeRegistering); + MinecraftForge.EVENT_BUS.addListener(TradeRegistryImpl::onWanderingTradeRegistering); + } + public static void registerVillagerTrade0(VillagerProfession profession, int level, VillagerTrades.ItemListing... trades) { Int2ObjectMap> tradesForProfession = TRADES_TO_ADD.computeIfAbsent(profession, $ -> new Int2ObjectOpenHashMap<>()); List tradesForLevel = tradesForProfession.computeIfAbsent(level, $ -> new ArrayList<>()); @@ -52,7 +54,6 @@ public class TradeRegistryImpl { } } - @SubscribeEvent public static void onTradeRegistering(VillagerTradesEvent event) { Int2ObjectMap> trades = TRADES_TO_ADD.get(event.getType()); @@ -63,7 +64,6 @@ public class TradeRegistryImpl { } } - @SubscribeEvent public static void onWanderingTradeRegistering(WandererTradesEvent event) { if (!WANDERER_TRADER_TRADES_GENERIC.isEmpty()) { event.getGenericTrades().addAll(WANDERER_TRADER_TRADES_GENERIC); 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 4f454f52..4aad3bfc 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 @@ -23,7 +23,7 @@ import com.google.common.base.Objects; import com.google.common.base.Suppliers; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import dev.architectury.platform.forge.EventBuses; +import dev.architectury.platform.hooks.EventBusesHooks; import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.RegistrarBuilder; import dev.architectury.registry.registries.RegistrarManager; @@ -123,7 +123,7 @@ public class RegistrarManagerImpl { public RegistryProviderImpl(String modId) { this.modId = modId; this.eventBus = Suppliers.memoize(() -> { - IEventBus eventBus = EventBuses.getModEventBus(modId).orElseThrow(() -> new IllegalStateException("Can't get event bus for mod '" + modId + "' because it was not registered!")); + IEventBus eventBus = EventBusesHooks.getModEventBus(modId).orElseThrow(() -> new IllegalStateException("Can't get event bus for mod '" + modId + "' because it was not registered!")); eventBus.register(new EventListener()); return eventBus; }); diff --git a/forge/src/main/resources/architectury.mixins.json b/forge/src/main/resources/architectury.mixins.json index 4242d539..4b90c19b 100644 --- a/forge/src/main/resources/architectury.mixins.json +++ b/forge/src/main/resources/architectury.mixins.json @@ -6,10 +6,10 @@ "minVersion": "0.8", "client": [ "MixinClientLevel", - "MixinMinecraft" + "MixinMinecraft", + "ScreenAccessor" ], "mixins": [ - "MixinChunkSerializer", "MixinEntitySpawnExtension", "MixinFallingBlockEntity", "MixinItemExtension", diff --git a/gradle.properties b/gradle.properties index a30c3aa6..ce575a5a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ org.gradle.jvmargs=-Xmx6G org.gradle.daemon=false -platforms=fabric,forge +platforms=fabric,forge,neoforge minecraft_version=1.20.2 supported_version=1.20.2 @@ -18,6 +18,7 @@ fabric_api_version=0.89.1+1.20.2 mod_menu_version=7.0.0 forge_version=48.0.38 +neoforge_version=20.2.52-beta curseforge_id=419699 modrinth_id=lhGA9TYQ diff --git a/minecraftforge/build.gradle b/minecraftforge/build.gradle new file mode 100644 index 00000000..c93ab596 --- /dev/null +++ b/minecraftforge/build.gradle @@ -0,0 +1,154 @@ +plugins { + id "com.github.johnrengelman.shadow" version "7.1.2" + id "me.shedaniel.unified-publishing" +} + +loom { + accessWidenerPath = project(":common").loom.accessWidenerPath + + forge { + mixinConfig "architectury.mixins.json" + mixinConfig "architectury-common.mixins.json" + + convertAccessWideners = true + extraAccessWideners.add loom.accessWidenerPath.get().asFile.name + } +} + +architectury { + platformSetupLoomIde() + forge() +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentForge.extendsFrom common +} + +dependencies { + forge "net.minecraftforge:forge:${rootProject.architectury.minecraft}-${rootProject.forge_version}" + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + common(project(path: ":forge", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive false } + shadowCommon(project(path: ":forge", configuration: "transformProductionForge")) { transitive false } +} + +processResources { + filesMatching("META-INF/mods.toml") { + expand "version": project.version + } + inputs.property "META-INF/mods.toml", project.version +} + +shadowJar { + exclude "fabric.mod.json" + exclude "architectury-common.accessWidener" + exclude "architectury.common.json" + + configurations = [project.configurations.shadowCommon] + archiveClassifier = "dev-shadow" + + // Replace classes with forge's version + exclude "dev/architectury/core/block/ArchitecturyLiquidBlock.class" + exclude "dev/architectury/core/fluid/ArchitecturyFlowingFluid.class" + exclude 'dev/architectury/core/fluid/ArchitecturyFlowingFluid$Source.class' + exclude 'dev/architectury/core/fluid/ArchitecturyFlowingFluid$Flowing.class' + exclude 'dev/architectury/core/item/ArchitecturyBucketItem.class' + exclude 'dev/architectury/core/item/ArchitecturyMobBucketItem.class' + relocate "dev.architectury.core.block.forge.imitator", "dev.architectury.core.block" + relocate "dev.architectury.core.fluid.forge.imitator", "dev.architectury.core.fluid" + relocate "dev.architectury.core.item.forge.imitator", "dev.architectury.core.item" +} + +remapJar { + input.set shadowJar.archiveFile + dependsOn shadowJar + archiveClassifier = null +} + +task renameJarForPublication(type: Zip, dependsOn: remapJar) { + from remapJar.archiveFile.map { zipTree(it) } + archiveExtension = "jar" + metadataCharset "UTF-8" + destinationDirectory = base.libsDirectory + archiveClassifier = project.name +} + +assemble.dependsOn renameJarForPublication + +jar { + archiveClassifier = "dev" +} + +sourcesJar { + afterEvaluate { + [":common"].forEach { + def depSources = project(it).sourcesJar + dependsOn depSources + from(depSources.archiveFile.map { zipTree(it) }) { + exclude "architectury.accessWidener" + } + } + } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +publishing { + publications { + mavenMinecraftForge(MavenPublication) { + artifactId = rootProject.archivesBaseName + "-forge" + from components.java + } + } + + repositories { + if (System.getenv("MAVEN_PASS") != null) { + maven { + url = "https://deploy.shedaniel.me/" + credentials { + username = "shedaniel" + password = System.getenv("MAVEN_PASS") + } + } + } + } +} + +unifiedPublishing { + project { + displayName = "[MinecraftForge $rootProject.supported_version] v$project.version" + releaseType = "$rootProject.artifact_type" + changelog = releaseChangelog() + gameVersions = ["1.20.2"] + gameLoaders = ["forge"] + mainPublication renameJarForPublication + + var CURSE_API_KEY = project.findProperty("CURSE_API_KEY") ?: System.getenv("CURSE_API_KEY") + if (CURSE_API_KEY != null) { + curseforge { + token = CURSE_API_KEY + id = rootProject.curseforge_id + gameVersions.addAll "Java 17" + } + } + + var MODRINTH_TOKEN = project.findProperty("MODRINTH_TOKEN") ?: System.getenv("MODRINTH_TOKEN") + if (MODRINTH_TOKEN != null) { + modrinth { + token = MODRINTH_TOKEN + id = rootProject.modrinth_id + version = "$project.version+$project.name" + } + } + } +} + diff --git a/minecraftforge/gradle.properties b/minecraftforge/gradle.properties new file mode 100644 index 00000000..32f842a6 --- /dev/null +++ b/minecraftforge/gradle.properties @@ -0,0 +1 @@ +loom.platform=forge \ No newline at end of file diff --git a/forge/src/main/java/dev/architectury/forge/ArchitecturyForge.java b/minecraftforge/src/main/java/dev/architectury/forge/ArchitecturyForge.java similarity index 86% rename from forge/src/main/java/dev/architectury/forge/ArchitecturyForge.java rename to minecraftforge/src/main/java/dev/architectury/forge/ArchitecturyForge.java index ed8c789a..3c574a84 100644 --- a/forge/src/main/java/dev/architectury/forge/ArchitecturyForge.java +++ b/minecraftforge/src/main/java/dev/architectury/forge/ArchitecturyForge.java @@ -19,18 +19,17 @@ package dev.architectury.forge; -import dev.architectury.platform.forge.EventBuses; import dev.architectury.event.EventHandler; +import dev.architectury.platform.forge.EventBuses; import dev.architectury.registry.level.biome.forge.BiomeModificationsImpl; +import dev.architectury.utils.ArchitecturyConstants; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -@Mod(ArchitecturyForge.MOD_ID) +@Mod(ArchitecturyConstants.MOD_ID) public class ArchitecturyForge { - public static final String MOD_ID = "architectury"; - public ArchitecturyForge() { - EventBuses.registerModEventBus(ArchitecturyForge.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); + EventBuses.registerModEventBus(ArchitecturyConstants.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); EventHandler.init(); BiomeModificationsImpl.init(); } diff --git a/forge/src/main/java/dev/architectury/mixin/forge/MixinChunkSerializer.java b/minecraftforge/src/main/java/dev/architectury/mixin/forge/minecraftforge/MixinChunkSerializer.java similarity index 98% rename from forge/src/main/java/dev/architectury/mixin/forge/MixinChunkSerializer.java rename to minecraftforge/src/main/java/dev/architectury/mixin/forge/minecraftforge/MixinChunkSerializer.java index fa0ef07b..488e6281 100644 --- a/forge/src/main/java/dev/architectury/mixin/forge/MixinChunkSerializer.java +++ b/minecraftforge/src/main/java/dev/architectury/mixin/forge/minecraftforge/MixinChunkSerializer.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.event.forge.EventHandlerImplCommon; import net.minecraft.nbt.CompoundTag; diff --git a/forge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java b/minecraftforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java similarity index 100% rename from forge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java rename to minecraftforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java diff --git a/forge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java b/minecraftforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java similarity index 99% rename from forge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java rename to minecraftforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java index 3f1d2170..635d6410 100644 --- a/forge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java +++ b/minecraftforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java @@ -22,7 +22,6 @@ package dev.architectury.networking.forge; import com.google.common.collect.*; import com.mojang.logging.LogUtils; -import dev.architectury.forge.ArchitecturyForge; import dev.architectury.networking.NetworkManager; import dev.architectury.networking.NetworkManager.NetworkReceiver; import dev.architectury.networking.transformers.PacketSink; @@ -52,7 +51,7 @@ import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.function.Consumer; -@Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID) +@Mod.EventBusSubscriber(modid = "architectury") public class NetworkManagerImpl { public static void registerReceiver(NetworkManager.Side side, ResourceLocation id, List packetTransformers, NetworkReceiver receiver) { Objects.requireNonNull(id, "Cannot register receiver with a null ID!"); diff --git a/forge/src/main/java/dev/architectury/platform/forge/EventBuses.java b/minecraftforge/src/main/java/dev/architectury/platform/forge/EventBuses.java similarity index 100% rename from forge/src/main/java/dev/architectury/platform/forge/EventBuses.java rename to minecraftforge/src/main/java/dev/architectury/platform/forge/EventBuses.java diff --git a/forge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java b/minecraftforge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java similarity index 100% rename from forge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java rename to minecraftforge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java diff --git a/minecraftforge/src/main/java/dev/architectury/platform/hooks/forge/EventBusesHooksImpl.java b/minecraftforge/src/main/java/dev/architectury/platform/hooks/forge/EventBusesHooksImpl.java new file mode 100644 index 00000000..e7142fb5 --- /dev/null +++ b/minecraftforge/src/main/java/dev/architectury/platform/hooks/forge/EventBusesHooksImpl.java @@ -0,0 +1,36 @@ +/* + * 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.platform.hooks.forge; + +import dev.architectury.platform.forge.EventBuses; +import net.minecraftforge.eventbus.api.IEventBus; + +import java.util.Optional; +import java.util.function.Consumer; + +public class EventBusesHooksImpl { + public static void whenAvailable(String modId, Consumer busConsumer) { + EventBuses.onRegistered(modId, busConsumer); + } + + public static Optional getModEventBus(String modId) { + return EventBuses.getModEventBus(modId); + } +} diff --git a/forge/src/main/resources/META-INF/mods.toml b/minecraftforge/src/main/resources/META-INF/mods.toml similarity index 100% rename from forge/src/main/resources/META-INF/mods.toml rename to minecraftforge/src/main/resources/META-INF/mods.toml diff --git a/forge/src/main/resources/icon.png b/minecraftforge/src/main/resources/icon.png similarity index 100% rename from forge/src/main/resources/icon.png rename to minecraftforge/src/main/resources/icon.png diff --git a/forge/src/main/resources/pack.mcmeta b/minecraftforge/src/main/resources/pack.mcmeta similarity index 100% rename from forge/src/main/resources/pack.mcmeta rename to minecraftforge/src/main/resources/pack.mcmeta diff --git a/neoforge/build.gradle b/neoforge/build.gradle new file mode 100644 index 00000000..6d93d761 --- /dev/null +++ b/neoforge/build.gradle @@ -0,0 +1,155 @@ +plugins { + id "com.github.johnrengelman.shadow" version "7.1.2" + id "me.shedaniel.unified-publishing" +} + +loom { + accessWidenerPath = project(":common").loom.accessWidenerPath +} + +architectury { + platformSetupLoomIde() + neoForge { + platformPackage = "forge" + remapForgeLike "net/minecraftforge/common/extensions/IForgeItem", "net/neoforged/neoforge/common/extensions/IItemExtension" + remapForgeLike "net/minecraftforge/client/event/TextureStitchEvent\$Post", "net/neoforged/neoforge/client/event/TextureAtlasStitchedEvent" + remapForgeLike "net/minecraftforge/fluids/ForgeFlowingFluid", "net/neoforged/neoforge/fluids/BaseFlowingFluid" + remapForgeLike "net/minecraftforge/fluids/ForgeFlowingFluid\$Properties", "net/neoforged/neoforge/fluids/BaseFlowingFluid\$Properties" + remapForgeLike "net/minecraftforge/common/ForgeHooks", "net/neoforged/neoforge/common/CommonHooks" + } +} + +configurations { + common + forgeLike + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common, forgeLike + runtimeClasspath.extendsFrom common, forgeLike + developmentNeoForge.extendsFrom common + developmentForgeLike.extendsFrom forgeLike +} + +dependencies { + neoForge "net.neoforged:neoforge:${rootProject.neoforge_version}" + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + forgeLike(project(path: ":forge", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionNeoForge")) { transitive false } + shadowCommon(project(path: ":forge", configuration: "transformProductionNeoForge")) { transitive false } +} + +processResources { + filesMatching("META-INF/mods.toml") { + expand "version": project.version + } + inputs.property "META-INF/mods.toml", project.version +} + +shadowJar { + exclude "fabric.mod.json" + exclude "architectury-common.accessWidener" + exclude "architectury.common.json" + + configurations = [project.configurations.shadowCommon] + archiveClassifier = "dev-shadow" + + // Replace classes with forge's version + exclude "dev/architectury/core/block/ArchitecturyLiquidBlock.class" + exclude "dev/architectury/core/fluid/ArchitecturyFlowingFluid.class" + exclude 'dev/architectury/core/fluid/ArchitecturyFlowingFluid$Source.class' + exclude 'dev/architectury/core/fluid/ArchitecturyFlowingFluid$Flowing.class' + exclude 'dev/architectury/core/item/ArchitecturyBucketItem.class' + exclude 'dev/architectury/core/item/ArchitecturyMobBucketItem.class' + relocate "dev.architectury.core.block.forge.imitator", "dev.architectury.core.block" + relocate "dev.architectury.core.fluid.forge.imitator", "dev.architectury.core.fluid" + relocate "dev.architectury.core.item.forge.imitator", "dev.architectury.core.item" +} + +remapJar { + input.set shadowJar.archiveFile + dependsOn shadowJar + archiveClassifier = null +} + +task renameJarForPublication(type: Zip, dependsOn: remapJar) { + from remapJar.archiveFile.map { zipTree(it) } + archiveExtension = "jar" + metadataCharset "UTF-8" + destinationDirectory = base.libsDirectory + archiveClassifier = project.name +} + +assemble.dependsOn renameJarForPublication + +jar { + archiveClassifier = "dev" +} + +sourcesJar { + afterEvaluate { + [":common"].forEach { + def depSources = project(it).sourcesJar + dependsOn depSources + from(depSources.archiveFile.map { zipTree(it) }) { + exclude "architectury.accessWidener" + } + } + } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +publishing { + publications { + mavenNeoForge(MavenPublication) { + artifactId = rootProject.archivesBaseName + "-neoforge" + from components.java + } + } + + repositories { + if (System.getenv("MAVEN_PASS") != null) { + maven { + url = "https://deploy.shedaniel.me/" + credentials { + username = "shedaniel" + password = System.getenv("MAVEN_PASS") + } + } + } + } +} + +unifiedPublishing { + project { + displayName = "[NeoForge $rootProject.supported_version] v$project.version" + releaseType = "$rootProject.artifact_type" + changelog = releaseChangelog() + gameVersions = ["1.20.2"] + gameLoaders = ["neoforge"] + mainPublication renameJarForPublication + + var CURSE_API_KEY = project.findProperty("CURSE_API_KEY") ?: System.getenv("CURSE_API_KEY") + if (CURSE_API_KEY != null) { + curseforge { + token = CURSE_API_KEY + id = rootProject.curseforge_id + gameVersions.addAll "Java 17" + } + } + + var MODRINTH_TOKEN = project.findProperty("MODRINTH_TOKEN") ?: System.getenv("MODRINTH_TOKEN") + if (MODRINTH_TOKEN != null) { + modrinth { + token = MODRINTH_TOKEN + id = rootProject.modrinth_id + version = "$project.version+$project.name" + } + } + } +} + diff --git a/neoforge/gradle.properties b/neoforge/gradle.properties new file mode 100644 index 00000000..2914393d --- /dev/null +++ b/neoforge/gradle.properties @@ -0,0 +1 @@ +loom.platform=neoforge \ No newline at end of file diff --git a/neoforge/src/main/java/dev/architectury/mixin/forge/neoforge/MixinChunkSerializer.java b/neoforge/src/main/java/dev/architectury/mixin/forge/neoforge/MixinChunkSerializer.java new file mode 100644 index 00000000..741ae0fb --- /dev/null +++ b/neoforge/src/main/java/dev/architectury/mixin/forge/neoforge/MixinChunkSerializer.java @@ -0,0 +1,64 @@ +/* + * 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.mixin.forge.neoforge; + +import dev.architectury.event.forge.EventHandlerImplCommon; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.ai.village.poi.PoiManager; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.ProtoChunk; +import net.minecraft.world.level.chunk.storage.ChunkSerializer; +import net.neoforged.bus.api.Event; +import net.neoforged.neoforge.event.level.ChunkDataEvent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.lang.ref.WeakReference; + +@Mixin(ChunkSerializer.class) +public class MixinChunkSerializer { + @Unique + private static ThreadLocal> level = new ThreadLocal<>(); + + @Inject(method = "read", at = @At("HEAD")) + private static void read(ServerLevel worldIn, PoiManager arg2, ChunkPos arg3, CompoundTag arg4, CallbackInfoReturnable cir) { + level.set(new WeakReference<>(worldIn)); + } + + @ModifyArg(method = "read", at = @At(value = "INVOKE", + ordinal = 1, + target = "Lnet/neoforged/bus/api/IEventBus;post(Lnet/neoforged/bus/api/Event;)Lnet/neoforged/bus/api/Event;"), + index = 0) + private static Event modifyProtoChunkLevel(Event event) { + // We should get this PRed to Forge + WeakReference levelRef = level.get(); + if (levelRef != null && event instanceof ChunkDataEvent.Load) { + ChunkDataEvent.Load load = (ChunkDataEvent.Load) event; + ((EventHandlerImplCommon.LevelEventAttachment) load).architectury$attachLevel(levelRef.get()); + } + level.remove(); + return event; + } +} diff --git a/neoforge/src/main/java/dev/architectury/neoforge/ArchitecturyNeoForge.java b/neoforge/src/main/java/dev/architectury/neoforge/ArchitecturyNeoForge.java new file mode 100644 index 00000000..a07507d4 --- /dev/null +++ b/neoforge/src/main/java/dev/architectury/neoforge/ArchitecturyNeoForge.java @@ -0,0 +1,33 @@ +/* + * 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.neoforge; + +import dev.architectury.event.EventHandler; +import dev.architectury.registry.level.biome.forge.BiomeModificationsImpl; +import dev.architectury.utils.ArchitecturyConstants; +import net.neoforged.fml.common.Mod; + +@Mod(ArchitecturyConstants.MOD_ID) +public class ArchitecturyNeoForge { + public ArchitecturyNeoForge() { + EventHandler.init(); + BiomeModificationsImpl.init(); + } +} diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java b/neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java new file mode 100644 index 00000000..0c15977b --- /dev/null +++ b/neoforge/src/main/java/dev/architectury/networking/forge/ClientNetworkingManager.java @@ -0,0 +1,63 @@ +/* + * 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 dev.architectury.networking.NetworkManager; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +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; + +@OnlyIn(Dist.CLIENT) +public class ClientNetworkingManager { + public static void initClient() { + NetworkManagerImpl.CHANNEL.addListener(NetworkManagerImpl.createPacketHandler(PlayNetworkDirection.PLAY_TO_CLIENT, NetworkManagerImpl.S2C_TRANSFORMERS)); + NeoForge.EVENT_BUS.register(ClientNetworkingManager.class); + + NetworkManagerImpl.registerS2CReceiver(NetworkManagerImpl.SYNC_IDS, Collections.emptyList(), (buffer, context) -> { + Set receivables = NetworkManagerImpl.serverReceivables; + int size = buffer.readInt(); + receivables.clear(); + for (int i = 0; i < size; i++) { + receivables.add(buffer.readResourceLocation()); + } + context.queue(() -> { + NetworkManager.sendToServer(NetworkManagerImpl.SYNC_IDS, NetworkManagerImpl.sendSyncPacket(NetworkManagerImpl.C2S)); + }); + }); + } + + public static Player getClientPlayer() { + return Minecraft.getInstance().player; + } + + @SubscribeEvent + public static void loggedOut(ClientPlayerNetworkEvent.LoggingOut event) { + NetworkManagerImpl.serverReceivables.clear(); + } +} diff --git a/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java new file mode 100644 index 00000000..05241d3f --- /dev/null +++ b/neoforge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java @@ -0,0 +1,203 @@ +/* + * 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 com.google.common.collect.*; +import com.mojang.logging.LogUtils; +import dev.architectury.networking.NetworkManager; +import dev.architectury.networking.NetworkManager.NetworkReceiver; +import dev.architectury.networking.transformers.PacketSink; +import dev.architectury.networking.transformers.PacketTransformer; +import dev.architectury.utils.ArchitecturyConstants; +import dev.architectury.utils.Env; +import io.netty.buffer.Unpooled; +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.Entity; +import net.minecraft.world.entity.player.Player; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.DistExecutor; +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 org.slf4j.Logger; + +import java.util.*; +import java.util.function.Consumer; + +@Mod.EventBusSubscriber(modid = ArchitecturyConstants.MOD_ID) +public class NetworkManagerImpl { + public static void registerReceiver(NetworkManager.Side side, ResourceLocation id, List packetTransformers, NetworkReceiver receiver) { + Objects.requireNonNull(id, "Cannot register receiver with a null ID!"); + packetTransformers = Objects.requireNonNullElse(packetTransformers, List.of()); + Objects.requireNonNull(receiver, "Cannot register a null receiver!"); + if (side == NetworkManager.Side.C2S) { + registerC2SReceiver(id, packetTransformers, receiver); + } else if (side == NetworkManager.Side.S2C) { + registerS2CReceiver(id, packetTransformers, receiver); + } + } + + public static Packet toPacket(NetworkManager.Side side, ResourceLocation id, FriendlyByteBuf buffer) { + 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); + } + + public static void collectPackets(PacketSink sink, NetworkManager.Side side, ResourceLocation id, FriendlyByteBuf buf) { + PacketTransformer transformer = side == NetworkManager.Side.C2S ? C2S_TRANSFORMERS.get(id) : S2C_TRANSFORMERS.get(id); + if (transformer != null) { + transformer.outbound(side, id, buf, (side1, id1, buf1) -> { + sink.accept(toPacket(side1, id1, buf1)); + }); + } else { + sink.accept(toPacket(side, id, buf)); + } + } + + 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 Map S2C = Maps.newHashMap(); + static final Map C2S = Maps.newHashMap(); + static final Map S2C_TRANSFORMERS = Maps.newHashMap(); + static final Map C2S_TRANSFORMERS = Maps.newHashMap(); + 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(); + 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() { + return getEnvironment() == Env.CLIENT ? getClientPlayer() : context.getSender(); + } + + @Override + public void queue(Runnable runnable) { + context.enqueueWork(runnable); + } + + @Override + public Env getEnvironment() { + return context.getDirection().getReceptionSide() == LogicalSide.CLIENT ? Env.CLIENT : Env.SERVER; + } + + private Player getClientPlayer() { + return DistExecutor.unsafeCallWhenOn(Dist.CLIENT, () -> ClientNetworkingManager::getClientPlayer); + } + }; + transformer.inbound(side, type, buffer, 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); + } + networkReceiver.receive(buf1, packetContext); + }); + } else { + LOGGER.error("Unknown message ID: " + type); + } + + context.setPacketHandled(true); + }; + } + + @OnlyIn(Dist.CLIENT) + public static void registerS2CReceiver(ResourceLocation id, List packetTransformers, NetworkReceiver receiver) { + LOGGER.info("Registering S2C receiver with id {}", id); + S2C.put(id, receiver); + PacketTransformer transformer = PacketTransformer.concat(packetTransformers); + S2C_TRANSFORMERS.put(id, transformer); + } + + public static void registerC2SReceiver(ResourceLocation id, List packetTransformers, NetworkReceiver receiver) { + LOGGER.info("Registering C2S receiver with id {}", id); + C2S.put(id, receiver); + PacketTransformer transformer = PacketTransformer.concat(packetTransformers); + C2S_TRANSFORMERS.put(id, transformer); + } + + public static boolean canServerReceive(ResourceLocation id) { + return serverReceivables.contains(id); + } + + public static boolean canPlayerReceive(ServerPlayer player, ResourceLocation id) { + return clientReceivables.get(player).contains(id); + } + + public static Packet createAddEntityPacket(Entity entity) { + return NetworkHooks.getEntitySpawningPacket(entity); + } + + static FriendlyByteBuf sendSyncPacket(Map map) { + List availableIds = Lists.newArrayList(map.keySet()); + FriendlyByteBuf packetBuffer = new FriendlyByteBuf(Unpooled.buffer()); + packetBuffer.writeInt(availableIds.size()); + for (ResourceLocation availableId : availableIds) { + packetBuffer.writeResourceLocation(availableId); + } + return packetBuffer; + } + + @SubscribeEvent + public static void loggedIn(PlayerEvent.PlayerLoggedInEvent event) { + NetworkManager.sendToPlayer((ServerPlayer) event.getEntity(), SYNC_IDS, sendSyncPacket(C2S)); + } + + @SubscribeEvent + public static void loggedOut(PlayerEvent.PlayerLoggedOutEvent event) { + clientReceivables.removeAll(event.getEntity()); + } +} diff --git a/neoforge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java b/neoforge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java new file mode 100644 index 00000000..214b7ab3 --- /dev/null +++ b/neoforge/src/main/java/dev/architectury/platform/forge/PlatformImpl.java @@ -0,0 +1,185 @@ +/* + * 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.platform.forge; + +import dev.architectury.platform.Mod; +import dev.architectury.utils.Env; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.fml.loading.FMLLoader; +import net.neoforged.fml.loading.FMLPaths; +import net.neoforged.fml.loading.moddiscovery.ModFileInfo; +import net.neoforged.neoforge.client.ConfigScreenHandler; +import net.neoforged.neoforgespi.language.IModFileInfo; +import net.neoforged.neoforgespi.language.IModInfo; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +public class PlatformImpl { + private static final Map mods = new ConcurrentHashMap<>(); + + public static Path getGameFolder() { + return FMLPaths.GAMEDIR.get(); + } + + public static Path getConfigFolder() { + return FMLPaths.CONFIGDIR.get(); + } + + public static Path getModsFolder() { + return FMLPaths.MODSDIR.get(); + } + + public static Env getEnvironment() { + return Env.fromPlatform(getEnv()); + } + + public static Dist getEnv() { + return FMLEnvironment.dist; + } + + public static boolean isModLoaded(String id) { + return ModList.get().isLoaded(id); + } + + public static Mod getMod(String id) { + return mods.computeIfAbsent(id, ModImpl::new); + } + + public static Collection getMods() { + for (IModInfo mod : ModList.get().getMods()) { + getMod(mod.getModId()); + } + return mods.values(); + } + + public static Collection getModIds() { + return ModList.get().getMods().stream().map(IModInfo::getModId).collect(Collectors.toList()); + } + + public static boolean isDevelopmentEnvironment() { + return !FMLLoader.isProduction(); + } + + private static class ModImpl implements Mod { + private final ModContainer container; + private final IModInfo info; + + public ModImpl(String id) { + this.container = ModList.get().getModContainerById(id).orElseThrow(); + this.info = ModList.get().getMods().stream() + .filter(modInfo -> Objects.equals(modInfo.getModId(), id)) + .findAny() + .orElseThrow(); + } + + @Override + @NotNull + public String getModId() { + return info.getModId(); + } + + @Override + @NotNull + public String getVersion() { + return info.getVersion().toString(); + } + + @Override + @NotNull + public String getName() { + return info.getDisplayName(); + } + + @Override + @NotNull + public String getDescription() { + return info.getDescription(); + } + + @Override + public Optional getLogoFile(int i) { + return this.info.getLogoFile(); + } + + @Override + public List getFilePaths() { + return List.of(getFilePath()); + } + + @Override + public Path getFilePath() { + return this.info.getOwningFile().getFile().getSecureJar().getRootPath(); + } + + @Override + public Optional findResource(String... path) { + return Optional.of(this.info.getOwningFile().getFile().findResource(path)).filter(Files::exists); + } + + @Override + public Collection getAuthors() { + Optional optional = this.info.getConfig().getConfigElement("authors") + .map(String::valueOf); + return optional.isPresent() ? Collections.singleton(optional.get()) : Collections.emptyList(); + } + + @Override + public @Nullable Collection getLicense() { + return Collections.singleton(this.info.getOwningFile().getLicense()); + } + + @Override + public Optional getHomepage() { + return this.info.getConfig().getConfigElement("displayURL") + .map(String::valueOf); + } + + @Override + public Optional getSources() { + return Optional.empty(); + } + + @Override + public Optional getIssueTracker() { + IModFileInfo owningFile = this.info.getOwningFile(); + if (owningFile instanceof ModFileInfo info) { + return Optional.ofNullable(info.getIssueURL()) + .map(URL::toString); + } + return Optional.empty(); + } + + @Override + public void registerConfigurationScreen(ConfigurationScreenProvider configurationScreenProvider) { + container.registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> + new ConfigScreenHandler.ConfigScreenFactory((minecraft, screen) -> configurationScreenProvider.provide(screen))); + } + } +} diff --git a/neoforge/src/main/java/dev/architectury/platform/hooks/forge/EventBusesHooksImpl.java b/neoforge/src/main/java/dev/architectury/platform/hooks/forge/EventBusesHooksImpl.java new file mode 100644 index 00000000..00b6b129 --- /dev/null +++ b/neoforge/src/main/java/dev/architectury/platform/hooks/forge/EventBusesHooksImpl.java @@ -0,0 +1,39 @@ +/* + * 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.platform.hooks.forge; + +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; + +import java.util.Optional; +import java.util.function.Consumer; + +public class EventBusesHooksImpl { + public static void whenAvailable(String modId, Consumer busConsumer) { + IEventBus bus = getModEventBus(modId).orElseThrow(() -> new IllegalStateException("Mod '" + modId + "' is not available!")); + busConsumer.accept(bus); + } + + public static Optional getModEventBus(String modId) { + return ModList.get().getModContainerById(modId) + .map(ModContainer::getEventBus); + } +} diff --git a/neoforge/src/main/resources/META-INF/mods.toml b/neoforge/src/main/resources/META-INF/mods.toml new file mode 100644 index 00000000..a4094b9a --- /dev/null +++ b/neoforge/src/main/resources/META-INF/mods.toml @@ -0,0 +1,35 @@ +modLoader = "javafml" +loaderVersion = "[1,)" +issueTrackerURL = "https://github.com/shedaniel/architectury/issues" +license = "GNU LGPLv3" + +[[mods]] +modId = "architectury" +version = "${version}" +displayName = "Architectury" +authors = "shedaniel" +description = ''' +A intermediary api aimed to ease developing multiplatform mods. +''' +logoFile = "icon.png" +license = "LGPL-3" + +[[dependencies.architectury]] +modId = "minecraft" +mandatory = true +versionRange = "[1.20.2,)" +ordering = "NONE" +side = "BOTH" + +[[dependencies.architectury]] +modId = "neoforge" +mandatory = true +versionRange = "[20.2,)" +ordering = "NONE" +side = "BOTH" + +[[mixins]] +config = "architectury.mixins.json" + +[[mixins]] +config = "architectury-common.mixins.json" diff --git a/neoforge/src/main/resources/icon.png b/neoforge/src/main/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..812d0b579194a512dae7cb8f2f0e41d527490177 GIT binary patch literal 153209 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%0D=F30H@_GfHe4*0#C&hgZbVTXQI~b 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%0A9*(z0e*{7eR-B2d`p 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
    ?i9=dN@p~%8>q$4>P2B?CO>g$z*$I1)Dm( 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

    95~Mf$OxlHt*%kWGeh4#zQg#6DEn%R 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