突然发现Ved3d类型的方法里有一个计算两点间距离的,那我就把我自己的工具库撤了。
然后我把命令权限等级从4下降到了2,和原版的/tp同步。
(我记得原版的tp是4级啊?我最早还去源代码里看了一眼,咋回事呢?
传送过去生成的保护平台,现在是3x3的玻璃而不是1x1的石头,而且玩家会站在平台的正中心。
例行更新Fabric API和Fabric Loader
This commit is contained in:
TheWhiteDog9487 2024-02-18 20:39:47 +08:00
parent f8d36dd3d4
commit 8186159653
4 changed files with 28 additions and 33 deletions

View File

@ -15,14 +15,15 @@
## 命令示例 ## 命令示例
- /rtp - /rtp
将执行命令的玩家随机传送到以(0,0)为中心点2.9e7作为随机半径的范围内的随机一点 将执行命令的玩家随机传送到以(0,0)为中心点2.9e7 - 1e4作为随机半径的范围内的随机一点
2.9e+7 = 2.9 x 10^7 = 29000000 = 两千九百万 2.9e+7 = 2.9 x 10^7 = 29000000 = 两千九百万
1e4 = 10^4 = 10000 = 一万
- /rtp 1000 - /rtp 1000
将执行命令的玩家随机传送到以(0,0)为中心点1000作为随机半径的范围内的随机一点 将执行命令的玩家随机传送到以(0,0)为中心点1000作为随机半径的范围内的随机一点
- /rtp TheWhiteDog9487 - /rtp TheWhiteDog9487
将TheWhiteDog9487随机传送到以(0,0)为中心点2.9e7作为随机半径的范围内的随机一点 将TheWhiteDog9487随机传送到以(0,0)为中心点2.9e7 - 1e4作为随机半径的范围内的随机一点
- /rtp TheWhiteDog9487 1000 - /rtp TheWhiteDog9487 1000
将TheWhiteDog9487随机传送到以(0,0)为中心点1000作为随机半径的范围内的随机一点 将TheWhiteDog9487随机传送到以(0,0)为中心点1000作为随机半径的范围内的随机一点
@ -56,7 +57,7 @@
由于我使用了fabric.api.command.v2中的CommandRegistrationCallback.EVENT来向游戏注册命令所以这个模组需要依赖Fabric API 由于我使用了fabric.api.command.v2中的CommandRegistrationCallback.EVENT来向游戏注册命令所以这个模组需要依赖Fabric API
# 关于玩家权限 # 关于玩家权限
我参照原版的 /tp 命令,给 /rtp 设置了4级的权限要求。 我参照原版的 /tp 命令,给 /rtp 设置了2级的权限要求。
如果是原版或者类原版,你只需要让玩家有作弊的权限就可以用。 如果是原版或者类原版,你只需要让玩家有作弊的权限就可以用。
插件服务器方面那些具体的权限分配,因为我自己没玩过所以我也没法给出参考意见。 插件服务器方面那些具体的权限分配,因为我自己没玩过所以我也没法给出参考意见。
@ -80,4 +81,4 @@
- /随机传送 TheWhiteDog9487 1000 - /随机传送 TheWhiteDog9487 1000
这两个命令的效果没有任何差别 这两个命令的效果没有任何差别
玩家权限限制和 /rtp 当然也是一样的,都是4 玩家权限限制和 /rtp 当然也是一样的,都是2

View File

@ -6,15 +6,15 @@ org.gradle.parallel=true
# check these on https://fabricmc.net/develop # check these on https://fabricmc.net/develop
minecraft_version=1.20.4 minecraft_version=1.20.4
yarn_mappings=1.20.4+build.3 yarn_mappings=1.20.4+build.3
loader_version=0.15.6 loader_version=0.15.7
# Mod Properties # Mod Properties
mod_version=0.2.4 mod_version=0.2.5
maven_group=xyz.thewhitedog9487 maven_group=xyz.thewhitedog9487
archives_base_name=randomteleporter archives_base_name=randomteleporter
# Dependencies # 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_libraries_base=https://bmclapi2.bangbang93.com/maven/
loom_resources_base=https://bmclapi2.bangbang93.com/assets/ loom_resources_base=https://bmclapi2.bangbang93.com/assets/

View File

@ -16,17 +16,17 @@ import java.util.SplittableRandom;
import static net.minecraft.server.command.CommandManager.argument; import static net.minecraft.server.command.CommandManager.argument;
import static net.minecraft.server.command.CommandManager.literal; import static net.minecraft.server.command.CommandManager.literal;
import static xyz.thewhitedog9487.Toolbox.Distance;
public class CommandRegister { public class CommandRegister {
final static long WorldBorder = (long) 2.9e7; final static long WorldBorder = (long) 2.9e7;
static byte Retry = 0; static byte Retry = 0;
static byte PermissionLevel = 2;
public static void Register(String Name){ public static void Register(String Name){
// /rtp // /rtp
CommandRegistrationCallback.EVENT CommandRegistrationCallback.EVENT
.register((dispatcher, registryAccess, environment) ->{ .register((dispatcher, registryAccess, environment) ->{
dispatcher.register(literal(Name) dispatcher.register(literal(Name)
.requires(source -> source.hasPermissionLevel(4)) .requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> execute_command( .executes(context -> execute_command(
context.getSource(),null,null, null)));}); context.getSource(),null,null, null)));});
@ -35,7 +35,7 @@ public class CommandRegister {
.register((dispatcher, registryAccess, environment) -> { .register((dispatcher, registryAccess, environment) -> {
dispatcher.register(literal(Name) dispatcher.register(literal(Name)
.then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("Radius(半径)", LongArgumentType.longArg())
.requires(source -> source.hasPermissionLevel(4)) .requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> execute_command( .executes(context -> execute_command(
context.getSource(), context.getSource(),
LongArgumentType.getLong(context, "Radius(半径)"), LongArgumentType.getLong(context, "Radius(半径)"),
@ -47,7 +47,7 @@ public class CommandRegister {
.register((dispatcher, registryAccess, environment) -> { .register((dispatcher, registryAccess, environment) -> {
dispatcher.register(literal(Name) dispatcher.register(literal(Name)
.then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
.requires(source -> source.hasPermissionLevel(4)) .requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> execute_command( .executes(context -> execute_command(
context.getSource(), context.getSource(),
null, null,
@ -60,7 +60,7 @@ public class CommandRegister {
dispatcher.register(literal(Name) dispatcher.register(literal(Name)
.then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("Radius(半径)", LongArgumentType.longArg())
.then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
.requires(source -> source.hasPermissionLevel(4)) .requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> execute_command( .executes(context -> execute_command(
context.getSource(), context.getSource(),
LongArgumentType.getLong(context, "Radius(半径)"), LongArgumentType.getLong(context, "Radius(半径)"),
@ -73,7 +73,7 @@ public class CommandRegister {
dispatcher.register(literal(Name) dispatcher.register(literal(Name)
.then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
.then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("Radius(半径)", LongArgumentType.longArg())
.requires(source -> source.hasPermissionLevel(4)) .requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> execute_command( .executes(context -> execute_command(
context.getSource(), context.getSource(),
LongArgumentType.getLong(context, "Radius(半径)"), LongArgumentType.getLong(context, "Radius(半径)"),
@ -86,7 +86,7 @@ public class CommandRegister {
// dispatcher.register(literal(Name) // dispatcher.register(literal(Name)
// .then(argument("Radius(半径)", LongArgumentType.longArg()) // .then(argument("Radius(半径)", LongArgumentType.longArg())
// .then(argument("Origin(随机中心)",EntityArgumentType.player()) // .then(argument("Origin(随机中心)",EntityArgumentType.player())
// .requires(source -> source.hasPermissionLevel(4)) // .requires(source -> source.hasPermissionLevel(PermissionLevel))
// .executes(context -> execute_command_origin( // .executes(context -> execute_command_origin(
// context.getSource(), // context.getSource(),
// LongArgumentType.getLong(context, "Radius(半径)"), // LongArgumentType.getLong(context, "Radius(半径)"),
@ -98,7 +98,7 @@ public class CommandRegister {
dispatcher.register(literal(Name) dispatcher.register(literal(Name)
.then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("Radius(半径)", LongArgumentType.longArg())
.then(argument("OriginPos(随机中心,坐标)",Vec3ArgumentType.vec3()) .then(argument("OriginPos(随机中心,坐标)",Vec3ArgumentType.vec3())
.requires(source -> source.hasPermissionLevel(4)) .requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> execute_command( .executes(context -> execute_command(
context.getSource(), context.getSource(),
LongArgumentType.getLong(context, "Radius(半径)"), LongArgumentType.getLong(context, "Radius(半径)"),
@ -112,7 +112,7 @@ public class CommandRegister {
.then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("Radius(半径)", LongArgumentType.longArg())
.then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
.then(argument("OriginEntity(随机中心,实体)",EntityArgumentType.entity()) .then(argument("OriginEntity(随机中心,实体)",EntityArgumentType.entity())
.requires(source -> source.hasPermissionLevel(4)) .requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> execute_command_origin( .executes(context -> execute_command_origin(
context.getSource(), context.getSource(),
LongArgumentType.getLong(context, "Radius(半径)"), LongArgumentType.getLong(context, "Radius(半径)"),
@ -126,7 +126,7 @@ public class CommandRegister {
.then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("Radius(半径)", LongArgumentType.longArg())
.then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
.then(argument("OriginPos(随机中心,坐标)",Vec3ArgumentType.vec3()) .then(argument("OriginPos(随机中心,坐标)",Vec3ArgumentType.vec3())
.requires(source -> source.hasPermissionLevel(4)) .requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> execute_command( .executes(context -> execute_command(
context.getSource(), context.getSource(),
LongArgumentType.getLong(context, "Radius(半径)"), LongArgumentType.getLong(context, "Radius(半径)"),
@ -140,7 +140,7 @@ public class CommandRegister {
.then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
.then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("Radius(半径)", LongArgumentType.longArg())
.then(argument("OriginEntity(随机中心,实体)",EntityArgumentType.entity()) .then(argument("OriginEntity(随机中心,实体)",EntityArgumentType.entity())
.requires(source -> source.hasPermissionLevel(4)) .requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> execute_command_origin( .executes(context -> execute_command_origin(
context.getSource(), context.getSource(),
LongArgumentType.getLong(context, "Radius(半径)"), LongArgumentType.getLong(context, "Radius(半径)"),
@ -154,7 +154,7 @@ public class CommandRegister {
.then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity()) .then(argument("被传送玩家名(PlayerID)", EntityArgumentType.entity())
.then(argument("Radius(半径)", LongArgumentType.longArg()) .then(argument("Radius(半径)", LongArgumentType.longArg())
.then(argument("OriginPos(随机中心,坐标)",Vec3ArgumentType.vec3()) .then(argument("OriginPos(随机中心,坐标)",Vec3ArgumentType.vec3())
.requires(source -> source.hasPermissionLevel(4)) .requires(source -> source.hasPermissionLevel(PermissionLevel))
.executes(context -> execute_command( .executes(context -> execute_command(
context.getSource(), context.getSource(),
LongArgumentType.getLong(context, "Radius(半径)"), LongArgumentType.getLong(context, "Radius(半径)"),
@ -186,20 +186,24 @@ public class CommandRegister {
;Coordinate_Y--){} ;Coordinate_Y--){}
if (Blocks.WATER == Source.getWorld().getBlockState(new BlockPos(Math.toIntExact(Coordinate_X), Coordinate_Y, Math.toIntExact(Coordinate_Z))).getBlock() || 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()){ 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") ) { // 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++;}
Coordinate_Y++; Coordinate_Y++;
Vec3d Coordinate = new Vec3d(Coordinate_X, Coordinate_Y, Coordinate_Z); 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++; Retry++;
execute_command(Source, Radius,null, Origin); execute_command(Source, Radius,null, Origin);
return 0;} return 0;}
if (Retry >= 126){ if (Retry >= 126){
Source.sendFeedback(()->{ return Text.translatable("warning.twd.rtp.retry"); }, true);} 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; 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;} return 0;}
static int execute_command_origin(ServerCommandSource Source, @Nullable Long Radius, @Nullable Entity Player, Entity Origin){ static int execute_command_origin(ServerCommandSource Source, @Nullable Long Radius, @Nullable Entity Player, Entity Origin){
return execute_command(Source, Radius, Player, Origin.getPos());} return execute_command(Source, Radius, Player, Origin.getPos());}

View File

@ -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));}
}