From e353cdf8503d3b023a7238f73d3a31a0576f5fb0 Mon Sep 17 00:00:00 2001 From: huanmeng_qwq <49704373+huanmeng-qwq@users.noreply.github.com> Date: Sat, 17 Feb 2024 16:53:34 +0800 Subject: [PATCH] GH-307 Implement Fabric platform support (#376) * Fix errors in the findByInstanceOf method * Fabric Support * Remove unused message * Fix ci, full string argument * update build.gradle.kts * Update examples/fabric/src/main/java/dev/rollczi/example/fabric/ExampleFabric.java Co-authored-by: Norbert Dejlich * Update litecommands-fabric/build.gradle.kts Co-authored-by: Norbert Dejlich * resolve all * Add fabric.mod.json * Update litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricPlatform.java * Update litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricPlatform.java * update build.gradle.kts * update fabric.mod.json, remove unused * update fabric.mod.json * Add litecommands icon.svg * Move some dependencies. * Rename player only context. Add private constructor to LiteFabricFactory * Update example build.gradle.kts * Update example build.gradle.kts * update fabric.mod.json * Simplify fabric command. Fix issue with string argument. * Update icons. * update fabric.mod.json * Update fabric.mod.json * Update README.md * Update README.md * Change icons. * Remove minecraft version from publication. --------- Co-authored-by: Norbert Dejlich --- README.md | 9 ++ .../litecommands-repositories.gradle.kts | 1 + examples/fabric/build.gradle.kts | 32 ++++++ .../rollczi/example/fabric/ExampleFabric.java | 15 +++ .../example/fabric/command/BanCommand.java | 25 +++++ .../resources/assets/litecommands/icon.png | Bin 0 -> 59255 bytes .../fabric/src/main/resources/fabric.mod.json | 22 ++++ .../standard/StringArgumentResolver.java | 5 + litecommands-fabric/build.gradle.kts | 33 ++++++ litecommands-fabric/gradle.properties | 8 ++ .../litecommands/fabric/FabricCommand.java | 94 ++++++++++++++++++ .../litecommands/fabric/FabricPlatform.java | 40 ++++++++ .../litecommands/fabric/FabricSender.java | 28 ++++++ .../fabric/LiteFabricFactory.java | 43 ++++++++ .../fabric/LiteFabricMessages.java | 23 +++++ .../fabric/LiteFabricSettings.java | 6 ++ .../litecommands/fabric/StringHandler.java | 14 +++ .../litecommands/fabric/TextHandler.java | 14 +++ .../fabric/argument/PlayerArgument.java | 46 +++++++++ .../fabric/argument/WorldArgument.java | 67 +++++++++++++ .../context/FabricOnlyPlayerContext.java | 31 ++++++ .../resources/assets/litecommands/icon.png | Bin 0 -> 59255 bytes .../src/main/resources/fabric.mod.json | 31 ++++++ settings.gradle.kts | 12 +++ 24 files changed, 599 insertions(+) create mode 100644 examples/fabric/build.gradle.kts create mode 100644 examples/fabric/src/main/java/dev/rollczi/example/fabric/ExampleFabric.java create mode 100644 examples/fabric/src/main/java/dev/rollczi/example/fabric/command/BanCommand.java create mode 100644 examples/fabric/src/main/resources/assets/litecommands/icon.png create mode 100644 examples/fabric/src/main/resources/fabric.mod.json create mode 100644 litecommands-fabric/build.gradle.kts create mode 100644 litecommands-fabric/gradle.properties create mode 100644 litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricCommand.java create mode 100644 litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricPlatform.java create mode 100644 litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricSender.java create mode 100644 litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricFactory.java create mode 100644 litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricMessages.java create mode 100644 litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricSettings.java create mode 100644 litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/StringHandler.java create mode 100644 litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/TextHandler.java create mode 100644 litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/argument/PlayerArgument.java create mode 100644 litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/argument/WorldArgument.java create mode 100644 litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/context/FabricOnlyPlayerContext.java create mode 100644 litecommands-fabric/src/main/resources/assets/litecommands/icon.png create mode 100644 litecommands-fabric/src/main/resources/fabric.mod.json diff --git a/README.md b/README.md index 48476505b..e2ec487bb 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,15 @@ Annotation based command framework for Velocity, Bukkit, Paper, BungeeCord, Mine - Adventure Kyori support. [(extension)](https://litedevelopers.github.io/LiteDevelopers-documentation/adventure-kyori.html) - and [more](https://litedevelopers.github.io/LiteDevelopers-documentation/introdution.html)! ✨ +## 📦 Platforms +- Velocity +- Bukkit, Spigot, Paper +- BungeeCord, Waterfall +- Minestom _(by [Codestech1](https://github.com/Codestech1))_ +- Sponge _(by [BlackBaroness](https://github.com/BlackBaroness))_ +- Fabric _(by [huanmeng_qwq](https://github.com/huanmeng-qwq))_ +- JDA + ## 💡 Command Example This is an example of `/hello ` command: diff --git a/buildSrc/src/main/kotlin/litecommands-repositories.gradle.kts b/buildSrc/src/main/kotlin/litecommands-repositories.gradle.kts index 9c08a336b..8f1d769d7 100644 --- a/buildSrc/src/main/kotlin/litecommands-repositories.gradle.kts +++ b/buildSrc/src/main/kotlin/litecommands-repositories.gradle.kts @@ -5,6 +5,7 @@ plugins { repositories { mavenCentral() + maven("https://maven.fabricmc.net/") // fabric maven("https://repo.dmulloy2.net/repository/public/") // protocol lib maven("https://papermc.io/repo/repository/maven-public/") // paper, adventure, velocity maven("https://repo.opencollab.dev/maven-snapshots") // nukkit diff --git a/examples/fabric/build.gradle.kts b/examples/fabric/build.gradle.kts new file mode 100644 index 000000000..6fb372894 --- /dev/null +++ b/examples/fabric/build.gradle.kts @@ -0,0 +1,32 @@ +plugins { + id("java") + id("fabric-loom") version "1.5-SNAPSHOT" +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +repositories { + mavenCentral() + maven("https://repo.panda-lang.org/releases/") + maven("https://maven.fabricmc.net/") +} + +dependencies { + minecraft("com.mojang:minecraft:1.20.4") + mappings("net.fabricmc:yarn:1.20.4+build.3:v2") + + modImplementation("net.fabricmc:fabric-loader:0.15.6") + modImplementation("net.fabricmc.fabric-api:fabric-api:0.96.1+1.20.4") + +// modImplementation("dev.rollczi:litecommands-fabric:3.3.4") // <-- uncomment in your project + implementation(project(path = ":litecommands-fabric", configuration = "namedElements")) + +} + +sourceSets.test { + java.setSrcDirs(emptyList()) + resources.setSrcDirs(emptyList()) +} diff --git a/examples/fabric/src/main/java/dev/rollczi/example/fabric/ExampleFabric.java b/examples/fabric/src/main/java/dev/rollczi/example/fabric/ExampleFabric.java new file mode 100644 index 000000000..23ee320c4 --- /dev/null +++ b/examples/fabric/src/main/java/dev/rollczi/example/fabric/ExampleFabric.java @@ -0,0 +1,15 @@ +package dev.rollczi.example.fabric; + +import dev.rollczi.example.fabric.command.BanCommand; +import dev.rollczi.litecommands.fabric.LiteFabricFactory; +import net.fabricmc.api.ModInitializer; + + +public class ExampleFabric implements ModInitializer { + @Override + public void onInitialize() { + LiteFabricFactory.create() + .commands(new BanCommand()) + .build(); + } +} diff --git a/examples/fabric/src/main/java/dev/rollczi/example/fabric/command/BanCommand.java b/examples/fabric/src/main/java/dev/rollczi/example/fabric/command/BanCommand.java new file mode 100644 index 000000000..3608a6a2e --- /dev/null +++ b/examples/fabric/src/main/java/dev/rollczi/example/fabric/command/BanCommand.java @@ -0,0 +1,25 @@ +package dev.rollczi.example.fabric.command; + +import dev.rollczi.litecommands.annotations.argument.Arg; +import dev.rollczi.litecommands.annotations.command.Command; +import dev.rollczi.litecommands.annotations.context.Context; +import dev.rollczi.litecommands.annotations.execute.Execute; +import dev.rollczi.litecommands.annotations.join.Join; +import dev.rollczi.litecommands.annotations.quoted.Quoted; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.Text; + + +@Command(name = "ban") +public class BanCommand { + @Execute + void execute(@Arg("player") ServerPlayerEntity player, @Join("reason") String reason) { + player.networkHandler.disconnect(Text.of(reason)); + } + + @Execute(name = "warnSelf") + Text execute(@Quoted @Arg String reason) { + return Text.of("You have been warned: " + reason); + } +} diff --git a/examples/fabric/src/main/resources/assets/litecommands/icon.png b/examples/fabric/src/main/resources/assets/litecommands/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e5b1c02d9fb96b8224271dcf855c5a5ae724e98e GIT binary patch literal 59255 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 literal 0 HcmV?d00001 diff --git a/examples/fabric/src/main/resources/fabric.mod.json b/examples/fabric/src/main/resources/fabric.mod.json new file mode 100644 index 000000000..d89cc371e --- /dev/null +++ b/examples/fabric/src/main/resources/fabric.mod.json @@ -0,0 +1,22 @@ +{ + "schemaVersion": 1, + "id": "litecommands_example", + "version": "3.3.4", + "name": "LiteCommands Fabric Example", + "description": "Annotation based command framework for Fabric.", + "authors": [ + "Rollczi", + "huanmeng_qwq" + ], + "contact": { + "homepage": "https://github.com/Rollczi/LiteCommands", + "issues": "https://github.com/Rollczi/LiteCommands/issues" + }, + "license": "Apache-2.0", + "icon": "assets/litecommands/icon.png", + "entrypoints": { + "main": [ + "dev.rollczi.example.fabric.ExampleFabric" + ] + } +} \ No newline at end of file diff --git a/litecommands-core/src/dev/rollczi/litecommands/argument/resolver/standard/StringArgumentResolver.java b/litecommands-core/src/dev/rollczi/litecommands/argument/resolver/standard/StringArgumentResolver.java index 29dde20f1..075d22531 100644 --- a/litecommands-core/src/dev/rollczi/litecommands/argument/resolver/standard/StringArgumentResolver.java +++ b/litecommands-core/src/dev/rollczi/litecommands/argument/resolver/standard/StringArgumentResolver.java @@ -17,6 +17,11 @@ protected ParseResult parse(Invocation invocation, Argument invocation, Argument objectStringArgument, SuggestionContext context) { String first = context.getCurrent().multilevel(); + + if (first.isEmpty()) { + return SuggestionResult.of("<" + objectStringArgument.getName() + ">"); + } + return SuggestionResult.of("<" + objectStringArgument.getName() + ">", first); } diff --git a/litecommands-fabric/build.gradle.kts b/litecommands-fabric/build.gradle.kts new file mode 100644 index 000000000..9c3e53ba1 --- /dev/null +++ b/litecommands-fabric/build.gradle.kts @@ -0,0 +1,33 @@ +plugins { + `litecommands-java-17` + `litecommands-repositories` + `litecommands-publish` + id("fabric-loom") version "1.5-SNAPSHOT" +} + +val minecraft_version: String by project +val yarn_mappings: String by project +val fabric_loader_version: String by project +val fabric_api_version: String by project + +repositories { + maven("https://libraries.minecraft.net") +} + +dependencies { + // LiteCommands + api(project(":litecommands-framework")) + include(project(":litecommands-framework")) + + // Minecraft and mappings + minecraft("com.mojang:minecraft:${minecraft_version}") + mappings("net.fabricmc:yarn:${yarn_mappings}:v2") + + // Fabric loader and API + modImplementation("net.fabricmc:fabric-loader:${fabric_loader_version}") + modImplementation("net.fabricmc.fabric-api:fabric-api:${fabric_api_version}") +} + +litecommandsPublish { + artifactId = "litecommands-fabric" +} \ No newline at end of file diff --git a/litecommands-fabric/gradle.properties b/litecommands-fabric/gradle.properties new file mode 100644 index 000000000..06a81082b --- /dev/null +++ b/litecommands-fabric/gradle.properties @@ -0,0 +1,8 @@ +# Fabric Properties +# check these on https://fabricmc.net/develop +minecraft_version=1.20.4 +yarn_mappings=1.20.4+build.3 + +# Fabric loader and API +fabric_loader_version=0.15.6 +fabric_api_version=0.96.1+1.20.4 \ No newline at end of file diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricCommand.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricCommand.java new file mode 100644 index 000000000..e597578bf --- /dev/null +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricCommand.java @@ -0,0 +1,94 @@ +package dev.rollczi.litecommands.fabric; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.builder.RequiredArgumentBuilder; +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import dev.rollczi.litecommands.argument.parser.input.ParseableInput; +import dev.rollczi.litecommands.argument.suggester.input.SuggestionInput; +import dev.rollczi.litecommands.command.CommandRoute; +import dev.rollczi.litecommands.input.raw.RawCommand; +import dev.rollczi.litecommands.invocation.Invocation; +import dev.rollczi.litecommands.platform.PlatformInvocationListener; +import dev.rollczi.litecommands.platform.PlatformSuggestionListener; +import dev.rollczi.litecommands.suggestion.SuggestionResult; +import net.minecraft.server.command.ServerCommandSource; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +class FabricCommand { + + private static final String FULL_ARGUMENTS = "[...]"; + + private final CommandRoute baseRoute; + private final PlatformInvocationListener invocationHook; + private final PlatformSuggestionListener suggestionHook; + + FabricCommand(CommandRoute baseRoute, PlatformInvocationListener invocationHook, PlatformSuggestionListener suggestionHook) { + this.baseRoute = baseRoute; + this.invocationHook = invocationHook; + this.suggestionHook = suggestionHook; + } + + LiteralArgumentBuilder toLiteral() { + LiteralArgumentBuilder baseArgument = LiteralArgumentBuilder.literal(baseRoute.getName()); + + this.appendRoute(baseArgument, baseRoute); + return baseArgument; + } + + private void appendRoute(LiteralArgumentBuilder baseLiteral, CommandRoute route) { + boolean isBase = route == baseRoute; + LiteralArgumentBuilder literal = isBase + ? baseLiteral + : LiteralArgumentBuilder.literal(route.getName()); + + literal.then(this.createArguments()); + + for (CommandRoute child : route.getChildren()) { + this.appendRoute(literal, child); + } + if (!isBase) { + baseLiteral.then(literal); + } + } + + @NotNull + private RequiredArgumentBuilder createArguments() { + return RequiredArgumentBuilder + .argument(FULL_ARGUMENTS, StringArgumentType.greedyString()) + .executes(context -> { + RawCommand rawCommand = RawCommand.from(context.getInput()); + ParseableInput parseableInput = rawCommand.toParseableInput(); + FabricSender platformSender = new FabricSender(context.getSource()); + Invocation invocation = new Invocation<>(context.getSource(), platformSender, baseRoute.getName(), rawCommand.getLabel(), parseableInput); + + invocationHook.execute(invocation, parseableInput); + return Command.SINGLE_SUCCESS; + }) + .suggests((context, builder) -> CompletableFuture.supplyAsync(() -> { + String input = context.getInput(); + RawCommand rawCommand = RawCommand.from(input); + SuggestionInput suggestionInput = rawCommand.toSuggestionInput(); + FabricSender platformSender = new FabricSender(context.getSource()); + Invocation invocation = new Invocation<>(context.getSource(), platformSender, baseRoute.getName(), rawCommand.getLabel(), suggestionInput); + + SuggestionResult suggest = suggestionHook.suggest(invocation, suggestionInput); + + List arguments = suggestionInput.asList(); + int start = input.length() - arguments.get(arguments.size() - 1).length(); + SuggestionsBuilder suggestionsBuilder = builder.createOffset(start); + + for (String suggestion : suggest.asMultiLevelList()) { + suggestionsBuilder.suggest(suggestion); + } + + return suggestionsBuilder.build(); + })); + } + +} diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricPlatform.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricPlatform.java new file mode 100644 index 000000000..d8e10be65 --- /dev/null +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricPlatform.java @@ -0,0 +1,40 @@ +package dev.rollczi.litecommands.fabric; + +import dev.rollczi.litecommands.command.CommandRoute; +import dev.rollczi.litecommands.platform.AbstractPlatform; +import dev.rollczi.litecommands.platform.Platform; +import dev.rollczi.litecommands.platform.PlatformInvocationListener; +import dev.rollczi.litecommands.platform.PlatformSettings; +import dev.rollczi.litecommands.platform.PlatformSuggestionListener; +import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; +import net.minecraft.server.command.ServerCommandSource; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +class FabricPlatform extends AbstractPlatform implements Platform { + + private final Map fabricCommands = new HashMap<>(); + + FabricPlatform(PlatformSettings settings) { + super(settings); + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { + for (FabricCommand fabricCommand : fabricCommands.values()) { + dispatcher.register(fabricCommand.toLiteral()); + } + }); + } + + @Override + protected void hook(CommandRoute commandRoute, PlatformInvocationListener invocationHook, PlatformSuggestionListener suggestionHook) { + fabricCommands.put(commandRoute.getUniqueId(), new FabricCommand(commandRoute, invocationHook, suggestionHook)); + } + + @Override + protected void unhook(CommandRoute commandRoute) { + fabricCommands.remove(commandRoute.getUniqueId()); + // TODO: unregister command from dispatcher + } + +} diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricSender.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricSender.java new file mode 100644 index 000000000..3a16a26eb --- /dev/null +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/FabricSender.java @@ -0,0 +1,28 @@ +package dev.rollczi.litecommands.fabric; + +import dev.rollczi.litecommands.identifier.Identifier; +import dev.rollczi.litecommands.platform.AbstractPlatformSender; +import net.minecraft.server.command.ServerCommandSource; + +public class FabricSender extends AbstractPlatformSender { + private final ServerCommandSource source; + + public FabricSender(ServerCommandSource source) { + this.source = source; + } + + @Override + public String getName() { + return source.getName(); + } + + @Override + public Identifier getIdentifier() { + return Identifier.of(source.getEntity().getUuid()); + } + + @Override + public boolean hasPermission(String permission) { + return false; + } +} diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricFactory.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricFactory.java new file mode 100644 index 000000000..519e29b9d --- /dev/null +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricFactory.java @@ -0,0 +1,43 @@ +package dev.rollczi.litecommands.fabric; + +import dev.rollczi.litecommands.LiteCommandsBuilder; +import dev.rollczi.litecommands.LiteCommandsFactory; +import dev.rollczi.litecommands.fabric.argument.PlayerArgument; +import dev.rollczi.litecommands.fabric.argument.WorldArgument; +import dev.rollczi.litecommands.fabric.context.FabricOnlyPlayerContext; +import dev.rollczi.litecommands.message.MessageRegistry; +import dev.rollczi.litecommands.platform.PlatformSettings; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +public final class LiteFabricFactory { + + private LiteFabricFactory() { + } + + @SuppressWarnings("unchecked") + public static > B create() { + return (B) LiteCommandsFactory.builder(ServerCommandSource.class, new FabricPlatform(new LiteFabricSettings())) + .selfProcessor((builder, internal) -> { + MessageRegistry messageRegistry = internal.getMessageRegistry(); + + builder + .context(ServerPlayerEntity.class, new FabricOnlyPlayerContext<>(messageRegistry)) + .context(PlayerEntity.class, new FabricOnlyPlayerContext<>(messageRegistry)) + .result(String.class, new StringHandler()) + .result(Text.class, new TextHandler()) + .argument(PlayerEntity.class, new PlayerArgument<>(messageRegistry)) + .argument(ServerPlayerEntity.class, new PlayerArgument<>(messageRegistry)) + + .argument(World.class, new WorldArgument<>(messageRegistry)) + .argument(ServerWorld.class, new WorldArgument<>(messageRegistry)) + ; + }) + ; + } + +} diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricMessages.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricMessages.java new file mode 100644 index 000000000..f3b371f30 --- /dev/null +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricMessages.java @@ -0,0 +1,23 @@ +package dev.rollczi.litecommands.fabric; + +import dev.rollczi.litecommands.message.LiteMessages; +import dev.rollczi.litecommands.message.MessageKey; + +public class LiteFabricMessages extends LiteMessages { + + public static final MessageKey WORLD_NOT_EXIST = MessageKey.of( + "world-not-exist", + input -> "§cWorld " + input + " doesn't exist! (WORLD_NOT_EXIST)" + ); + + public static final MessageKey PLAYER_NOT_FOUND = MessageKey.of( + "player-not-found", + input -> "§cPlayer " + input + " not found! (PLAYER_NOT_FOUND)" + ); + + public static final MessageKey PLAYER_ONLY = MessageKey.of( + "only-player", + unused -> "§cOnly player can execute this command! (PLAYER_ONLY)" + ); + +} diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricSettings.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricSettings.java new file mode 100644 index 000000000..c4468e796 --- /dev/null +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/LiteFabricSettings.java @@ -0,0 +1,6 @@ +package dev.rollczi.litecommands.fabric; + +import dev.rollczi.litecommands.platform.PlatformSettings; + +public class LiteFabricSettings implements PlatformSettings { +} diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/StringHandler.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/StringHandler.java new file mode 100644 index 000000000..49749f8cc --- /dev/null +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/StringHandler.java @@ -0,0 +1,14 @@ +package dev.rollczi.litecommands.fabric; + +import dev.rollczi.litecommands.handler.result.ResultHandler; +import dev.rollczi.litecommands.handler.result.ResultHandlerChain; +import dev.rollczi.litecommands.invocation.Invocation; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.text.Text; + +class StringHandler implements ResultHandler { + @Override + public void handle(Invocation invocation, String result, ResultHandlerChain chain) { + invocation.sender().sendFeedback(() -> Text.of(result), false); + } +} diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/TextHandler.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/TextHandler.java new file mode 100644 index 000000000..23f72cdc3 --- /dev/null +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/TextHandler.java @@ -0,0 +1,14 @@ +package dev.rollczi.litecommands.fabric; + +import dev.rollczi.litecommands.handler.result.ResultHandler; +import dev.rollczi.litecommands.handler.result.ResultHandlerChain; +import dev.rollczi.litecommands.invocation.Invocation; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.text.Text; + +class TextHandler implements ResultHandler { + @Override + public void handle(Invocation invocation, Text result, ResultHandlerChain chain) { + invocation.sender().sendFeedback(() -> result, false); + } +} diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/argument/PlayerArgument.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/argument/PlayerArgument.java new file mode 100644 index 000000000..156abbd7f --- /dev/null +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/argument/PlayerArgument.java @@ -0,0 +1,46 @@ +package dev.rollczi.litecommands.fabric.argument; + +import dev.rollczi.litecommands.argument.Argument; +import dev.rollczi.litecommands.argument.parser.ParseResult; +import dev.rollczi.litecommands.argument.resolver.ArgumentResolver; +import dev.rollczi.litecommands.fabric.LiteFabricMessages; +import dev.rollczi.litecommands.invocation.Invocation; +import dev.rollczi.litecommands.message.MessageRegistry; +import dev.rollczi.litecommands.suggestion.SuggestionContext; +import dev.rollczi.litecommands.suggestion.SuggestionResult; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.PlayerManager; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.Text; + +public class PlayerArgument

extends ArgumentResolver { + + private final MessageRegistry messageRegistry; + + public PlayerArgument(MessageRegistry messageRegistry) { + this.messageRegistry = messageRegistry; + } + + @SuppressWarnings("unchecked") + @Override + protected ParseResult

parse(Invocation invocation, Argument

context, String argument) { + PlayerManager playerManager = invocation.sender().getServer().getPlayerManager(); + ServerPlayerEntity player = playerManager.getPlayer(argument); + + if (player != null) { + return ParseResult.success((P) player); + } + + return ParseResult.failure(messageRegistry.getInvoked(LiteFabricMessages.PLAYER_NOT_FOUND, invocation, argument)); + } + + @Override + public SuggestionResult suggest(Invocation invocation, Argument

argument, SuggestionContext context) { + return invocation.sender().getServer().getPlayerManager().getPlayerList().stream() + .map(ServerPlayerEntity::getName) + .map(Text::getString) + .collect(SuggestionResult.collector()); + } + +} diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/argument/WorldArgument.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/argument/WorldArgument.java new file mode 100644 index 000000000..78b4ae525 --- /dev/null +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/argument/WorldArgument.java @@ -0,0 +1,67 @@ +package dev.rollczi.litecommands.fabric.argument; + +import dev.rollczi.litecommands.argument.Argument; +import dev.rollczi.litecommands.argument.parser.ParseResult; +import dev.rollczi.litecommands.argument.resolver.ArgumentResolver; +import dev.rollczi.litecommands.fabric.LiteFabricMessages; +import dev.rollczi.litecommands.invocation.Invocation; +import dev.rollczi.litecommands.message.MessageRegistry; +import dev.rollczi.litecommands.suggestion.SuggestionContext; +import dev.rollczi.litecommands.suggestion.SuggestionResult; +import net.minecraft.registry.RegistryKey; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; + +public class WorldArgument extends ArgumentResolver { + + private final MessageRegistry messageRegistry; + + public WorldArgument(MessageRegistry messageRegistry) { + this.messageRegistry = messageRegistry; + } + + @SuppressWarnings("unchecked") + @Override + protected ParseResult parse(Invocation invocation, Argument context, String argument) { + MinecraftServer server = invocation.sender().getServer(); + RegistryKey worldRegistryKey = null; + for (RegistryKey key : server.getWorldRegistryKeys()) { + if (key.getValue().toString().equalsIgnoreCase(argument) || key.getValue().getPath().equalsIgnoreCase(argument)) { + worldRegistryKey = key; + break; + } + } + if (worldRegistryKey == null) { + return ParseResult.failure(messageRegistry.getInvoked(LiteFabricMessages.WORLD_NOT_EXIST, invocation, argument)); + } + World world = server.getWorld(worldRegistryKey); + + if (world == null) { + return ParseResult.failure(messageRegistry.getInvoked(LiteFabricMessages.WORLD_NOT_EXIST, invocation, argument)); + } + + return ParseResult.success((W) world); + } + + @Override + public SuggestionResult suggest(Invocation invocation, Argument argument, SuggestionContext context) { + MinecraftServer server = invocation.sender().getServer(); + List worldList = new ArrayList<>(); + for (ServerWorld world : server.getWorlds()) { + worldList.add(world); + } + return worldList.stream() + .map(this::getWorldName) + .collect(SuggestionResult.collector()); + } + + private String getWorldName(ServerWorld world) { + return world.getRegistryKey().getValue().toString(); + } + +} diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/context/FabricOnlyPlayerContext.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/context/FabricOnlyPlayerContext.java new file mode 100644 index 000000000..bcd0fb4c4 --- /dev/null +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/context/FabricOnlyPlayerContext.java @@ -0,0 +1,31 @@ +package dev.rollczi.litecommands.fabric.context; + +import dev.rollczi.litecommands.context.ContextProvider; +import dev.rollczi.litecommands.context.ContextResult; +import dev.rollczi.litecommands.fabric.LiteFabricMessages; +import dev.rollczi.litecommands.invocation.Invocation; +import dev.rollczi.litecommands.message.MessageRegistry; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; + +public class FabricOnlyPlayerContext

implements ContextProvider { + + private final MessageRegistry messageRegistry; + + public FabricOnlyPlayerContext(MessageRegistry messageRegistry) { + this.messageRegistry = messageRegistry; + } + + @SuppressWarnings("unchecked") + @Override + public ContextResult

provide(Invocation invocation) { + ServerPlayerEntity player = invocation.sender().getPlayer(); + if (player != null) { + return ContextResult.ok(() -> (P) player); + } + + return ContextResult.error(messageRegistry.getInvoked(LiteFabricMessages.PLAYER_ONLY, invocation)); + } + +} diff --git a/litecommands-fabric/src/main/resources/assets/litecommands/icon.png b/litecommands-fabric/src/main/resources/assets/litecommands/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e5b1c02d9fb96b8224271dcf855c5a5ae724e98e GIT binary patch literal 59255 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 literal 0 HcmV?d00001 diff --git a/litecommands-fabric/src/main/resources/fabric.mod.json b/litecommands-fabric/src/main/resources/fabric.mod.json new file mode 100644 index 000000000..ab9a46d16 --- /dev/null +++ b/litecommands-fabric/src/main/resources/fabric.mod.json @@ -0,0 +1,31 @@ +{ + "schemaVersion": 1, + "id": "litecommands", + "version": "3.3.4", + "name": "LiteCommands", + "description": "Annotation based command framework for Fabric.", + "authors": [ + "Rollczi", + "huanmeng_qwq" + ], + "contact": { + "homepage": "https://github.com/Rollczi/LiteCommands", + "issues": "https://github.com/Rollczi/LiteCommands/issues" + }, + "license": "Apache-2.0", + "icon": "assets/litecommands/icon.png", + "entrypoints": { + }, + "custom": { + "modmenu": { + "badges": [ + "library" + ] + } + }, + "depends": { + "fabricloader": ">=0.14.0", + "fabric-api-base": "*", + "fabric-command-api-v2": "*" + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 6b76cf156..03a803751 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -20,6 +20,7 @@ include(":litecommands-bukkit") include(":litecommands-minestom", JavaVersion.VERSION_17) include("litecommands-jda", JavaVersion.VERSION_17) include(":litecommands-sponge") +include(":litecommands-fabric", JavaVersion.VERSION_17) // examples include(":examples:bukkit") @@ -28,6 +29,7 @@ include(":examples:bukkit-chatgpt", JavaVersion.VERSION_11) include(":examples:minestom", JavaVersion.VERSION_17) include(":examples:velocity", JavaVersion.VERSION_11) include(":examples:sponge") +include(":examples:fabric", JavaVersion.VERSION_17) fun include(projectPath: String, version: JavaVersion) { if (!JavaVersion.current().isCompatibleWith(version)) { @@ -37,3 +39,13 @@ fun include(projectPath: String, version: JavaVersion) { include(projectPath) } + +if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17)) { + pluginManagement { + repositories { + maven("https://maven.fabricmc.net/") + mavenCentral() + gradlePluginPortal() + } + } +} \ No newline at end of file