组件:调试 ================= 此组件由[[item:debug_card:zh|调试卡]]提供。 仅在创造模式可用的[[item:debug_card:zh|调试卡]]提供了一套实际上很危险的功能,可用于调试与测试代码。没有进行备份的话切勿使用调试卡,绝对不要。比如有一次我就不小心将竖着的一整片世界都变成了无文字的告示牌。 调试卡的“容器”指装有调试卡的机器人、电脑或平板电脑。 在专用服务器游玩时,调试卡必须绑定到某个玩家身上才能用`runCommand`回调来运行命令,绑定的方式为手持调试卡潜行右键单击。被绑定的玩家需要有运行提供给`runCommand`的命令的权限。 组件名:`debug`。 回调函数: - `changeBuffer(value:number):number` 以指定值作为增量,修改组件网络的能量缓存。 \\ - `connectToBlock(x:number, y:number, z:number):boolean` 将调试卡连接到指定坐标处的可与 OC 兼容的方块。 \\ - `getPlayer(name:string):userdata` 获取玩家对象。 \\ - `getPlayers():table` 获取当前登录玩家列表。 \\ - `getWorld([id:number]):userdata` 获取指定维度ID对应的世界对象,若不指定则为容器的世界。 \\ - `getWorlds():table` 获取所有世界ID的列表,无论是否加载。 \\ - `getX():number` 获取容器在世界中的X坐标。 \\ - `getY():number` 获取容器在世界中的Y坐标。 \\ - `getZ():number` 获取容器在世界中的Z坐标。 \\ - `isModLoaded(name:string):boolean` 获取指定mod或API是否加载。 \\ - `runCommand(command:string):number, string` 使用伪玩家(fake player)执行任意命令。若命令运行成功则第一个返回值为1,失败为0。第二个返回值为指令返回的内容或报错信息。若命令不返回任何内容,例如`/me`,第二个返回值将为`nil`。 \\ - `test():userdata` 用于转换`user-data`与通用数值的测试方法。 \\ - `getScoreboard():userdata` 获取世界的计分板对象。 \\ - `sendToDebugCard(address:string, data...)` 向指定地址的调试卡发送数据。 \\ - `sendToClipboard(player:string, text:string)` 若可行的话,向指定玩家的剪切板中发送文本。 \\ - `scanContentsAt(x: number, y: number, z: number[, worldId: number]):boolean, string, table` 返回指定ID对应世界(默认为主世界)指定位置处的内容。此方法与机器人和无人机的运动检测功能行为相同。第一个返回值为布尔型,代表了机器人或无人机能否进入此位置(为`true`代表会被阻挡,不能进入)。第二个返回值为字符串值,代表障碍类型。可能的取值包括:`EntityLivingBase`、`EntityMinecart`、`air`、`liquid`、`replaceable`、`passable`、`solid`。最后一个返回值为此位置扫描到的实体或方块,以序列化的或普通表的形式来表示。下面的代码片段可用于调试获取可能阻挡机器人前进的物体,假设机器人面向X轴负方向。 local debug = require("component").debug local serialize = require("serialization").serialize local x, y, z = debug.getX, debug.getY, debug.getZ local offset_x = -1 local offset_z = 0 local blocking, label, content = debug.scanContentsAt(x() - .5 + offset_x, y() - .5, z() - .5 + offset_z) print(blocking, label, serialize(content)) ====世界对象==== 世界对象是容器当前所在的世界(维度)的映射。 - `getMetadata(x:number, y:number, z:number):number` 获取位于指定坐标的方块的元表。 \\ - `getBlockId(x:number, y:number, z:number):number` 获取位于指定坐标的方块的ID。 \\ - `getDimensionId():number` 获取当前维度的数字ID。 \\ - `isLoaded(x:number, y:number, z:number):number` 检查位于指定坐标的方块是否被加载。 \\ - `getSeed():number` 获取世界的种子。 \\ - `removeFluid(amount:number, x:number, y:number, z:number, side:number):boolean` 从位于指定坐标处的流体罐中移除一定量流体。 \\ - `insertFluid(id:string, amount:number, x:number, y:number, z:number, side:number):boolean` 向位于指定坐标处的流体罐中添加一定量流体。 \\ - `getDimensionName():string` 获取当前维度的名称。 \\ - `getTime():number` 获取当前世界时间。 \\ - `setTime(value:number)` 设定当前世界时间。 \\ - `getLightValue(x:number, y:number, z:number):number` 获取位于指定坐标处的方块的光照等级(自身发出的)。 \\ - `isRaining():boolean` 返回当前天气是否为降雨。 \\ - `setRaining(value:boolean)` 设定当前天气是否为降雨。 \\ - `isThundering():boolean` 返回当前天气是否为雷暴。 \\ - `setThundering(value:boolean)` 设定当前天气是否为雷暴。 \\ - `setBlock(x:number, y:number, z:number, id:number or string, meta:number):number` 在指定坐标处放置指定方块。 \\ - `setBlocks(x1:number, y1:number, z1:number, x2:number, y2:number, z2:number, id:number or string, meta:number):number` 在指定范围内填充指定方块,范围为立方体,由两个对角顶点(x1, y1, z1)与(x2, y2, z2)表示。 \\ - `removeItem(x:number, y:number, z:number, slot:number[, count:number]):number` 减少指定坐标处物品容器的指定槽位中物品堆的物品数。 \\ - `insertItem(id:string, count:number, damage:number, nbt:string, x:number, y:number, z:number, side:number):boolean` 将一个物品堆放入到指定坐标处物品容器的指定槽位中。给定的NBT标签需为JSON格式。 \\ - `getSpawnPoint():number, number, number` 获取当前的重生点坐标。 \\ - `setSpawnPoint(x:number, y:number, z:number)` 设定重生点坐标。 \\ - `canSeeSky(x:number, y:number, z:number):number` 获取位于指定坐标处的方块是否直接暴露在天空下。 \\ - `getLightOpacity(x:number, y:number, z:number):number` 获取位于指定坐标处的方块的不透明度。 \\ - `hasTileEntity(x:number, y:number, z:number):number` 检查位于指定坐标处的方块是否具有方块实体。 \\ - `playSoundAt(x:number, y:number, z:number, sound:string, range:number)` 在指定坐标处播放音效。 \\ - `getTileNBT(x:number, y:number, z:number):table` 获取位于指定坐标处的方块的NBT数据。 \\ - `setTileNBT(x:number, y:number, z:number, nbt:table):boolean` 设定位于指定坐标处的方块的NBT数据。 \\ - `getBlockState(x:number, y:number, z:number[, actualState:boolean=false])` 获取位于指定坐标处的方块的状态,可选是否获取额外的有关显示的数据。 ====玩家对象==== 玩家对象代表了世界中一个指定玩家。 - `getWorld():userdata` 获取玩家所在世界的世界对象。 \\ - `getGameType():string` 获取玩家的游戏模式。 \\ - `setGameType(gametype:string)` 设定玩家的游戏模式(`survival`-生存,`creative`-创造,`adventure`-冒险)。 \\ - `getHealth():number` 获取玩家的生命值。 \\ - `setHealth(health:number)` 设定玩家的生命值。 \\ - `getMaxHealth():number` 获取玩家的最大生命值。 \\ - `getPosition():number, number, number` 获取玩家的位置。 \\ - `setPosition(x:number, y:number, z:number)` 设定玩家的位置。 \\ - `getExperienceTotal():number` 获取玩家的总经验值。 \\ - `getLevel():number` 获取玩家的等级。 \\ - `addExperienceLevel(level:number)` 为玩家的经验等级增加一级。 \\ - `removeExperienceLevel(level:number)` 为玩家的经验等级减少一级。 \\ - `insertItem(id:string, amount:number, meta:number[, nbt:string]):number` 将一个物品堆添加到玩家的物品栏中。 \\ - `clearInventory()` 清空玩家的物品栏。 ====计分板对象==== - `addObjective(objectiveName:string, objectiveCriteria:string)` 在计分板中创建一个新的对象。 \\ - `removeObjective(objectiveName:string)` 从计分板中移除一个对象。 \\ - `increasePlayerScore(playerName:string, objectiveName:string, score:int)` 增加某计分板对象中某玩家的分数。 \\ - `decreasePlayerScore(playerName:string, objectiveName:string, score:int)` 减少某计分板对象中某玩家的分数。 \\ - `addPlayerToTeam(player:string, team:string):boolean` 将某玩家加入某团队中。 \\ - `removePlayerFromTeam(player:string, team:string):boolean` 将一名玩家从指定团队中移除。 \\ - `removePlayerFromTeams(player:string):boolean` 将一名玩家从所有团队中移除。 \\ - `addTeam(team:string)` 将一个团队添加到计分板中。 \\ - `removeTeam(teamName: string)` 从计分板中移除一个团队。 \\ - `getPlayerScore(playerName:string, objectiveName:string):int` 获取某计分板对象中某玩家的分数。 \\ - `setPlayerScore(playerName:string, objectiveName:string, score:int)` 设定某计分板对象中某玩家的分数。 目录 ---- {{page>component:contents:zh&noheader&noeditbutton&nouser&nofooter}}