From cdd8913c7f29013893b0735fe0ca5ab625e6ec9c Mon Sep 17 00:00:00 2001 From: Elijah Stephenson Date: Fri, 29 May 2026 12:51:47 -0500 Subject: [PATCH] Updated to 26.1.2 --- build.gradle | 31 ++++++++++--------- gradle.properties | 18 +++++------ gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 0 .../serverlinkssender/ServerLinksSender.java | 17 +++++----- .../serverlinkssender/config/BaseConfig.java | 22 ++++++++----- src/main/resources/fabric.mod.json | 6 ++-- .../resources/serverlinkssender.mixins.json | 2 +- 8 files changed, 55 insertions(+), 43 deletions(-) mode change 100644 => 100755 gradlew diff --git a/build.gradle b/build.gradle index bed1364..d85de05 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.6-SNAPSHOT' + id 'net.fabricmc.fabric-loom' version "${loom_version}" id 'maven-publish' } @@ -17,45 +17,46 @@ repositories { // See https://docs.gradle.org/current/userguide/declaring_repositories.html // for more information about repositories. maven { url 'https://maven.nucleoid.xyz' } + mavenCentral() } dependencies { // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings loom.officialMojangMappings() - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + implementation "net.fabricmc:fabric-loader:${project.loader_version}" // Fabric API. This is technically optional, but you probably want it anyway. - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + implementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - modImplementation include("me.lucko:fabric-permissions-api:${project.permissions_api}") - modImplementation include("eu.pb4:predicate-api:${project.predicate_api_version}") - modImplementation include("eu.pb4:placeholder-api:${project.placeholder_api_version}") + implementation "me.lucko:fabric-permissions-api:${project.permissions_api}" + include "me.lucko:fabric-permissions-api:${project.permissions_api}" + + implementation "eu.pb4:predicate-api:${project.predicate_api_version}" + include "eu.pb4:predicate-api:${project.predicate_api_version}" + + implementation "eu.pb4:placeholder-api:${project.placeholder_api_version}" + include "eu.pb4:placeholder-api:${project.placeholder_api_version}" } processResources { inputs.property "version", project.version - inputs.property "minecraft_version", project.minecraft_version inputs.property "loader_version", project.loader_version filteringCharset "UTF-8" filesMatching("fabric.mod.json") { expand "version": project.version, - "minecraft_version": project.minecraft_version, "loader_version": project.loader_version } } -def targetJavaVersion = 21 +def targetJavaVersion = 25 tasks.withType(JavaCompile).configureEach { // ensure that the encoding is set to UTF-8, no matter what the system default is // this fixes some edge cases with special characters not displaying correctly // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html // If Javadoc is generated, this must be specified in that task too. it.options.encoding = "UTF-8" - if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { - it.options.release.set(targetJavaVersion) - } + it.options.release.set(targetJavaVersion) } java { @@ -67,11 +68,13 @@ java { // if it is present. // If you remove this line, sources will not be generated. withSourcesJar() + sourceCompatibility = JavaVersion.VERSION_25 + targetCompatibility = JavaVersion.VERSION_25 } jar { from("LICENSE") { - rename { "${it}_${project.archivesBaseName}"} + rename { "${it}_${project.base.archivesName.get()}"} } } diff --git a/gradle.properties b/gradle.properties index cf60a86..9696468 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,18 +2,18 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties - # check these on https://modmuss50.me/fabric.html - minecraft_version=1.21 - loader_version=0.15.11 + # check these on https://fabricmc.net/develop + minecraft_version=26.1.2 + loader_version=0.18.4 + loom_version=1.16-SNAPSHOT # Mod Properties - mod_version = 1.0.1 + mod_version = 1.1.0 maven_group = io.github.polymeta archives_base_name = ServerLinksSender # Dependencies - # check this on https://modmuss50.me/fabric.html - fabric_version=0.100.3+1.21 - permissions_api=0.3.1 - predicate_api_version=0.5.0+1.21 - placeholder_api_version=2.4.0+1.21 \ No newline at end of file + fabric_version=0.150.0+26.1.2 + permissions_api=0.7.0 + predicate_api_version=0.8.1+26.1 + placeholder_api_version=3.0.0+26.1 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b82aa23..c61a118 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.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/src/main/java/io/github/polymeta/serverlinkssender/ServerLinksSender.java b/src/main/java/io/github/polymeta/serverlinkssender/ServerLinksSender.java index c094a90..e593068 100644 --- a/src/main/java/io/github/polymeta/serverlinkssender/ServerLinksSender.java +++ b/src/main/java/io/github/polymeta/serverlinkssender/ServerLinksSender.java @@ -39,7 +39,7 @@ public class ServerLinksSender implements ModInitializer public static final NodeParser PARSER = NodeParser.builder() .simplifiedTextFormat() .quickText() - .globalPlaceholders() + .commonPlaceholders() .staticPreParsing() .build(); public static BaseConfig CONFIG; @@ -56,7 +56,7 @@ public void onInitialize() .requires(Permissions.require("serverlinks.main", 4)) .executes((ctx) -> { - loadConfig(); + loadConfig(ctx.getSource().getServer().registryAccess()); ctx.getSource().sendSuccess(() -> Component.literal("Config reloaded"), false); return 1; }) @@ -68,10 +68,10 @@ public void onInitialize() { ctx.getSource().sendFailure(Component.literal("Unknown argument passed in! " + "Use '/reloadserverlinks --force-update' to send all players an updated list after reloading") - .withStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/reloadserverlinks --force-update")))); + .withStyle(Style.EMPTY.withClickEvent(new ClickEvent.SuggestCommand("/reloadserverlinks --force-update")))); return 1; } - loadConfig(); + loadConfig(ctx.getSource().getServer().registryAccess()); SendPacketsToPlayers(ctx.getSource().getServer().getPlayerList().getPlayers()); ctx.getSource().sendSuccess(() -> Component.literal("Config reloaded and links distributed to all online players"), false); return 1; @@ -83,7 +83,7 @@ public void onInitialize() ServerLifecycleEvents.SERVER_STARTED.register(s -> { - if(loadConfig()) + if(loadConfig(s.registryAccess())) { AtomicInteger i = new AtomicInteger(); s.addTickable(() -> @@ -114,11 +114,12 @@ private void SendPacketsToPlayers(List players) { executor.execute(() -> players.forEach(x -> x.connection.send(new ClientboundServerLinksPacket(CONFIG.buildPacketContents(x))))); } - public static boolean loadConfig() + public static boolean loadConfig(net.minecraft.core.HolderLookup.Provider registryAccess) { try { var configDir = FabricLoader.getInstance().getConfigDir().resolve("serverlinkssender"); + var gson = BaseConfig.createGson(registryAccess); BaseConfig config; @@ -127,7 +128,7 @@ public static boolean loadConfig() { var data = JsonParser.parseString(Files.readString(configFile)); - config = BaseConfig.GSON.fromJson(data, BaseConfig.class); + config = gson.fromJson(data, BaseConfig.class); } else @@ -137,7 +138,7 @@ public static boolean loadConfig() config = new BaseConfig(); } - Files.writeString(configFile, BaseConfig.GSON.toJson(config)); + Files.writeString(configFile, gson.toJson(config)); config.preParseText(); CONFIG = config; } diff --git a/src/main/java/io/github/polymeta/serverlinkssender/config/BaseConfig.java b/src/main/java/io/github/polymeta/serverlinkssender/config/BaseConfig.java index 2c23cbe..a76d847 100644 --- a/src/main/java/io/github/polymeta/serverlinkssender/config/BaseConfig.java +++ b/src/main/java/io/github/polymeta/serverlinkssender/config/BaseConfig.java @@ -6,13 +6,16 @@ import com.mojang.datafixers.util.Either; import eu.pb4.placeholders.api.PlaceholderContext; import eu.pb4.placeholders.api.node.TextNode; +import eu.pb4.predicate.api.BuiltinPredicates; import eu.pb4.predicate.api.GsonPredicateSerializer; import eu.pb4.predicate.api.MinecraftPredicate; import eu.pb4.predicate.api.PredicateContext; -import eu.pb4.predicate.impl.predicates.compat.PermissionPredicate; import io.github.polymeta.serverlinkssender.ServerLinksSender; +import net.minecraft.core.HolderLookup; +import net.minecraft.resources.Identifier; import net.minecraft.server.ServerLinks; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.permissions.PermissionLevel; import java.util.ArrayList; import java.util.List; @@ -21,10 +24,13 @@ public class BaseConfig { - public static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().setLenient() - .registerTypeHierarchyAdapter(MinecraftPredicate.class, GsonPredicateSerializer.INSTANCE) - .excludeFieldsWithModifiers(java.lang.reflect.Modifier.TRANSIENT, java.lang.reflect.Modifier.STATIC) - .create(); + public static Gson createGson(HolderLookup.Provider lookup) + { + return new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().setLenient() + .registerTypeHierarchyAdapter(MinecraftPredicate.class, GsonPredicateSerializer.create(lookup)) + .excludeFieldsWithModifiers(java.lang.reflect.Modifier.TRANSIENT, java.lang.reflect.Modifier.STATIC) + .create(); + } @SerializedName("refresh_interval") public int linkRefreshTime = -1; @@ -50,12 +56,12 @@ public void preParseText() public List buildPacketContents(ServerPlayer player) { var links = parsedGlobalLinks.entrySet().stream() - .map(x -> new ServerLinks.UntrustedEntry(Either.right(x.getKey().toText(PlaceholderContext.of(player))), x.getValue())) + .map(x -> new ServerLinks.UntrustedEntry(Either.right(x.getKey().toComponent(PlaceholderContext.of(player))), x.getValue())) .collect(Collectors.toCollection(ArrayList::new)); links.addAll(additionalLinks.stream() .filter(x -> x.requirement.test(PredicateContext.of(player)).success()) .flatMap(x -> x.parsedLinks.entrySet().stream()) - .map(x -> new ServerLinks.UntrustedEntry(Either.right(x.getKey().toText(PlaceholderContext.of(player))), x.getValue())) + .map(x -> new ServerLinks.UntrustedEntry(Either.right(x.getKey().toComponent(PlaceholderContext.of(player))), x.getValue())) .collect(Collectors.toCollection(ArrayList::new))); return links; } @@ -64,6 +70,6 @@ public static class ContextLinkEntry { private Map links = Map.of("My cool extra link!", "https://google.com"); public transient Map parsedLinks; - public MinecraftPredicate requirement = new PermissionPredicate("example.permission", 2); + public MinecraftPredicate requirement = BuiltinPredicates.fabricPermission(Identifier.parse("example.permission"), PermissionLevel.byId(2)); } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index fb95c5f..8113d0a 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -23,7 +23,9 @@ ], "depends": { "fabricloader": ">=${loader_version}", - "fabric": "*", - "minecraft": ">=${minecraft_version}" + "fabric-api": "*", + "fabric-permissions-api-v0": "*", + "minecraft": "~26.1", + "java": ">=25" } } diff --git a/src/main/resources/serverlinkssender.mixins.json b/src/main/resources/serverlinkssender.mixins.json index bd7e05a..fabc3b6 100644 --- a/src/main/resources/serverlinkssender.mixins.json +++ b/src/main/resources/serverlinkssender.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "io.github.polymeta.serverlinkssender.mixin", - "compatibilityLevel": "JAVA_21", + "compatibilityLevel": "JAVA_25", "mixins": [ ], "client": [