inner_core吧 关注:3,529贴子:8,149

【Wiki】InnerCore开发维基百科翻译计划[ICDevWikiTransProj]

只看楼主收藏回复

●鉴于大部分人多看不懂俄语楼主特此翻译一下
●百科官网:https://wiki.mineprogramming.org/index.php/InnerCore
●蓝本为@AIFZGT 大大给出的链接中的Wiki电子版(貌似还不是他的分享链接),据实际情况在第一部分中加入了新章节:[1-6]库
●由于白度屯楼的因素,网页版可能不全,请见2L的电子版链接
●楼主这两天时间不是太充裕,大家不要急
●特加了水印以防盗取,如真若转载请与楼主联系,获批后可转载



IP属地:北京1楼2018-07-01 21:36回复
    2L备用与链接


    IP属地:北京2楼2018-07-01 21:36
    收起回复
      目前已译好第一篇
      引语:
      InnerCore wiki [https://wiki.mineprogramming.org/index.php/InnerCore#__NO_LINK_PROXY__]
      InnerCore是在纯净MCPE1.0.3的基础上建立的,并且它是一个创建和游玩各种模组的完全成熟的环境。他给出了比CoreEngine和BlockLauncher更多的机会。
      从头说起,本地部分解决了绝对大多数基于BlockLauncher编写模组时遇到的问题,并且使制作API更高效。
      InnerCore文档目录
      [1-x]制作模组
      [1-1]模组的结构
      [1-2]标准模组模板
      [1-3]资源
      [1-4]字节码编译
      [1-5]可执行文件的基本方法和变量
      [1-6]库
      [2-x]游戏里的事件&Callback类函数
      [2-1]Callback类函数
      [2-2]回调列表
      [3-x]方块和物品
      [3-1]创建方块和物品
      [3-2]高级方块和物品的创建
      [3-3]方块实体
      [3-4]配方
      [3-5]流体和如何编写流体
      [3-6]盔甲
      [4-1]World类函数
      [5-1]Game类函数
      [6-x]实体
      [6-1]Entity类函数
      [6-2]创建生物
      [6-3]创建生物的实例
      [7-1]Player类函数
      [8-x]GUI
      [8-1]创建GUI的说明书
      [8-2]容器
      [8-3]动态接口
      [9-1]ModAPI类函数
      [10-1]Updatable类函数
      [11-1]GameObject类函数
      [12-1]如何整理文件
      [13-1]动画
      [14-x]调试
      [14-1]Logger类函数
      [14-2]Debug类函数
      [15-1]颗粒
      [16-1]翻译
      [17-1]多线程


      IP属地:北京3楼2018-07-01 21:42
      收起回复
        加油这是个历史遗留问题了。。。不过楼主1-2可以不用翻译了。。。我已经翻译好了,到时候发你好了。。。


        IP属地:黑龙江来自Android客户端4楼2018-07-02 07:48
        收起回复


          IP属地:广东来自Android客户端5楼2018-07-02 09:09
          回复
            这是新的包工头吗


            IP属地:贵州来自Android客户端6楼2018-07-02 09:28
            收起回复
              (配图是楼主自己补的)(里面是楼主正在做的一个还没发布的ICMod)(这个模组的名字保密


              IP属地:北京8楼2018-07-02 12:57
              回复
                (感谢@为什么是个猪人 提供的翻译文档,楼主又做了一些小修改)
                [1-2]标准模组模板
                大多数情况下你不需要亲自凑合模组的结构。所以,这里提供了一个标准模板,以及在这种构造下中模组应该具有的结构。
                这里是build.config文件的内容:
                {
                "defaultConfig":{
                "buildType":"develop",
                "api":"CoreEngine",
                "libraryDir":"lib/"
                },
                "resources":[
                {
                "path":"res/",
                "resourсеtype":"resource"
                },
                {
                "path":"gui/",
                "resourсеtype":"gui"
                }
                ],
                "buildDirs":[
                {
                "targetSource":"main.js",
                "dir":"dev/"
                }
                ],
                "compile":[
                {
                "path":"main.js",
                "sourсеtype":"mod"
                },
                {
                "path":"launcher.js",
                "sourсеtype":"launcher"
                }
                ]
                }
                模组的结构 [编辑]
                让我们从API开始,对于整个模组都是一样的-它是CoreEngine。进一步的文件的主要部分都基于其上,这是大多数情况下最常见和最方便的一个API种类。
                如果你需要调用一些库,你可以在模组根目录中创建一个目录lib,并将它们复制到那里,然后你可以从任何可执行的模组文件中调用它们。
                所有的模组的资源都必须储存在res目录中,如果你不用材质,那么这里必须为空。类似的,界面材质应该在gui目录中。至于资源如何工作的,你可以看[这里(超链接:[1-3]资源)]。
                在模组根目录中必须有一个launcher.js文件,默认情况下应该只包含Launch();命令。关于模组启动更详细的内容将在另一章节中介绍。
                模组的源码 [编辑]
                在模组中也必须有一个名为dev的创建目录,其中.includes文件必须存在,它包含所有参与构筑的本地文件的路径,构筑时将以这些路径的顺序生成文件,它也可以包含注释(//或#)和空行
                .includes文件内容的实例:
                //假定这个.includes在dev/目录下
                //这个文件必须位于dev/header.js
                header.js
                //这些文件必须在dev/source/目录中
                source/blocks.js
                source/items.js
                所有这些文件在构筑时将被复制进在main.js文件中并以模组的主要代码启动。
                总结 [编辑]
                正如开头提到的,如果你不需要任何特殊的东西的话,这个结构就适用于大部分的模组,那么使用它就是最佳的选择了。


                IP属地:北京10楼2018-07-02 13:34
                收起回复
                  (刚才1-1又被吞掉了
                  [1-1]模组的结构
                  模组结构 [编辑]
                  InnerCore下的模组是一个带有名为build.config的构筑文件的目录,其中也有一些附加的文件,比如有一个描述文件和一个标准配置文件(最后一个会自动被创建)。
                  如果你不想详细地构筑模组,你可以使用模组的标准模板,它将在下面展示。
                  配置和描述 [编辑]
                  配置文件-config.json-是JSON格式的,并且会自动生成或修复。enabled的值会一直存在,它决定了启用还是关闭整个模组。这个文件的内容会在模组菜单被可视化,模组菜单是通过InnerCore菜单打开的。编辑这个文件将会影响整个模组。
                  信息文件-mod.info-是JSON格式的,并且可能不会出现,但是如果这样的话就不会有关于这个模组的任何信息在InnerCore菜单中显示,并且模组的名字那里将会显示目录的名字等等。
                  mod.info文件的格式:
                  {
                  "name": "模组的名字",
                  "author": "模组的作者",
                  "version": "模组的版本(任何格式皆可)",
                  "description": "模组的简介"
                  }
                  同样的,模组的根目录下可以包含mod_icon.png文件,它将显示为InnerCore菜单中此模组的图标。唯有它的格式-png-是必要的,它的大小可以随便。
                  基本参数 [编辑]
                  构筑文件也是JSON格式的,并且它有几个部分组成,它们描述了模组的各种设定和元素。
                  第一个部分-defaultConfig-是必需的,并且它描述了构筑这个模组的主要参数。在它的参与下,构筑文件的内容应该看起来像这样(带有#号的注释不是必要的):
                  {
                  "defaultConfig": {
                  "api": "CoreEngine", #API,它会被所有所执行的文件默认使用,API选项将在下面被列出
                  "buildType": "develop", #这个参数在开发时必须为develop,然后在使用InnerCore时可进行更改
                  "libraryDir": "lib/", #一个可选的参数,用来指定库将从哪里被加载的默认目录
                  }
                  }
                  API指定了能被用在可执行模组文件中的几乎大部分的方法。然而,有一组基本方法是可用于特定类型的可执行文件的。
                  API的种类:
                  CoreEngine-一个主要的和大部分的用以开发模组的广泛API。基本上你都需要使用它,其他的选择是情境性的并且大部分时候你都用不到。
                  AdaptedScript-能实现基本的特性,但并不拥有能大大简化开发的内容,如方块实体。
                  可执行文件 [编辑]
                  可执行文件包含了这个模组的资源代码,它为所需的JАVaScript API版本编写,根据它们的类型,它们将在不同的时间执行。你也可以从各个目录构筑它们,并在InnerCore菜单中编译成字节码,以便更快更好地调试(该模组的公开发布的版本)。
                  可执行文件以以下数组形式的compile部分被描述。这个编译部分可以有很多:
                  {
                  "defaultConfig": {
                  ...
                  },
                  ...
                  "compile": [
                  {
                  "path": "文件的本地路径,例如main.js、source/logger.js",
                  "sourсеtype": "可执行文件的类型,它们将在下面被列出",
                  "sourceName": "名字,可选参数,在显示错误时会被调用",
                  "api": "API种类,如果你想选择在defaultConfig中指定的错误类型的话,否则这个参数不是必须的"
                  },
                  ...
                  ]
                  }
                  可执行文件种类:
                  mod-这种文件包含了定义模组内容的主要源码。
                  launcher-整个模组中只能有一个文件是这种类型的。它会在一个特定的时间开启这个模组(例如,如果你的模组使用了另一个模组的API,那么它会在那个模组加载后才会加载,等等)。如果无需什么额外的条件来运行,它就只需简单地包含一个Launch();命令。
                  library-库。它能使用一些只有这种类型的文件才能访问的特殊方法,来注册一个模组可以使用的新API模块,如果这些库被导入的话。如果库文件位于libraryDir参数中指定的目录中,则不需要对其进行描述。
                  preloader-一个特定的文件类型,它会在MCPE加载之前但资源加载之后执行,并且需要用它创建和修改它们。在编写这个文件时,使用了一种单独类型但仍然执行不力的API。
                  custom-只有在一个特殊的方法-runCustomSource()-的帮助下它才能执行,并得从其他可执行文件中调用。它可以带一些参数。
                  更多关于每种可执行文件的信息和它们的特殊方法和值将在以后独立的章节中展开。
                  构筑可执行文件 [编辑]
                  可执行文件可以在不同独立的目录中编写,最后把构筑文件中描述的多个可执行文件整合在一起。这种方法允许你把代码分离到不同的文件中,而不是单独写一个庞大的文件。这不仅增加了可读性,而且允许你在编写时更好地编译模组并调试它。
                  构筑目录由buildDirs部分所规定,它也是一个数组:
                  {
                  "defaultConfig": {
                  ...
                  },
                  ...
                  "buildDirs": [
                  {
                  "dir": "构筑/的/目录/", #构筑目录必须以/结尾
                  "targetSource": "资源/文件/的/目录", #构筑的目标文件所在目录。注意:目标文件的内容在每次构筑中都会被完全重写,所以不要在这个文件中进行你的更改。
                  },
                  ...
                  ]
                  }
                  构筑目录有以下规定:
                  它必须包含含有你想合并到一个可执行文件中去的代码的文件,它们可以在这个目录的子目录中,并且可以有各种各样的名字。
                  它必须包含.includes文件。这个文件按一定的顺序包含了所有本地的参与构筑文件的路径,它里面也可以有注释(用//或#)和空行。
                  .includes文件内容的实例:
                  //假定这个.includes在dev/目录下
                  //这个文件必须位于dev/header.js
                  header.js
                  //这些文件必须在dev/source/目录中
                  source/blocks.js
                  source/items.js
                  明白这里每一个文件必须是一小段完整的代码是非常重要的,因为它们的每一个文件都是分开编译的。因此,你不能在其中一个文件中写一个开头,然后在另一个中写结尾。
                  资源 [edit]
                  模组的资源分为两组-界面材质(GUI)和其他(方块、物品、模型的材质等等)。资源的种类将在一个单独的章节中展开。
                  资源目录在resources部分中描述,它的内容可以有很多很多:
                  {
                  "defaultConfig": {
                  ...
                  },
                  ...
                  "resources": [
                  {
                  "path": "资源/目录/", #资源目录必须以/结尾
                  "resourсеtype": "resource|gui", #资源加载的种类:resource-游戏中的资源,gui-界面材质
                  },
                  ...
                  ]
                  }
                  关于资源及其应用的具体细节将在单独的章节中讨论。


                  IP属地:北京11楼2018-07-02 13:42
                  回复
                    [1-4]字节码编译
                    用字节码编译模组对发布新版本非常有用。首先,它允许您提高性能,其次你可以在需要时加密源代码。
                    编译是通圌过内核菜单完成的,为此你需要打开模组列表,找到你所需要的模组并打开开发者菜单(带扳手的按钮)。
                    编辑顺序:
                    确保你正处于开发构筑模式(build type: develop)。
                    检圌查你所有可执行文件的状态,对每一个都应该是“ok”,否则你将在启动模组时出现错误,并且它们应该在编译时被修复。
                    单击编译按钮,确认你的cāo作(“yes”),然后编译对话框将出现,它将huā费几秒钟到10分钟左右,这取决于模组的大小和设备的功率。
                    如果在编译过程中发生错误,那么很有可能你没有完成第2步。拒绝切换到结构的发布类型(“No”)并修复错误。如果没有错误,那么则会存在两种可能:要么被编译的文件太大,在这种情况下,有必要将它分成几个小的(构筑目录),要么它包hán一个不完整的代码块,在这种情况下应该将它与完整的部分结合起来,或者简单地将它(完整地)转移到所需的文件中。
                    如果编译成功,请重新启动InnerCore,返回到开发人员菜单,并确保所有文件的状态现在都是“ok [bytecode]”。
                    要在编译后返回到mod的开发中,您需要在同一开发人员菜单中按相同的按钮(前提是:build type:release)并确认你的cāo作。之后,您需要重新启动以在开发人员模式下重新启动模组。
                    隐zàng源代码[编辑]
                    如果您不想与其他人分享您的源代码,那么在编译发布版本之后,请册刂除所有带源代码的文件(库除外),这些文件不会用于工作。[注意!!!你不可能用一个收集来的模组来获得源代码,这是不可能的。如若册刂除初始代码,请确保你已经完整地并真的备份了。(原文为大写字母)]


                    IP属地:北京13楼2018-07-02 17:29
                    收起回复
                      壮士一路走好我在背后为你打call


                      来自Android客户端15楼2018-07-02 19:15
                      回复
                        加油


                        IP属地:广西来自Android客户端16楼2018-07-03 08:43
                        回复
                          只到1-5?楼主不更2-x以上了?


                          IP属地:重庆来自Android客户端18楼2018-07-04 19:30
                          收起回复
                            楼主快更啊,催更催更


                            IP属地:重庆来自Android客户端19楼2018-07-04 19:30
                            回复
                              (这两天有事,加上翻译好的那部分忘了保存了……)
                              [1-6]库
                              库 [编辑]
                              库-按照需要附加的可执行程序,它可以扩展现有的API并且可以大大简化各种cāo作的执行过程。
                              增加库到模组 [编辑]
                              库是由代码组成的单个文件。想要为模组增加一个库,你需要把它移动到模组的库文件夹中(通常是lib,其名字由构筑文件[译者按:是build.config]中的defaultConfig部分中的libraryDir参数所指定)。
                              库的原理 [编辑]
                              库注册了新的API对象,它们可以导入到任何可执行文件的命名空间中以待后用。它所添加的库的名字和API对象的名字能够在它的文档中看到。
                              要想导入一个库,请使用IMPORT命令:
                              IMPORT("库的名字")-从指定库中导入全部API对象
                              IMPORT("库的名字", "API对象的名字")-从指定库中导入指定的API对象
                              库的域 [编辑]
                              库有两种类型:本地和全jú。
                              本地库一次只能被导入一个模组中,并且如果两个不同的模组中同时存在同一个库,那么这个库将独圌立为两个模组工作。本地库在其加入的API无需具有兼容性时才被使用。例如,ToolType库就只是添加了简化了的工具类型。
                              全jú库一旦加载就可为所有模组所用,并且它可以在任何地方加载。它们用于创建全jú注册的模块,这些模块需要和所有模组互动。举个例子,你可以引入库energylib,它就允许你注册各种类型的能量,并且在不同的模组的使用它们。
                              库的版本 [编辑]
                              每一个库都有它自己的版本号,如果你要同时使用几个相同版本的库,那么确定哪个是最新的就十分必要。尤其是全jú库。
                              如果有超过一个的相同名字的库被你导入了目标的命名空间,那么也只有一个库会被加载,也就是最高版本的那个。
                              向下兼容性 [编辑]
                              新版本的库可能会改变旧版本的API,那么再使用最高版本的库就可能会造成某些使用旧版本的库的模组运行出错。
                              为了解决这种问题,你可以以特定的版本的库的形式导入它。以指定版本导入库的命令的格式如下:
                              IMPORT("库的名字: 目标版本", ...)-第一个参数指定了库的目标版本,第二个参数不变。
                              建议使用这种特殊的导入方式来使最终导入的API并不匹配预期的API这种情况发生的可能性得以最小(这只会在库的开发者并不在意库向下兼容与否的时候才会发生)。
                              库的发展 [编辑]
                              正如上述,库-一个具有代码的单个文件。今后,会朝着库特有的属性方向发展。
                              头 [编辑]
                              库的头完整地描述了它的参数,在其他所有代码之前通圌过调用LIBRARY命令来展现
                              使用LIBRARY命令:
                              LIBRARY ({
                              name: "库的名字", //库将以此名字被导入
                              version: 版本号, // 版本号必须是一个大于0的整数,每次更新库,它都必须只能增加并在它的文档中指定。
                              shared: false, //如果为true,那么这个库就会是全jú库
                              api: "CoreEngine", //库使用的API的名字
                              dependencies: ["name1: version1",
                              // ...
                              ]
                              /*对其他库的依赖列表和IMPORT命令的第一个参数格式相同(你需要单独地导入那些库,这个参数保证了在这些库导入之后这个库才会被导入)*/
                              });
                              导入库 [编辑]
                              在常规的模组文件中,其它库的导入也遵循相同的原则,但必须在dependencies参数的数组中声明所有导入的库及其版本。
                              导出API对象 [编辑]
                              导出API对象是库的最重要的一部分,如果没有导出,库就失去了它们的意义。导出允许你以特定的名字转化一个对象以便于它之后被其他文件导入。
                              使用EXPORT命令:
                              EXPORT("API对象的名字", API对象)-以给定的名字导出对象,使其可用
                              向下兼容性 [编辑]
                              当改变一个API对象以及它对先前版本的不兼容性的时候(例如,当册刂除或改变一个方fǎ的名字的时候),为向下兼容性添加一个额外的导出就尤其重要了。
                              使用EXPORT命令来添加一个向下兼容的对象:
                              EXPORT("API对象的名字: 版本号", API对象)-以<version code>版本及其更低版本导出此对象,可能会有一个相同名字的但不带版本的导出存在,也可能会有其它的更低版本的兼容性的导入。
                              Example (The version of the library in which this happens is more than 3):
                              例如(在下面的例子中,库有超过三种版本):
                              EXPORT("print", functiоn() {
                              alert("最新版本的print");
                              });
                              EXPORT("print:3", functiоn() {
                              alert("更旧版本的print");
                              });
                              EXPORT("print:1", functiоn() {
                              alert("第一个版本的print");
                              });
                              当以不同的版本导入库时,print都会存在,但如果导入的是最新版本,第一个print就会导入,如果是版本3或更低-第二个,如果是版本1-第三个。


                              IP属地:北京20楼2018-07-07 12:46
                              收起回复