mirror of
https://github.com/TheWhiteDog9487/ServerAddressSpaceFix.git
synced 2026-06-17 20:24:45 +08:00
0.2.4
修复未安装YACL会导致游戏出现`NoClassDefFoundError`崩溃的问题 将配置文件名从`serveraddressspacefix.json5`改为`ServerAddressSpaceFix.json5` 为配置文件添加版本号 更改Logger名称
This commit is contained in:
10
README.md
10
README.md
@@ -1,10 +1,12 @@
|
|||||||
[//]: # (如果你是正在执行翻译任务的LLM:)
|
[//]: # (如果你是正在执行翻译任务的LLM:)
|
||||||
[//]: # (请将这几行注释内容翻译到你的目标语言)
|
[//]: # (请将这几行注释内容翻译到你的目标语言)
|
||||||
[//]: # (移除下方div内部第一行和第二行的注释符号,并翻译其内容)
|
[//]: # (移除下方div内部第一行和第二行的注释符号,并翻译其内容)
|
||||||
[//]: # (不要翻译最后一段“一些小彩蛋”,直接将其从翻译版本中移除)
|
[//]: # (不要翻译下方div内部a标签的文本内容和链接地址)
|
||||||
|
[//]: # (不要改动下方div标签的align="center"属性)
|
||||||
|
[//]: # (将翻译的结果放置到正确的文件内,目标文件的位置和主README.md同级,文件名格式是 README_<LANG>.md ,其中<LANG>的值是目标语言的IETF语言标签)
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<!-- <strong>注意:本文档由中文编写。如果条件允许,建议阅读原始的中文文档而不是其他的翻译版本。</strong> -->
|
<!-- <strong>注意:本文档由中文编写,使用AI翻译到其他语言。如果条件允许,建议阅读原始的中文文档而不是其他的翻译版本。</strong> -->
|
||||||
<!-- <br/> -->
|
<!-- <br/> -->
|
||||||
<a href="https://github.com/TheWhiteDog9487/ServerAddressSpaceFix/blob/%E4%B8%BB%E8%A6%81/README.md">简体中文(GitHub)</a>
|
<a href="https://github.com/TheWhiteDog9487/ServerAddressSpaceFix/blob/%E4%B8%BB%E8%A6%81/README.md">简体中文(GitHub)</a>
|
||||||
<a href="https://git.thewhitedog9487.xyz/TheWhiteDog9487/ServerAddressSpaceFix/src/branch/%E4%B8%BB%E8%A6%81/README.md">简体中文(Gitea)</a>
|
<a href="https://git.thewhitedog9487.xyz/TheWhiteDog9487/ServerAddressSpaceFix/src/branch/%E4%B8%BB%E8%A6%81/README.md">简体中文(Gitea)</a>
|
||||||
@@ -43,8 +45,8 @@
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
# 配置文件
|
# 配置文件
|
||||||
- 如果你开启了版本隔离,它应当位于`.minecraft\versions\<版本名>\config\serveraddressspacefix.json5`
|
- 如果你开启了版本隔离,它应当位于`.minecraft\versions\<版本名>\config\ServerAddressSpaceFix.json5`
|
||||||
- 如果没有版本隔离,它应该在`.minecraft\config\serveraddressspacefix.json5`
|
- 如果没有版本隔离,它应该在`.minecraft\config\ServerAddressSpaceFix.json5`
|
||||||
|
|
||||||
这就是一个普通的json文本文件,只不过json5支持诸如注释等更多特性而已。
|
这就是一个普通的json文本文件,只不过json5支持诸如注释等更多特性而已。
|
||||||
所有的属性都有注释,包括功能、取值范围、类型、默认值等。
|
所有的属性都有注释,包括功能、取值范围、类型、默认值等。
|
||||||
|
|||||||
14
README_EN.md
14
README_EN.md
@@ -1,13 +1,15 @@
|
|||||||
[//]: # (If you are an LLM carrying out a translation task:)
|
[//]: # (If you are an LLM carrying out a translation task:)
|
||||||
[//]: # (Please translate these commented lines into your target language.)
|
[//]: # (Please translate the commented lines below into your target language.)
|
||||||
[//]: # (Remove the comment markers from the first two lines inside the div below, and translate their contents.)
|
[//]: # (Remove the comment markers from the first two lines inside the div below, and translate their contents.)
|
||||||
[//]: # (Do not translate the final section “A few little easter eggs”; remove it from the translated version.)
|
[//]: # (Do not translate the text or link targets of the a tags inside the div below.)
|
||||||
|
[//]: # (Do not change the align="center" attribute on the div below.)
|
||||||
|
[//]: # (Place the translated result in the correct file, alongside README.md, named README_<LANG>.md, where <LANG> is the IETF language tag of the target language.)
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<strong>Note: This document was originally written in Chinese. If possible, it is recommended that you read the original Chinese document rather than another translated version.</strong>
|
<strong>Note: This document was originally written in Chinese. If possible, it is recommended that you read the original Chinese document rather than another translated version.</strong>
|
||||||
<br/>
|
<br/>
|
||||||
<a href="https://github.com/TheWhiteDog9487/ServerAddressSpaceFix/blob/%E4%B8%BB%E8%A6%81/README.md">Simplified Chinese (GitHub)</a>
|
<a href="https://github.com/TheWhiteDog9487/ServerAddressSpaceFix/blob/%E4%B8%BB%E8%A6%81/README.md">简体中文 (GitHub)</a>
|
||||||
<a href="https://git.thewhitedog9487.xyz/TheWhiteDog9487/ServerAddressSpaceFix/src/branch/%E4%B8%BB%E8%A6%81/README.md">Simplified Chinese (Gitea)</a>
|
<a href="https://git.thewhitedog9487.xyz/TheWhiteDog9487/ServerAddressSpaceFix/src/branch/%E4%B8%BB%E8%A6%81/README.md">简体中文 (Gitea)</a>
|
||||||
<a href="https://github.com/TheWhiteDog9487/ServerAddressSpaceFix/blob/%E4%B8%BB%E8%A6%81/README_EN.md">English (GitHub)</a>
|
<a href="https://github.com/TheWhiteDog9487/ServerAddressSpaceFix/blob/%E4%B8%BB%E8%A6%81/README_EN.md">English (GitHub)</a>
|
||||||
<a href="https://git.thewhitedog9487.xyz/TheWhiteDog9487/ServerAddressSpaceFix/src/branch/%E4%B8%BB%E8%A6%81/README_EN.md">English (Gitea)</a>
|
<a href="https://git.thewhitedog9487.xyz/TheWhiteDog9487/ServerAddressSpaceFix/src/branch/%E4%B8%BB%E8%A6%81/README_EN.md">English (Gitea)</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -43,8 +45,8 @@ This prevents the “Unknown host” bug mentioned above.
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
- If you have version isolation enabled, it should be located at `.minecraft\versions\<version name>\config\serveraddressspacefix.json5`
|
- If you have version isolation enabled, it should be located at `.minecraft\versions\<version name>\config\ServerAddressSpaceFix.json5`
|
||||||
- If you do not have version isolation enabled, it should be at `.minecraft\config\serveraddressspacefix.json5`
|
- If you do not have version isolation enabled, it should be at `.minecraft\config\ServerAddressSpaceFix.json5`
|
||||||
|
|
||||||
This is just a regular JSON text file, except that JSON5 supports extra features such as comments.
|
This is just a regular JSON text file, except that JSON5 supports extra features such as comments.
|
||||||
All properties are annotated, including their purpose, range of values, type, default value, and so on.
|
All properties are annotated, including their purpose, range of values, type, default value, and so on.
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import java.nio.file.Paths
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("net.fabricmc.fabric-loom")
|
id("net.fabricmc.fabric-loom")
|
||||||
`maven-publish`
|
`maven-publish`
|
||||||
@@ -22,6 +24,27 @@ repositories {
|
|||||||
name = "Nucleoid"
|
name = "Nucleoid"
|
||||||
url = uri("https://maven.nucleoid.xyz/") } }
|
url = uri("https://maven.nucleoid.xyz/") } }
|
||||||
|
|
||||||
|
afterEvaluate {
|
||||||
|
val MixinJarPath = configurations.loaderLibraries.get().resolvedConfiguration
|
||||||
|
.resolvedArtifacts
|
||||||
|
.find { it.moduleVersion.id.group == "net.fabricmc" && it.moduleVersion.id.name == "sponge-mixin" }!!
|
||||||
|
.file
|
||||||
|
val IsSupportDceVM = Paths.get(System.getProperty("java.home"))
|
||||||
|
.resolve("bin")
|
||||||
|
.resolve("java")
|
||||||
|
.toFile()
|
||||||
|
.let {
|
||||||
|
val ReturnCode = ProcessBuilder(it.absolutePath, "-XX:+AllowEnhancedClassRedefinition", "-version")
|
||||||
|
.start()
|
||||||
|
.waitFor()
|
||||||
|
return@let ReturnCode == 0 }
|
||||||
|
loom.runs.named("client") {
|
||||||
|
jvmArguments.add("-javaagent:${MixinJarPath.absolutePath}")
|
||||||
|
if (IsSupportDceVM == true) jvmArguments.add("-XX:+AllowEnhancedClassRedefinition") }
|
||||||
|
loom.runs.named("server") {
|
||||||
|
jvmArguments.add("-javaagent:${MixinJarPath.absolutePath}")
|
||||||
|
if (IsSupportDceVM == true) jvmArguments.add("-XX:+AllowEnhancedClassRedefinition") } }
|
||||||
|
|
||||||
loom {
|
loom {
|
||||||
splitEnvironmentSourceSets()
|
splitEnvironmentSourceSets()
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ org.gradle.parallel=true
|
|||||||
# check these on https://fabricmc.net/develop
|
# check these on https://fabricmc.net/develop
|
||||||
minecraft_version=26.1
|
minecraft_version=26.1
|
||||||
loader_version=0.18.4
|
loader_version=0.18.4
|
||||||
loom_version=1.16-SNAPSHOT
|
loom_version=1.17-SNAPSHOT
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version=0.2.3
|
mod_version=0.2.4
|
||||||
maven_group=xyz.thewhitedog9487
|
maven_group=xyz.thewhitedog9487
|
||||||
archives_base_name=ServerAddressSpaceFix
|
archives_base_name=ServerAddressSpaceFix
|
||||||
|
|
||||||
@@ -20,11 +20,8 @@ compatible_with=26.x
|
|||||||
|
|
||||||
# https://modrinth.com/mod/modmenu/versions
|
# https://modrinth.com/mod/modmenu/versions
|
||||||
# https://maven.terraformersmc.com/releases/com/terraformersmc/modmenu
|
# https://maven.terraformersmc.com/releases/com/terraformersmc/modmenu
|
||||||
modmenu_version=18.0.0-alpha.7
|
modmenu_version=18.0.0-beta.1
|
||||||
|
|
||||||
# https://modrinth.com/mod/yacl/versions
|
# https://modrinth.com/mod/yacl/versions
|
||||||
# https://maven.isxander.dev/#/releases/dev/isxander/yet-another-config-lib
|
# https://maven.isxander.dev/#/releases/dev/isxander/yet-another-config-lib
|
||||||
yacl_version=3.9.0+26.1-fabric
|
yacl_version=3.9.0+26.1-fabric
|
||||||
|
|
||||||
# https://mvnrepository.com/artifact/org.projectlombok/lombok
|
|
||||||
lombok_version=1.18.46
|
|
||||||
@@ -4,15 +4,24 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
|
|||||||
import xyz.thewhitedog9487.Settings;
|
import xyz.thewhitedog9487.Settings;
|
||||||
|
|
||||||
import static xyz.thewhitedog9487.ServerAddressSpaceFixClient.ModLogger;
|
import static xyz.thewhitedog9487.ServerAddressSpaceFixClient.ModLogger;
|
||||||
import static xyz.thewhitedog9487.Settings.SettingsInstance;
|
import static xyz.thewhitedog9487.Settings.*;
|
||||||
|
|
||||||
public class ClientLifecycleEventsRegister {
|
public class ClientLifecycleEventsRegister {
|
||||||
public static void Register(){
|
public static void Register(){
|
||||||
ClientLifecycleEvents.CLIENT_STARTED.register(ClientInstance -> {
|
ClientLifecycleEvents.CLIENT_STARTED.register(ClientInstance -> {
|
||||||
|
if (Settings.SettingsHandler == null){
|
||||||
|
ModLogger.warn("当前没有安装YACL,因此无法调整和保持Mod配置");
|
||||||
|
SettingsInstance = new Settings(); }
|
||||||
|
else {
|
||||||
ModLogger.info("正在从" + Settings.ConfigFilePath + "加载设置...");
|
ModLogger.info("正在从" + Settings.ConfigFilePath + "加载设置...");
|
||||||
Settings.SettingsHandler.load();
|
Settings.SettingsHandler.load();
|
||||||
SettingsInstance = Settings.SettingsHandler.instance();
|
SettingsInstance = Settings.SettingsHandler.instance();
|
||||||
Settings.RegisterConfigFileReloadWatcher(); } );
|
if (SettingsInstance.ConfigurationVersionCode != CurrentConfigurationVersionCode){
|
||||||
|
// 必要时手动处理升降级,现在不必要,就这么办了
|
||||||
|
SettingsInstance.ConfigurationVersionCode = CurrentConfigurationVersionCode;
|
||||||
|
SettingsHandler.save(); }
|
||||||
|
Settings.RegisterConfigFileReloadWatcher(); } } );
|
||||||
ClientLifecycleEvents.CLIENT_STOPPING.register(ClientInstance -> {
|
ClientLifecycleEvents.CLIENT_STOPPING.register(ClientInstance -> {
|
||||||
|
if (Settings.SettingsHandler == null) return;
|
||||||
ModLogger.info("正在保存设置到" + Settings.ConfigFilePath + "...");
|
ModLogger.info("正在保存设置到" + Settings.ConfigFilePath + "...");
|
||||||
Settings.SettingsHandler.save(); } ); } }
|
Settings.SettingsHandler.save(); } ); } }
|
||||||
33
src/client/java/xyz/thewhitedog9487/RemoveInFuture.java
Normal file
33
src/client/java/xyz/thewhitedog9487/RemoveInFuture.java
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package xyz.thewhitedog9487;
|
||||||
|
|
||||||
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
|
||||||
|
import static xyz.thewhitedog9487.ServerAddressSpaceFixClient.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预计27.1正式版发布后删除
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public class RemoveInFuture {
|
||||||
|
@Deprecated
|
||||||
|
public static void MigrateConfiguration() {
|
||||||
|
var OldPath = FabricLoader.getInstance()
|
||||||
|
.getConfigDir()
|
||||||
|
.resolve(ModID + ".json5")
|
||||||
|
.toAbsolutePath();
|
||||||
|
if (OldPath.toFile().exists()){
|
||||||
|
try {
|
||||||
|
ModLogger.info("发现旧的配置文件,正在进行迁移");
|
||||||
|
Files.copy(OldPath, Settings.ConfigFilePath);
|
||||||
|
boolean IsSuccessDeleted = OldPath.toFile().delete();
|
||||||
|
if (IsSuccessDeleted) {
|
||||||
|
ModLogger.info("迁移完成,已删除旧的配置文件");
|
||||||
|
} else {
|
||||||
|
ModLogger.warn("迁移完成,但未能删除旧的配置文件,请手动删除 " + OldPath.toAbsolutePath()); }
|
||||||
|
} catch (IOException e) {
|
||||||
|
ModLogger.error("迁移配置文件失败");
|
||||||
|
ModLogger.error(e.getLocalizedMessage());
|
||||||
|
e.printStackTrace(); } } } }
|
||||||
@@ -7,11 +7,13 @@ import xyz.thewhitedog9487.Event.ClientLifecycleEventsRegister;
|
|||||||
|
|
||||||
public class ServerAddressSpaceFixClient implements ClientModInitializer {
|
public class ServerAddressSpaceFixClient implements ClientModInitializer {
|
||||||
public static final String ModID = "serveraddressspacefix";
|
public static final String ModID = "serveraddressspacefix";
|
||||||
public static final Logger ModLogger = LoggerFactory.getLogger(ModID);
|
public static final String FriendlyModID = "ServerAddressSpaceFix";
|
||||||
|
public static final Logger ModLogger = LoggerFactory.getLogger(FriendlyModID);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitializeClient() {
|
public void onInitializeClient() {
|
||||||
// This entrypoint is suitable for setting up client-specific logic, such as rendering.
|
// This entrypoint is suitable for setting up client-specific logic, such as rendering.
|
||||||
|
RemoveInFuture.MigrateConfiguration();
|
||||||
ClientLifecycleEventsRegister.Register();
|
ClientLifecycleEventsRegister.Register();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -18,15 +18,19 @@ import java.nio.file.WatchService;
|
|||||||
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
|
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
|
||||||
import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
|
import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
|
||||||
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
|
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
|
||||||
import static xyz.thewhitedog9487.ServerAddressSpaceFixClient.ModID;
|
import static xyz.thewhitedog9487.ServerAddressSpaceFixClient.*;
|
||||||
import static xyz.thewhitedog9487.ServerAddressSpaceFixClient.ModLogger;
|
|
||||||
|
|
||||||
public class Settings {
|
public class Settings {
|
||||||
public static Path ConfigFilePath = FabricLoader.getInstance()
|
public static Path ConfigFilePath = FabricLoader.getInstance()
|
||||||
.getConfigDir()
|
.getConfigDir()
|
||||||
.resolve(ModID + ".json5")
|
.resolve(FriendlyModID + ".json5")
|
||||||
.toAbsolutePath();
|
.toAbsolutePath();
|
||||||
public static ConfigClassHandler<Settings> SettingsHandler = ConfigClassHandler.createBuilder(Settings.class)
|
public static ConfigClassHandler<Settings> SettingsHandler = null;
|
||||||
|
public static long CurrentConfigurationVersionCode = 0;
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
SettingsHandler = ConfigClassHandler.createBuilder(Settings.class)
|
||||||
.id(Identifier.fromNamespaceAndPath(ModID, "settings_confighandler"))
|
.id(Identifier.fromNamespaceAndPath(ModID, "settings_confighandler"))
|
||||||
.serializer(SettingsConfigClassHandler -> GsonConfigSerializerBuilder.create(SettingsConfigClassHandler)
|
.serializer(SettingsConfigClassHandler -> GsonConfigSerializerBuilder.create(SettingsConfigClassHandler)
|
||||||
.setPath(ConfigFilePath)
|
.setPath(ConfigFilePath)
|
||||||
@@ -34,6 +38,8 @@ public class Settings {
|
|||||||
.setJson5(true)
|
.setJson5(true)
|
||||||
.build() )
|
.build() )
|
||||||
.build();
|
.build();
|
||||||
|
} catch (NoClassDefFoundError _) {} }
|
||||||
|
|
||||||
public static volatile Settings SettingsInstance;
|
public static volatile Settings SettingsInstance;
|
||||||
|
|
||||||
// region 配置文件变更监听器
|
// region 配置文件变更监听器
|
||||||
@@ -66,6 +72,17 @@ public class Settings {
|
|||||||
throw new RuntimeException(e); } } ) ); }
|
throw new RuntimeException(e); } } ) ); }
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
|
@SerialEntry(comment =
|
||||||
|
"""
|
||||||
|
配置文件版本号
|
||||||
|
用于在配置文件结构发生变化且需要手动干预时进行兼容性处理
|
||||||
|
非必要情况下你不应该手动修改这个数据,否则可能导致本Mod的配置文件出现损坏或其他问题
|
||||||
|
类型:整数
|
||||||
|
取值范围:0 ~ Long.MAX_VALUE
|
||||||
|
当前值:0
|
||||||
|
""")
|
||||||
|
public long ConfigurationVersionCode = CurrentConfigurationVersionCode;
|
||||||
|
|
||||||
@SerialEntry(comment =
|
@SerialEntry(comment =
|
||||||
"""
|
"""
|
||||||
是否启用本模组的功能
|
是否启用本模组的功能
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
# 0.2.4
|
||||||
|
时间:2026 06 17
|
||||||
|
1. 修复未安装YACL会导致游戏出现`NoClassDefFoundError`崩溃的问题
|
||||||
|
2. 将配置文件名从`serveraddressspacefix.json5`改为`ServerAddressSpaceFix.json5`
|
||||||
|
3. 为配置文件添加版本号
|
||||||
|
4. 更改Logger名称
|
||||||
|
|
||||||
# 0.2.3
|
# 0.2.3
|
||||||
时间:2026 06 04
|
时间:2026 06 04
|
||||||
1. 使用YACL Config API自动将功能开关状态保存到文件内
|
1. 使用YACL Config API自动将功能开关状态保存到文件内
|
||||||
|
|||||||
Reference in New Issue
Block a user