mirror of
				https://github.com/TheWhiteDog9487/RandomTeleporter.git
				synced 2025-11-05 00:05:03 +08:00 
			
		
		
		
	0.2.5
突然发现Ved3d类型的方法里有一个计算两点间距离的,那我就把我自己的工具库撤了。 然后我把命令权限等级从4下降到了2,和原版的/tp同步。 (我记得原版的tp是4级啊?我最早还去源代码里看了一眼,咋回事呢? 传送过去生成的保护平台,现在是3x3的玻璃而不是1x1的石头,而且玩家会站在平台的正中心。 例行更新Fabric API和Fabric Loader
This commit is contained in:
		@@ -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级
 | 
			
		||||
玩家权限限制和 /rtp 当然也是一样的,都是2级
 | 
			
		||||
@@ -6,15 +6,15 @@ org.gradle.parallel=true
 | 
			
		||||
# check these on https://fabricmc.net/develop
 | 
			
		||||
minecraft_version=1.20.4
 | 
			
		||||
yarn_mappings=1.20.4+build.3
 | 
			
		||||
loader_version=0.15.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.96.1+1.20.4
 | 
			
		||||
 | 
			
		||||
loom_libraries_base=https://bmclapi2.bangbang93.com/maven/
 | 
			
		||||
loom_resources_base=https://bmclapi2.bangbang93.com/assets/
 | 
			
		||||
 
 | 
			
		||||
@@ -16,17 +16,17 @@ 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;
 | 
			
		||||
    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 +35,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 +47,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 +60,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 +73,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 +86,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 +98,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 +112,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 +126,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 +140,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 +154,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(半径)"),
 | 
			
		||||
@@ -186,20 +186,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 == WorldBorder && 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);
 | 
			
		||||
        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(()->{ return  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());}
 | 
			
		||||
 
 | 
			
		||||
@@ -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));}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user