diff --git a/build.gradle.kts b/build.gradle.kts index c3bc7ed..a0d4758 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.8-SNAPSHOT" + id("net.fabricmc.fabric-loom") version "1.15-SNAPSHOT" id("maven-publish") } @@ -13,11 +13,13 @@ base { repositories { maven { name = "Xander Maven" - url = uri("https://maven.isxander.dev/releases")} + url = uri("https://maven.isxander.dev/releases") } maven { name = "Terraformers" - url = uri("https://maven.terraformersmc.com/releases")} -} + url = uri("https://maven.terraformersmc.com/releases") } + maven { + name = "Nucleoid" + url = uri("https://maven.nucleoid.xyz/") } } loom { splitEnvironmentSourceSets() @@ -28,23 +30,24 @@ loom { sourceSet(sourceSets["client"]) } } + + accessWidenerPath = file("src/main/resources/twd-sasf.classtweaker") } dependencies { // To change the versions see the gradle.properties file minecraft("com.mojang:minecraft:${project.extra["minecraft_version"]}") - mappings("net.fabricmc:yarn:${project.extra["yarn_mappings"]}:v2") - modImplementation("net.fabricmc:fabric-loader:${project.extra["loader_version"]}") + implementation("net.fabricmc:fabric-loader:${project.extra["loader_version"]}") // Fabric API. This is technically optional, but you probably want it anyway. - modImplementation("net.fabricmc.fabric-api:fabric-api:${project.extra["fabric_version"]}") + implementation("net.fabricmc.fabric-api:fabric-api:${project.extra["fabric_api_version"]}") // Uncomment the following line to enable the deprecated Fabric API modules. // 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.extra["fabric_version"]}") - modImplementation("com.terraformersmc:modmenu:${project.extra["modmenu_version"]}") - modImplementation("dev.isxander:yet-another-config-lib:${project.extra["yacl_version"]}") + implementation("com.terraformersmc:modmenu:${project.extra["modmenu_version"]}") + implementation("dev.isxander:yet-another-config-lib:${project.extra["yacl_version"]}") } tasks.processResources { @@ -55,27 +58,23 @@ tasks.processResources { } tasks.withType { - options.release.set(21) + options.release.set(25) } java { withSourcesJar() - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 + sourceCompatibility = JavaVersion.VERSION_25 + targetCompatibility = JavaVersion.VERSION_25 } tasks.jar { from("LICENSE") { - rename { "${it}_${project.base.archivesName.get()}" } - } -} + rename { "${it}_${project.base.archivesName.get()}" } } -tasks.remapJar{ // https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html#org.gradle.api.tasks.bundling.Jar:archiveFileName - // 用这个属性设置jar包的文件名格式 - // 别用上面那个Jar任务的配置,会被remapJar覆盖掉 archiveFileName = "${project.base.archivesName.get()}-${project.version} mc${project.extra["compatible_with"]}.jar"} -tasks.remapSourcesJar{ + +tasks.named("sourcesJar") { archiveFileName = "${project.base.archivesName.get()}-${project.version} mc${project.extra["compatible_with"]}-sources.jar"} publishing { diff --git a/gradle.properties b/gradle.properties index c6e9a96..86652fb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,28 +4,21 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.21.3 -yarn_mappings=1.21.3+build.2 -loader_version=0.16.7 +minecraft_version=26.1 +loader_version=0.18.4 # Mod Properties -mod_version=0.2.1 +mod_version=0.2.2 maven_group=xyz.thewhitedog9487 archives_base_name=ServerAddressSpaceFix # Dependencies -fabric_version=0.106.1+1.21.3 +fabric_api_version=0.144.0+26.1 -compatible_with=1.21+1.21.x +compatible_with=26.x # https://modrinth.com/mod/modmenu/versions # https://maven.terraformersmc.com/releases/com/terraformersmc/modmenu -modmenu_version=12.0.0-beta.1 +modmenu_version=18.0.0-alpha.7 # https://modrinth.com/mod/yacl/versions # https://maven.isxander.dev/#/releases/dev/isxander/yet-another-config-lib -yacl_version=3.6.1+1.21.2-fabric - -# loom_libraries_base=https://bmclapi2.bangbang93.com/maven/ -# loom_resources_base=https://bmclapi2.bangbang93.com/assets/ -# loom_version_manifests=https://bmclapi2.bangbang93.com/mc/game/version_manifest.json -# loom_experimental_versions=https://maven.fabricmc.net/net/minecraft/experimental_versions.json -# loom_fabric_repository=https://repository.hanbings.io/proxy/ \ No newline at end of file +yacl_version=3.9.0+26.1-fabric \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df97d72..dbc3ce4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/client/java/xyz/thewhitedog9487/ModMenu.java b/src/client/java/xyz/thewhitedog9487/ModMenu.java index d9318f4..bb89a7a 100644 --- a/src/client/java/xyz/thewhitedog9487/ModMenu.java +++ b/src/client/java/xyz/thewhitedog9487/ModMenu.java @@ -7,20 +7,21 @@ 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; +import net.minecraft.network.chat.Component; public class ModMenu implements ModMenuApi { @Override public ConfigScreenFactory getModConfigScreenFactory() { return parent -> YetAnotherConfigLib.createBuilder() - .title(Text.translatable("title.twd-sasf.config")) + .title(Component.translatable("title.twd-sasf.config")) .category(ConfigCategory.createBuilder() - .name(Text.translatable("config.twd-sasf.category.general")) + .name(Component.translatable("config.twd-sasf.category.general")) .option(Option.createBuilder() - .name(Text.translatable("option.twd-sasf.ModEnabled")) + .name(Component.translatable("option.twd-sasf.ModEnabled")) .binding(true, () -> Settings.ModEnabled, newVal -> Settings.ModEnabled = newVal) - .description(OptionDescription.of(Text.translatable("option.twd-sasf.ModEnabled.description"))) + .description(OptionDescription.of(Component.translatable("option.twd-sasf.ModEnabled.description"))) .controller(TickBoxControllerBuilder::create) .build()) .build()) - .build().generateScreen(parent);}} \ No newline at end of file + .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 b5c5ed9..2da2bd4 100644 --- a/src/client/java/xyz/thewhitedog9487/ServerAddressSpaceFixClient.java +++ b/src/client/java/xyz/thewhitedog9487/ServerAddressSpaceFixClient.java @@ -5,10 +5,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ServerAddressSpaceFixClient implements ClientModInitializer { - public static final Logger LOGGER = LoggerFactory.getLogger("twd-sasf"); + public static final String ModID = "twd-sasf"; + public static final Logger LOGGER = LoggerFactory.getLogger(ModID); + @Override public void onInitializeClient() { // This entrypoint is suitable for setting up client-specific logic, such as rendering. - LOGGER.info("ServerAddressSpaceFix Loading!"); +// LOGGER.info("ServerAddressSpaceFix Loading!"); } } \ No newline at end of file diff --git a/src/client/java/xyz/thewhitedog9487/mixin/client/JoinMultiplayerScreenMixin.java b/src/client/java/xyz/thewhitedog9487/mixin/client/JoinMultiplayerScreenMixin.java new file mode 100644 index 0000000..894d5c1 --- /dev/null +++ b/src/client/java/xyz/thewhitedog9487/mixin/client/JoinMultiplayerScreenMixin.java @@ -0,0 +1,30 @@ +package xyz.thewhitedog9487.mixin.client; + +import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen; +import net.minecraft.client.multiplayer.ServerData; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import xyz.thewhitedog9487.Settings; + +@Mixin(JoinMultiplayerScreen.class) +public class JoinMultiplayerScreenMixin { + @Shadow public ServerData editingServer; + + @Inject( + method = "directJoinCallback", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/multiplayer/ServerList;get(Ljava/lang/String;)Lnet/minecraft/client/multiplayer/ServerData;", + shift = At.Shift.BEFORE ) ) + private void onDirectJoinCallback(boolean result, CallbackInfo ci) { + if ( Settings.ModEnabled == false ) { return; } + else { + this.editingServer = new ServerData( + this.editingServer.name, + this.editingServer.ip.replace(" ", ""), + this.editingServer.type() ); } } } \ No newline at end of file diff --git a/src/client/java/xyz/thewhitedog9487/mixin/client/ManageServerScreenMixin.java b/src/client/java/xyz/thewhitedog9487/mixin/client/ManageServerScreenMixin.java new file mode 100644 index 0000000..a6843b2 --- /dev/null +++ b/src/client/java/xyz/thewhitedog9487/mixin/client/ManageServerScreenMixin.java @@ -0,0 +1,24 @@ +package xyz.thewhitedog9487.mixin.client; + +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.client.gui.screens.ManageServerScreen; +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(ManageServerScreen.class) +public class ManageServerScreenMixin { + + @Redirect( + method = "onAdd", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/gui/components/EditBox;getValue()Ljava/lang/String;", + ordinal = 1 ) ) + private String redirectIpEditGetValue(EditBox instance) { + if ( Settings.ModEnabled == false ) { + return instance.getValue(); } + else { + return instance.getValue() + .replace(" ", ""); } } } \ No newline at end of file diff --git a/src/client/java/xyz/thewhitedog9487/mixin/client/MixinAddServerScreen.java b/src/client/java/xyz/thewhitedog9487/mixin/client/MixinAddServerScreen.java deleted file mode 100644 index 34abb3e..0000000 --- a/src/client/java/xyz/thewhitedog9487/mixin/client/MixinAddServerScreen.java +++ /dev/null @@ -1,15 +0,0 @@ -package xyz.thewhitedog9487.mixin.client; - -import net.minecraft.client.gui.screen.multiplayer.AddServerScreen; -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(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 == false ) { return instance.getText(); } - else 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 deleted file mode 100644 index 835c45b..0000000 --- a/src/client/java/xyz/thewhitedog9487/mixin/client/MixinDirectConnectScreen.java +++ /dev/null @@ -1,23 +0,0 @@ -package xyz.thewhitedog9487.mixin.client; - -import net.minecraft.client.gui.screen.multiplayer.DirectConnectScreen; -import net.minecraft.client.gui.widget.TextFieldWidget; -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.Redirect; -import xyz.thewhitedog9487.Settings; - -@Mixin(DirectConnectScreen.class) -interface DirectConnectScreenAccessor { - @Accessor("addressField") - TextFieldWidget Mixin_GetAddressField();} - -@Mixin(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 == false ) { return instance.getText(); } - String trimmedText = instance.getText().replace(" ", ""); - ((DirectConnectScreenAccessor) this).Mixin_GetAddressField().setText(trimmedText); - return trimmedText;}} \ No newline at end of file diff --git a/src/client/java/xyz/thewhitedog9487/mixin/client/MixinServerInfo.java b/src/client/java/xyz/thewhitedog9487/mixin/client/ServerDataMixin.java similarity index 50% rename from src/client/java/xyz/thewhitedog9487/mixin/client/MixinServerInfo.java rename to src/client/java/xyz/thewhitedog9487/mixin/client/ServerDataMixin.java index 0985c0c..4103b33 100644 --- a/src/client/java/xyz/thewhitedog9487/mixin/client/MixinServerInfo.java +++ b/src/client/java/xyz/thewhitedog9487/mixin/client/ServerDataMixin.java @@ -1,19 +1,18 @@ package xyz.thewhitedog9487.mixin.client; -import net.minecraft.client.network.ServerInfo; +import net.minecraft.client.multiplayer.ServerData; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; import xyz.thewhitedog9487.Settings; -import java.nio.file.Paths; - -@Mixin(ServerInfo.class) -public class MixinServerInfo { - @Redirect(method = "", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/network/ServerInfo;address:Ljava/lang/String;")) - private void RemoveSpace_Write(ServerInfo original, String value) { +@Mixin(ServerData.class) +public class ServerDataMixin { + @Redirect(method = "", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/multiplayer/ServerData;ip:Ljava/lang/String;")) + private void RemoveSpace_Write(ServerData original, String value) { if( Settings.ModEnabled == false ) { - original.address = value; + original.ip = value; return; } - else { original.address = value.replace(" ", ""); } }} \ No newline at end of file + else { + original.ip = value.replace(" ", ""); } } } \ No newline at end of file diff --git a/src/client/resources/twd-sasf.client.mixins.json b/src/client/resources/twd-sasf.client.mixins.json index f28f92e..dca8ee8 100644 --- a/src/client/resources/twd-sasf.client.mixins.json +++ b/src/client/resources/twd-sasf.client.mixins.json @@ -1,14 +1,16 @@ { "required": true, "package": "xyz.thewhitedog9487.mixin.client", - "compatibilityLevel": "JAVA_21", + "compatibilityLevel": "JAVA_25", "client": [ - "DirectConnectScreenAccessor", - "MixinAddServerScreen", - "MixinDirectConnectScreen", - "MixinServerInfo" + "ServerDataMixin", + "JoinMultiplayerScreenMixin", + "ManageServerScreenMixin" ], "injectors": { "defaultRequire": 1 - } + }, + "mixins": [ + + ] } \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 8b839fa..820a040 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -27,17 +27,22 @@ } ], "depends": { - "fabricloader": ">=0.15.11", - "minecraft": ["1.21","1.21.*"], - "java": ">=21" + "fabricloader": ">=0.18.4", + "minecraft": "26.*", + "java": ">=25" }, "suggests": { - "another-mod": "*" + "modmenu": "*", + "yet_another_config_lib_v3": "*" }, "custom": { "modmenu": { "links": { "twd-sasf.bilibili": "https://space.bilibili.com/401746666", "twd-sasf.blog": "www.thewhitedog9487.xyz"}, - "update_checker": true}} + "update_checker": true}}, + "contributors": [ + "JustAlittleWolf" + ], + "accessWidener": "twd-sasf.classtweaker" } \ No newline at end of file diff --git a/src/main/resources/twd-sasf.classtweaker b/src/main/resources/twd-sasf.classtweaker new file mode 100644 index 0000000..e8c6244 --- /dev/null +++ b/src/main/resources/twd-sasf.classtweaker @@ -0,0 +1,2 @@ +classTweaker v1 official +accessible field net/minecraft/client/gui/screens/multiplayer/JoinMultiplayerScreen editingServer Lnet/minecraft/client/multiplayer/ServerData; \ No newline at end of file diff --git a/src/main/resources/twd-sasf.mixins.json b/src/main/resources/twd-sasf.mixins.json index 0b9a9b5..4da1b76 100644 --- a/src/main/resources/twd-sasf.mixins.json +++ b/src/main/resources/twd-sasf.mixins.json @@ -1,7 +1,7 @@ { "required": true, "package": "xyz.thewhitedog9487.mixin", - "compatibilityLevel": "JAVA_21", + "compatibilityLevel": "JAVA_25", "mixins": [], "injectors": { "defaultRequire": 1