修改第十部分

将Forge退回到47.3.5版本
This commit is contained in:
叁玖领域 2025-06-06 20:13:58 +08:00
parent a0e0485ec0
commit 9229bbfd71
13 changed files with 47 additions and 155 deletions

View File

@ -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) {

View File

@ -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();
}

View File

@ -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<ModelLayerLocation, LayerDefinition> roots);
@Accessor("roots")
Map<ModelLayerLocation, LayerDefinition> getRoots();
}

View File

@ -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<ModelLayerLocation, LayerDefinition> roots);
@Accessor("roots")
abstract Map<ModelLayerLocation, LayerDefinition> getRoots();
@Inject(method = "onResourceManagerReload", at = @At("TAIL"))
public void onResourceManagerReload(ResourceManager resourceManager, CallbackInfo ci) {
setRoots(new HashMap<>(getRoots()));
JsonEntityModelUtil.loadModels(resourceManager, getRoots());
}
}

View File

@ -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();
}

View File

@ -5,7 +5,7 @@
"minVersion": "0.8",
"client": [
"DilationAccess",
"EntityModelSetAccess",
"EntityModelSetMixin",
"EntityModelsMixin",
"ModelCuboidDataAccess",
"ModelPartDataAccess",

View File

@ -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<Void> 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<ModelLayerLocation, LayerDefinition> 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);
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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<ModelLayerLocation, LayerDefinition> roots = new HashMap<>(accessor.getRoots());
// 注入自定义模型
JsonEntityModelUtil.loadModels(resourceManager, roots);
accessor.setRoots(roots);
}
}

View File

@ -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

View File

@ -1,6 +1,6 @@
modLoader = "javafml"
loaderVersion = "[47,)"
#issueTrackerURL = ""
issueTrackerURL = "https://github.com/LeisureTimeDock/JsonEM_Neo_Forge"
license = "${mod_licence}"
logoFile = "icon.png"

View File

@ -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