blocklynukkit
开源
BlocklyNukkit
BN_Loader
实现
语言 | 标准 |
---|---|
JavaScript | ecma5.1 |
Python | 2.7 |
Lua | 5.2 |
PHP | 5.3 |
C | C11 |
C++ | C++20 |
wast | WASI 2020/12/23 |
你可以
欢迎
零 基 础入门nukkit插件开发的 初学 者 想 快速 实现自己 的 想 法的 服 主 没 有 电脑或 java编译环境的 nukkit插件开发者 只 会 JavaScript、python、lua或 php又 想 开发插件的 人 - JavaScript、python、lua
或 者 php十分熟练的服主 想 要 使用 C/C++来 进行高性能 插件开发的 开发者 希望 掌握 新 技能 的 开发者
BlocklyNukkit
对于
对于
您可以到BN
(
您可以在一下三方面做出贡献
- 图形
化 编辑器 多 语言翻 译 - 帮助blocklynukkit.info网站
的 教程 编写 - 贡献项目
代 码
- 乐色
桶 :mcbbs下 载 空 岛科技 :mcbbs下 载- OP查背
包 :mcbbs下 载 - 铁块电梯:mcbbs
下 载 一 键砍树:mcbbs下 载一 键收割 作物 :mcbbs下 载- 红石
音 乐:mcbbs下 载 死亡 传送:mcbbs下 载虚空 拉 回 :mcbbs下 载箱 子 整理 :mcbbs下 载自 动刷石 机 :mcbbs下 载- kick踢人
菜 单:minebbs下 载 - 实时cps显示:mcbbs
下 载 神 奇 的 棍子:mcbbs下 载- gui
点 歌 :mcbbs下 载 - pvp搭路练习:minebbs
下 载 高利 贷银行 :minebbs下 载- 跑酷
管理 系 统:minebbs下 载 高 级脚本 方 块:minebbs下 载自 定 义武器 :minebbs下 载- 跑酷奖励:minebbs
下 载 - X积分:minebbs
下 载
mcbbs论坛
mcbbs
minebbs论坛
minebbs
bn
众所
插件
mcbbs对jar
new
Lua
Bug Fixed
修 复了熔炉 配 方 nbt丢失问题修 复了设置箱 子 和 漏斗 物品 栏不好 使 的 问题修 复了py插件不可 用 问题修 复了BNNPC在 路 径 移 动时被 击退遁地问题修 复了BNNPC导致的 区 块报错问题
BNNPC
- Array getPlayersIn(double distance)
- Array getEntitiesIn(double distance)
- Player getNearestPlayer(double far)
- Player getNearestPlayer()
- void setEntityRideOn(Entity entity)
- void isEntityRideOn(Entity entity)
- void setEntityRideOff(Entity entity)
- Player getRidingPlayer()
window
- setPauseScreenList(String list) --设置暂停
界面 右 侧显示 在 线玩家 区域 的 文字 ,用 ;分割 多 行
CustoWindowBuilder
- this showAsSetting(Player p, String imageURL, String callback) --
支持 图标,和 按钮图标书写方式 相 同
manager
- void qq.startBot() 启动qq
机 器 人 进程 - void qq.reDirectBot(String ip)
将 机 器 人 重定 向 到 指定 ip地 址 ,并使用 那 台 电脑的 小栗 子 qq机 器 人 框 架 要求 目 标电脑开放8404-TCP端 口 ,并且在 小栗 子 的 tcpapi插件中 允 许远程 控 制
- void qq.sendFriendMessage(String fromQQ,String toQQ,String message) 发送
好 友信 息 - void qq.sendGroupMessage(String fromQQ,String toGroup,String message) 发送
群 信 息 - void qq.sendGroupPicMessage(String fromQQ,String toGroup,String picturePaths,String message)
- 发送qq图文
消息 - picturePaths
用 ;分割 多 个本地 图片路 径 消息 中 使用 图片只 需用 %picture数字 %即 可 ,数字 指 代 第 几个路 径 的 图片,从0开始算 起
- 发送qq图文
- void qq.kickGroupMember(String fromQQ,String toGroup,String toQQ) --踢了
指定 群 员,fromQQ是 机 器 人 账号 - void qq.banSpeakGroupMember(String fromQQ,String toGroup,String toQQ,int second) --
禁 言 指定 群 员 - String getPlayerDeviceID(Player player) --获取玩家
的 手 机 或 电脑设备标识码 - String getPlayerDeviceModal(Player player) --获取玩家
的 设备型 号 - int getPlayerDeviceOS(Player player) -- 获取玩家
的 操作 系 统id - double getMoney(String player)
- void reduceMoney(String player,double money)
- void addMoney(String player,double money)
- void setMoney(String player,double money)
- void setNukkitCodeVersion(String string) --
修 改 version命令 显示的 nk版本 - void nodejs.eval(String str,boolean isPath) --
使用 nodejs运行str- 运行nodejs
代 码是隔 离在nodejs环境运行的 ,而非java环境 若 isPath为true,则执行 该路径 的 文 件 否 则将str作 为nodejs代 码执行 - 其中
可 以使用 callFunction(String BNFunctionName,String args...)来 调用bn插件的 函数
- 运行nodejs
- void nodejs.newDocker(String dockerName,String str,boolean isPath) --开启
一 个常驻nodejs容器 - dockerName
是 创建的 nodejs容器 的 名字 ,容器 一旦创建就会立即开始执行其中的代码 重 启创建 后 执行完 代 码不会 被 销毁,而是可 以继续通过callDockerFunction调用其中方法 - 如果
需要 在 其他bn插件调用其中的 nodejs函数 ,需要 使用 registerFunction(String函数 名 ,Function函数 )注 册 - 其余
同 nodejs.eval函数
- dockerName
- void nodejs.closeDocker(String dockerName) --关闭
指定 的 nodejs容器 并释放占 用 资源 - String callDockerFunction(String function,String... args)
- 调用
指定 容器 中 的 指定 函数 并向其传参 ,调用的 函数 必须先 注 册 再 使用 ,否 则bn无法获取此函数 内 存 地 址 进行调用 返 回 值将自 动被转为字 符 串 ,如果被 调函数 无返回 值则返 回 字 符 串 "null"- function
指定 调用的 函数 ,格式 为容器 名 ::函数 名 (同 其他地方 的 调用格式 ) 若 直接 输入函数 名 ,则将在 所有 未 关闭容器 中 随 机 寻找一个有此名称函数的容器调用,若 找不到 ,返 回 NO FUNCTION- args
参 数 只 接受 字 符 串 ,数量 不 限 ,也可没 有
- 调用
- TaskHandler createTask(String functionName, int delay ,<E+>... args)
- TaskHandler createLoopTask(String functionName, int delay,<E+>... args)
支持 2-128个任意 数量 的 参 数 ,第 一个参数为回调函数名,第 二个为回调间隔tick,其余的 是 在 调用函数 时向函数 传递的 参 数
- void newPlugin(String path) --
加 载指定 路 径 上 的 bn插件 - void newJSPlugin(String name,String code) --
根 据 代 码字符 串 创建一 个新的 bn插件 - void newPYPlugin(String name,String code)
- void newLUAPlugin(String name,String code)
- void addCommandCompleter(String cmd,String id,String completer)
- 创建
命令 补全器 ,将 被 发送给玩家 用作 命令 提示 和 tab补全 - cmd为要
添加 给的命令 的 名称 ,id为补全 器 标识符 ,随意 只 要 不 重 复即可 - completer
是 补全器 内容 ,由 <必选单元>和 [可 选单元 ]由 空 格 连缀组成 每 个单元 的 内部 格式 为名称 :@类型=参 数 1;参 数 2;...等 于号及其后 面 的 部分 不 是 必须的 - 类型
有 :@target @blockpos @pos @int @float @string @text - 类型
有 :@message @command @json @filepath @operator 例 如:<player:@target> <sentence:@message=BNNB!;blocklynukkit> [color:@text=red;green]
- 创建
EventLoader
- QQGroupMessageEvent --
机 器 人 收 到 qq群 消息 事件 - String getSelfQQ() --获取
收 到 消息 的 qq账号 - String getFromQQ() --获取发送
消息 的 qq账号 - String getFromGroup() --获取
消息 事件 的 qq群 号 - String getMessage() -获取
消息
- String getSelfQQ() --获取
- QQFriendMessageEvent --
机 器 人 收 到 qq好 友 消息 事件 - String getEventId() --获取
事件 id - String getEventSeed() --获取
事件 中 的 群 消息 标识码 - String getFromQQ() --获取发送
消息 的 qq - String getSelfQQ() --获取
接 受到群 消息 的 qq账号 - String getMessage() --获取
事件 的 消息
- String getEventId() --获取
- QQOtherEvent
- String getFromGroup() --获取
触 发事件 的 qq群 号 - String getFromQQ() --获取
触 发事件 的 qq账号 - String getSelfQQ() --获取
收 到 事件 的 qq账号 - String getSeq() --获取
收 到 事件 的 标识id - int getType() --获取
事件 类型码
- String getFromGroup() --获取
Entity
- void setPlayerExp(Player player,int exp)
- int getPlayerExp(Player player)
- void setPlayerExpLevel(Player player,int lel)
- int getPlayerExpLevel(Player player)
- void setPlayerHunger(Player player,int hunger)
- int getPlayerHunger(Player player)
- void makeSoundToPlayer(Player player,String sound)
- Entity spawnEntity(String name,Position pos) --
返 回 值更改
Bugs Fixed
修 复了bnnpc浮空走路 bug修 复了浮空物品 空 事件 报错- 现在
的 报错信 息 比 以前 好 看 多 了
manager
- callFunction(String functionname,Object... args) --callFunction
会 返 回 函数 的 返 回 值了 - getVariableFrom(String scriptName,String varName) --
根 据 bn插件名和 变量名 获取变量内容 - void putVariableTo(String scriptName,String varName, var) --
把 变量值以指定 变量名 放 到 指定 bn插件中 - double getCPULoad()
- int getCPUCores()
- double getMemoryTotalSizeMB()
- double getMemoryUsedSizeMB()
- void forceDisconnect(Player player)
- Array getEventFunctions(Event event)
- void getServerMotd(String host, int port, String callback) --
根 据 服 务器IP和 端 口 获取在 线人数 信 息
blockitem
- void setItemColor(Item item,int r,int g,int b)
- void setItemUnbreakable(Item item,boolean unbreakable)
inventory
- Item getEntityHelmet(Entity entity)
- Item getEntityChestplate(Entity entity)
- Item getEntityLeggings(Entity entity)
- Item getEntityBoots(Entity entity)
- Item getEntityItemInHand(Entity entity)
- Item getEntityItemInOffHand(Entity entity)
- void setEntityItemHelmet(Entity entity,Item item)
- void setEntityItemChestplate(Entity entity,Item item)
- void setEntityItemLeggings(Entity entity,Item item)
- void setEntityItemBoots(Entity entity,Item item)
- void setEntityItemInHand(Entity entity,Item item)
- void setEntityItemInOffHand(Entity entity,Item item)
- Item getInventorySlot(Inventory inv,int slot)
window
- void forceClearWindow(Player player)
- int getEventResponseIndex(PlayerFormRespondedEvent event)
entity
- boolean isPlayer(Entity e)
- void spawnFallingBlock(Position pos, Block block, boolean enableGravity,boolean canBePlaced)
gameapi --
- void createGame(String name,boolean useTeam,String startGameCallBack,String endGameCallBack,String mainLoopCallBack,String deathCallBack) -- 创建一个小游戏房间
- void joinGame(Player player, String gameName) --让玩
家 进入指定 名称 的 小 游 戏,自 动匹配 房 间 - void leaveGame(Player player) --让玩
家 从小游 戏房间离开 - boolean isPlayerInGame(Player player) --玩家
是 否 正 在 玩某个小游 戏 - GameBase getPlayerRoom(Player player) --获取玩家
正 在 玩的小 游 戏对象 - Array getAllRoomByName(String gameName) --获取
游 戏名称 相 同 的 所有 小 游 戏房间对象 组成的 数 组 - Array getAllGameNames() --获取
所有 正 在 运行的 小 游 戏房间的名字 组成的 数 组 - Messager getMessager(String prefix)
- Messager getGameMessager(GameBase game)
- Multiline getMultiline(String messageType)
- InventoryMenu createInventoryMenu(String inventoryType, String title)
- FormMenu createFormMenu(String title, String content)
- void addMenuItem(InventoryMenu menu, int slot, Item item, String inventoryCallback)
- void addMenuButton(FormMenu menu,String buttonText,String imageData,String formCallback)
- Scoreboard getScoreboard(Player p)
- void setObjective(Scoreboard sb, String objectiveName,String displayName)
GameBase --
EventLoader --73 new
- BlockFadeEvent
- BlockFallEvent
- BlockFromToEvent
- BlockGrowEvent
- BlockIgniteEvent
- BlockPistonChangeEvent
- BlockRedstoneEvent
- DoorToggleEvent
- CreatureSpawnEvent
- CreeperPowerEvent
- EntityArmorChangeEvent
- EntityBlockChangeEvent
- EntityCombustByBlockEvent
- EntityCombustByEntityEvent
- EntityCombustEvent
- EntityDamageByBlockEvent
- EntityDamageByChildEntityEvent
- EntityExplodeEvent
- EntityMotionEvent
- EntityPortalEnterEvent
- EntityRegainHealthEvent
- EntityShootBowEvent
- EntityVehicleEnterEvent
- EntityVehicleExitEvent
- ExplosionPrimeEvent
- BrewEvent
- EnchantItemEvent
- InventoryMoveItemEvent
- StartBrewEvent
- ChunkLoadEvent
- ChunkPopulateEvent
- LevelInitEvent
- LevelLoadEvent
- LevelSaveEvent
- LevelUnloadEvent
- SpawnChangeEvent
- ThunderChangeEvent
- WeatherChangeEvent
- PlayerAchievementAwardedEvent
- PlayerAnimationEvent
- PlayerAsyncPreLoginEvent
- PlayerBlockPickEvent
- PlayerBucketEmptyEvent
- PlayerBucketFillEvent
- PlayerChangeSkinEvent
- PlayerChunkRequestEvent
- PlayerCreationEvent
- PlayerDropItemEvent
- PlayerEatFoodEvent
- PlayerEditBookEvent
- PlayerFoodLevelChangeEvent
- PlayerGameModeChangeEvent
- PlayerGlassBottleFillEvent
- PlayerInvalidMoveEvent
- PlayerItemConsumeEvent
- PlayerLocallyInitializedEvent
- PlayerMapInfoRequestEvent
- PlayerMouseOverEntityEvent
- PlayerServerSettingsRequestEvent
- PlayerSettingsRespondedEvent
- PluginDisableEvent
- PluginEnableEvent
- PotionApplyEvent
- PotionCollideEvent
- PlayerDataSerializeEvent
- RemoteServerCommandEvent
- EntityEnterVehicleEvent
- EntityExitVehicleEvent
- VehicleCreateEvent
- VehicleDamageEvent
- VehicleDestroyEvent
- VehicleMoveEvent
- VehicleUpdateEvent
- LightningStrikeEvent
Bug Fixed
修 复了bnnpc和 bn浮空字 莫名其妙消失 的 问题
New
- 现在
可 以在js代 码的开头加 上 一 行 注 释//pragma es9来 开启es9语言特性 ,但 是 会 有 些许性能 损失,损失不 大 ,可 以放心 使用 - 此功
能 仍然是 试验功 能 ,如果报错,请立即 反 馈,感 谢 - bninstall
命令 已 经弃用 ,所有 库全部 打 包 进bn解 释器jar,这样做是为了节约内 存 空 间。
CustomWindowBuilder
- Custom showAsSetting(Player p, String callback)
- Custom buildDropdown(String title,String inner,int index)
EventLoader
- ChunkUnloadEvent
entity
- void setPlayerExp(Player player,int exp)
- int getPlayerExp(Player player)
- void setPlayerExpLevel(Player player,int lel)
- int getPlayerExpLevel(Player player)
- void setPlayerHunger(Player player,int hunger)
- int getPlayerHunger(Player player)
window
- void makeTipsVar(String varname,String providerCallback)
- void makeTipsStatic(String varname,String toReplace)
Entity
- BNNPC buildNPC(Position pos,String name,String skinID,int calltick,String callfunction,String attackfunction)
- void showFloatingItem(Position pos,Item item)
- void removeFloatingItem(Position pos,Item item)
windowbuilder
- Custom buildSlider(String title,double min,double max)
- Custom buildSlider(String title,double min,double max,int step)
- Custom buildSlider(String title,double min,double max,int step,double defaultvalue)
- Custom buildStepSlider(String title,String options)
- Custom buildStepSlider(String title,String options,int index)
window
- String getEventCustomVar(PlayerFormRespondedEvent event,int id,String mode)
- mode
可 以为input toggle dropdown slider stepslider
BNNPC
- void displaySwing()
- void setSwim(boolean swim)
- void setSwim()
- void setTickCallback(String callback)
- void setAttackCallback(String callback)
manager
- void bStats(String pluginName,String pluginVer,String authorName,int pluginid)
- void callFunction(String functionname,Object... args) --
修 复了错误的 拼写
world
- void loadScreenTP(Player player,Position pos)
- void loadScreenTP(Player player,Position pos,int loadScreenTick)
- void clearChunk(Position pos)
EventLoader
- PlayerHeldEvent
- InventoryClickEvent
Bug Fixed
- manager.kickPlayer
不 再会 显示"kicked by admin"前 缀了 - bnnpc
打 人 会 正 确地摇动手 臂 了 - callFunction拼写
是正 确的了 - database现在
真 的 可用 了 ,所有 库都会 被 正 确安装
类库
- 现在类库
管理 器 可 以直接 安 装 模 块了,暂时只 有 python和 database两个模 块 使用 命令 bninstall模 块名安 装 这个类库
window
- void setBelowName(Player player,String str)
manager
- void loadJar(String path)
world
- void setOceanGenerator(int seaLevel)
entity
- BNNPC buildNPC(Position pos,String name,String skinID)
- BNNPC buildNPC(Position pos,String name,String skinID,int calltick,String callfunction)
BNNPC
- void turnRound(double yaw)
- void headUp(double pitch)
- void setEnableAttack(boolean attack)
- void setEnableAttack()
- void setEnableHurt(boolean hurt)
- void setEnableHurt()
- void displayHurt()
- void start()
- void setEnableGravity(boolean gravity)
- void setEnableGravity()
- void setG(double newg)
- void lookAt(Position pos)
- Player getNearestPlayer()
- boolean isSneak()
- void setSneak(boolean sneak)
- void setSneak()
- void jump()
- void setJumpHigh(double j)
- void setEnableKnockBack(boolean knock)
- void setEnableKnockBack()
- void setKnockBase(double base)
- boolean canMoveTo(Position to)
- boolean findAndMove(Position to)
- void setSpeed(double s)
- void setRouteMax(int m)
- void stopMove()
- void hit(Entity entity)
bug fixed:
- entity
的 effect有 些药水 不 显示问题,但 是 仍然有 些药水 效果 因 为nk不 支持 无法显示 - world
生成 VOID和 OCEAN出 错问题 天 域 世界 配置 丢失问题- ssh报错问题
- 现在
窗 口 管理 器 的 操作 函数 都 返 回 自身 ,可 以直接 在 代 码里连缀了
Languages
现在
EventLoader
- PlayerInteractEntityEvent
- PlayerDamageByPlayerEvent
- PlayerDamageByEntityEvent
- EntityKilledByEntityEvent
- EntityKilledByPlayerEvent
- PlayerRespawnEvent
window
- void setPlayerBossBar(Player player,String text,float len)
- void removePlayerBossBar(Player player)
- double getLengthOfPlayerBossBar(Player player)
- String getTextOfPlayerBossBar(Player player)
manager
- void createPermission(String per,String description,String defaultper)
- void removePermission(String per)
- boolean checkPlayerPermission(String per,Player player)
- String MD5Encryption(String str)
- String SHA1Encryption(String str)
- void createCommand(String name, String description, String callbackFunctionName, String per)
- void newCommand(String name, String description, Function jsFunction,String per)
entity
- int getNetworkID(Entity entity)
- String getIDName(Entity entity)
- void spawnEntity(String name,Position pos)
notemusic
- HornSongPlayer buildHorn(Song song, Position pos, boolean isloop, boolean isautodestroy)
- void addPlayerToHorn(HornSongPlayer SongPlayer, Player player)
- void removePlayerToHorn(HornSongPlayer SongPlayer, Player player)
- Array getPlayerInHorn(HornSongPlayer radioSongPlayer)
- void setHornStatus(HornSongPlayer radioSongPlayer, boolean isplaying)
- Song getSongInHorn(HornSongPlayer radioSongPlayer)
world
- genLevel
新 增 "OCEAN"海洋 世界 生成 器
bug fixed
- setNameTagAlwaysVisable error
blockitem
修 复了nbt函数 的 错误
EventLoader
修 复了玩家判断 错误的 bug
entity
更 换浮空 字 的 pid为盔甲 架 的 pid
Loader
- 现在bn插件
控 制 台 输出会 使用 文 件名 作 为前缀而不 是 [BlocklyNukkit] 非 op不 再 可 见bn命令
编辑
添加 JSON模 块添加 jar在 线编译器
manager
- String formatJSON(String json)
修 复writeFile函数 无法自 动创建 路 径 的 错误
manager
- String readFile(String path)
- void wirteFile(String path,String text)
- boolean isFileSame(String path1,String path2)
- String JSONtoYAML(String json)
- String YAMLtoJSON(String yaml)
- void newCommand(String name, String description, Function fun)
- int setTimeout(Function fun,int delay,<E+>... args)
- void clearTimeout(int id)
- int setInterval(Function fun,int delay,<E+>... args)
- void clearInterval(int id)
- void isWindows()
- int getPlayerGameMode(Player player)
Loader
- __NAME__
表示 加 载的js文 件 的 名称 (可 防御 低 级改名 倒 卖) 新版 发布后 ,24小 时强制 更新
Custom/Modal/Simple (WindowBuilder)
- void showToPlayerCallLambda(Player p, Function fun)
blockitem
- Array getItemEnchant(Item item)
- int getEnchantID(Enchantment enchantment)
- int getEnahcntLevel(Enchantment enchantment)
EventLoader
- PlayerJumpEvent
- PlayerToggleFlightEvent
- PlayerToggleGlideEvent
- PlayerToggleSwimEvent
- PlayerToggleSneakEvent
- PlayerToggleSprintEvent