支持通过对角线坐标设置随机坐标选取范围
远离边界这个保护的实现有问题,然后地狱末地什么玩意的也不对,重试机制也不存在,这些之后再鸽
This commit is contained in:
TheWhiteDog9487
2026-02-11 18:12:06 +08:00
parent a0a6e1c35d
commit 8b03098280
6 changed files with 209 additions and 79 deletions

View File

@@ -1,61 +1,84 @@
# 介绍
这个模组增加了一个命令(/rtp),用于将玩家随机传送到世界的任何一个位置。
这个模组增加了一个命令 `/rtp`,用于将玩家随机传送到世界的任何一个位置。
# 命令格式
- /rtp
- /rtp <Radius(半径)>
- /rtp <PlayerID(被传送玩家名)>
- /rtp <Radius(半径)> <PlayerID(被传送玩家名)>
- /rtp <PlayerID(被传送玩家名)> <Radius(半径)>
- /rtp <Radius(半径)> <OriginPos(随机中心坐标)>
- /rtp <Radius(半径)> <PlayerID(被传送玩家名)> <OriginEntity(随机中心实体)>
- /rtp <Radius(半径)> <PlayerID(被传送玩家名)> <OriginPos(随机中心坐标)>
- /rtp <PlayerID(被传送玩家名)> <Radius(半径)> <OriginEntity(随机中心实体)>
- /rtp <PlayerID(被传送玩家名)> <Radius(半径)> <OriginPos(随机中心坐标)>
- `/rtp`
- `/rtp <随机半径>`
- `/rtp <被传送玩家ID>`
- `/rtp <随机半径> <被传送玩家ID>`
- `/rtp <被传送玩家ID> <随机半径>`
- `/rtp <随机半径> <随机中心坐标>`
- `/rtp <随机半径> <被传送玩家ID> <作为随机中心实体>`
- `/rtp <随机半径> <被传送玩家ID> <随机中心坐标>`
- `/rtp <被传送玩家ID> <随机半径> <作为随机中心实体>`
- `/rtp <被传送玩家ID> <随机半径> <随机中心坐标>`
- `/rtp <随机区域起点坐标> <随机区域终点坐标>`
- `/rtp <被传送玩家ID> <随机区域起点坐标> <随机区域终点坐标>`
- `/rtp <随机区域起点坐标> <随机区域终点坐标> <被传送玩家ID>`
- `/rtp <随机区域起点实体> <随机区域终点实体>`
- `/rtp <随机区域起点实体> <随机区域终点实体> <被传送玩家ID>`
## 命令示例
- /rtp
将执行命令的玩家随机传送到以(0,0)为中心点2.9e7 - 1e4作为随机半径的范围内的随机一点
- `/rtp`
将执行命令的玩家随机传送到以`(0,0)`为中心点2.9e7 - 1e4作为随机半径的范围内的随机一点
2.9e+7 = 2.9 x 10^7 = 29000000 = 两千九百万
1e4 = 10^4 = 10000 = 一万
- /rtp 1000
将执行命令的玩家随机传送到以(0,0)为中心点1000作为随机半径的范围内的随机一点
- `/rtp 1000`
将执行命令的玩家随机传送到以`(0,0)`为中心点1000作为随机半径的范围内的随机一点
- /rtp TheWhiteDog9487
将TheWhiteDog9487随机传送到以(0,0)为中心点2.9e7 - 1e4作为随机半径的范围内的随机一点
- `/rtp TheWhiteDog9487`
将TheWhiteDog9487随机传送到以`(0,0)`为中心点2.9e7 - 1e4作为随机半径的范围内的随机一点
- /rtp TheWhiteDog9487 1000
将TheWhiteDog9487随机传送到以(0,0)为中心点1000作为随机半径的范围内的随机一点
- `/rtp TheWhiteDog9487 1000`
将TheWhiteDog9487随机传送到以`(0,0)`为中心点1000作为随机半径的范围内的随机一点
- /rtp 1000 TheWhiteDog9487
将TheWhiteDog9487随机传送到以(0,0)为中心点1000作为随机半径的范围内的随机一点
- `/rtp 1000 TheWhiteDog9487`
将TheWhiteDog9487随机传送到以`(0,0)`为中心点1000作为随机半径的范围内的随机一点
- /rtp 1000 10000 10000
将执行命令的玩家随机传送到以(10000,10000)为中心点1000作为随机半径的范围内的随机一点
- `/rtp 1000 10000 10000`
将执行命令的玩家随机传送到以`(10000,10000)`为中心点1000作为随机半径的范围内的随机一点
- /rtp 1000 TheWhiteDog9487 TheWhiteDog_CN
- `/rtp 1000 TheWhiteDog9487 TheWhiteDog_CN`
将TheWhiteDog9487随机传送到以TheWhiteDog_CN所在位置为中心点1000作为随机半径的范围内的随机一点
- /rtp 1000 TheWhiteDog9487 10000 10000
将TheWhiteDog9487随机传送到以(10000,10000)为中心点1000作为随机半径的范围内的随机一点
- `/rtp 1000 TheWhiteDog9487 10000 10000`
将TheWhiteDog9487随机传送到以`(10000,10000)`为中心点1000作为随机半径的范围内的随机一点
- /rtp TheWhiteDog9487 1000 TheWhiteDog_CN
- `/rtp TheWhiteDog9487 1000 TheWhiteDog_CN`
将TheWhiteDog9487随机传送到以TheWhiteDog_CN所在位置为中心点1000作为随机半径的范围内的随机一点
- /rtp TheWhiteDog9487 1000 10000 10000
将TheWhiteDog9487随机传送到以(10000,10000)为中心点1000作为随机半径的范围内的随机一点
- `/rtp TheWhiteDog9487 1000 10000 10000`
将TheWhiteDog9487随机传送到以`(10000,10000)`为中心点1000作为随机半径的范围内的随机一点
- `/rtp 10000 10000 20000 20000`
将执行命令的玩家随机传送到以`(10000,10000)`,`(20000,10000)`,`(20000,20000)`,`(10000,20000)`四个顶点围成的长方形区域内的随机一点
您需要提供的坐标是这个长方形的任意一个顶点和这个顶点对应的斜对角顶点的位置
- `/rtp TheWhiteDog9487 10000 10000 20000 20000`
将TheWhiteDog9487随机传送到以`(10000,10000)`,`(20000,10000)`,`(20000,20000)`,`(10000,20000)`四个顶点围成的长方形区域内的随机一点
- `/rtp 10000 10000 20000 20000 TheWhiteDog9487`
将TheWhiteDog9487随机传送到以`(10000,10000)`,`(20000,10000)`,`(20000,20000)`,`(10000,20000)`四个顶点围成的长方形区域内的随机一点
- `/rtp TheWhiteDog9487 TheWhiteDog_CN`
将命令执行者传送到以TheWhiteDog9487和TheWhiteDog_CN当前所在位置为对角线的长方形区域内的随机一点
- `/rtp TheWhiteDog9487 TheWhiteDog_CN TheWhiteDog4568`
将TheWhiteDog4568随机传送到以TheWhiteDog9487和TheWhiteDog_CN当前所在位置为对角线的长方形区域内的随机一点
### 特别提示
/rtp <Radius(半径)> <Origin(随机中心实体)> 这种格式不存在。
`/rtp <随机半径> <作为随机中心实体>` 这种格式不存在。
因为第二个参数可能是被传送玩家名,也可能是做随机中心点的实体。
这两种都是实体类型,无法区分到底是哪一种,存在歧义。
同样,`/rtp <被传送玩家ID> <随机区域起点实体> <随机区域终点实体>` 这一组也是不存在的
三个参数都是实体类型,没办法区分`被传送玩家ID`是第一个还是第三个
# 依赖项
由于我使用了fabric.api.command.v2中的CommandRegistrationCallback.EVENT来向游戏注册命令所以这个模组需要依赖Fabric API
Fabric API
# 关于玩家权限
我参照原版的 /tp 命令,给 /rtp 设置了2级的权限要求。
我参照原版的 `/tp` 命令,给 `/rtp` 设置了2级的权限要求。
如果是原版或者类原版,你只需要让玩家有作弊的权限就可以用。
插件服务器方面那些具体的权限分配,因为我自己没玩过所以我也没法给出参考意见。
@@ -67,7 +90,7 @@
2. 单人游戏 + 开放局域网
1. 使用客户端内置的服务器,开放局域网的那位玩家的客户端需要安装
2. 其他加入游戏的玩家不需要安装
3. 使用独立服务器类似server.jar这种文件
3. 使用独立服务器(类似`server.jar`这种文件)
1. 服务器需要安装
2. 客户端不需要
@@ -75,11 +98,11 @@
如果有查看多语言翻译文本的需求 ,那建议还是都装一下吧。**
# 一些小彩蛋
你可以使用 /随机传送 来替代 /rtp
你可以使用 `/随机传送` 来替代 `/rtp`
没错Minecraft的命令是可以存在非ASCII字符的所以我就整了一个
例如:
- /rtp TheWhiteDog9487 1000
- /随机传送 TheWhiteDog9487 1000
- `/rtp TheWhiteDog9487 1000`
- `/随机传送 TheWhiteDog9487 1000`
这两个命令的效果没有任何差别
玩家权限限制和 /rtp 当然也是一样的都是2级
玩家权限限制和 `/rtp` 当然也是一样的都是2级