mirror of
https://github.com/TheWhiteDog9487/RandomTeleporter.git
synced 2024-11-21 20:17:05 +08:00
0.2.5
突然发现Ved3d类型的方法里有一个计算两点间距离的,那我就把我自己的工具库撤了。 然后我把命令权限等级从4下降到了2,和原版的/tp同步。 (我记得原版的tp是4级啊?我最早还去源代码里看了一眼,咋回事呢? 传送过去生成的保护平台,现在是3x3的玻璃而不是1x1的石头,而且玩家会站在平台的正中心。 例行更新Fabric API和Fabric Loader
This commit is contained in:
parent
f8d36dd3d4
commit
3434b66c93
@ -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级
|
@ -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/
|
||||
|
@ -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());}
|
||||
|
@ -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));}
|
||||
}
|
@ -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": "*"
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user