diff --git a/README.md b/README.md index 86b6903..519f0a9 100644 --- a/README.md +++ b/README.md @@ -15,14 +15,15 @@ ## 命令示例 - /rtp -将执行命令的玩家随机传送到以(0,0)为中心点,2.9e7作为随机半径的范围内的随机一点 +将执行命令的玩家随机传送到以(0,0)为中心点,2.9e7 - 1e4作为随机半径的范围内的随机一点 2.9e+7 = 2.9 x 10^7 = 29000000 = 两千九百万 +1e4 = 10^4 = 10000 = 一万 - /rtp 1000 将执行命令的玩家随机传送到以(0,0)为中心点,1000作为随机半径的范围内的随机一点 - /rtp TheWhiteDog9487 -将TheWhiteDog9487随机传送到以(0,0)为中心点,2.9e7作为随机半径的范围内的随机一点 +将TheWhiteDog9487随机传送到以(0,0)为中心点,2.9e7 - 1e4作为随机半径的范围内的随机一点 - /rtp TheWhiteDog9487 1000 将TheWhiteDog9487随机传送到以(0,0)为中心点,1000作为随机半径的范围内的随机一点 @@ -56,7 +57,7 @@ 由于我使用了fabric.api.command.v2中的CommandRegistrationCallback.EVENT来向游戏注册命令,所以这个模组需要依赖Fabric API # 关于玩家权限 -我参照原版的 /tp 命令,给 /rtp 设置了4级的权限要求。 +我参照原版的 /tp 命令,给 /rtp 设置了2级的权限要求。 如果是原版或者类原版,你只需要让玩家有作弊的权限就可以用。 插件服务器方面那些具体的权限分配,因为我自己没玩过所以我也没法给出参考意见。 @@ -80,4 +81,4 @@ - /随机传送 TheWhiteDog9487 1000 这两个命令的效果没有任何差别 -玩家权限限制和 /rtp 当然也是一样的,都是4级 \ No newline at end of file +玩家权限限制和 /rtp 当然也是一样的,都是2级 \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 0915104..4adc7ef 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,17 +4,17 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.20.4 -yarn_mappings=1.20.4+build.3 -loader_version=0.15.6 +minecraft_version=1.19.1 +yarn_mappings=1.19.1+build.6 +loader_version=0.15.7 # Mod Properties -mod_version=0.2.4 +mod_version=0.2.5 maven_group=xyz.thewhitedog9487 archives_base_name=randomteleporter # Dependencies -fabric_version=0.95.4+1.20.4 +fabric_version=0.58.5+1.19.1 loom_libraries_base=https://bmclapi2.bangbang93.com/maven/ loom_resources_base=https://bmclapi2.bangbang93.com/assets/ diff --git a/src/main/java/xyz/thewhitedog9487/CommandRegister.java b/src/main/java/xyz/thewhitedog9487/CommandRegister.java index 8a934dc..2ccfe30 100644 --- a/src/main/java/xyz/thewhitedog9487/CommandRegister.java +++ b/src/main/java/xyz/thewhitedog9487/CommandRegister.java @@ -16,17 +16,19 @@ import java.util.SplittableRandom; import static net.minecraft.server.command.CommandManager.argument; import static net.minecraft.server.command.CommandManager.literal; -import static xyz.thewhitedog9487.Toolbox.Distance; public class CommandRegister { - final static long WorldBorder = (long) 2.9e7; + // https://zh.minecraft.wiki/w/%E4%B8%96%E7%95%8C%E7%95%8C%E9%99%90 + // https://minecraft.wiki/w/World_boundary + final static long WorldBoundary = (long) 2.9e7; static byte Retry = 0; + static byte PermissionLevel = 2; public static void Register(String Name){ // /rtp CommandRegistrationCallback.EVENT .register((dispatcher, registryAccess, environment) ->{ dispatcher.register(literal(Name) - .requires(source -> source.hasPermissionLevel(4)) + .requires(source -> source.hasPermissionLevel(PermissionLevel)) .executes(context -> execute_command( context.getSource(),null,null, null)));}); @@ -35,7 +37,7 @@ public class CommandRegister { .register((dispatcher, registryAccess, environment) -> { dispatcher.register(literal(Name) .then(argument("Radius(半径)", LongArgumentType.longArg()) - .requires(source -> source.hasPermissionLevel(4)) + .requires(source -> source.hasPermissionLevel(PermissionLevel)) .executes(context -> execute_command( context.getSource(), LongArgumentType.getLong(context, "Radius(半径)"), @@ -47,7 +49,7 @@ public class CommandRegister { .register((dispatcher, registryAccess, environment) -> { dispatcher.register(literal(Name) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) - .requires(source -> source.hasPermissionLevel(4)) + .requires(source -> source.hasPermissionLevel(PermissionLevel)) .executes(context -> execute_command( context.getSource(), null, @@ -60,7 +62,7 @@ public class CommandRegister { dispatcher.register(literal(Name) .then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) - .requires(source -> source.hasPermissionLevel(4)) + .requires(source -> source.hasPermissionLevel(PermissionLevel)) .executes(context -> execute_command( context.getSource(), LongArgumentType.getLong(context, "Radius(半径)"), @@ -73,7 +75,7 @@ public class CommandRegister { dispatcher.register(literal(Name) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("Radius(半径)", LongArgumentType.longArg()) - .requires(source -> source.hasPermissionLevel(4)) + .requires(source -> source.hasPermissionLevel(PermissionLevel)) .executes(context -> execute_command( context.getSource(), LongArgumentType.getLong(context, "Radius(半径)"), @@ -86,7 +88,7 @@ public class CommandRegister { // dispatcher.register(literal(Name) // .then(argument("Radius(半径)", LongArgumentType.longArg()) // .then(argument("Origin(随机中心)",EntityArgumentType.player()) -// .requires(source -> source.hasPermissionLevel(4)) +// .requires(source -> source.hasPermissionLevel(PermissionLevel)) // .executes(context -> execute_command_origin( // context.getSource(), // LongArgumentType.getLong(context, "Radius(半径)"), @@ -98,7 +100,7 @@ public class CommandRegister { dispatcher.register(literal(Name) .then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("OriginPos(随机中心,坐标)",Vec3ArgumentType.vec3()) - .requires(source -> source.hasPermissionLevel(4)) + .requires(source -> source.hasPermissionLevel(PermissionLevel)) .executes(context -> execute_command( context.getSource(), LongArgumentType.getLong(context, "Radius(半径)"), @@ -112,7 +114,7 @@ public class CommandRegister { .then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("OriginEntity(随机中心,实体)",EntityArgumentType.entity()) - .requires(source -> source.hasPermissionLevel(4)) + .requires(source -> source.hasPermissionLevel(PermissionLevel)) .executes(context -> execute_command_origin( context.getSource(), LongArgumentType.getLong(context, "Radius(半径)"), @@ -126,7 +128,7 @@ public class CommandRegister { .then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("OriginPos(随机中心,坐标)",Vec3ArgumentType.vec3()) - .requires(source -> source.hasPermissionLevel(4)) + .requires(source -> source.hasPermissionLevel(PermissionLevel)) .executes(context -> execute_command( context.getSource(), LongArgumentType.getLong(context, "Radius(半径)"), @@ -140,7 +142,7 @@ public class CommandRegister { .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("OriginEntity(随机中心,实体)",EntityArgumentType.entity()) - .requires(source -> source.hasPermissionLevel(4)) + .requires(source -> source.hasPermissionLevel(PermissionLevel)) .executes(context -> execute_command_origin( context.getSource(), LongArgumentType.getLong(context, "Radius(半径)"), @@ -154,7 +156,7 @@ public class CommandRegister { .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("OriginPos(随机中心,坐标)",Vec3ArgumentType.vec3()) - .requires(source -> source.hasPermissionLevel(4)) + .requires(source -> source.hasPermissionLevel(PermissionLevel)) .executes(context -> execute_command( context.getSource(), LongArgumentType.getLong(context, "Radius(半径)"), @@ -166,9 +168,9 @@ public class CommandRegister { static int execute_command(ServerCommandSource Source, @Nullable Long Radius, @Nullable Entity Player, @Nullable Vec3d Origin){ Entity entity = Player == null ? Source.getPlayer() : Player; if (entity == null) { - Source.sendFeedback(()->{ return Text.translatable("error.twd.rtp.not_player"); }, true); + Source.sendFeedback(Text.translatable("error.twd.rtp.not_player"), true); return -1;} - if (Radius == null){Radius = WorldBorder - (long) 1e4;} + if (Radius == null){Radius = WorldBoundary - (long) 1e4;} Radius = Math.abs(Radius); long Coordinate_X; long Coordinate_Z; @@ -186,20 +188,24 @@ public class CommandRegister { ;Coordinate_Y--){} if (Blocks.WATER == Source.getWorld().getBlockState(new BlockPos(Math.toIntExact(Coordinate_X), Coordinate_Y, Math.toIntExact(Coordinate_Z))).getBlock() || Blocks.LAVA == Source.getWorld().getBlockState(new BlockPos(Math.toIntExact(Coordinate_X), Coordinate_Y, Math.toIntExact(Coordinate_Z))).getBlock()){ - Source.getWorld().setBlockState(new BlockPos(Math.toIntExact(Coordinate_X), Coordinate_Y, Math.toIntExact(Coordinate_Z)), Blocks.STONE.getDefaultState());} + for (int x = -1; x <= 1; x++) { + for (int z = -1; z <= 1; z++) { + Source.getWorld().setBlockState(new BlockPos(Math.toIntExact(Coordinate_X - x), Coordinate_Y, Math.toIntExact(Coordinate_Z - z)), Blocks.GLASS.getDefaultState());}}} // if ( String.valueOf(entity.getWorld().getBiome(new BlockPos(Math.toIntExact(Coordinate_X), Coordinate_Y, Math.toIntExact(Coordinate_Z))).getKey()).equals("minecraft:the_void") ) { // Coordinate_Y++;} Coordinate_Y++; Vec3d Coordinate = new Vec3d(Coordinate_X, Coordinate_Y, Coordinate_Z); - if (Radius == WorldBorder && Retry < 126 && Distance(entity.getPos(), Coordinate) < 1e5){ + if (Radius == WorldBoundary && Retry < 126 && entity.getPos().distanceTo(Coordinate) < 1e5){ Retry++; execute_command(Source, Radius,null, Origin); return 0;} if (Retry >= 126){ - Source.sendFeedback(()->{ return Text.translatable("warning.twd.rtp.retry"); }, true);} - entity.teleport(Coordinate_X, Coordinate_Y, Coordinate_Z); + Source.sendFeedback(Text.translatable("warning.twd.rtp.retry"), true);} + entity.teleport(Coordinate_X + 0.5, Coordinate_Y, Coordinate_Z + 0.5); + final long FinalCoordinate_X = Coordinate_X; final int FinalCoordinate_Y = Coordinate_Y; - Source.sendFeedback(()->{ return Text.translatable("info.twd.rtp.success", entity.getName(), Coordinate_X, FinalCoordinate_Y, Coordinate_Z); },true); + final long FinalCoordinate_Z = Coordinate_Z; + Source.sendFeedback(Text.translatable("info.twd.rtp.success", entity.getName(), FinalCoordinate_X, FinalCoordinate_Y, FinalCoordinate_Z),true); return 0;} static int execute_command_origin(ServerCommandSource Source, @Nullable Long Radius, @Nullable Entity Player, Entity Origin){ return execute_command(Source, Radius, Player, Origin.getPos());} diff --git a/src/main/java/xyz/thewhitedog9487/Toolbox.java b/src/main/java/xyz/thewhitedog9487/Toolbox.java deleted file mode 100644 index 615d658..0000000 --- a/src/main/java/xyz/thewhitedog9487/Toolbox.java +++ /dev/null @@ -1,10 +0,0 @@ -package xyz.thewhitedog9487; - -import net.minecraft.util.math.Vec3d; - -public class Toolbox { - static public double Distance(Vec3d A, Vec3d B){ - return Math.sqrt( - Math.pow(A.getX() - B.getX(), 2) + - Math.pow(A.getY() - B.getY(), 2));} -} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 9a2510a..eb86982 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -27,8 +27,8 @@ } ], "depends": { - "fabricloader": ">=0.15.6", - "minecraft": "~1.20.4", + "fabricloader": ">=0.15.7", + "minecraft": "~1.19.1", "java": ">=17", "fabric-api": "*" },