diff --git a/build.gradle b/build.gradle index a7936f2..bf4e70a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,19 @@ plugins { - id 'fabric-loom' version '1.6-SNAPSHOT' + id 'fabric-loom' version '1.11-SNAPSHOT' id 'maven-publish' id 'io.github.juuxel.loom-quiltflower' version '1.10.0' } -sourceCompatibility = JavaVersion.VERSION_17 -targetCompatibility = JavaVersion.VERSION_17 +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +base { + archivesName = "command-aliases" +} -archivesBaseName = project.archives_base_name version = "${project.mod_version}+mc${project.minecraft_version}-${getVersionMetadata()}" group = project.maven_group @@ -39,7 +45,7 @@ dependencies { modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" // Permissions API - include(modImplementation("me.lucko:fabric-permissions-api:0.3.1")) + include(modImplementation("me.lucko:fabric-permissions-api:0.3.3")) // LevelDB include(implementation("org.iq80.leveldb:leveldb:0.12")) @@ -61,10 +67,10 @@ dependencies { include(implementation("com.fasterxml.jackson.core:jackson-annotations:2.17.1")) // Math Evaluator - include(implementation("com.fathzer:javaluator:3.0.3")) + include(implementation("com.fathzer:javaluator:3.0.6")) // Placeholders API - modImplementation include("eu.pb4:placeholder-api:2.4.0-pre.2+1.21") + modImplementation include("eu.pb4:placeholder-api:2.6.4+1.21.5") //modRuntimeOnly "maven.modrinth:lazydfu:0.1.3" //modRuntimeOnly "maven.modrinth:sodium:mc1.19-0.4.2" @@ -100,7 +106,7 @@ jar { publishing { publications { mavenJava(MavenPublication) { - artifactId = project.archives_base_name + artifactId = project.base.archivesName.get() from components.java } } diff --git a/gradle.properties b/gradle.properties index 63cf347..c9ceec3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,9 +3,9 @@ org.gradle.jvmargs=-Xmx2G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version=1.21 - yarn_mappings=1.21+build.2 - loader_version=0.15.11 + minecraft_version=1.21.5 + yarn_mappings=1.21.5+build.1 + loader_version=0.17.2 # Mod Properties mod_version = 1.0.1 @@ -14,4 +14,4 @@ org.gradle.jvmargs=-Xmx2G # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.100.1+1.21 + fabric_version=0.128.2+1.21.5 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 20db9ad..35a1b01 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.0.0-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle index 5b60df3..27e3d10 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,6 @@ pluginManagement { repositories { - jcenter() + mavenCentral() maven { name = 'Fabric' url = 'https://maven.fabricmc.net/' diff --git a/src/main/java/me/flashyreese/mods/commandaliases/command/builder/custom/ClientCustomCommandBuilder.java b/src/main/java/me/flashyreese/mods/commandaliases/command/builder/custom/ClientCustomCommandBuilder.java index e7021ce..b4e17fa 100644 --- a/src/main/java/me/flashyreese/mods/commandaliases/command/builder/custom/ClientCustomCommandBuilder.java +++ b/src/main/java/me/flashyreese/mods/commandaliases/command/builder/custom/ClientCustomCommandBuilder.java @@ -32,7 +32,7 @@ public ClientCustomCommandBuilder(String filePath, CustomCommand commandAliasPar protected int dispatcherExecute(CustomCommandAction action, CommandDispatcher dispatcher, CommandContext context, String actionCommand) throws CommandSyntaxException { int state = 0; if (action.getCommandType() == CommandType.CLIENT) { - context.getSource().getPlayer().sendMessage(Text.literal("/" + actionCommand)); + context.getSource().getPlayer().sendMessage(Text.literal("/" + actionCommand), false); state = Command.SINGLE_SUCCESS; } else if (action.getCommandType() == CommandType.SERVER) { state = Objects.requireNonNull(context.getSource().getWorld().getServer()).getCommandManager().getDispatcher().execute(actionCommand, Objects.requireNonNull(context.getSource().getWorld().getServer()).getCommandSource()); diff --git a/src/main/java/me/flashyreese/mods/commandaliases/command/builder/redirect/CommandRedirectBuilder.java b/src/main/java/me/flashyreese/mods/commandaliases/command/builder/redirect/CommandRedirectBuilder.java index 318ceda..06e23c6 100644 --- a/src/main/java/me/flashyreese/mods/commandaliases/command/builder/redirect/CommandRedirectBuilder.java +++ b/src/main/java/me/flashyreese/mods/commandaliases/command/builder/redirect/CommandRedirectBuilder.java @@ -84,9 +84,20 @@ private LiteralArgumentBuilder parseCommand(RedirectCommand cmd, CommandDispa commandBuilder = this.literal(literal).then(commandBuilder); } else { if (this.command.getCommandMode() == CommandMode.COMMAND_REDIRECT) { - commandBuilder = this.literal(literal).redirect(redirect); + LiteralArgumentBuilder builder = this.literal(literal) + .executes(context -> dispatcher.execute(redirectTo, context.getSource())); + + // Copy children from redirect node to maintain tab completion + redirect.getChildren().forEach(child -> builder.then(child.createBuilder().executes(context -> { + String input = context.getInput(); + String args = input.substring(input.indexOf(' ') + 1); + String fullCommand = redirectTo + " " + args; + return dispatcher.execute(fullCommand, context.getSource()); + }))); + + commandBuilder = builder; } else if (this.command.getCommandMode() == CommandMode.COMMAND_REDIRECT_NOARG) { - commandBuilder = this.literal(literal).executes(redirect.getCommand()); + commandBuilder = this.literal(literal).executes(context -> dispatcher.execute(redirectTo, context.getSource())); } } } diff --git a/src/main/java/me/flashyreese/mods/commandaliases/command/impl/ArgumentTypeMapper.java b/src/main/java/me/flashyreese/mods/commandaliases/command/impl/ArgumentTypeMapper.java index 8a6596b..d96f87d 100644 --- a/src/main/java/me/flashyreese/mods/commandaliases/command/impl/ArgumentTypeMapper.java +++ b/src/main/java/me/flashyreese/mods/commandaliases/command/impl/ArgumentTypeMapper.java @@ -5,10 +5,8 @@ import com.mojang.brigadier.context.ParsedArgument; import com.mojang.brigadier.context.StringRange; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import net.minecraft.SharedConstants; import net.minecraft.command.CommandRegistryAccess; import net.minecraft.command.argument.*; -import net.minecraft.command.argument.serialize.ConstantArgumentSerializer; import net.minecraft.registry.RegistryKeys; import java.lang.reflect.Field; @@ -107,11 +105,6 @@ private void registerArgumentTypes(CommandRegistryAccess registryAccess) { this.argumentMap.put("minecraft:template_mirror", BlockMirrorArgumentType.blockMirror()); this.argumentMap.put("minecraft:template_rotation", BlockRotationArgumentType.blockRotation()); - if (SharedConstants.isDevelopment) { - this.argumentMap.put("minecraft:test_argument", TestFunctionArgumentType.testFunction()); - this.argumentMap.put("minecraft:test_class", TestClassArgumentType.testClass()); - } - this.argumentMap.put("minecraft:uuid", UuidArgumentType.uuid()); this.argumentMap.put("brigadier:bool", BoolArgumentType.bool()); diff --git a/src/main/java/me/flashyreese/mods/commandaliases/command/loader/AbstractCommandAliasesProvider.java b/src/main/java/me/flashyreese/mods/commandaliases/command/loader/AbstractCommandAliasesProvider.java index e0a109e..f495d9b 100644 --- a/src/main/java/me/flashyreese/mods/commandaliases/command/loader/AbstractCommandAliasesProvider.java +++ b/src/main/java/me/flashyreese/mods/commandaliases/command/loader/AbstractCommandAliasesProvider.java @@ -41,6 +41,7 @@ import java.io.File; import java.io.IOException; import java.lang.reflect.Field; +import java.net.URI; import java.nio.file.Path; import java.util.*; import java.util.concurrent.atomic.AtomicReference; @@ -127,7 +128,7 @@ protected void registerCommandAliasesCommands(CommandDispatcher dispatcher, C .append(Text.literal(" v" + modContainer.getMetadata().getVersion()).formatted(Formatting.RED)) .formatted(Formatting.RESET) .append(Text.literal(", ")) - .append(Text.literal("Click here to visit the wiki.").formatted(Formatting.UNDERLINE, Formatting.AQUA).styled(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://wiki.commandaliases.flashyreese.me/")))) + .append(Text.literal("Click here to visit the wiki.").formatted(Formatting.UNDERLINE, Formatting.AQUA).styled(style -> style.withClickEvent(new ClickEvent.OpenUrl(URI.create("https://wiki.commandaliases.flashyreese.me/"))))) )); return Command.SINGLE_SUCCESS; @@ -470,11 +471,11 @@ private TreeNode createDirectoryTree(File directory) { public String loadAndRenderDirectoryTree(TreeNode tree, Map commandAliases) { List lines = loadAndRenderDirectoryTreeLines(tree, commandAliases); - String newline = System.getProperty("line.separator"); + String newline = System.lineSeparator(); StringBuilder sb = new StringBuilder(); for (StringBuilder line : lines) { sb.append(line); - if (lines.get(lines.size() - 1) != line) { + if (lines.getLast() != line) { sb.append(newline); } } @@ -587,4 +588,4 @@ public Scheduler getScheduler() { public void setScheduler(Scheduler scheduler) { this.scheduler = scheduler; } -} +} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index c2e9a71..15cd219 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -44,8 +44,8 @@ "commandaliases.mixins.json" ], "depends": { - "fabricloader": ">=0.15", + "fabricloader": ">=0.17.2", "fabric": "*", - "minecraft": ">=1.21" + "minecraft": ">=1.21.5" } }