Home - Sbaoor-fly/CSR-IronPythonRunner GitHub Wiki

Welcome to the IronPythonRunner wiki!

欢迎来到IronPythonRunner文档

一、说明

不同于Twoone3的CpythonRunner,

IronPythonRunner采用.NET框架下的IronPython解释器

使用之前,请确保您已了解了IronPython的语法,可参考 IronPython.org

为什么选择IronPython?

  • IronPython是对.NET Framework的一个极好的补充,它为Python开发人员提供了.NET Framework的强大功能。现有的.NET开发人员也可以使用IronPython作为一种快速而富有表现力的脚本语言,从零开始嵌入、测试或编写新的应用程序。

  • CLR是创建编程语言的一个很好的平台,而DLR使动态语言变得更好。此外,.NETFramework(基类库、演示基础等)为开发者提供了惊人的功能和能力。

二、什么是Python脚本开发

原生的AddOn的方式可以改变很多原版游戏内容,以及添加自定义的游戏内容,但一般无法实现一些较复杂的逻辑,比如右键方块时,会给予物品。这就需要使用脚本来实现了。

在Bedrock_server中,我们使用可以IronPython来编写mod脚本。

我们封装了很多的游戏事件与组件,游戏事件是指游戏内触发了某个操作或达到某一种条件(例如玩家点击方块),可以通知到我们的代码,进而实现我们的逻辑。组件是我们封装好的游戏引擎接口,可以用来设置或获取某些数据(例如操作玩家背包),或者执行一些特殊的功能。

脚本开发就是一个监听事件与调用组件的过程,配合自己的逻辑来实现很酷的玩法

三、搭建开发环境

1.在VScode或者VS的新建作品→python项目,把后缀改为.net.py

2.在 MineBBS 或者 GitHub 处下载IronPythonRunner,注意IronPythonRunner需要作为BDSNETRunner的子mod运行

3.从releases中取出SDK文件夹中的py文件放到你的插件项目同级目录

这样开发环境就搭建完成。

四、IronPython入门

python是一门很容易入门的编程语言,没有接触过python的开发者可以先浏览这个网站的下面这些页面,跟着上面的示例代码来了解python:

  • python环境搭建
    • python安装
    • 系统环境变量配置
  • python基础语法
    • python标识符
    • python保留符
    • 行和缩进
  • python函数
    • 定义一个函数
    • 函数调用
    • 参数传递
  • python字符串
    • 访问字符串中的值
    • python转义字符
    • python字符串格式化
  • python模块
    • import语句
    • PYTHONPATH变量
  • python内置函数

五、第一个ipy脚本插件

1.用VScode打开你的插件项目文件并配置环境变量

2.引用mc模块和tool模块,输入'mc.'查看是否有自动补全,如果没有的话就把mc.py也用VScode打开

3.实现右键方块时获得钻石剑

我们通过监听UseItemEvent,然后在响应函数里用addPlyerItem函数向玩家背包添加物品。

首先我们创建一个useitem监听器

#! /usr/bin/env python
# -*- coding:utf-8 -*-
import mc
def load_plugin():
    print('示例插件已加载!')

def useitem(a):
    pass

其中useitem监听器会传回一个事件,需要我们用mc.AnalysisEvent()函数将其转化成python可以操作的事件类型

要解析这个事件,就需要知道每个key对应的数据是什么,可以到这里来查看监听器获得的返回数据。

接下来我们继续完善插件

#! /usr/bin/env python
# -*- coding:utf-8 -*-
import mc
def load_plugin():
    print('示例插件已加载!')

def useitem(a):
    d = mc.AnalysisEvent(a)
    mc.runcmd('give '+d.playername+' diamond_sword')

这样就可以做到在点击方块的时候给玩家一把钻石剑,接下来把ipy插件放进ipy文件夹,开服测试

可以发现在点击方块后背包中多了一把钻石剑

六、load_plugin()函数是什么

load_plugin()是Python逻辑的入口文件,需要包含mod的初始的处理函数。这些初始化函数中,可以做一些自定义的初始化操作,例如注册指令和检查插件所需的配置文件是否存在。

七、开始行动吧

首先阅读API & Listners熟悉各种API函数及其作用

完全理解后,在Linsters事件中找几个自己感兴趣的,尝试添加到mod里,看能不能生效吧!

熟悉ipyr插件编写入门后,可以查看IPYRDemo来学习CreateGUI和指针组件的使用。

熟悉了ipyrSDK的用法后,可以继续阅读这个网站 的“高级特性”,“面向对象编程”,“常用内建模块”,有助于使用python编写出更复杂的玩法逻辑。

遇到自身没法解决的问题时,及时和开发者沟通反馈(可通过MineBSS或者GitHub提交issues)。