From 9229bbfd717b09cafedeed61f596484086066ff4 Mon Sep 17 00:00:00 2001 From: 3944Realms Date: Fri, 6 Jun 2025 20:13:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AC=AC=E5=8D=81=E9=83=A8?= =?UTF-8?q?=E5=88=86=20=E5=B0=86Forge=E9=80=80=E5=9B=9E=E5=88=B047.3.5?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/leisuretimedock/jsonem/JsonEm.java | 2 +- .../core/IJsonEntityModelReloadListener.java | 9 --- .../jsonem/mixin/EntityModelSetAccess.java | 18 ------ .../jsonem/mixin/EntityModelSetMixin.java | 29 +++++++++ .../jsonem/platform/IPlatFormHelper.java | 2 - .../main/resources/jsonem-common.mixins.json | 2 +- .../JsonEntityModelReloadListenerImp.java | 59 ------------------- .../fabric/platform/FabricPlatformHelper.java | 6 -- .../jsonem/forge/JsonEmForge.java | 8 ++- .../JsonEntityModelReloadListenerImp.java | 46 --------------- .../forge/platform/ForgePlatformHelper.java | 17 +++--- forge/src/main/resources/META-INF/mods.toml | 2 +- gradle.properties | 2 +- 13 files changed, 47 insertions(+), 155 deletions(-) delete mode 100644 common/src/main/java/com/leisuretimedock/jsonem/core/IJsonEntityModelReloadListener.java delete mode 100644 common/src/main/java/com/leisuretimedock/jsonem/mixin/EntityModelSetAccess.java create mode 100644 common/src/main/java/com/leisuretimedock/jsonem/mixin/EntityModelSetMixin.java delete mode 100644 fabric/src/main/java/com/leisuretimedock/jsonem/fabric/core/JsonEntityModelReloadListenerImp.java delete mode 100644 forge/src/main/java/com/leisuretimedock/jsonem/forge/core/JsonEntityModelReloadListenerImp.java diff --git a/common/src/main/java/com/leisuretimedock/jsonem/JsonEm.java b/common/src/main/java/com/leisuretimedock/jsonem/JsonEm.java index 52402c9..d482faf 100644 --- a/common/src/main/java/com/leisuretimedock/jsonem/JsonEm.java +++ b/common/src/main/java/com/leisuretimedock/jsonem/JsonEm.java @@ -9,7 +9,7 @@ public final class JsonEm { public static final String MOD_ID = "jsonem"; public static final Logger LOG = LoggerFactory.getLogger(JsonEm.class); public static void commonSetUp() { - Services.PLATFORM.getReloadListener().registerModelReloadListener(); + } @SuppressWarnings("unused") public static void registerModelLayer(ModelLayerLocation layer) { diff --git a/common/src/main/java/com/leisuretimedock/jsonem/core/IJsonEntityModelReloadListener.java b/common/src/main/java/com/leisuretimedock/jsonem/core/IJsonEntityModelReloadListener.java deleted file mode 100644 index bf8cc0e..0000000 --- a/common/src/main/java/com/leisuretimedock/jsonem/core/IJsonEntityModelReloadListener.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.leisuretimedock.jsonem.core; - -import com.leisuretimedock.jsonem.JsonEm; -import net.minecraft.resources.ResourceLocation; - -public interface IJsonEntityModelReloadListener { - ResourceLocation ID = new ResourceLocation(JsonEm.MOD_ID, "json_model_reload"); - void registerModelReloadListener(); -} \ No newline at end of file diff --git a/common/src/main/java/com/leisuretimedock/jsonem/mixin/EntityModelSetAccess.java b/common/src/main/java/com/leisuretimedock/jsonem/mixin/EntityModelSetAccess.java deleted file mode 100644 index 6bb2624..0000000 --- a/common/src/main/java/com/leisuretimedock/jsonem/mixin/EntityModelSetAccess.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.leisuretimedock.jsonem.mixin; - -import net.minecraft.client.model.geom.EntityModelSet; -import net.minecraft.client.model.geom.ModelLayerLocation; -import net.minecraft.client.model.geom.builders.LayerDefinition; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.Map; - -@Mixin(EntityModelSet.class) -public interface EntityModelSetAccess { - @Accessor("roots") - void setRoots(Map roots); - - @Accessor("roots") - Map getRoots(); -} \ No newline at end of file diff --git a/common/src/main/java/com/leisuretimedock/jsonem/mixin/EntityModelSetMixin.java b/common/src/main/java/com/leisuretimedock/jsonem/mixin/EntityModelSetMixin.java new file mode 100644 index 0000000..24b8dc7 --- /dev/null +++ b/common/src/main/java/com/leisuretimedock/jsonem/mixin/EntityModelSetMixin.java @@ -0,0 +1,29 @@ +package com.leisuretimedock.jsonem.mixin; + +import com.leisuretimedock.jsonem.util.JsonEntityModelUtil; +import net.minecraft.client.model.geom.EntityModelSet; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.server.packs.resources.ResourceManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.HashMap; +import java.util.Map; + +@Mixin(EntityModelSet.class) +public abstract class EntityModelSetMixin { + @Accessor("roots") + abstract void setRoots(Map roots); + + @Accessor("roots") + abstract Map getRoots(); + @Inject(method = "onResourceManagerReload", at = @At("TAIL")) + public void onResourceManagerReload(ResourceManager resourceManager, CallbackInfo ci) { + setRoots(new HashMap<>(getRoots())); + JsonEntityModelUtil.loadModels(resourceManager, getRoots()); + } +} \ No newline at end of file diff --git a/common/src/main/java/com/leisuretimedock/jsonem/platform/IPlatFormHelper.java b/common/src/main/java/com/leisuretimedock/jsonem/platform/IPlatFormHelper.java index 9783d33..4be4b43 100644 --- a/common/src/main/java/com/leisuretimedock/jsonem/platform/IPlatFormHelper.java +++ b/common/src/main/java/com/leisuretimedock/jsonem/platform/IPlatFormHelper.java @@ -1,6 +1,5 @@ package com.leisuretimedock.jsonem.platform; -import com.leisuretimedock.jsonem.core.IJsonEntityModelReloadListener; import net.minecraft.client.model.geom.ModelLayerLocation; import java.nio.file.Path; @@ -9,5 +8,4 @@ public interface IPlatFormHelper { boolean shouldDumpModels(); Path getDumpModelsPath(); void registerModelLayer(ModelLayerLocation layer); - IJsonEntityModelReloadListener getReloadListener(); } diff --git a/common/src/main/resources/jsonem-common.mixins.json b/common/src/main/resources/jsonem-common.mixins.json index d9eac49..49a089a 100644 --- a/common/src/main/resources/jsonem-common.mixins.json +++ b/common/src/main/resources/jsonem-common.mixins.json @@ -5,7 +5,7 @@ "minVersion": "0.8", "client": [ "DilationAccess", - "EntityModelSetAccess", + "EntityModelSetMixin", "EntityModelsMixin", "ModelCuboidDataAccess", "ModelPartDataAccess", diff --git a/fabric/src/main/java/com/leisuretimedock/jsonem/fabric/core/JsonEntityModelReloadListenerImp.java b/fabric/src/main/java/com/leisuretimedock/jsonem/fabric/core/JsonEntityModelReloadListenerImp.java deleted file mode 100644 index 7565258..0000000 --- a/fabric/src/main/java/com/leisuretimedock/jsonem/fabric/core/JsonEntityModelReloadListenerImp.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.leisuretimedock.jsonem.fabric.core; - -import com.leisuretimedock.jsonem.JsonEm; -import com.leisuretimedock.jsonem.core.IJsonEntityModelReloadListener; -import com.leisuretimedock.jsonem.mixin.EntityModelSetAccess; -import com.leisuretimedock.jsonem.util.JsonEntityModelUtil; -import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener; -import net.fabricmc.fabric.api.resource.ResourceManagerHelper; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.geom.EntityModelSet; -import net.minecraft.client.model.geom.ModelLayerLocation; -import net.minecraft.client.model.geom.builders.LayerDefinition; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.PackType; -import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.util.Unit; -import net.minecraft.util.profiling.ProfilerFiller; -import org.jetbrains.annotations.NotNull; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; - -public class JsonEntityModelReloadListenerImp implements IJsonEntityModelReloadListener, IdentifiableResourceReloadListener { - @Override - public ResourceLocation getFabricId() { - return ID; - } - - @Override - public @NotNull CompletableFuture reload(@NotNull PreparationBarrier preparationBarrier, @NotNull ResourceManager resourceManager, @NotNull ProfilerFiller preparationsProfiler, @NotNull ProfilerFiller reloadProfiler, @NotNull Executor backgroundExecutor, @NotNull Executor gameExecutor) { - return preparationBarrier.wait(Unit.INSTANCE).thenRunAsync(() -> { - reloadProfiler.startTick(); - reloadProfiler.push("listener"); - try { - Minecraft minecraft = Minecraft.getInstance(); - EntityModelSet modelSet = minecraft.getEntityModels(); - - EntityModelSetAccess accessor = (EntityModelSetAccess) modelSet; - Map roots = new HashMap<>(accessor.getRoots()); - - JsonEntityModelUtil.loadModels(resourceManager, roots); - - accessor.setRoots(roots); - } catch (Exception e) { - JsonEm.LOG.error(e.getMessage(), e); - } - reloadProfiler.pop(); - reloadProfiler.endTick(); - }, gameExecutor); - } - - @Override - public void registerModelReloadListener() { - ResourceManagerHelper.get(PackType.CLIENT_RESOURCES) - .registerReloadListener(this); - } -} diff --git a/fabric/src/main/java/com/leisuretimedock/jsonem/fabric/platform/FabricPlatformHelper.java b/fabric/src/main/java/com/leisuretimedock/jsonem/fabric/platform/FabricPlatformHelper.java index 3358e55..ac32d08 100644 --- a/fabric/src/main/java/com/leisuretimedock/jsonem/fabric/platform/FabricPlatformHelper.java +++ b/fabric/src/main/java/com/leisuretimedock/jsonem/fabric/platform/FabricPlatformHelper.java @@ -1,8 +1,6 @@ package com.leisuretimedock.jsonem.fabric.platform; -import com.leisuretimedock.jsonem.core.IJsonEntityModelReloadListener; import com.leisuretimedock.jsonem.fabric.JsonEmFabric; -import com.leisuretimedock.jsonem.fabric.core.JsonEntityModelReloadListenerImp; import com.leisuretimedock.jsonem.platform.IPlatFormHelper; import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; import net.fabricmc.loader.api.FabricLoader; @@ -30,8 +28,4 @@ public class FabricPlatformHelper implements IPlatFormHelper { EntityModelLayerRegistry.registerModelLayer(layer, () -> LayerDefinition.create(new MeshDefinition(), 32, 32)); } - @Override - public IJsonEntityModelReloadListener getReloadListener() { - return new JsonEntityModelReloadListenerImp(); - } } diff --git a/forge/src/main/java/com/leisuretimedock/jsonem/forge/JsonEmForge.java b/forge/src/main/java/com/leisuretimedock/jsonem/forge/JsonEmForge.java index 71ac197..1f4ea6f 100644 --- a/forge/src/main/java/com/leisuretimedock/jsonem/forge/JsonEmForge.java +++ b/forge/src/main/java/com/leisuretimedock/jsonem/forge/JsonEmForge.java @@ -3,15 +3,17 @@ package com.leisuretimedock.jsonem.forge; import com.leisuretimedock.jsonem.JsonEm; import com.leisuretimedock.jsonem.forge.config.JsonEmConfig; import com.leisuretimedock.jsonem.forge.platform.ForgePlatformHelper; +import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @Mod(JsonEm.MOD_ID) public final class JsonEmForge { - public JsonEmForge(FMLJavaModLoadingContext context) { - context.registerConfig(ModConfig.Type.CLIENT, JsonEmConfig.spec, "jsonem.toml"); + public JsonEmForge() { + FMLJavaModLoadingContext fmlJavaModLoadingContext = FMLJavaModLoadingContext.get(); + ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, JsonEmConfig.spec, "jsonem.toml"); JsonEm.commonSetUp(); - context.getModEventBus().register(ForgePlatformHelper.class); + fmlJavaModLoadingContext.getModEventBus().register(ForgePlatformHelper.class); } } diff --git a/forge/src/main/java/com/leisuretimedock/jsonem/forge/core/JsonEntityModelReloadListenerImp.java b/forge/src/main/java/com/leisuretimedock/jsonem/forge/core/JsonEntityModelReloadListenerImp.java deleted file mode 100644 index cbc488c..0000000 --- a/forge/src/main/java/com/leisuretimedock/jsonem/forge/core/JsonEntityModelReloadListenerImp.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.leisuretimedock.jsonem.forge.core; - -import com.leisuretimedock.jsonem.core.IJsonEntityModelReloadListener; -import com.leisuretimedock.jsonem.mixin.EntityModelSetAccess; -import com.leisuretimedock.jsonem.util.JsonEntityModelUtil; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.geom.EntityModelSet; -import net.minecraft.client.model.geom.ModelLayerLocation; -import net.minecraft.client.model.geom.builders.LayerDefinition; -import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.server.packs.resources.ResourceManagerReloadListener; -import net.minecraftforge.client.event.RegisterClientReloadListenersEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.common.Mod; -import org.jetbrains.annotations.NotNull; - -import java.util.HashMap; -import java.util.Map; - -public class JsonEntityModelReloadListenerImp implements IJsonEntityModelReloadListener, ResourceManagerReloadListener { - - public static void registerReloadListeners(RegisterClientReloadListenersEvent event) { - event.registerReloadListener(new JsonEntityModelReloadListenerImp()); - } - - @Override - public void registerModelReloadListener() { - Mod.EventBusSubscriber.Bus.MOD.bus() - .get() - .addListener(JsonEntityModelReloadListenerImp::registerReloadListeners); - } - - @Override - public void onResourceManagerReload(@NotNull ResourceManager resourceManager) { - Minecraft mc = Minecraft.getInstance(); - EntityModelSet modelSet = mc.getEntityModels(); - - EntityModelSetAccess accessor = (EntityModelSetAccess) modelSet; - Map roots = new HashMap<>(accessor.getRoots()); - - // 注入自定义模型 - JsonEntityModelUtil.loadModels(resourceManager, roots); - - accessor.setRoots(roots); - } -} diff --git a/forge/src/main/java/com/leisuretimedock/jsonem/forge/platform/ForgePlatformHelper.java b/forge/src/main/java/com/leisuretimedock/jsonem/forge/platform/ForgePlatformHelper.java index 5fefb33..1f26698 100644 --- a/forge/src/main/java/com/leisuretimedock/jsonem/forge/platform/ForgePlatformHelper.java +++ b/forge/src/main/java/com/leisuretimedock/jsonem/forge/platform/ForgePlatformHelper.java @@ -1,16 +1,15 @@ package com.leisuretimedock.jsonem.forge.platform; -import com.leisuretimedock.jsonem.core.IJsonEntityModelReloadListener; import com.leisuretimedock.jsonem.forge.config.JsonEmConfig; -import com.leisuretimedock.jsonem.forge.core.JsonEntityModelReloadListenerImp; import com.leisuretimedock.jsonem.forge.mixin.EntityModelLayersAccessor; import com.leisuretimedock.jsonem.platform.IPlatFormHelper; import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; import net.minecraft.client.model.geom.builders.LayerDefinition; import net.minecraft.client.model.geom.builders.MeshDefinition; import net.minecraftforge.client.event.EntityRenderersEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.loading.FMLPaths; import java.nio.file.Path; @@ -36,12 +35,14 @@ public class ForgePlatformHelper implements IPlatFormHelper { @Override public void registerModelLayer(ModelLayerLocation layer) { - DEFINITIONS.put(layer, () -> LayerDefinition.create(new MeshDefinition(), 32, 32)); + DEFINITIONS.put(layer, ForgePlatformHelper::createPlaceholderDefinition); } - - @Override - public IJsonEntityModelReloadListener getReloadListener() { - return new JsonEntityModelReloadListenerImp(); + private static LayerDefinition createPlaceholderDefinition() { + MeshDefinition mesh = new MeshDefinition(); + var root = mesh.getRoot(); + // 加入 main root,防止 bakeLayer().getChild("main") 为 null + root.addOrReplaceChild("main", CubeListBuilder.create(), PartPose.ZERO); + return LayerDefinition.create(mesh, 32, 32); } @SubscribeEvent diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 1481455..2ce250a 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -1,6 +1,6 @@ modLoader = "javafml" loaderVersion = "[47,)" -#issueTrackerURL = "" +issueTrackerURL = "https://github.com/LeisureTimeDock/JsonEM_Neo_Forge" license = "${mod_licence}" logoFile = "icon.png" diff --git a/gradle.properties b/gradle.properties index 4ae56a2..7b90ce5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,4 +20,4 @@ minecraft_version=1.20.1 architectury_api_version=9.2.14 fabric_loader_version=0.16.14 fabric_api_version=0.92.5+1.20.1 -forge_version=1.20.1-47.4.1 +forge_version=1.20.1-47.3.5