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