命令

基本信息

属性 值
所在包 vazkii.botania.common.core.command(3 个类)
基类 cpw.mods.fml.common.command.CommandBase
注册位置 CommonProxy.serverStarting(FMLServerStartingEvent),CommonProxy.java:223-228
已注册命令 3 个(其中 1 个条件注册)

功能

Botania 提供 3 条服务端命令,全部通过 event.registerServerCommand(...) 注册(CommonProxy.java:224-227):

event.registerServerCommand(new CommandShare());
event.registerServerCommand(new CommandOpen());
if(Botania.gardenOfGlassLoaded)
    event.registerServerCommand(new CommandSkyblockSpread());

botania-skyblock-spread 只在加载 Garden of Glass 时注册,是本次核查中唯一的条件注册命令。

数值

命令类 命令名 用法 权限等级 条件
CommandShare botania-share <entry> 0 无
CommandOpen botania-open <entry> 0 无
CommandSkyblockSpread botania-skyblock-spread <player> [<range>] 2 需 gardenOfGlassLoaded

来源:各类的 getCommandName() / getCommandUsage() / getRequiredPermissionLevel() 返回值,以及 CommonProxy.java:224-227 的注册语句。

命令 权限等级 发送者限制
botania-share 0 —
botania-open 0 canCommandSenderUseCommand 要求 sender instanceof EntityPlayer
botania-skyblock-spread 2(OP) —

交互

/botania-share <entry>

把百科条目的分享文本广播到全服(CommandShare.processCommand)。它读取本地化字符串 botaniamisc.shareMsg,并替换三个占位符:

占位符 来源
%name% sender.getCommandSenderName()
%entry% args[0](条目的本地化键)
%entryname% StatCollector.translateToLocal(args[0])

替换后经 IChatComponent.Serializer.func_150699_a(json) 解析为 JSON 聊天组件,再由 MinecraftServer.getServer().getConfigurationManager().sendChatMsg(component) 广播。

/botania-open <entry>

让玩家手中的 Lexica Botania 跳转到指定条目(CommandOpen.processCommand):

  1. 要求 sender instanceof EntityPlayer
  2. 取 player.getCurrentEquippedItem()
  3. 若物品是 ItemLexicon,调用 ItemLexicon.setForcedPage(stack, args[0]) 与 ItemLexicon.setQueueTicks(stack, 5)
  4. 否则回复 botaniamisc.noLexicon(红色,EnumChatFormatting.RED)

队列长度为 5 tick。

/botania-skyblock-spread <player> [<range>]

把玩家传送到附近的随机空地(CommandSkyblockSpread.processCommand),随后 SkyblockWorldEvents.spawnPlayer(player, x, spawn.posY, z, true)。

参数 值 来源
maxAllowed 1 000 000 CommandSkyblockSpread.java:40
minAllowed 250 :41
minDist 100(与出生点的最小平面距离) :42
maxrange 默认 200 000 :44

校验:范围超过 1000000 抛 botaniamisc.skyblockRangeTooHigh,低于 250 抛 botaniamisc.skyblockRangeTooLow。

选址算法以世界出生点为中心,在 ±maxrange/2 内随机取 (x, z),循环重试直到 MathHelper.pointDistancePlane(x, z, spawn.posX, spawn.posZ) >= 100。

相关条目