From 789ad58006f0276f27cbafb9a6b8a80e383421ec Mon Sep 17 00:00:00 2001 From: TheWhiteDog9487 Date: Mon, 15 Jan 2024 14:58:30 +0800 Subject: [PATCH] =?UTF-8?q?0.1.4=20=E6=97=B6=E9=97=B4=EF=BC=9A2024=2001=20?= =?UTF-8?q?15=20=E4=B8=BB=E8=A6=81=E5=86=85=E5=AE=B9=EF=BC=9A=201.=20?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BC=80=E5=8F=91=E7=8E=AF=E5=A2=83=E5=88=B0?= =?UTF-8?q?1.20.4=202.=20=E6=9B=B4=E6=96=B0Fabric=20Loader=E5=92=8CFabric?= =?UTF-8?q?=20API=E7=9A=84=E7=89=88=E6=9C=AC=203.=20=E4=BD=BF=E7=94=A8YetA?= =?UTF-8?q?notherConfigLib=E5=92=8CModMenu=E4=B8=BA=E6=A8=A1=E7=BB=84?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E4=B8=80=E4=B8=AA=E9=85=8D=E7=BD=AE=E5=B1=8F?= =?UTF-8?q?=E5=B9=95=204.=20=E9=85=8D=E7=BD=AE=E9=80=89=E9=A1=B9=E4=B8=AD?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=98=AF=E5=90=A6=E5=90=AF=E7=94=A8=E6=A8=A1?= =?UTF-8?q?=E7=BB=84=E5=8A=9F=E8=83=BD=E7=9A=84=E5=BC=80=E5=85=B3=205.=20?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E8=87=AA=E4=BD=BF=E7=94=A8Redirect=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E4=B9=8B=E5=90=8E=E4=B8=8D=E5=86=8D=E8=A2=AB=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E7=9A=84=E6=8E=A5=E5=8F=A3=E5=92=8C=E6=96=B9=E6=B3=95?= =?UTF-8?q?=206.=20=E5=9C=A8=E5=AE=A2=E6=88=B7=E7=AB=AF=E4=BE=A7=E7=9A=84?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=96=B9=E6=B3=95=E4=B8=AD=EF=BC=8C?= =?UTF-8?q?=E8=AE=A9=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95=E5=99=A8=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E4=B8=80=E6=AE=B5=E6=97=A5=E5=BF=97=EF=BC=8C=E6=96=B9?= =?UTF-8?q?=E4=BE=BF=E8=B0=83=E8=AF=95=E5=92=8C=E9=99=A4=E9=94=99=207.=20?= =?UTF-8?q?=E6=9B=B4=E6=96=B0Mixin=E6=B3=A8=E5=85=A5=E7=9A=84=E7=B1=BB?= =?UTF-8?q?=E7=9A=84=E8=B7=AF=E5=BE=84=EF=BC=88=E8=BF=99=E4=B8=9C=E8=A5=BF?= =?UTF-8?q?=E5=B1=85=E7=84=B6=E6=9B=B4=E6=96=B0=E4=BA=86=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 8 ++++++ gradle.properties | 10 +++---- .../java/xyz/thewhitedog9487/ModMenu.java | 26 +++++++++++++++++++ .../ServerAddressSpaceFixClient.java | 4 +++ .../java/xyz/thewhitedog9487/Settings.java | 5 ++++ .../mixin/client/AddServerScreenAccessor.java | 15 ----------- .../client/DirectConnectScreenAccessor.java | 5 +--- .../mixin/client/MixinAddServerScreen.java | 4 ++- .../client/MixinDirectConnectScreen.java | 6 +++-- .../ServerAddressSpaceFix.java | 1 + .../resources/assets/twd-sasf/lang/en_us.json | 8 ++++-- .../resources/assets/twd-sasf/lang/zh_cn.json | 8 ++++-- src/main/resources/fabric.mod.json | 7 +++-- 更新日志 ChangeLog.md | 11 ++++++++ 14 files changed, 83 insertions(+), 35 deletions(-) create mode 100644 src/client/java/xyz/thewhitedog9487/ModMenu.java create mode 100644 src/client/java/xyz/thewhitedog9487/Settings.java delete mode 100644 src/client/java/xyz/thewhitedog9487/mixin/client/AddServerScreenAccessor.java diff --git a/build.gradle b/build.gradle index 445aedb..60d4c00 100644 --- a/build.gradle +++ b/build.gradle @@ -16,6 +16,11 @@ repositories { // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. // See https://docs.gradle.org/current/userguide/declaring_repositories.html // for more information about repositories. + + maven { + name 'Xander Maven' + url 'https://maven.isxander.dev/releases'} + maven { url "https://maven.terraformersmc.com/releases/" } } loom { @@ -43,6 +48,9 @@ dependencies { // These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time. // modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}" + modImplementation "dev.isxander.yacl:yet-another-config-lib-fabric:3.3.1+1.20.4" + // https://maven.isxander.dev/#/releases/dev/isxander/yacl/yet-another-config-lib-fabric + modImplementation "com.terraformersmc:modmenu:9.0.0" } processResources { diff --git a/gradle.properties b/gradle.properties index 29edd0c..b4ab9a1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,17 +4,17 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.20.2 -yarn_mappings=1.20.2+build.4 -loader_version=0.14.23 +minecraft_version=1.20.4 +yarn_mappings=1.20.4+build.3 +loader_version=0.15.3 # Mod Properties -mod_version=0.1.3 +mod_version=0.1.4 maven_group=xyz.thewhitedog9487 archives_base_name=ServerAddressSpaceFix # Dependencies -fabric_version=0.90.0+1.20.2 +fabric_version=0.93.1+1.20.4 loom_libraries_base=https://bmclapi2.bangbang93.com/maven/ loom_resources_base=https://bmclapi2.bangbang93.com/assets/ diff --git a/src/client/java/xyz/thewhitedog9487/ModMenu.java b/src/client/java/xyz/thewhitedog9487/ModMenu.java new file mode 100644 index 0000000..7f1a34e --- /dev/null +++ b/src/client/java/xyz/thewhitedog9487/ModMenu.java @@ -0,0 +1,26 @@ +package xyz.thewhitedog9487; + +import com.terraformersmc.modmenu.api.ConfigScreenFactory; +import com.terraformersmc.modmenu.api.ModMenuApi; +import dev.isxander.yacl3.api.ConfigCategory; +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.api.OptionDescription; +import dev.isxander.yacl3.api.YetAnotherConfigLib; +import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder; +import net.minecraft.text.Text; + +public class ModMenu implements ModMenuApi { + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + return parent -> YetAnotherConfigLib.createBuilder() + .title(Text.translatable("title.thewhitedog9487.twd-sasf.config")) + .category(ConfigCategory.createBuilder() + .name(Text.translatable("config.thewhitedog9487.twd-sasf.category.general")) + .option(Option.createBuilder() + .name(Text.translatable("option.thewhitedog9487.twd-sasf.ModEnabled")) + .binding(true, () -> Settings.ModEnabled, newVal -> Settings.ModEnabled = newVal) + .description(OptionDescription.of(Text.translatable("option.thewhitedog9487.twd-sasf.ModEnabled.description"))) + .controller(TickBoxControllerBuilder::create) + .build()) + .build()) + .build().generateScreen(parent);}} \ No newline at end of file diff --git a/src/client/java/xyz/thewhitedog9487/ServerAddressSpaceFixClient.java b/src/client/java/xyz/thewhitedog9487/ServerAddressSpaceFixClient.java index 8de49d7..5dcf2c0 100644 --- a/src/client/java/xyz/thewhitedog9487/ServerAddressSpaceFixClient.java +++ b/src/client/java/xyz/thewhitedog9487/ServerAddressSpaceFixClient.java @@ -1,10 +1,14 @@ package xyz.thewhitedog9487; import net.fabricmc.api.ClientModInitializer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ServerAddressSpaceFixClient implements ClientModInitializer { + public static final Logger LOGGER = LoggerFactory.getLogger("twd-sasf"); @Override public void onInitializeClient() { // This entrypoint is suitable for setting up client-specific logic, such as rendering. + LOGGER.info("ServerAddressSpaceFix正在初始化!"); } } \ No newline at end of file diff --git a/src/client/java/xyz/thewhitedog9487/Settings.java b/src/client/java/xyz/thewhitedog9487/Settings.java new file mode 100644 index 0000000..7cb41af --- /dev/null +++ b/src/client/java/xyz/thewhitedog9487/Settings.java @@ -0,0 +1,5 @@ +package xyz.thewhitedog9487; + +public class Settings { + public static boolean ModEnabled = true; +} diff --git a/src/client/java/xyz/thewhitedog9487/mixin/client/AddServerScreenAccessor.java b/src/client/java/xyz/thewhitedog9487/mixin/client/AddServerScreenAccessor.java deleted file mode 100644 index 8131fa3..0000000 --- a/src/client/java/xyz/thewhitedog9487/mixin/client/AddServerScreenAccessor.java +++ /dev/null @@ -1,15 +0,0 @@ -package xyz.thewhitedog9487.mixin.client; - -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.network.ServerInfo; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(net.minecraft.client.gui.screen.AddServerScreen.class) -public interface AddServerScreenAccessor { - @Accessor("server") - ServerInfo Mixin_GetServer(); - - @Accessor("addressField") - TextFieldWidget Mixin_GetAddressField(); -} diff --git a/src/client/java/xyz/thewhitedog9487/mixin/client/DirectConnectScreenAccessor.java b/src/client/java/xyz/thewhitedog9487/mixin/client/DirectConnectScreenAccessor.java index 90eb121..dbb8403 100644 --- a/src/client/java/xyz/thewhitedog9487/mixin/client/DirectConnectScreenAccessor.java +++ b/src/client/java/xyz/thewhitedog9487/mixin/client/DirectConnectScreenAccessor.java @@ -5,11 +5,8 @@ import net.minecraft.client.network.ServerInfo; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(net.minecraft.client.gui.screen.DirectConnectScreen.class) +@Mixin(net.minecraft.client.gui.screen.multiplayer.DirectConnectScreen.class) public interface DirectConnectScreenAccessor { - @Accessor("serverEntry") - ServerInfo Mixin_GetServerEntry(); - @Accessor("addressField") TextFieldWidget Mixin_GetAddressField(); } diff --git a/src/client/java/xyz/thewhitedog9487/mixin/client/MixinAddServerScreen.java b/src/client/java/xyz/thewhitedog9487/mixin/client/MixinAddServerScreen.java index 3d9abf7..85c146a 100644 --- a/src/client/java/xyz/thewhitedog9487/mixin/client/MixinAddServerScreen.java +++ b/src/client/java/xyz/thewhitedog9487/mixin/client/MixinAddServerScreen.java @@ -4,9 +4,11 @@ import net.minecraft.client.gui.widget.TextFieldWidget; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import xyz.thewhitedog9487.Settings; -@Mixin(net.minecraft.client.gui.screen.AddServerScreen.class) +@Mixin(net.minecraft.client.gui.screen.multiplayer.AddServerScreen.class) public class MixinAddServerScreen { @Redirect(method = "addAndClose", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/TextFieldWidget;getText()Ljava/lang/String;", ordinal = 1)) private String trimGetText(TextFieldWidget instance) { + if( !Settings.ModEnabled ) { return instance.getText(); } return instance.getText().replace(" ", "");}} \ No newline at end of file diff --git a/src/client/java/xyz/thewhitedog9487/mixin/client/MixinDirectConnectScreen.java b/src/client/java/xyz/thewhitedog9487/mixin/client/MixinDirectConnectScreen.java index 857ccb4..24f8b59 100644 --- a/src/client/java/xyz/thewhitedog9487/mixin/client/MixinDirectConnectScreen.java +++ b/src/client/java/xyz/thewhitedog9487/mixin/client/MixinDirectConnectScreen.java @@ -4,11 +4,13 @@ import net.minecraft.client.gui.widget.TextFieldWidget; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import xyz.thewhitedog9487.Settings; -@Mixin(net.minecraft.client.gui.screen.DirectConnectScreen.class) +@Mixin(net.minecraft.client.gui.screen.multiplayer.DirectConnectScreen.class) public class MixinDirectConnectScreen { @Redirect(method = "saveAndClose", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/TextFieldWidget;getText()Ljava/lang/String;")) private String trimGetText(TextFieldWidget instance) { + if( !Settings.ModEnabled ) { return instance.getText(); } String trimmedText = instance.getText().replace(" ", ""); ((DirectConnectScreenAccessor) this).Mixin_GetAddressField().setText(trimmedText); - return trimmedText;}} + return trimmedText;}} \ No newline at end of file diff --git a/src/main/java/xyz/thewhitedog9487/ServerAddressSpaceFix.java b/src/main/java/xyz/thewhitedog9487/ServerAddressSpaceFix.java index 1f5b927..cfeb673 100644 --- a/src/main/java/xyz/thewhitedog9487/ServerAddressSpaceFix.java +++ b/src/main/java/xyz/thewhitedog9487/ServerAddressSpaceFix.java @@ -5,6 +5,7 @@ import net.fabricmc.api.ModInitializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Deprecated public class ServerAddressSpaceFix implements ModInitializer { // This logger is used to write text to the console and the log file. // It is considered best practice to use your mod id as the logger's name. diff --git a/src/main/resources/assets/twd-sasf/lang/en_us.json b/src/main/resources/assets/twd-sasf/lang/en_us.json index 8c9fd8b..4560e64 100644 --- a/src/main/resources/assets/twd-sasf/lang/en_us.json +++ b/src/main/resources/assets/twd-sasf/lang/en_us.json @@ -1,6 +1,10 @@ { "modmenu.nameTranslation.twd-sasf": "ServerAddressSpaceFix", - "modmenu.descriptionTranslation.twd-sasf": "Fixed the \"unknown host\" bug caused by the server address containing spaces at the beginning and end of the server address when adding a server or connecting directly", + "modmenu.descriptionTranslation.twd-sasf": "Fixed the \"unknown host\" bug caused by the server address containing spaces at the beginning and end of the server address when adding a server or connecting directly\nTip: If you need to use the configuration menu, install the YetAnotherConfigLib mod", "twd-sasf.bilibili": "Bilibili", - "twd-sasf.blog": "Blog" + "twd-sasf.blog": "Blog", + "title.thewhitedog9487.twd-sasf.config": "ServerAddressSpaceFix", + "config.thewhitedog9487.twd-sasf.category.general": "General", + "option.thewhitedog9487.twd-sasf.ModEnabled": "Whether To Enable The Mod Feature", + "option.thewhitedog9487.twd-sasf.ModEnabled.description": "There is no need to restart the game, and the modification will take effect immediately after it is saved" } \ No newline at end of file diff --git a/src/main/resources/assets/twd-sasf/lang/zh_cn.json b/src/main/resources/assets/twd-sasf/lang/zh_cn.json index 05c9c94..b416882 100644 --- a/src/main/resources/assets/twd-sasf/lang/zh_cn.json +++ b/src/main/resources/assets/twd-sasf/lang/zh_cn.json @@ -1,6 +1,10 @@ { "modmenu.nameTranslation.twd-sasf": "服务器地址首尾空格修复", - "modmenu.descriptionTranslation.twd-sasf": "修复添加服务器或直接连接时,服务器地址首尾包含空格导致的“未知的主机”Bug", + "modmenu.descriptionTranslation.twd-sasf": "修复添加服务器或直接连接时,服务器地址首尾包含空格导致的“未知的主机”Bug\n提示:如果需要使用配置菜单,请安装YetAnotherConfigLib模组", "twd-sasf.bilibili": "哔哩哔哩主页", - "twd-sasf.blog": "TheWhiteDog9487的博客" + "twd-sasf.blog": "TheWhiteDog9487的博客", + "title.thewhitedog9487.twd-sasf.config": "服务器地址首尾空格修复", + "config.thewhitedog9487.twd-sasf.category.general": "通用", + "option.thewhitedog9487.twd-sasf.ModEnabled": "是否启用模组功能", + "option.thewhitedog9487.twd-sasf.ModEnabled.description": "无需重启游戏,修改并保存后立刻生效" } \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 79342db..c7a2aae 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -16,9 +16,8 @@ "icon": "assets/twd-sasf/icon.png", "environment": "client", "entrypoints": { - "client": [ - "xyz.thewhitedog9487.ServerAddressSpaceFixClient" - ] + "client": [ "xyz.thewhitedog9487.ServerAddressSpaceFixClient" ], + "modmenu": [ "xyz.thewhitedog9487.ModMenu" ] }, "mixins": [ "twd-sasf.mixins.json", @@ -28,7 +27,7 @@ } ], "depends": { - "fabricloader": ">=0.14.23", + "fabricloader": ">=0.15.3", "minecraft": ["1.20","1.20.*"], "java": ">=17" }, diff --git a/更新日志 ChangeLog.md b/更新日志 ChangeLog.md index 7634bec..787c248 100644 --- a/更新日志 ChangeLog.md +++ b/更新日志 ChangeLog.md @@ -1,3 +1,14 @@ +# 0.1.4 +时间:2024 01 15 +主要内容: +1. 更新开发环境到1.20.4 +2. 更新Fabric Loader和Fabric API的版本 +3. 使用YetAnotherConfigLib和ModMenu为模组创建一个配置屏幕 +4. 配置选项中增加是否启用模组功能的开关 +5. 移除自使用Redirect注解之后不再被需要的接口和方法 +6. 在客户端侧的初始化方法中,让日志记录器打印一段日志,方便调试和除错 +7. 更新Mixin注入的类的路径(这东西居然更新了) + # 0.1.3 时间:2023 10 28 主要内容:这玩意好像不具备特定版本兼容性啊,那我直接改兼容性列表以大版本作为兼容性边界得了,1.20全版本通用一个分支和同一个输出。