1. 添加了远程Maven仓库,如何使用见 README.MD
2. 修复了Forge Server端加载本模组会导致非法的类加载错误 3. 更改了版本命名,现在是 jsonem-模组加载器端-mc版本-模组版本
This commit is contained in:
parent
9229bbfd71
commit
409573cd4e
29
README.MD
29
README.MD
|
|
@ -3,5 +3,34 @@ Port from [JsonEM](https://github.com/FoundationGames/JsonEM)
|
||||||
|
|
||||||
Support Forge Mod Loader (Recommended FML Version is 1.20.1-47.4.1)
|
Support Forge Mod Loader (Recommended FML Version is 1.20.1-47.4.1)
|
||||||
|
|
||||||
|
# For Developer
|
||||||
|
You can integrate and automatically download JsonEM for your mod project using Gradle.
|
||||||
|
Just add the following to your build script (`build.gradle`):
|
||||||
|
|
||||||
|
## Repositories
|
||||||
|
```gradle
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
name = "LTD Maven"
|
||||||
|
url = "https://nexus.bot.leisuretimedock.top/repository/maven-public/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
### Forge
|
||||||
|
```gradle
|
||||||
|
dependencies {
|
||||||
|
implementation fg.deobf("com.leisuretimedock:jsonem-forge-${minecraft_version}:${jsonem_version})"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
### Fabric And Quilt
|
||||||
|
```gradle
|
||||||
|
dependencies {
|
||||||
|
modImplementation "com.leisuretimedock:jsonem-fabric-${minecraft_version}:${jsonem_version}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
### Choose a Version
|
||||||
|
|
||||||
|
`${mc_version}` gets replaced by the current Minecraft version. (i.e. `1.20.1`)
|
||||||
|
`${jsonem_version}` gets replaced by the version of JEI you want to use (i.e `0.2.4`)
|
||||||
# License
|
# License
|
||||||
MIT
|
MIT
|
||||||
29
build.gradle
29
build.gradle
|
|
@ -43,7 +43,7 @@ subprojects {
|
||||||
|
|
||||||
base {
|
base {
|
||||||
// Set up a suffixed format for the mod jar names, e.g. `example-fabric`.
|
// Set up a suffixed format for the mod jar names, e.g. `example-fabric`.
|
||||||
archivesName = "${mod_id}-mc${minecraft_version}"
|
archivesName = "${mod_id}-${minecraft_version}"
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
|
|
@ -87,8 +87,25 @@ subprojects {
|
||||||
publishing {
|
publishing {
|
||||||
publications {
|
publications {
|
||||||
mavenJava(MavenPublication) {
|
mavenJava(MavenPublication) {
|
||||||
artifactId = base.archivesName.get()
|
|
||||||
from components.java
|
from components.java
|
||||||
|
artifactId = "${mod_id}-${project.name}-${minecraft_version}"
|
||||||
|
|
||||||
|
pom {
|
||||||
|
name = rootProject.mod_id
|
||||||
|
description = "The json definition for entity"
|
||||||
|
url = rootProject.mod_source
|
||||||
|
licenses {
|
||||||
|
license {
|
||||||
|
name = rootProject.mod_licence
|
||||||
|
}
|
||||||
|
}
|
||||||
|
developers {
|
||||||
|
developer {
|
||||||
|
id = rootProject.mod_id
|
||||||
|
name = rootProject.mod_authors
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,6 +115,14 @@ subprojects {
|
||||||
// Notice: This block does NOT have the same function as the block in the top level.
|
// Notice: This block does NOT have the same function as the block in the top level.
|
||||||
// The repositories here will be used for publishing your artifact, not for
|
// The repositories here will be used for publishing your artifact, not for
|
||||||
// retrieving dependencies.
|
// retrieving dependencies.
|
||||||
|
maven {
|
||||||
|
name = 'LTDNexus'
|
||||||
|
url = 'https://nexus.bot.leisuretimedock.top/repository/maven-releases/'
|
||||||
|
credentials {
|
||||||
|
username = System.getenv('LTDNexusUsername') ?: ''
|
||||||
|
password = System.getenv('LTDNexusPassword') ?: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,6 @@ shadowJar {
|
||||||
remapJar {
|
remapJar {
|
||||||
input.set shadowJar.archiveFile
|
input.set shadowJar.archiveFile
|
||||||
dependsOn shadowJar
|
dependsOn shadowJar
|
||||||
archiveBaseName.set "${rootProject.archives_base_name}-${project.name}"
|
// archiveBaseName.set "${rootProject.archives_base_name}-${project.name}"
|
||||||
archiveClassifier.set null
|
archiveClassifier.set null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
},
|
},
|
||||||
"license": "${mod_licence}",
|
"license": "${mod_licence}",
|
||||||
"icon": "icon.png",
|
"icon": "icon.png",
|
||||||
"environment": "*",
|
"environment": "client",
|
||||||
"entrypoints": {
|
"entrypoints": {
|
||||||
"client": [
|
"client": [
|
||||||
"com.leisuretimedock.jsonem.fabric.JsonEmFabric"
|
"com.leisuretimedock.jsonem.fabric.JsonEmFabric"
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ shadowJar {
|
||||||
remapJar {
|
remapJar {
|
||||||
input.set shadowJar.archiveFile
|
input.set shadowJar.archiveFile
|
||||||
dependsOn shadowJar
|
dependsOn shadowJar
|
||||||
archiveBaseName.set "${rootProject.archives_base_name}-${project.name}"
|
// archiveBaseName.set "${rootProject.archives_base_name}-${project.name}"
|
||||||
archiveClassifier.set null
|
archiveClassifier.set null
|
||||||
}
|
}
|
||||||
jar {
|
jar {
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,16 @@ import net.minecraftforge.fml.ModLoadingContext;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.config.ModConfig;
|
import net.minecraftforge.fml.config.ModConfig;
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
|
import net.minecraftforge.fml.loading.FMLEnvironment;
|
||||||
|
|
||||||
@Mod(JsonEm.MOD_ID)
|
@Mod(JsonEm.MOD_ID)
|
||||||
public final class JsonEmForge {
|
public final class JsonEmForge {
|
||||||
public JsonEmForge() {
|
public JsonEmForge() {
|
||||||
FMLJavaModLoadingContext fmlJavaModLoadingContext = FMLJavaModLoadingContext.get();
|
FMLJavaModLoadingContext fmlJavaModLoadingContext = FMLJavaModLoadingContext.get();
|
||||||
ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, JsonEmConfig.spec, "jsonem.toml");
|
if (FMLEnvironment.dist.isClient()) {
|
||||||
JsonEm.commonSetUp();
|
ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, JsonEmConfig.spec, "jsonem.toml");
|
||||||
fmlJavaModLoadingContext.getModEventBus().register(ForgePlatformHelper.class);
|
JsonEm.commonSetUp();
|
||||||
|
fmlJavaModLoadingContext.getModEventBus().register(ForgePlatformHelper.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
package com.leisuretimedock.jsonem.forge.mixin;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.leisuretimedock.jsonem.forge.platform.EntityModelImpl;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
||||||
|
|
||||||
|
import net.minecraft.client.model.geom.LayerDefinitions;
|
||||||
|
import net.minecraft.client.model.geom.ModelLayerLocation;
|
||||||
|
import net.minecraft.client.model.geom.builders.LayerDefinition;
|
||||||
|
|
||||||
|
@Mixin(LayerDefinitions.class)
|
||||||
|
abstract class EntityModelsMixin {
|
||||||
|
@SuppressWarnings("InvalidInjectorMethodSignature")
|
||||||
|
@Inject(method = "createRoots", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/ImmutableMap$Builder;build()Lcom/google/common/collect/ImmutableMap;", remap = false), locals = LocalCapture.CAPTURE_FAILEXCEPTION)
|
||||||
|
private static void registerExtraModelData(CallbackInfoReturnable<Map<ModelLayerLocation, LayerDefinition>> cir, ImmutableMap.Builder<ModelLayerLocation, LayerDefinition> builder) {
|
||||||
|
for (Map.Entry<ModelLayerLocation, LayerDefinition> entry : EntityModelImpl.PROVIDERS.entrySet()) {
|
||||||
|
builder.put(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.leisuretimedock.jsonem.forge.platform;
|
||||||
|
|
||||||
|
import net.minecraft.client.model.geom.ModelLayerLocation;
|
||||||
|
import net.minecraft.client.model.geom.builders.LayerDefinition;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class EntityModelImpl {
|
||||||
|
public static final Map<ModelLayerLocation, LayerDefinition> PROVIDERS = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
@ -11,9 +11,11 @@ import net.minecraft.client.model.geom.builders.MeshDefinition;
|
||||||
import net.minecraftforge.client.event.EntityRenderersEvent;
|
import net.minecraftforge.client.event.EntityRenderersEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.loading.FMLPaths;
|
import net.minecraftforge.fml.loading.FMLPaths;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
|
@ -37,7 +39,7 @@ public class ForgePlatformHelper implements IPlatFormHelper {
|
||||||
public void registerModelLayer(ModelLayerLocation layer) {
|
public void registerModelLayer(ModelLayerLocation layer) {
|
||||||
DEFINITIONS.put(layer, ForgePlatformHelper::createPlaceholderDefinition);
|
DEFINITIONS.put(layer, ForgePlatformHelper::createPlaceholderDefinition);
|
||||||
}
|
}
|
||||||
private static LayerDefinition createPlaceholderDefinition() {
|
private static @NotNull LayerDefinition createPlaceholderDefinition() {
|
||||||
MeshDefinition mesh = new MeshDefinition();
|
MeshDefinition mesh = new MeshDefinition();
|
||||||
var root = mesh.getRoot();
|
var root = mesh.getRoot();
|
||||||
// 加入 main root,防止 bakeLayer().getChild("main") 为 null
|
// 加入 main root,防止 bakeLayer().getChild("main") 为 null
|
||||||
|
|
@ -48,9 +50,16 @@ public class ForgePlatformHelper implements IPlatFormHelper {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) {
|
public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) {
|
||||||
for (Map.Entry<ModelLayerLocation, Supplier<LayerDefinition>> modelLayerLocationSupplierEntry : DEFINITIONS.entrySet()) {
|
for (Map.Entry<ModelLayerLocation, Supplier<LayerDefinition>> modelLayerLocationSupplierEntry : DEFINITIONS.entrySet()) {
|
||||||
event.registerLayerDefinition(modelLayerLocationSupplierEntry.getKey(), modelLayerLocationSupplierEntry.getValue());
|
registerModelLayer(modelLayerLocationSupplierEntry.getKey(), modelLayerLocationSupplierEntry.getValue().get());
|
||||||
EntityModelLayersAccessor.getLayers().add(modelLayerLocationSupplierEntry.getKey());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private static void registerModelLayer(ModelLayerLocation layer, LayerDefinition definition) {
|
||||||
|
Objects.requireNonNull(layer, "EntityModelLayer cannot be null");
|
||||||
|
Objects.requireNonNull(definition, "ModelLayerDefinition cannot be null");
|
||||||
|
if (EntityModelImpl.PROVIDERS.putIfAbsent(layer, definition) != null) {
|
||||||
|
throw new IllegalArgumentException(String.format("Cannot replace registration for entity model layer \"%s\"", layer));
|
||||||
|
}
|
||||||
|
EntityModelLayersAccessor.getLayers().add(layer);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,11 @@ modId = "forge"
|
||||||
mandatory = true
|
mandatory = true
|
||||||
versionRange = "[47,)"
|
versionRange = "[47,)"
|
||||||
ordering = "NONE"
|
ordering = "NONE"
|
||||||
side = "BOTH"
|
side = "CLIENT"
|
||||||
|
|
||||||
[[dependencies.jsonem]]
|
[[dependencies.jsonem]]
|
||||||
modId = "minecraft"
|
modId = "minecraft"
|
||||||
mandatory = true
|
mandatory = true
|
||||||
versionRange = "[1.20.1,)"
|
versionRange = "[1.20.1,)"
|
||||||
ordering = "NONE"
|
ordering = "NONE"
|
||||||
side = "BOTH"
|
side = "CLIENT"
|
||||||
|
|
@ -4,7 +4,8 @@
|
||||||
"compatibilityLevel": "JAVA_17",
|
"compatibilityLevel": "JAVA_17",
|
||||||
"minVersion": "0.8",
|
"minVersion": "0.8",
|
||||||
"client": [
|
"client": [
|
||||||
"EntityModelLayersAccessor"
|
"EntityModelLayersAccessor",
|
||||||
|
"EntityModelsMixin"
|
||||||
],
|
],
|
||||||
"mixins": [
|
"mixins": [
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,15 @@ org.gradle.parallel=true
|
||||||
# Mod properties
|
# Mod properties
|
||||||
mod_id=jsonem
|
mod_id=jsonem
|
||||||
mod_name=jsonEM
|
mod_name=jsonEM
|
||||||
mod_version=0.2.1+1.20-fabrge
|
mod_version=0.2.4
|
||||||
mod_source=https://github.com/LeisureTimeDock/JsonEM_Neo_Forge
|
mod_source=https://github.com/LeisureTimeDock/JsonEM_Neo_Forge
|
||||||
mod_credits=
|
mod_credits=
|
||||||
mod_authors= FoundationGames, R3944Realms
|
mod_authors= FoundationGames, R3944Realms
|
||||||
mod_description=Migrate from Fabric 1.20.1 [Json Entity Models]
|
mod_description=Migrate from Fabric 1.20.1 [Json Entity Models]
|
||||||
mod_licence=MIT
|
mod_licence=MIT
|
||||||
maven_group=com.leisuretimedock
|
maven_group=com.leisuretimedock
|
||||||
archives_name=jsonem_fabrge
|
archives_name=jsonem
|
||||||
archives_base_name=jsonem_1.20.1_fabrge
|
archives_base_name=jsonem
|
||||||
enabled_platforms=fabric,forge
|
enabled_platforms=fabric,forge
|
||||||
# Minecraft properties
|
# Minecraft properties
|
||||||
minecraft_version=1.20.1
|
minecraft_version=1.20.1
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user