突然发现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 3434b66c93
5 changed files with 38 additions and 41 deletions

View File

@ -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

View File

@ -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/

View File

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

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

View File

@ -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": "*"
},