mirror of
https://github.com/TheWhiteDog9487/RandomTeleporter.git
synced 2024-11-24 22:27:04 +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
|
- /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级
|
@ -4,17 +4,17 @@ org.gradle.parallel=true
|
|||||||
|
|
||||||
# Fabric Properties
|
# Fabric Properties
|
||||||
# check these on https://fabricmc.net/develop
|
# check these on https://fabricmc.net/develop
|
||||||
minecraft_version=1.20.4
|
minecraft_version=1.19.1
|
||||||
yarn_mappings=1.20.4+build.3
|
yarn_mappings=1.19.1+build.6
|
||||||
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.58.5+1.19.1
|
||||||
|
|
||||||
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/
|
||||||
|
@ -16,17 +16,19 @@ 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;
|
// 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 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 +37,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 +49,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 +62,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 +75,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 +88,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 +100,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 +114,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 +128,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 +142,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 +156,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(半径)"),
|
||||||
@ -166,9 +168,9 @@ public class CommandRegister {
|
|||||||
static int execute_command(ServerCommandSource Source, @Nullable Long Radius, @Nullable Entity Player, @Nullable Vec3d Origin){
|
static int execute_command(ServerCommandSource Source, @Nullable Long Radius, @Nullable Entity Player, @Nullable Vec3d Origin){
|
||||||
Entity entity = Player == null ? Source.getPlayer() : Player;
|
Entity entity = Player == null ? Source.getPlayer() : Player;
|
||||||
if (entity == null) {
|
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;}
|
return -1;}
|
||||||
if (Radius == null){Radius = WorldBorder - (long) 1e4;}
|
if (Radius == null){Radius = WorldBoundary - (long) 1e4;}
|
||||||
Radius = Math.abs(Radius);
|
Radius = Math.abs(Radius);
|
||||||
long Coordinate_X;
|
long Coordinate_X;
|
||||||
long Coordinate_Z;
|
long Coordinate_Z;
|
||||||
@ -186,20 +188,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 == WorldBoundary && 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(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(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());}
|
||||||
|
@ -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": {
|
"depends": {
|
||||||
"fabricloader": ">=0.15.6",
|
"fabricloader": ">=0.15.7",
|
||||||
"minecraft": "~1.20.4",
|
"minecraft": "~1.19.1",
|
||||||
"java": ">=17",
|
"java": ">=17",
|
||||||
"fabric-api": "*"
|
"fabric-api": "*"
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user