From dca7fa256ed6f2cf99d4b8995b10d19beaf7bfcf Mon Sep 17 00:00:00 2001
From: TheWhiteDog9487 <60037547+TheWhiteDog9487@users.noreply.github.com>
Date: Sun, 5 Oct 2025 15:34:06 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E5=91=BD=E4=BB=A4=E5=8F=82=E6=95=B0?=
=?UTF-8?q?=E6=96=87=E6=9C=AC=E6=8A=BD=E7=A6=BB=E5=88=B0=E5=90=84=E4=B8=AA?=
=?UTF-8?q?=E6=96=87=E5=AD=97=E7=9A=84=E7=BF=BB=E8=AF=91=E6=96=87=E4=BB=B6?=
=?UTF-8?q?=E5=86=85=EF=BC=8C=E7=8E=B0=E5=9C=A8=E5=8F=AA=E4=BC=9A=E6=98=BE?=
=?UTF-8?q?=E7=A4=BA=E5=BD=93=E5=89=8D=E8=AF=AD=E8=A8=80=E7=9A=84=E6=8F=90?=
=?UTF-8?q?=E7=A4=BA=E6=96=87=E5=AD=97=E4=BA=86=20=E4=BD=86=E6=98=AF?=
=?UTF-8?q?=E5=8D=95=E4=BA=BA=E6=B8=B8=E6=88=8F=E5=86=85=E5=88=87=E6=8D=A2?=
=?UTF-8?q?=E8=AF=AD=E8=A8=80=E5=90=8E=E5=BF=85=E9=A1=BB=E9=87=8D=E8=BF=9B?=
=?UTF-8?q?=E4=B8=96=E7=95=8C=E6=89=8D=E8=83=BD=E5=AE=8C=E6=88=90=E6=B8=B8?=
=?UTF-8?q?=E6=88=8F=E5=86=85=E7=83=AD=E6=9B=B4=E6=96=B0=EF=BC=8C=E5=B9=B6?=
=?UTF-8?q?=E4=B8=94=E7=8B=AC=E7=AB=8B=E6=9C=8D=E5=8A=A1=E5=99=A8=E7=94=A8?=
=?UTF-8?q?=E4=B8=8D=E4=BA=86=E8=BF=99=E4=B8=AA=E7=89=B9=E6=80=A7=EF=BC=8C?=
=?UTF-8?q?=E5=BC=80=E6=94=BE=E5=B1=80=E5=9F=9F=E7=BD=91=E7=9A=84=E8=AF=9D?=
=?UTF-8?q?=E5=BA=94=E8=AF=A5=E6=98=AF=E8=B7=9F=E9=9A=8F=E4=B8=BB=E6=9C=BA?=
=?UTF-8?q?=E7=9A=84=E8=AF=AD=E8=A8=80=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
gradle.properties | 2 +-
.../xyz/thewhitedog9487/CommandRegister.java | 86 ++++++++++---------
.../xyz/thewhitedog9487/RandomTeleporter.java | 8 +-
.../ResourceReloaderListener.java | 34 ++++++++
.../assets/randomteleporter/lang/en_us.json | 6 +-
.../assets/randomteleporter/lang/zh_cn.json | 6 +-
6 files changed, 93 insertions(+), 49 deletions(-)
create mode 100644 src/main/java/xyz/thewhitedog9487/ResourceReloaderListener.java
diff --git a/gradle.properties b/gradle.properties
index 8dc1faf..acc23a8 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -9,7 +9,7 @@ yarn_mappings=1.21.9+build.1
loader_version=0.17.2
# Mod Properties
-mod_version=0.3.6
+mod_version=0.4.0
maven_group=xyz.thewhitedog9487
archives_base_name=RandomTeleporter
diff --git a/src/main/java/xyz/thewhitedog9487/CommandRegister.java b/src/main/java/xyz/thewhitedog9487/CommandRegister.java
index 2632946..c2fbf5a 100644
--- a/src/main/java/xyz/thewhitedog9487/CommandRegister.java
+++ b/src/main/java/xyz/thewhitedog9487/CommandRegister.java
@@ -24,6 +24,7 @@ import java.util.SplittableRandom;
import static net.minecraft.server.command.CommandManager.argument;
import static net.minecraft.server.command.CommandManager.literal;
import static net.minecraft.world.Heightmap.Type.MOTION_BLOCKING_NO_LEAVES;
+import static xyz.thewhitedog9487.ResourceReloaderListener.*;
public class CommandRegister {
@@ -77,6 +78,7 @@ public class CommandRegister {
* @see Fabric Wiki (Old style,English)
*/
public static void Register(String Name){
+
CommandRegistrationCallback.EVENT
.register((dispatcher, registryAccess, environment) ->{
dispatcher.register(literal(Name)
@@ -85,38 +87,38 @@ public class CommandRegister {
.executes(context -> ExecuteCommand(
context.getSource(),null,null, null))
// /rtp
- .then(argument("Radius(半径)", IntegerArgumentType.integer(0))
+ .then(argument(CommandArgumentName_Radius, IntegerArgumentType.integer(0))
.requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> ExecuteCommand(
context.getSource(),
- IntegerArgumentType.getInteger(context, "Radius(半径)"),
+ IntegerArgumentType.getInteger(context, CommandArgumentName_Radius),
null,
null)))
// /rtp <被传送玩家名(PlayerID)>
- .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
+ .then(argument(CommandArgumentName_Target, EntityArgumentType.entity())
.requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> ExecuteCommand(
context.getSource(),
null,
- EntityArgumentType.getEntity(context,"被传送玩家名(PlayerID)"),
+ EntityArgumentType.getEntity(context,CommandArgumentName_Target),
null)))
// /rtp <被传送玩家名(PlayerID)>
- .then(argument("Radius(半径)", IntegerArgumentType.integer(0))
- .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
+ .then(argument(CommandArgumentName_Radius, IntegerArgumentType.integer(0))
+ .then(argument(CommandArgumentName_Target, EntityArgumentType.entity())
.requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> ExecuteCommand(
context.getSource(),
- IntegerArgumentType.getInteger(context, "Radius(半径)"),
- EntityArgumentType.getEntity(context,"被传送玩家名(PlayerID)"),
+ IntegerArgumentType.getInteger(context, CommandArgumentName_Radius),
+ EntityArgumentType.getEntity(context,CommandArgumentName_Target),
null))))
// /rtp <被传送玩家名(PlayerID)>
- .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
- .then(argument("Radius(半径)", IntegerArgumentType.integer(0))
+ .then(argument(CommandArgumentName_Target, EntityArgumentType.entity())
+ .then(argument(CommandArgumentName_Radius, IntegerArgumentType.integer(0))
.requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> ExecuteCommand(
context.getSource(),
- IntegerArgumentType.getInteger(context, "Radius(半径)"),
- EntityArgumentType.getEntity(context,"被传送玩家名(PlayerID)"),
+ IntegerArgumentType.getInteger(context, CommandArgumentName_Radius),
+ EntityArgumentType.getEntity(context,CommandArgumentName_Target),
null))))
// // /rtp
// .then(argument("Radius(半径)", LongArgumentType.longArg())
@@ -128,56 +130,56 @@ public class CommandRegister {
// null,
// EntityArgumentType.getEntity(context,"Origin(随机中心)")))))
// /rtp
- .then(argument("Radius(半径)", IntegerArgumentType.integer(0))
- .then(argument("OriginPos(随机中心,坐标)",Vec2ArgumentType.vec2())
+ .then(argument(CommandArgumentName_Radius, IntegerArgumentType.integer(0))
+ .then(argument(CommandArgumentName_OriginPosition,Vec2ArgumentType.vec2())
.requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> ExecuteCommand(
context.getSource(),
- IntegerArgumentType.getInteger(context, "Radius(半径)"),
+ IntegerArgumentType.getInteger(context, CommandArgumentName_Radius),
null,
- Vec2ArgumentType.getVec2(context,"OriginPos(随机中心,坐标)")))))
+ Vec2ArgumentType.getVec2(context,CommandArgumentName_OriginPosition)))))
// /rtp <被传送玩家名(PlayerID)>
- .then(argument("Radius(半径)", IntegerArgumentType.integer(0))
- .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
- .then(argument("OriginEntity(随机中心,实体)",EntityArgumentType.entity())
+ .then(argument(CommandArgumentName_Radius, IntegerArgumentType.integer(0))
+ .then(argument(CommandArgumentName_Target, EntityArgumentType.entity())
+ .then(argument(CommandArgumentName_OriginEntity,EntityArgumentType.entity())
.requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> ExecuteCommand(
context.getSource(),
- IntegerArgumentType.getInteger(context, "Radius(半径)"),
- EntityArgumentType.getEntity(context,"被传送玩家名(PlayerID)"),
- new Vec2f( (float) EntityArgumentType.getEntity( context,"OriginEntity(随机中心,实体)").getEntityPos().x,
- (float) EntityArgumentType.getEntity( context,"OriginEntity(随机中心,实体)").getEntityPos().z ))))))
+ IntegerArgumentType.getInteger(context, CommandArgumentName_Radius),
+ EntityArgumentType.getEntity(context,CommandArgumentName_Target),
+ new Vec2f( (float) EntityArgumentType.getEntity( context,CommandArgumentName_OriginEntity).getEntityPos().x,
+ (float) EntityArgumentType.getEntity( context,CommandArgumentName_OriginEntity).getEntityPos().z ))))))
// /rtp <被传送玩家名(PlayerID)>
- .then(argument("Radius(半径)", IntegerArgumentType.integer(0))
- .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
- .then(argument("OriginPos(随机中心,坐标)",Vec2ArgumentType.vec2())
+ .then(argument(CommandArgumentName_Radius, IntegerArgumentType.integer(0))
+ .then(argument(CommandArgumentName_Target, EntityArgumentType.entity())
+ .then(argument(CommandArgumentName_OriginPosition,Vec2ArgumentType.vec2())
.requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> ExecuteCommand(
context.getSource(),
- IntegerArgumentType.getInteger(context, "Radius(半径)"),
- EntityArgumentType.getEntity(context,"被传送玩家名(PlayerID)"),
- Vec2ArgumentType.getVec2(context,"OriginPos(随机中心,坐标)"))))))
+ IntegerArgumentType.getInteger(context, CommandArgumentName_Radius),
+ EntityArgumentType.getEntity(context,CommandArgumentName_Target),
+ Vec2ArgumentType.getVec2(context,CommandArgumentName_OriginPosition))))))
// /rtp <被传送玩家名(PlayerID)>
- .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
- .then(argument("Radius(半径)", IntegerArgumentType.integer(0))
- .then(argument("OriginEntity(随机中心,实体)",EntityArgumentType.entity())
+ .then(argument(CommandArgumentName_Target, EntityArgumentType.entity())
+ .then(argument(CommandArgumentName_Radius, IntegerArgumentType.integer(0))
+ .then(argument(CommandArgumentName_OriginEntity,EntityArgumentType.entity())
.requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> ExecuteCommand(
context.getSource(),
- IntegerArgumentType.getInteger(context, "Radius(半径)"),
- EntityArgumentType.getEntity(context,"被传送玩家名(PlayerID)"),
- new Vec2f( (float) EntityArgumentType.getEntity( context,"OriginEntity(随机中心,实体)").getEntityPos().x,
- (float) EntityArgumentType.getEntity( context,"OriginEntity(随机中心,实体)").getEntityPos().z ))))))
+ IntegerArgumentType.getInteger(context, CommandArgumentName_Radius),
+ EntityArgumentType.getEntity(context,CommandArgumentName_Target),
+ new Vec2f( (float) EntityArgumentType.getEntity( context,CommandArgumentName_OriginEntity).getEntityPos().x,
+ (float) EntityArgumentType.getEntity( context,CommandArgumentName_OriginEntity).getEntityPos().z ))))))
// /rtp <被传送玩家名(PlayerID)>
- .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
- .then(argument("Radius(半径)", IntegerArgumentType.integer(0))
- .then(argument("OriginPos(随机中心,坐标)",Vec2ArgumentType.vec2())
+ .then(argument(CommandArgumentName_Target, EntityArgumentType.entity())
+ .then(argument(CommandArgumentName_Radius, IntegerArgumentType.integer(0))
+ .then(argument(CommandArgumentName_OriginPosition,Vec2ArgumentType.vec2())
.requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> ExecuteCommand(
context.getSource(),
- IntegerArgumentType.getInteger(context, "Radius(半径)"),
- EntityArgumentType.getEntity(context,"被传送玩家名(PlayerID)"),
- Vec2ArgumentType.getVec2(context,"OriginPos(随机中心,坐标)")))))) );});}
+ IntegerArgumentType.getInteger(context, CommandArgumentName_Radius),
+ EntityArgumentType.getEntity(context,CommandArgumentName_Target),
+ Vec2ArgumentType.getVec2(context,CommandArgumentName_OriginPosition)))))) );});}
/**
* 向游戏内注册命令
diff --git a/src/main/java/xyz/thewhitedog9487/RandomTeleporter.java b/src/main/java/xyz/thewhitedog9487/RandomTeleporter.java
index 572b774..3bf2d6b 100644
--- a/src/main/java/xyz/thewhitedog9487/RandomTeleporter.java
+++ b/src/main/java/xyz/thewhitedog9487/RandomTeleporter.java
@@ -9,17 +9,17 @@ public class RandomTeleporter implements ModInitializer {
// This logger is used to write text to the console and the log file.
// It is considered best practice to use your mod id as the logger's name.
// That way, it's clear which mod wrote info, warnings, and errors.
- public static final Logger LOGGER = LoggerFactory.getLogger("randomteleporter");
+ public static final String MOD_ID = "randomteleporter";
+ public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
@Override
public void onInitialize() {
// 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.
- LOGGER.info("RandomTeleporter Loading!");
+ ResourceReloaderListener.Register();
CommandRegister.Register();
-
- LOGGER.info("RandomTeleporter Loaded!");
+ LOGGER.info("RandomTeleporter已写入命令注册回调,目标命令将会在该注册的时候被注册");
}
}
\ No newline at end of file
diff --git a/src/main/java/xyz/thewhitedog9487/ResourceReloaderListener.java b/src/main/java/xyz/thewhitedog9487/ResourceReloaderListener.java
new file mode 100644
index 0000000..6375a23
--- /dev/null
+++ b/src/main/java/xyz/thewhitedog9487/ResourceReloaderListener.java
@@ -0,0 +1,34 @@
+package xyz.thewhitedog9487;
+
+import net.fabricmc.fabric.api.resource.v1.ResourceLoader;
+import net.fabricmc.fabric.api.resource.v1.reloader.SimpleResourceReloader;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+
+import static net.minecraft.resource.ResourceType.CLIENT_RESOURCES;
+import static xyz.thewhitedog9487.RandomTeleporter.MOD_ID;
+
+/**
+ * 在游戏资源重新加载之后刷新翻译文本
+ */
+public class ResourceReloaderListener {
+ public static String CommandArgumentName_Radius = "Radius(半径)";
+ public static String CommandArgumentName_Target = "被传送玩家名(PlayerID)";
+ public static String CommandArgumentName_OriginPosition = "OriginPos(随机中心,坐标)";
+ public static String CommandArgumentName_OriginEntity = "OriginEntity(随机中心,实体)";
+
+ public static void Register(){
+ ResourceLoader.get(CLIENT_RESOURCES).registerReloader(Identifier.of(MOD_ID, "translate_text_apply"), new SimpleResourceReloader() {
+ /**
+ * 用不到,不用管
+ */
+ @Override
+ protected Void prepare(Store store) {
+ return null; }
+
+ @Override
+ protected void apply(Void prepared, Store store) {
+ CommandArgumentName_Radius = Text.translatableWithFallback("command.argument.radius", "Radius(半径)").getString();
+ CommandArgumentName_Target = Text.translatableWithFallback("command.argument.target", "被传送玩家名(PlayerID)").getString();
+ CommandArgumentName_OriginPosition = Text.translatableWithFallback("command.argument.origin_pos", "OriginPos(随机中心,坐标)").getString();
+ CommandArgumentName_OriginEntity = Text.translatableWithFallback("command.argument.origin_entity", "OriginEntity(随机中心,实体)").getString(); } } ); } }
\ 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 6165f18..1f0e207 100644
--- a/src/main/resources/assets/randomteleporter/lang/en_us.json
+++ b/src/main/resources/assets/randomteleporter/lang/en_us.json
@@ -5,5 +5,9 @@
"error.no_target": "There is no teleported target, and the teleported player ID is explicitly specified when executed by a non-player object",
"warning.radius_equal_zero": "Warning: Since you set a random radius of 0, selecting the right height will teleport you directly to %d %d",
"warning.radius_equal_zero_no_target": "Warning: Since you set a random radius of 0 and you don't set a random center point coordinates, nothing happens",
- "bilibili": "Bilibili"
+ "bilibili": "Bilibili",
+ "command.argument.radius": "radius",
+ "command.argument.target": "teleported entity",
+ "command.argument.origin_pos": "origin(pos)",
+ "command.argument.origin_entity": "origin(entity)"
}
\ 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 6e912be..941aa5c 100644
--- a/src/main/resources/assets/randomteleporter/lang/zh_cn.json
+++ b/src/main/resources/assets/randomteleporter/lang/zh_cn.json
@@ -5,5 +5,9 @@
"error.no_target": "不存在被传送目标,由非玩家物体执行命令时请显式指定被传送玩家ID",
"warning.radius_equal_zero": "警告:由于你设置的随机半径为0,因此在选择出合适高度之后将直接把你传送至%d %d",
"warning.radius_equal_zero_no_target": "警告:由于你设置的随机半径为0,并且未设置随机中心点坐标,因此什么都不会发生",
- "bilibili": "TheWhiteDog9487的哔哩哔哩主页"
+ "bilibili": "TheWhiteDog9487的哔哩哔哩主页",
+ "command.argument.radius": "半径",
+ "command.argument.target": "被传送实体",
+ "command.argument.origin_pos": "随机中心(坐标)",
+ "command.argument.origin_entity": "随机中心(实体)"
}
\ No newline at end of file