From bfbdfd21996a6108b34a96bdadedc2bb5e6c3a4d Mon Sep 17 00:00:00 2001 From: database-mysql Date: Mon, 19 Oct 2026 12:56:12 +0800 Subject: [PATCH] feat: add /fly speed <0.1-2.0> command, rename admin command to /fly player , bump version to 1.1.0 --- README.md | 32 +++++++++-- build.gradle | 2 +- gradle.properties | 2 +- .../java/mods/openfly/Commands/fly.java | 57 +++++++++++++------ 4 files changed, 68 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 7bab461..8abe346 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ ## 功能特性 - 🕊️ **自由飞行** — 通过命令开启/关闭创造模式飞行能力 +- ⚡ **飞行速度调节** — 通过命令在 0.1–2.0 范围内自定义飞行速度 - 🛡️ **摔落保护** — 飞行状态下免疫摔落伤害 - 💾 **状态持久化** — 重新加入服务器时自动恢复飞行状态 - 👥 **多玩家支持** — 管理员可为其他玩家切换飞行状态 @@ -36,12 +37,23 @@ - 如果当前未飞行,执行后**开启飞行** - 如果当前正在飞行,执行后**关闭飞行** -### `/fly ` +### `/fly speed <0.1-2.0>` + +设置自己的飞行速度,范围为 0.1 到 2.0(默认 0.05)。所有玩家均可执行。 + +``` +/fly speed 1.5 +``` + +- 数值越大飞行越快,2.0 为允许的最大速度 +- 设置后立即生效,无需重新开启飞行 + +### `/fly player ` 切换指定玩家的飞行状态。需要 OP 权限(权限等级 2)。 ``` -/fly Steve +/fly player Steve ``` - 如果目标玩家未飞行,执行后**为其开启飞行** @@ -59,17 +71,25 @@ - **双击空格** — 切换飞行/普通状态 3. 再次输入 `/fly` 关闭飞行,回到普通模式 +### 飞行速度 + +使用 `/fly speed <数值>` 调整飞行速度(0.1–2.0): + +- `/fly speed 0.5` — 较慢的飞行速度 +- `/fly speed 1.0` — 中速 +- `/fly speed 2.0` — 最快速度 + ### 管理员操作 作为服务器管理员,你可以为其他玩家管理飞行权限: ``` -/fly <玩家名> +/fly player <玩家名> ``` 例如: -- `/fly Steve` — 为 Steve 开启飞行 -- `/fly Alex` — 关闭 Alex 的飞行 +- `/fly player Steve` — 为 Steve 开启飞行 +- `/fly player Alex` — 关闭 Alex 的飞行 ### 摔落保护 @@ -91,7 +111,7 @@ A: 不会。飞行状态下免疫所有摔落伤害,关闭飞行后恢复正 ### Q: 普通玩家可以使用 `/fly` 吗? -A: 可以。`/fly` 命令对所有玩家开放,无需 OP 权限。但 `/fly ` 需要 OP 权限。 +A: 可以。`/fly` 与 `/fly speed` 命令对所有玩家开放,无需 OP 权限。但 `/fly player ` 需要 OP 权限。 ### Q: 这个模组需要安装在客户端还是服务端? diff --git a/build.gradle b/build.gradle index f7c212b..adedac8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'net.fabricmc.fabric-loom-remap' version "${loom_version}" + id 'fabric-loom' version "${loom_version}" id 'maven-publish' } diff --git a/gradle.properties b/gradle.properties index ab521a0..af919fd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ loader_version=0.19.5 loom_version=1.18-SNAPSHOT # Mod Properties -version=1.0.0 +version=1.1.0 group=top.gtb520.java.mods.openfly # Dependencies diff --git a/src/main/java/top/gtb520/java/mods/openfly/Commands/fly.java b/src/main/java/top/gtb520/java/mods/openfly/Commands/fly.java index a512768..c0b2d86 100644 --- a/src/main/java/top/gtb520/java/mods/openfly/Commands/fly.java +++ b/src/main/java/top/gtb520/java/mods/openfly/Commands/fly.java @@ -1,6 +1,7 @@ package top.gtb520.java.mods.openfly.Commands; import com.mojang.brigadier.Command; +import com.mojang.brigadier.arguments.FloatArgumentType; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; import net.minecraft.command.argument.EntityArgumentType; @@ -17,6 +18,10 @@ public class fly { // 记录开启了飞行的玩家UUID private static final Set flyingPlayers = new HashSet<>(); + // 飞行速度范围(/fly speed 参数范围) + public static final float MIN_FLY_SPEED = 0.1F; + public static final float MAX_FLY_SPEED = 2.0F; + public static void register() { // 注册命令 CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { @@ -40,24 +45,42 @@ public class fly { } return Command.SINGLE_SUCCESS; }) - // /fly - 切换指定玩家的飞行状态(需要OP权限) - .then(CommandManager.argument("player", EntityArgumentType.player()) - .requires(source -> source.hasPermissionLevel(2)) - .executes(context -> { - ServerPlayerEntity targetPlayer = EntityArgumentType.getPlayer(context, "player"); - UUID playerId = targetPlayer.getUuid(); + // /fly speed <0.1-2.0> - 设置自己的飞行速度(所有玩家可用) + .then(CommandManager.literal("speed") + .then(CommandManager.argument("speed", FloatArgumentType.floatArg(MIN_FLY_SPEED, MAX_FLY_SPEED)) + .executes(context -> { + ServerPlayerEntity player = context.getSource().getPlayer(); + if (player == null) { + context.getSource().sendFeedback(() -> Text.literal("该命令只能由玩家执行"), false); + return 0; + } - if (flyingPlayers.contains(playerId)) { - disableFly(targetPlayer); - context.getSource().sendFeedback( - () -> Text.literal("已禁用玩家 " + targetPlayer.getName().getString() + " 的飞行"), true); - } else { - enableFly(targetPlayer); - context.getSource().sendFeedback( - () -> Text.literal("已启用玩家 " + targetPlayer.getName().getString() + " 的飞行"), true); - } - return Command.SINGLE_SUCCESS; - })) + float speed = FloatArgumentType.getFloat(context, "speed"); + player.getAbilities().setFlySpeed(speed); + player.sendAbilitiesUpdate(); + context.getSource().sendFeedback( + () -> Text.literal("飞行速度已设置为 " + String.format("%.2f", speed)), false); + return Command.SINGLE_SUCCESS; + }))) + // /fly player - 切换指定玩家的飞行状态(需要OP权限) + .then(CommandManager.literal("player") + .requires(source -> source.hasPermissionLevel(2)) + .then(CommandManager.argument("player", EntityArgumentType.player()) + .executes(context -> { + ServerPlayerEntity targetPlayer = EntityArgumentType.getPlayer(context, "player"); + UUID playerId = targetPlayer.getUuid(); + + if (flyingPlayers.contains(playerId)) { + disableFly(targetPlayer); + context.getSource().sendFeedback( + () -> Text.literal("已禁用玩家 " + targetPlayer.getName().getString() + " 的飞行"), true); + } else { + enableFly(targetPlayer); + context.getSource().sendFeedback( + () -> Text.literal("已启用玩家 " + targetPlayer.getName().getString() + " 的飞行"), true); + } + return Command.SINGLE_SUCCESS; + }))) ); });