修改第十部分
将Forge退回到47.3.5版本
This commit is contained in:
parent
a0e0485ec0
commit
9229bbfd71
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
"minVersion": "0.8",
|
||||
"client": [
|
||||
"DilationAccess",
|
||||
"EntityModelSetAccess",
|
||||
"EntityModelSetMixin",
|
||||
"EntityModelsMixin",
|
||||
"ModelCuboidDataAccess",
|
||||
"ModelPartDataAccess",
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
modLoader = "javafml"
|
||||
loaderVersion = "[47,)"
|
||||
#issueTrackerURL = ""
|
||||
issueTrackerURL = "https://github.com/LeisureTimeDock/JsonEM_Neo_Forge"
|
||||
license = "${mod_licence}"
|
||||
logoFile = "icon.png"
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user