diff --git a/build.gradle.kts b/build.gradle.kts index 56e771f..9cc8d51 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,6 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import net.fabricmc.loom.api.LoomGradleExtensionAPI import net.fabricmc.loom.task.RemapJarTask -import org.gradle.kotlin.dsl.named plugins { java @@ -109,12 +108,10 @@ subprojects { "jarShadow"("org.lwjgl:lwjgl-assimp:${properties["deps_lwjgl_version"]}") { exclude(group = "org.lwjgl", module = "lwjgl") } - - if (isMinecraftSubProject) { - for (natives in arrayOf("natives-windows", "natives-linux", "natives-macos")) { - "jarShadow"("org.lwjgl:lwjgl-assimp:${properties["deps_lwjgl_version"]}:${natives}") { - exclude(group = "org.lwjgl", module = "lwjgl") - } + + for (natives in arrayOf("natives-windows", "natives-linux", "natives-macos")) { + "jarShadow"("org.lwjgl:lwjgl-assimp:${properties["deps_lwjgl_version"]}:${natives}") { + exclude(group = "org.lwjgl", module = "lwjgl") } } diff --git a/common/src/main/java/me/pandamods/pandalib/client/PandaLibClient.java b/common/src/main/java/me/pandamods/pandalib/client/PandaLibClient.java index f99b97b..7e26438 100644 --- a/common/src/main/java/me/pandamods/pandalib/client/PandaLibClient.java +++ b/common/src/main/java/me/pandamods/pandalib/client/PandaLibClient.java @@ -12,9 +12,9 @@ package me.pandamods.pandalib.client; -import dev.architectury.registry.ReloadListenerRegistry; import me.pandamods.pandalib.PandaLib; import me.pandamods.pandalib.core.client.event.EventHandlerClient; +import me.pandamods.pandalib.registry.ReloadListenerRegistry; import me.pandamods.pandalib.resource.AssimpResources; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/common/src/main/java/me/pandamods/pandalib/platform/services/RegistrationHelper.java b/common/src/main/java/me/pandamods/pandalib/platform/services/RegistrationHelper.java index 97126db..1effd91 100644 --- a/common/src/main/java/me/pandamods/pandalib/platform/services/RegistrationHelper.java +++ b/common/src/main/java/me/pandamods/pandalib/platform/services/RegistrationHelper.java @@ -14,11 +14,16 @@ import me.pandamods.pandalib.registry.DeferredObject; import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.resources.PreparableReloadListener; +import java.util.List; import java.util.function.Supplier; public interface RegistrationHelper { void register(DeferredObject deferredObject, Supplier supplier); - void registerNewRegistry(Registry registry); + + void registerReloadListener(PackType packType, PreparableReloadListener listener, ResourceLocation id, List dependencies); } diff --git a/common/src/main/java/me/pandamods/pandalib/registry/ReloadListenerRegistry.java b/common/src/main/java/me/pandamods/pandalib/registry/ReloadListenerRegistry.java new file mode 100644 index 0000000..3970acf --- /dev/null +++ b/common/src/main/java/me/pandamods/pandalib/registry/ReloadListenerRegistry.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Oliver Froberg (The Panda Oliver) + * + * 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 + * any later version. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package me.pandamods.pandalib.registry; + +import me.pandamods.pandalib.platform.Services; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.resources.PreparableReloadListener; + +import java.util.List; + +public class ReloadListenerRegistry { + public static void register(PackType packType, PreparableReloadListener listener) { + register(packType, listener, null); + } + + public static void register(PackType packType, PreparableReloadListener listener, ResourceLocation id) { + register(packType, listener, id, List.of()); + } + + public static void register(PackType packType, PreparableReloadListener listener, ResourceLocation id, List dependencies) { + Services.REGISTRATION.registerReloadListener(packType, listener, id, dependencies); + } +} diff --git a/common/src/main/java/me/pandamods/pandalib/resource/AssimpResources.java b/common/src/main/java/me/pandamods/pandalib/resource/AssimpResources.java index 5ce7e15..957b3d3 100644 --- a/common/src/main/java/me/pandamods/pandalib/resource/AssimpResources.java +++ b/common/src/main/java/me/pandamods/pandalib/resource/AssimpResources.java @@ -21,8 +21,6 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.PreparableReloadListener; import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.util.profiling.ProfilerFiller; -import org.jetbrains.annotations.NotNull; import org.lwjgl.assimp.*; import java.io.FileNotFoundException; diff --git a/fabric/src/main/java/me/pandamods/pandalib/fabric/platform/RegistrationHelperImpl.java b/fabric/src/main/java/me/pandamods/pandalib/fabric/platform/RegistrationHelperImpl.java index 6a4d782..c82a25f 100644 --- a/fabric/src/main/java/me/pandamods/pandalib/fabric/platform/RegistrationHelperImpl.java +++ b/fabric/src/main/java/me/pandamods/pandalib/fabric/platform/RegistrationHelperImpl.java @@ -14,12 +14,21 @@ import me.pandamods.pandalib.platform.services.RegistrationHelper; import me.pandamods.pandalib.registry.DeferredObject; +import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener; +import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.minecraft.core.RegistrationInfo; import net.minecraft.core.Registry; import net.minecraft.core.WritableRegistry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.resources.PreparableReloadListener; +import net.minecraft.server.packs.resources.ResourceManager; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; import java.util.function.Supplier; public class RegistrationHelperImpl implements RegistrationHelper { @@ -30,6 +39,7 @@ public void register(DeferredObject deferredObject, Supplier void registerNewRegistry(Registry registry) { ResourceLocation registryName = registry.key().location(); if (BuiltInRegistries.REGISTRY.containsKey(registryName)) @@ -37,4 +47,29 @@ public void registerNewRegistry(Registry registry) { ((WritableRegistry) BuiltInRegistries.REGISTRY).register(registry.key(), registry, RegistrationInfo.BUILT_IN); } + + @Override + public void registerReloadListener(PackType packType, PreparableReloadListener listener, ResourceLocation id, List dependencies) { + ResourceManagerHelper.get(packType).registerReloadListener(new IdentifiableResourceReloadListener() { + @Override + public ResourceLocation getFabricId() { + return id; + } + + @Override + public CompletableFuture reload(PreparationBarrier preparationBarrier, ResourceManager resourceManager, Executor executor, Executor executor2) { + return listener.reload(preparationBarrier, resourceManager, executor, executor2); + } + + @Override + public Collection getFabricDependencies() { + return dependencies; + } + + @Override + public String getName() { + return listener.getName(); + } + }); + } } diff --git a/gradle.properties b/gradle.properties index 3b6d55c..63cc458 100644 --- a/gradle.properties +++ b/gradle.properties @@ -53,6 +53,5 @@ deps_modmenu_version = 12.0.0-beta.1 deps_architectury_version = 14.0.4 #### Dependencies #### -deps_lwjgl_version = 3.3.3 -deps_manifold_version = 2024.1.37 +deps_lwjgl_version = 3.3.1 deps_joml_version = 1.10.5 diff --git a/neoforge/build.gradle.kts b/neoforge/build.gradle.kts index 89615fb..d43bf2f 100644 --- a/neoforge/build.gradle.kts +++ b/neoforge/build.gradle.kts @@ -18,7 +18,7 @@ dependencies { neoForge("net.neoforged:neoforge:${properties["neoforge_version"]}") modApi("dev.architectury:architectury-neoforge:${properties["deps_architectury_version"]}") - + common(project(":common", "namedElements")) { isTransitive = false } shadowBundle(project(":common", "transformProductionNeoForge")) } diff --git a/neoforge/src/main/java/me/pandamods/pandalib/neoforge/PandaLibNeoForge.java b/neoforge/src/main/java/me/pandamods/pandalib/neoforge/PandaLibNeoForge.java index b7c7d77..b4fa5a4 100644 --- a/neoforge/src/main/java/me/pandamods/pandalib/neoforge/PandaLibNeoForge.java +++ b/neoforge/src/main/java/me/pandamods/pandalib/neoforge/PandaLibNeoForge.java @@ -18,16 +18,18 @@ import me.pandamods.pandalib.platform.Services; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.common.NeoForge; @Mod(PandaLib.MOD_ID) public class PandaLibNeoForge { public PandaLibNeoForge(IEventBus eventBus) { new PandaLib(); - + eventBus.addListener(NetworkHelperImpl::registerPackets); if (Services.REGISTRATION instanceof RegistrationHelperImpl helper) { eventBus.addListener(helper::registerEvent); eventBus.addListener(helper::registerNewRegistryEvent); + NeoForge.EVENT_BUS.addListener(helper::addReloadListenerEvent); } } } diff --git a/neoforge/src/main/java/me/pandamods/pandalib/neoforge/client/PandaLibClientNeoForge.java b/neoforge/src/main/java/me/pandamods/pandalib/neoforge/client/PandaLibClientNeoForge.java index d432c73..71285ef 100644 --- a/neoforge/src/main/java/me/pandamods/pandalib/neoforge/client/PandaLibClientNeoForge.java +++ b/neoforge/src/main/java/me/pandamods/pandalib/neoforge/client/PandaLibClientNeoForge.java @@ -19,14 +19,9 @@ import net.neoforged.fml.common.Mod; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; - @Mod(value = PandaLib.MOD_ID, dist = Dist.CLIENT) public class PandaLibClientNeoForge { public PandaLibClientNeoForge(IEventBus eventBus) { - eventBus.addListener(PandaLibClientNeoForge::clientSetup); - } - - public static void clientSetup(FMLClientSetupEvent event) { new PandaLibClient(); - } + } } diff --git a/neoforge/src/main/java/me/pandamods/pandalib/neoforge/platform/RegistrationHelperImpl.java b/neoforge/src/main/java/me/pandamods/pandalib/neoforge/platform/RegistrationHelperImpl.java index 0f56c1b..01eec5f 100644 --- a/neoforge/src/main/java/me/pandamods/pandalib/neoforge/platform/RegistrationHelperImpl.java +++ b/neoforge/src/main/java/me/pandamods/pandalib/neoforge/platform/RegistrationHelperImpl.java @@ -14,8 +14,14 @@ import me.pandamods.pandalib.platform.services.RegistrationHelper; import me.pandamods.pandalib.registry.DeferredObject; +import net.minecraft.client.Minecraft; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.resources.PreparableReloadListener; +import net.minecraft.server.packs.resources.ReloadableResourceManager; +import net.neoforged.neoforge.event.AddReloadListenerEvent; import net.neoforged.neoforge.registries.NewRegistryEvent; import net.neoforged.neoforge.registries.RegisterEvent; @@ -28,6 +34,7 @@ public class RegistrationHelperImpl implements RegistrationHelper { private final Map>, PendingRegistries> pendingRegistries = new HashMap<>(); private final List> pendingRegistryTypes = new ArrayList<>(); + private final List serverDataReloadListeners = new ArrayList<>(); @Override @SuppressWarnings("unchecked") @@ -43,6 +50,15 @@ public void registerNewRegistry(Registry registry) { pendingRegistryTypes.add(registry); } + @Override + public void registerReloadListener(PackType packType, PreparableReloadListener listener, ResourceLocation id, List dependencies) { + if (packType == PackType.SERVER_DATA) { + serverDataReloadListeners.add(listener); + } else { + ((ReloadableResourceManager) Minecraft.getInstance().getResourceManager()).registerReloadListener(listener); + } + } + public void registerEvent(RegisterEvent event) { pendingRegistries.values().forEach(pending -> pending.register(event)); } @@ -50,6 +66,10 @@ public void registerEvent(RegisterEvent event) { public void registerNewRegistryEvent(NewRegistryEvent event) { pendingRegistryTypes.forEach(event::register); } + + public void addReloadListenerEvent(AddReloadListenerEvent event) { + serverDataReloadListeners.forEach(event::addListener); + } private static class PendingRegistries { private final ResourceKey> registryKey; diff --git a/neoforge/src/main/resources/pandalib.mixins.json b/neoforge/src/main/resources/pandalib.mixins.json index d977a2d..225d257 100644 --- a/neoforge/src/main/resources/pandalib.mixins.json +++ b/neoforge/src/main/resources/pandalib.mixins.json @@ -1,13 +1,13 @@ { - "required": true, - "package": "me.pandamods.pandalib.neoforge.mixin", + "required": true, + "package": "me.pandamods.pandalib.neoforge.mixin", "compatibilityLevel": "JAVA_${java_version}", - "minVersion": "0.8", - "client": [ - ], - "mixins": [ - ], - "injectors": { - "defaultRequire": 1 - } + "minVersion": "0.8", + "client": [ + ], + "mixins": [ + ], + "injectors": { + "defaultRequire": 1 + } } \ No newline at end of file