diff --git a/README.md b/README.md
index 24f3cb6..c8317aa 100644
--- a/README.md
+++ b/README.md
@@ -71,9 +71,8 @@
1. 服务器需要安装
2. 客户端不需要
-**注意:情况2和3,虽然其他玩家不需要安装本模组就能使用功能。但是由于命令执行后的反馈结果文字使用了翻译,如果其他玩家没有安装模组会导致显示不正常,玩家会直接看到翻译键而不是对应的文字。
-因此,虽然可以但不建议其他人不安装。
-能安装的话还是都装一下吧。**
+**注意:情况2和3,如果其他玩家不安装本模组,他们看到的命令执行反馈就无法正确使用翻译,而在这种情况下默认显示中文文本。
+如果有查看多语言翻译文本的需求 ,那建议还是都装一下吧。**
# 一些小彩蛋
你可以使用 /随机传送 来替代 /rtp
diff --git a/build.gradle.kts b/build.gradle.kts
index 8532aeb..a56e42a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,5 +1,5 @@
plugins {
- id("fabric-loom") version "1.8-SNAPSHOT"
+ id("fabric-loom") version "1.9-SNAPSHOT"
id("maven-publish")
}
diff --git a/gradle.properties b/gradle.properties
index 24019ac..bec2381 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,21 +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=1.21.4
+yarn_mappings=1.21.4+build.1
+loader_version=0.16.9
# Mod Properties
-mod_version=0.3.4
+mod_version=0.3.5
maven_group=xyz.thewhitedog9487
archives_base_name=RandomTeleporter
# Dependencies
-fabric_version=0.106.1+1.21.3
+fabric_version=0.110.5+1.21.4
# https://modrinth.com/mod/modmenu/versions
# https://maven.terraformersmc.com/releases/com/terraformersmc/modmenu
-modmenu_version=12.0.0-beta.1
+modmenu_version=13.0.0-beta.1
# loom_libraries_base=https://bmclapi2.bangbang93.com/maven/
# loom_resources_base=https://bmclapi2.bangbang93.com/assets/
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 5fd121c..b6d150f 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-bin.zip
+distributionUrl=https://services.gradle.org/distributions/gradle-8.11.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/src/main/java/xyz/thewhitedog9487/CommandRegister.java b/src/main/java/xyz/thewhitedog9487/CommandRegister.java
index 8d6892c..01e8701 100644
--- a/src/main/java/xyz/thewhitedog9487/CommandRegister.java
+++ b/src/main/java/xyz/thewhitedog9487/CommandRegister.java
@@ -19,11 +19,30 @@ import static net.minecraft.server.command.CommandManager.argument;
import static net.minecraft.server.command.CommandManager.literal;
public class CommandRegister {
+
+ /**
+ * 世界边界
+ *
+ * @see Minecraft Wiki (中文)
+ * @see Minecraft Wiki (English)
+ */
final static Integer WorldBorder = (int) 2.9e7;
- // ↑
- // https://zh.minecraft.wiki/w/%E4%B8%96%E7%95%8C%E8%BE%B9%E7%95%8C#%E5%A4%A7%E5%B0%8F
- // https://minecraft.wiki/w/World_border#General_information
+
+ /**
+ * 执行命令所需权限等级
+ * @see net.minecraft.server.command.TeleportCommand
+ */
final static byte PermissionLevel = 2;
+
+ /**
+ * 使用Fabric API向游戏内注册命令
+ * @param Name 根命令名
+ *
+ * @see Fabric Wiki (新样式,中文)
+ * @see Fabric Wiki (旧样式,中文)
+ * @see Fabric Wiki (New style,English)
+ * @see Fabric Wiki (Old style,English)
+ */
public static void Register(String Name){
// /rtp
CommandRegistrationCallback.EVENT
@@ -95,6 +114,7 @@ public class CommandRegister {
// LongArgumentType.getLong(context, "Radius(半径)"),
// null,
// EntityArgumentType.getEntity(context,"Origin(随机中心)"))))));});
+
// /rtp
CommandRegistrationCallback.EVENT
.register((dispatcher, registryAccess, environment) -> {
@@ -121,7 +141,7 @@ public class CommandRegister {
IntegerArgumentType.getInteger(context, "Radius(半径)"),
EntityArgumentType.getEntity(context,"被传送玩家名(PlayerID)"),
new Vec2f( (float) EntityArgumentType.getEntity( context,"OriginEntity(随机中心,实体)").getPos().x,
- (float) EntityArgumentType.getEntity( context,"OriginEntity(随机中心,实体)").getPos().y )))))));});
+ (float) EntityArgumentType.getEntity( context,"OriginEntity(随机中心,实体)").getPos().z )))))));});
// /rtp <被传送玩家名(PlayerID)>
CommandRegistrationCallback.EVENT
@@ -150,7 +170,7 @@ public class CommandRegister {
IntegerArgumentType.getInteger(context, "Radius(半径)"),
EntityArgumentType.getEntity(context,"被传送玩家名(PlayerID)"),
new Vec2f( (float) EntityArgumentType.getEntity( context,"OriginEntity(随机中心,实体)").getPos().x,
- (float) EntityArgumentType.getEntity( context,"OriginEntity(随机中心,实体)").getPos().y )))))));});
+ (float) EntityArgumentType.getEntity( context,"OriginEntity(随机中心,实体)").getPos().z )))))));});
// /rtp <被传送玩家名(PlayerID)>
CommandRegistrationCallback.EVENT
@@ -166,13 +186,37 @@ public class CommandRegister {
EntityArgumentType.getEntity(context,"被传送玩家名(PlayerID)"),
Vec2ArgumentType.getVec2(context,"OriginPos(随机中心,坐标)")))))));});}
+ /**
+ * 向游戏内注册命令
+ *
+ * 是 {@link CommandRegister#Register(String)} 的包装器
+ * @see CommandRegister#Register(String)
+ */
public static void Register(){
Register("随机传送");
- Register("rtp");}
+ Register("rtp");
+ }
+
+ /**
+ *
+ * @param Source 命令执行者
+ * @param Radius 随机选择的目的坐标距离参数 {@code Origin} 的最大距离
+ * @param Player 被传送的玩家
+ * @param Origin 随机选择的目的坐标的中心
+ * @return 命令运行是否成功
+ */
static int execute_command(ServerCommandSource Source, @Nullable Integer Radius, @Nullable Entity Player, @Nullable Vec2f Origin){
Entity entity = Player == null ? Source.getPlayer() : Player;
+ /*
+ ↑
+ Entity entity = null;
+ if (Player == null){
+ entity = Source.getPlayer();}
+ else{
+ entity = Player;}
+ */
if (entity == null) {
- Source.sendFeedback(()->{ return Text.translatable("error.not_player"); }, true);
+ Source.sendFeedback(()->{ return Text.translatableWithFallback("error.no_target","不存在被传送目标,由非玩家物体执行命令时请显式指定被传送玩家ID"); }, true);
return -1;}
if (Radius == null){Radius = (int) (WorldBorder - 1e4);}
// ↑ 远离世界边界
@@ -211,6 +255,8 @@ public class CommandRegister {
// ↑ 高一层,人别站在土里了
entity.teleport(Source.getWorld(),Coordinate_X + 0.5, Coordinate_Y, Coordinate_Z + 0.5, new HashSet<>(), entity.getYaw(), entity.getPitch(), false);
int finalCoordinate_Y = Coordinate_Y;
- Source.sendFeedback(()->{ return Text.translatable("info.success", entity.getName(), Coordinate_X, finalCoordinate_Y, Coordinate_Z); },true);
- return 0;}
+ // ↑ "lambda 表达式中使用的变量应为 final 或有效 final"
+ final var FeedbackFallbackString = String.format("已将玩家%s传送到%d %d %d", entity.getName().getString(), Coordinate_X, finalCoordinate_Y, Coordinate_Z);
+ Source.sendFeedback(()->{ return Text.translatableWithFallback("info.success", FeedbackFallbackString, entity.getName(), Coordinate_X, finalCoordinate_Y, Coordinate_Z); },true);
+ return 16;}
}
\ No newline at end of file
diff --git a/src/main/java/xyz/thewhitedog9487/RandomTeleporter.java b/src/main/java/xyz/thewhitedog9487/RandomTeleporter.java
index 1dca3d3..572b774 100644
--- a/src/main/java/xyz/thewhitedog9487/RandomTeleporter.java
+++ b/src/main/java/xyz/thewhitedog9487/RandomTeleporter.java
@@ -16,7 +16,10 @@ public class RandomTeleporter implements ModInitializer {
// This code runs as soon as Minecraft is in a mod-load-ready state.
// However, some things (like resources) may still be uninitialized.
// Proceed with mild caution.
- CommandRegister.Register();
LOGGER.info("RandomTeleporter Loading!");
+
+ CommandRegister.Register();
+
+ LOGGER.info("RandomTeleporter Loaded!");
}
}
\ No newline at end of file
diff --git a/src/main/resources/assets/randomteleporter/lang/en_us.json b/src/main/resources/assets/randomteleporter/lang/en_us.json
index 0abd4b5..ff5ae8a 100644
--- a/src/main/resources/assets/randomteleporter/lang/en_us.json
+++ b/src/main/resources/assets/randomteleporter/lang/en_us.json
@@ -1,6 +1,7 @@
{
"modmenu.nameTranslation.randomteleporter": "RandomTeleporter",
"modmenu.descriptionTranslation.randomteleporter": "Added two commands for random teleportation",
- "bilibili": "Bilibili",
- "blog": "Blog"
+ "info.success": "Teleported %s to %d %d %d",
+ "error.no_target": "There is no teleported target, and the teleported player ID is explicitly specified when executed by a non-player object",
+ "bilibili": "Bilibili"
}
\ No newline at end of file
diff --git a/src/main/resources/assets/randomteleporter/lang/zh_cn.json b/src/main/resources/assets/randomteleporter/lang/zh_cn.json
index ccd77ac..df31470 100644
--- a/src/main/resources/assets/randomteleporter/lang/zh_cn.json
+++ b/src/main/resources/assets/randomteleporter/lang/zh_cn.json
@@ -2,7 +2,6 @@
"modmenu.nameTranslation.randomteleporter": "随机传送",
"modmenu.descriptionTranslation.randomteleporter": "增加了两个用于随机传送的命令",
"info.success": "已将玩家%s传送到%d %d %d",
- "error.not_player": "执行命令的不是玩家",
- "bilibili": "TheWhiteDog9487的哔哩哔哩主页",
- "blog": "TheWhiteDog9487的博客"
+ "error.no_target": "不存在被传送目标,由非玩家物体执行命令时请显式指定被传送玩家ID",
+ "bilibili": "TheWhiteDog9487的哔哩哔哩主页"
}
\ No newline at end of file
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index 74017ae..be1174c 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -27,10 +27,10 @@
}
],
"depends": {
- "fabricloader": ">=0.16.7",
- "minecraft": "1.21.3",
+ "fabricloader": ">=0.16.9",
+ "minecraft": "1.21.4",
"java": ">=21",
- "fabric-api": "*"
+ "fabric-api": ">=0.110.5"
},
"suggests": {
"another-mod": "*"
@@ -38,7 +38,6 @@
"custom": {
"modmenu": {
"links": {
- "bilibili": "https://space.bilibili.com/401746666",
- "blog": "www.thewhitedog9487.xyz"},
+ "bilibili": "https://space.bilibili.com/401746666"},
"update_checker": true}}
}
\ No newline at end of file