<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[ustc-zzzz's blog]]></title><description><![CDATA[Just expect to make even a small change to the world, especially for those I am still concerned.]]></description><link>https://blog.ustc-zzzz.net/</link><generator>Ghost 0.10</generator><lastBuildDate>Mon, 09 Feb 2026 23:15:42 GMT</lastBuildDate><atom:link href="https://blog.ustc-zzzz.net/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[「千年虫」问题结束了吗？]]></title><description><![CDATA[<p>我们中的不少人应该都不会对「千年虫」问题有所陌生：它主要指代 2000 年附近发生的一系列计算机系统异常事件，起源于两位年份转换为四位年份的过程中发生的失误：<code>98</code> 可以解析成 <code>1998</code>，<code>99</code> 可以解析成 <code>1999</code>，而 <code>00</code> 却解析成了 <code>1900</code>——「千年虫」问题最早在 1958 年便已被公开提出，但直到 2000 年即将到来之际才引起足够的重视。</p>

<p>从长远的角度来说，「千年虫」问题当然没有结束——我们还有 2100 年，2200 年，等等；但正所谓「一万年太久，只争朝夕」，我们距离下一个世纪的到来还有足足七十余年，哪怕响应中关村某高校「为祖国健康工作六十年」的口号，那也最多只需要考虑到 2082 年。那么在这几十年的时间内，我们是不是便可高枕无忧，「千年虫」问题是不是就暂时离我们而去了呢？</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2022/10/image-20221030182319476.png" alt="为祖国健康工作六十年"></p>

<p>我们不妨想一想这样一个问题，把 <code>00</code></p>]]></description><link>https://blog.ustc-zzzz.net/is-year-2000-problem-solved/</link><guid isPermaLink="false">fd360ca8-35d6-4716-8242-c1b08077fb51</guid><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Sun, 30 Oct 2022 10:52:00 GMT</pubDate><content:encoded><![CDATA[<p>我们中的不少人应该都不会对「千年虫」问题有所陌生：它主要指代 2000 年附近发生的一系列计算机系统异常事件，起源于两位年份转换为四位年份的过程中发生的失误：<code>98</code> 可以解析成 <code>1998</code>，<code>99</code> 可以解析成 <code>1999</code>，而 <code>00</code> 却解析成了 <code>1900</code>——「千年虫」问题最早在 1958 年便已被公开提出，但直到 2000 年即将到来之际才引起足够的重视。</p>

<p>从长远的角度来说，「千年虫」问题当然没有结束——我们还有 2100 年，2200 年，等等；但正所谓「一万年太久，只争朝夕」，我们距离下一个世纪的到来还有足足七十余年，哪怕响应中关村某高校「为祖国健康工作六十年」的口号，那也最多只需要考虑到 2082 年。那么在这几十年的时间内，我们是不是便可高枕无忧，「千年虫」问题是不是就暂时离我们而去了呢？</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2022/10/image-20221030182319476.png" alt="为祖国健康工作六十年"></p>

<p>我们不妨想一想这样一个问题，把 <code>00</code> 解析成 <code>1900</code> 固然在某种程度上违反了我们的日常使用习惯，但是把 <code>00</code> 解析成 <code>2000</code>，把 <code>99</code> 解析成 <code>1999</code>，真的就那么顺理成章吗？这里自然便会引入一个「截断年份」（Pivot Year）的概念：两位年份倘若大于这个「截断年份」，在转换成四位年份的时候便会视为上一个世纪，倘若小于等于便会视为当前这个世纪。</p>

<p>我们熟知的「千年虫」问题可以视为将「截断年份」设置成了 <code>1999</code>——当然目前主流的计算机系统和软件早已不是如此。考虑到目前主流的编程语言和不少标准库都支持解析两位年份，并能「正确」地将 <code>00</code> 解析成 <code>2000</code>，那么我们不由得想问：「截断年份」到底是多少？经过简单的搜索引擎搜索，我发现似乎并没有人系统总结过不同编程语言和标准库是如何实现「截断年份」的——但经过一圈调研我发现，不同的实现简直是五花八门，精彩纷呈。在此仅提取 TIOBE 2022 年 10 月榜单前十名为例。</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2022/10/TIOBE-2022-10.png" alt=""></p>

<p>值得提醒的是：不少编程语言和标准库都支持自主设置「截断年份」，在此以默认值为准。</p>

<h2 id="sql">SQL</h2>

<p>不同 SQL 数据库对「截断年份」的实现均有不同：</p>

<ul>
<li>Microsoft SQL Server：<code>2049</code>（<code>49</code>/<code>50</code> 分别视为 <code>2049</code>/<code>1950</code>）</li>
<li>MySQL / MariaDB：<code>2069</code>（<code>69</code>/<code>70</code> 分别视为 <code>2069</code>/<code>1970</code>）</li>
<li>Oracle：当前所在世纪的 <code>99</code> 年（<code>99</code>/<code>00</code> 分别视为 <code>2099</code>/<code>2000</code>）</li>
<li>PostgreSQL：<code>2069</code>（<code>69</code>/<code>70</code> 分别视为 <code>2069</code>/<code>1970</code>）</li>
<li>SQLite：不支持自动解析两位年份</li>
</ul>

<h2 id="php">PHP</h2>

<p>PHP 对解析日期（如内置的 <code>strtotime</code> 函数等）有一套共同的准则。准则中规定了对于两位年份的解析范围应处于 <code>1970</code> 和 <code>2069</code> 之间，换言之，PHP 的「截断年份」为 <code>2069</code>。</p>

<h2 id="asmcc">ASM / C++ / C</h2>

<p>之所以把这三者列在一起是因为它们都不存在一个能够解析日期的标准库函数。不过，对 C/C++ 的 <code>time.h</code> 而言，标准库里定义了用于格式化日期的 <code>strftime</code> 函数，该函数对应 POSIX 的 <code>strftime</code>。POSIX 同时存在用于解析日期格式的 <code>strptime</code>，但并未在 C/C++ 标准库里有所对应。POSIX 的 <code>strptime</code> 规定两位年份在 <code>68</code>/<code>69</code> 处截断（分别对应 <code>2068</code>/<code>1969</code>），换言之，「截断年份」为 <code>2068</code>。</p>

<h2 id="c11">C++ 11 及更高版本</h2>

<p>C++ 11 及更高版本在 <code>iomanip</code> 定义了 <code>get_time</code> 和 <code>put_time</code> 函数，用于向输入流读入解析后，以及向输出流写入格式化后的日期，其约定和 <code>strftime</code> 及 <code>strptime</code> 相同。</p>

<h2 id="javascript">JavaScript</h2>

<p>JavaScript 主要使用 <code>Date.parse</code> 函数解析日期，但 <code>Date.parse</code> 函数只保证能够解析 ISO 8601 格式的字符串——这一格式的年份是四位数。同时在 Chrome 107.0.5304.87、Firefox 102.4.0、以及 Node 18.12.0 下尝试解析 <code>01 Jan 49</code> 和 <code>01 Jan 50</code> 得到的实验结果是：<code>49</code>/<code>50</code> 分别视为 <code>2049</code>/<code>1950</code>，亦即「截断年份」为 <code>2049</code>。</p>

<h2 id="cvisualbasic">C# / Visual Basic</h2>

<p>鉴于 TIOBE 目前将 VB.NET 视为 Visual Basic，故将其与 C# 放在一起讨论：两者均基于 .NET 平台。MSDN 上介绍了在 .NET 平台设置「截断年份」的方法。在 2022 年 10 月 23 日前，这个「截断年份」一直是 <code>2029</code>，但一个 Pull Request（<code>dotnet/runtime#76848</code>）让 .NET 平台从这一天开始变成了 <code>2049</code>。Microsoft Excel 等软件继承了 <code>2029</code> 这一设定，而国产软件 WPS 将这一设定照抄了过来。由于这一 Pull Request 的存在，我们仍然无法知晓未来版本（或者干脆在未来时间）的 Microsoft Excel 和 WPS 是否会将其向后调整 20 年。</p>

<h2 id="java">Java</h2>

<p>在某种程度上说，Java 对「截断年份」的实现可能是这篇文章中最有趣的：在 Java 标准库里，「截断年份」被设置成了当前年份后的第 19 年（见 <code>SimpleDateFormat</code> 的文档）。本文撰写于 2022 年，故本文完稿时 <code>41</code>/<code>42</code> 将分别解析成 <code>2041</code>/<code>1942</code>，而如果读者是在 2023 年看到的这篇文章，那么 <code>42</code> 便将会解析成 <code>2042</code> 了。</p>

<h2 id="java8">Java 8 及更高版本</h2>

<p>Java 8 及更高版本额外引入了 <code>java.time</code> 包，其中用于解析日期的是 <code>DateTimeFormatter</code> 类，在文档中规定：解析两位年份时，默认在 <code>2000</code> 年和 <code>2099</code> 年之间，也就是说 <code>java.time</code> 包的「截断年份」为 <code>2099</code>。</p>

<h2 id="python">Python</h2>

<p>Python 的 <code>datetime</code> 库内置了 <code>strftime</code> 和 <code>strptime</code> 函数，并明确了用于格式化日期的 <code>strftime</code> 和 C 语言标准库的 <code>strftime</code> 相一致（也因此同 POSIX 相一致）。我们合理推测用于解析日期格式 <code>strptime</code> 函数也和 POSIX 相一致。在 Python 3.10.8（Linux 平台）上的实验结果也证实了「截断日期」位于 <code>2068</code> 处。</p>

<h2 id="">总结</h2>

<p>在这篇短短的文章中我们已经看到了数种不同的「截断年份」：<code>2029</code>、<code>2049</code>、<code>2068</code>、<code>2069</code>、<code>2099</code>……而最早的 <code>2029</code> 已经距离我们不足十年！换言之，「千年虫」问题带来的影响绝非想象中的那样遥远。对于现有的计算机系统和软件而言，它们所使用的「截断年份」越晚，暴露出来问题的时间也就越晚。当然，对于新开发的计算机系统和软件而言，最好的解决方案可能仍然是——使用四位数年份存储时间。</p>

<p>以下是参考链接：</p>

<ul>
<li><a href="https://en.wikipedia.org/wiki/Year_2000_problem">https://en.wikipedia.org/wiki/Year_2000_problem</a></li>
<li><a href="https://www.toutiao.com/article/7071076546601026055/">https://www.toutiao.com/article/7071076546601026055/</a></li>
<li><a href="https://en.wikipedia.org/wiki/Date_windowing">https://en.wikipedia.org/wiki/Date_windowing</a></li>
<li><a href="https://www.tiobe.com/tiobe-index/">https://www.tiobe.com/tiobe-index/</a></li>
<li><a href="https://www.php.net/manual/en/datetime.formats.date.php">https://www.php.net/manual/en/datetime.formats.date.php</a></li>
<li><a href="https://pubs.opengroup.org/onlinepubs/9699919799/">https://pubs.opengroup.org/onlinepubs/9699919799/</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse</a></li>
<li><a href="https://learn.microsoft.com/en-us/dotnet/api/system.globalization.calendar.twodigityearmax">https://learn.microsoft.com/en-us/dotnet/api/system.globalization.calendar.twodigityearmax</a></li>
<li><a href="https://github.com/dotnet/runtime/pull/76848">https://github.com/dotnet/runtime/pull/76848</a></li>
<li><a href="https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/text/SimpleDateFormat.html">https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/text/SimpleDateFormat.html</a></li>
</ul>]]></content:encoded></item><item><title><![CDATA[谈一谈对原教旨主义 RESTful API 的想法]]></title><description><![CDATA[<p>从上班到现在，在单位边看边写也折腾了一些代码了。作为一个有成百上千个 API 的后端项目，整个项目的 API 风格从十分原教旨主义的 RESTful 到看起来是 RESTful 实际上是 RPC 语义的都有。然而在实现需求的时候我越发发现，凡是那些十分原教旨主义的 RESTful API 我都能快速理解并掌握如何使用，而那些 RPC 语义并且在 URL Path 里充满着五花八门动词的 API 往往理解需要花费相当的难度。</p>

<p>长期以来至少在我的周围似乎都充斥着一种论断：「RESTful API 设计起来很别扭」，更有人会直言「那些不追求原教旨主义 RESTful 的人早就写完需求下班了，而追求原教旨主义的还在加班」。这话乍一听有一些道理，但实际上这么做会无形地为后续维护增加更多成本——尤其是在需求本身就不明确并且还会频繁变更的情况下。</p>

<h2 id="">一个例子：维护菜谱</h2>

<p>设想我们有一个维护菜谱的需求，一般后端设计者都很容易设计出下面的 API：</p>

<pre><code class="language-plain">GET /dishes # 获取所有菜谱  
GET /dishes/{id}</code></pre>]]></description><link>https://blog.ustc-zzzz.net/restful-api-rules/</link><guid isPermaLink="false">202d889d-c69f-4812-9641-1e70c477eebd</guid><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Wed, 21 Sep 2022 16:50:00 GMT</pubDate><content:encoded><![CDATA[<p>从上班到现在，在单位边看边写也折腾了一些代码了。作为一个有成百上千个 API 的后端项目，整个项目的 API 风格从十分原教旨主义的 RESTful 到看起来是 RESTful 实际上是 RPC 语义的都有。然而在实现需求的时候我越发发现，凡是那些十分原教旨主义的 RESTful API 我都能快速理解并掌握如何使用，而那些 RPC 语义并且在 URL Path 里充满着五花八门动词的 API 往往理解需要花费相当的难度。</p>

<p>长期以来至少在我的周围似乎都充斥着一种论断：「RESTful API 设计起来很别扭」，更有人会直言「那些不追求原教旨主义 RESTful 的人早就写完需求下班了，而追求原教旨主义的还在加班」。这话乍一听有一些道理，但实际上这么做会无形地为后续维护增加更多成本——尤其是在需求本身就不明确并且还会频繁变更的情况下。</p>

<h2 id="">一个例子：维护菜谱</h2>

<p>设想我们有一个维护菜谱的需求，一般后端设计者都很容易设计出下面的 API：</p>

<pre><code class="language-plain">GET /dishes # 获取所有菜谱  
GET /dishes/{id} # 获取特定 ID 的菜谱  
POST /dishes # 添加特定菜谱  
PUT /dishes/{id} # 修改特定 ID 的菜谱  
DELETE /dishes/{id} # 删除特定 ID 的菜谱  
</code></pre>

<p>当然一些设计风格比较 RPC 的可能会写成这样：</p>

<pre><code class="language-plain">GET /dish/selectAll # 获取所有菜谱  
GET /dish/selectById # 获取特定 ID 的菜谱  
POST /dish/add # 添加特定菜谱  
POST /dish/modifyById # 修改特定 ID 的菜谱  
POST /dish/deleteById # 删除特定 ID 的菜谱  
</code></pre>

<p>这两者在理解成本和设计上其实没有什么不一样的，程序员写完需求，开开心心地下班了。</p>

<h2 id="">新需求：菜单步骤</h2>

<p>现在突然多了两个需求：每个菜谱都会有一个或多个特定的步骤，用户需要添加步骤或者修改某个特定的步骤的名称。</p>

<p>喜欢 RPC 设计风格的稍加思索搞出来了下面的 API：</p>

<pre><code class="language-plain">GET /dish/selectStepsById # 获取特定菜谱的所有步骤  
POST /dish/appendStepById # 为特定菜谱添加步骤  
POST /dish/modifyStepById # 为特定菜谱修改特定步骤的名称  
</code></pre>

<p>RESTful API 原教旨主义者想了半天，折腾出来下面的 API：</p>

<pre><code class="language-plain">GET /dishes/{id}/steps # 获取特定菜谱的所有步骤  
POST /dishes/{id}/steps # 为特定菜谱添加步骤  
PUT /dishes/{id}/steps/{step-id}/name # 为特定菜谱修改特定步骤的名称  
</code></pre>

<p>等 API 设计出来并实现好的时候，RESTful API 原教旨主义者发现设计 RPC 风格的程序员已经提前跑去把午饭吃了。</p>

<h2 id="">新需求：调整步骤</h2>

<p>现在突然又多了一个需求：用户需要修改某个特定的步骤的花费时长。</p>

<p>喜欢 RPC 设计风格的发现了问题，<code>modifyStepById</code> 已经拿去用了，他只能从以下两个选择里挑一个：</p>

<ol>
<li><p>把花费时间的 API 叫成 <code>modifyStepDurationById</code>。</p></li>
<li><p>之前 <code>modifyStepById</code> 的请求可能是 <code>{"name":"foo"}</code>，现在额外规定：</p>

<p><code>{"name":"foo"}</code> 代表修改名称，<code>{"duration":"5m30s"}</code> 代表修改花费时长，都存在则都修改。</p></li>
</ol>

<p>我们姑且采用第一种方案：</p>

<pre><code class="language-plain">POST /dish/modifyStepDurationById # 为特定菜谱修改特定步骤的花费时长  
</code></pre>

<p>RESTful API 原教旨主义者可能会采用这样的设计：</p>

<pre><code class="language-plain">PUT /dishes/{id}/steps/{step-id}/duration # 为特定菜谱修改特定步骤的花费时长  
</code></pre>

<p>当然也可以采取偷懒一点的方案：</p>

<pre><code class="language-plain">PUT /dishes/{id}/steps/{step-id} # 为特定菜谱修改特定步骤的全部信息  
</code></pre>

<p>当然，上面这个方案的代价是不需要修改的数据都需要原样传回去一次。</p>

<h2 id="">新需求：交换步骤顺序</h2>

<p>新需求又来了：用户需要可以交换两个步骤的顺序。</p>

<p>喜欢 RPC 设计风格的可能很快就设计好了 API：</p>

<pre><code class="language-plain">POST /dish/exchangeTwoStepsById # 为特定菜谱交换两个步骤的顺序  
</code></pre>

<p>RESTful API 原教旨主义者遇到了「怎么设计怎么难受」的困境，他最后设计出来的 API 大概率是这样的：</p>

<pre><code class="language-plain">POST /dishes/{id}/steps/exchanges # 为特定菜谱交换两个步骤的顺序  
</code></pre>

<p>不得不说，这个接口设计出来就是「别扭」的，违反直觉的——这自然也是那些不追求原教旨主义的程序员的理由。</p>

<h2 id="">数个月后</h2>

<p>数个月后，一批新来的员工决定维护一下现有的系统，他们看到的是什么样的呢？</p>

<p>对那些不追求「原教旨主义」的 RPC 设计风格 API，它们现在长这样：</p>

<pre><code class="language-plain">GET /dish/selectAll # 获取所有菜谱  
GET /dish/selectById # 获取特定 ID 的菜谱  
GET /dish/selectStepsById # 获取特定菜谱的所有步骤

POST /dish/add # 添加特定菜谱  
POST /dish/modifyById # 修改特定 ID 的菜谱  
POST /dish/deleteById # 删除特定 ID 的菜谱  
POST /dish/appendStepById # 为特定菜谱添加步骤  
POST /dish/modifyStepById # 为特定菜谱修改特定步骤的名称  
POST /dish/modifyStepDurationById # 为特定菜谱修改特定步骤的花费时长  
POST /dish/exchangeTwoStepsById # 为特定菜谱交换两个步骤的顺序  
</code></pre>

<p>而对于 RESTful 原教旨主义 API 则是这样的：</p>

<pre><code class="language-plain">GET /dishes # 获取所有菜谱  
GET /dishes/{id} # 获取特定 ID 的菜谱  
GET /dishes/{id}/steps # 获取特定菜谱的所有步骤

POST /dishes # 添加特定菜谱  
POST /dishes/{id}/steps # 为特定菜谱添加步骤  
POST /dishes/{id}/steps/exchanges # 为特定菜谱交换两个步骤的顺序

PUT /dishes/{id} # 修改特定 ID 的菜谱  
PUT /dishes/{id}/steps/{step-id}/name # 为特定菜谱修改特定步骤的名称  
PUT /dishes/{id}/steps/{step-id}/duration # 为特定菜谱修改特定步骤的花费时长

DELETE /dishes/{id} # 删除特定 ID 的菜谱  
</code></pre>

<p>哪个理解起来一目了然，恐怕是不言而喻的。那么问题出在哪儿呢？</p>

<ul>
<li>在这个示例里，光 RPC 设计风格 API 里就有足足 6 个动词：<code>select</code>、<code>add</code>、<code>modify</code>、<code>append</code>、<code>`delete</code>、<code>exchange</code>。其中 <code>add</code> 和 <code>append</code> 本质上是一样的，只是设计的时候选择不一样而已，而 <code>exchange</code> 更是新的动词。原教旨主义把动词限定在了「增删改查」四个，其中唯一反直觉的是 <code>exchange</code> 被设计成了「向 <code>exchanges</code> 增加数据」，但和「重新理解一个 <code>exchange</code> 动词」相比，这点程度的反直觉又算得上什么呢？</li>
<li>在这个示例里同时出现了 <code>modifyStepById</code> 和 <code>modifyStepDurationById</code> 两个接口，而前者由于历史遗留原因其实只负责修改名字——新开发者在看到具体的调用约定（<code>POST</code> 的 JSON 格式等）之前是很难在大脑里形成一个直观的认识的。原教旨主义会在一开始就「逼迫」你在设计 API 的时候把 <code>/name</code> 写上去，哪怕是对整个步骤修改的 API，也在逼着你保证你修改的和你查询的是一个东西。</li>
<li>在这个示例里开发者很难一眼看出哪些是「所有数据」、哪些是「特定数据」、哪些是「和步骤有关的数据」，这些本质上是因为在设计的时候便偷了懒——原教旨主义同样在一开始设计的时候就在「逼迫」你想清楚这个问题——至少所有「和步骤有关的数据」全都在 <code>/steps</code> 下。</li>
</ul>

<p>在我个人看来，原教旨主义 RESTful API 风格固然设计得很别扭，但是它至少在让你设计的时候便在「逼迫」你理清楚你到底在做什么，而不是通过一开始的偷懒，在后续阶段增加不必要的理解成本。总的来说，原教旨主义 RESTful API 风格带来的设计上的反直觉等代价和后续维护增加的理解成本相比不值一提。</p>

<p>以上都是我的个人观点。如果想要对上面说的这些提出一点批判的话，希望各位就事论事，而不是单纯地用「你写过 xxx 吗」什么的来攻击我。</p>]]></content:encoded></item><item><title><![CDATA[自定义发光效果——浅谈着色器和帧缓冲在 Minecraft 的运用]]></title><description><![CDATA[<p>本篇文章首发于 TeaCon Blog：<a href="https://blog.teacon.org/shaders-and-framebuffers.html">https://blog.teacon.org/shaders-and-framebuffers.html</a></p>

<hr>

<p>本文基于：</p>

<ul>
<li>Java 11.0.8</li>
<li>Minecraft 1.15.2</li>
<li>Minecraft Forge 31.2.0</li>
<li>MCP Mapping 20200514-1.15.1</li>
</ul>

<p>读者可以在这里下载到本文的源代码：<a download="source.zip" href="data:application/zip;base64,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Dhnds0QeoSLBtCZHDoxYTdpJSQVSUmtf33s5FNSUSIGcZgJylVCuUJ3XpVbM1PpzkHeIrX58Zq/BeEx32E2svgn8SaoN0+IVlmFGT1Ee4DXHvBTFIDAHb26gFtjnstcHYLoLOg6jwI/CKL0JnD0dsyVsUctxr5ljk34ltTdf8MOpRW1q8T9TQ/WDv+ZdkRrvAlBLAwQUAAIACABsk3tRVjTBi1EAAABpAAAAHgAAAHNyYy9tYWluL3Jlc291cmNlcy9wYWNrLm1jbWV0YavmUgACpYLE5GwlK4VqMA8uEp+WX5SbWAKUMNVByKSkFicXZRaUZObnAWWUUisScwtyUnMyS9JKi/ISk1MzchSKUovzS4uSU4uVwNpquWq5AFBLAQIeAxQAAgAIAEgVkU8bWxM5igAAALwAAAAKAAAAAAAAAAEAAADtgQAAAAAuZ2l0aWdub3JlUEsBAh4DFAACAAgABJN8UaySeMR+AgAAPAQAAAcAAAAAAAAAAQAAAO2BsgAAAExJQ0VOU0VQSwECHgMUAAIACAAIm3tRwjeQVAIDAADcCQAADAAAAAAAAAABAAAA7YFVAwAAYnVpbGQuZ3JhZGxlUEsBAh4DFAACAAgASBWRT5Jt4rmnAAAA7AAAABEAAAAAAAAAAQAAAO2BgQYAAGdyYWRsZS5wcm9wZXJ0aWVzUEsBAh4DFAACAAgASBWRT8cOd+GOvwAAtNUAACEAAAAAAAAAAAAAAO2BVwcAAGdyYWRsZS93cmFwcGVyL2dyYWRsZS13cmFwcGVyLmphclBLAQIeAxQAAgAIALeRe1G7PUuHfQAAAMoAAAAoAAAAAAAAAAEAAADtgSTHAABncmFkbGUvd3JhcHBlci9ncmFkbGUtd3JhcHBlci5wcm9wZXJ0aWVzUEsBAh4DFAACAAgASBWRT60ODPj3BwAAsBQAAAcAAAAAAAAAAQAAAO2B58cAAGdyYWRsZXdQSwECHgMUAAIACABFiY9QZ+7a630DAADUCAAACwAAAAAAAAABAAAA7YED0AAAZ3JhZGxldy5iYXRQSwECHgMUAAIACABjsHxRwjc73okHAACpGQAATwAAAAAAAAABAAAA7YGp0wAAc3JjL21haW4vamF2YS9vcmcvdGVhY29uL2V4YW1wbGVsaXRmdXJuYWNlaGwvRXhhbXBsZUxpdEZ1cm5hY2VIaWdobGlnaHRpbmcuamF2YVBLAQIeAxQAAgAIAGyTe1EMITBd5wAAAMcBAAAlAAAAAAAAAAEAAADtgZ/bAABzcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbW9kcy50b21sUEsBAh4DFAACAAgAc4Z8UXf37gzXAAAAAQQAAE8AAAAAAAAAAQAAAO2BydwAAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZXhhbXBsZWxpdGZ1cm5hY2VobC9zaGFkZXJzL3Bvc3QvZnVybmFjZV9vdXRsaW5lLmpzb25QSwECHgMUAAIACABsk3tRVjTBi1EAAABpAAAAHgAAAAAAAAABAAAA7YEN3gAAc3JjL21haW4vcmVzb3VyY2VzL3BhY2subWNtZXRhUEsFBgAAAAAMAAwAkgMAAJreAAAAAA==">source.zip</a>（56.6 KiB）。</p>

<p><a href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh"><img src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" alt="" title=""></a> <br>
本篇文章由 TeaConMC 采用<a href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh">知识共享-署名-相同方式共享 4.0 国际许可协议</a>进行许可。</p>

<h2 id="">引言</h2>

<p><a href="https://minecraft-zh.gamepedia.com/%E5%8F%91%E5%85%89">发光效果</a>于 Minecraft 1.9 正式引入。发光效果的引入是划时代的：</p>]]></description><link>https://blog.ustc-zzzz.net/minecraft-shaders-and-framebuffers/</link><guid isPermaLink="false">14556f7d-eca4-4cc7-a0ee-648deb55bbda</guid><category><![CDATA[Minecraft]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Sat, 28 Nov 2020 16:00:00 GMT</pubDate><content:encoded><![CDATA[<p>本篇文章首发于 TeaCon Blog：<a href="https://blog.teacon.org/shaders-and-framebuffers.html">https://blog.teacon.org/shaders-and-framebuffers.html</a></p>

<hr>

<p>本文基于：</p>

<ul>
<li>Java 11.0.8</li>
<li>Minecraft 1.15.2</li>
<li>Minecraft Forge 31.2.0</li>
<li>MCP Mapping 20200514-1.15.1</li>
</ul>

<p>读者可以在这里下载到本文的源代码：<a download="source.zip" href="data:application/zip;base64,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Dhnds0QeoSLBtCZHDoxYTdpJSQVSUmtf33s5FNSUSIGcZgJylVCuUJ3XpVbM1PpzkHeIrX58Zq/BeEx32E2svgn8SaoN0+IVlmFGT1Ee4DXHvBTFIDAHb26gFtjnstcHYLoLOg6jwI/CKL0JnD0dsyVsUctxr5ljk34ltTdf8MOpRW1q8T9TQ/WDv+ZdkRrvAlBLAwQUAAIACABsk3tRVjTBi1EAAABpAAAAHgAAAHNyYy9tYWluL3Jlc291cmNlcy9wYWNrLm1jbWV0YavmUgACpYLE5GwlK4VqMA8uEp+WX5SbWAKUMNVByKSkFicXZRaUZObnAWWUUisScwtyUnMyS9JKi/ISk1MzchSKUovzS4uSU4uVwNpquWq5AFBLAQIeAxQAAgAIAEgVkU8bWxM5igAAALwAAAAKAAAAAAAAAAEAAADtgQAAAAAuZ2l0aWdub3JlUEsBAh4DFAACAAgABJN8UaySeMR+AgAAPAQAAAcAAAAAAAAAAQAAAO2BsgAAAExJQ0VOU0VQSwECHgMUAAIACAAIm3tRwjeQVAIDAADcCQAADAAAAAAAAAABAAAA7YFVAwAAYnVpbGQuZ3JhZGxlUEsBAh4DFAACAAgASBWRT5Jt4rmnAAAA7AAAABEAAAAAAAAAAQAAAO2BgQYAAGdyYWRsZS5wcm9wZXJ0aWVzUEsBAh4DFAACAAgASBWRT8cOd+GOvwAAtNUAACEAAAAAAAAAAAAAAO2BVwcAAGdyYWRsZS93cmFwcGVyL2dyYWRsZS13cmFwcGVyLmphclBLAQIeAxQAAgAIALeRe1G7PUuHfQAAAMoAAAAoAAAAAAAAAAEAAADtgSTHAABncmFkbGUvd3JhcHBlci9ncmFkbGUtd3JhcHBlci5wcm9wZXJ0aWVzUEsBAh4DFAACAAgASBWRT60ODPj3BwAAsBQAAAcAAAAAAAAAAQAAAO2B58cAAGdyYWRsZXdQSwECHgMUAAIACABFiY9QZ+7a630DAADUCAAACwAAAAAAAAABAAAA7YED0AAAZ3JhZGxldy5iYXRQSwECHgMUAAIACABjsHxRwjc73okHAACpGQAATwAAAAAAAAABAAAA7YGp0wAAc3JjL21haW4vamF2YS9vcmcvdGVhY29uL2V4YW1wbGVsaXRmdXJuYWNlaGwvRXhhbXBsZUxpdEZ1cm5hY2VIaWdobGlnaHRpbmcuamF2YVBLAQIeAxQAAgAIAGyTe1EMITBd5wAAAMcBAAAlAAAAAAAAAAEAAADtgZ/bAABzcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbW9kcy50b21sUEsBAh4DFAACAAgAc4Z8UXf37gzXAAAAAQQAAE8AAAAAAAAAAQAAAO2BydwAAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZXhhbXBsZWxpdGZ1cm5hY2VobC9zaGFkZXJzL3Bvc3QvZnVybmFjZV9vdXRsaW5lLmpzb25QSwECHgMUAAIACABsk3tRVjTBi1EAAABpAAAAHgAAAAAAAAABAAAA7YEN3gAAc3JjL21haW4vcmVzb3VyY2VzL3BhY2subWNtZXRhUEsFBgAAAAAMAAwAkgMAAJreAAAAAA==">source.zip</a>（56.6 KiB）。</p>

<p><a href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh"><img src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" alt="" title=""></a> <br>
本篇文章由 TeaConMC 采用<a href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh">知识共享-署名-相同方式共享 4.0 国际许可协议</a>进行许可。</p>

<h2 id="">引言</h2>

<p><a href="https://minecraft-zh.gamepedia.com/%E5%8F%91%E5%85%89">发光效果</a>于 Minecraft 1.9 正式引入。发光效果的引入是划时代的：它使得基于着色器的可编程图形管线（Programmable Graphics Pipeline）正式作为不可或缺的游戏特性被引入，而非仅仅通过点击 Super Secret Settings 这一若有若无的按钮，或是当玩家在旁观模式观察生物时才会引起玩家的注意。</p>

<p>发光效果的实际渲染方式需要首先计算特定边缘，然后在计算得到的边缘处绘制外框。这一操作固然可以使用 CPU 完成，但是交给 GPU 计算显然是更好的选择，<strong>着色器</strong>（Shader）便是用于交给 GPU 计算的小程序，与之有关的编程语言被称为 OpenGL Shader Language，简称 GLSL。</p>

<p>因为计算边缘这一特定需求，因此发光效果必须单独渲染，不能和已有的世界渲染等直接混合（否则世界中其他的「边缘」便会一并囊括进来），这也是我们需要在渲染过程中引入额外<strong>帧缓冲</strong>（Framebuffer）的必要性所在。</p>

<p>本篇文章将以使工作中的熔炉（Furnace）和高炉（Blast Furnace）发光为目标，演示整个渲染过程。以下是大致的渲染流程：</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/11/image1-3.png" alt=""></p>

<p>本文中的示例 Mod ID 为 <code>examplelitfurnacehl</code>。</p>

<h2 id="minecraft">Minecraft 中的着色器和帧缓冲</h2>

<p>在 Minecraft 1.15.2 中，控制着色器的类为 <code>net.minecraft.client.shader.ShaderGroup</code>，我们会用到它的以下几个方法：</p>

<ul>
<li><code>createBindFramebuffers</code>：用于调整着色器对应的帧缓冲的长宽。</li>
<li><code>getFramebufferRaw</code>：用于获取着色器相关联的帧缓冲。</li>
<li><code>render</code>：为特定的帧缓冲应用着色器。</li>
<li><code>close</code>：清理内存。</li>
</ul>

<p>帧缓冲相关的类为 <code>net.minecraft.client.shader.Framebuffer</code>，我们会用到：</p>

<ul>
<li><code>framebufferRenderExt</code>：把一个帧缓冲中的渲染数据全部渲染到另一个帧缓冲上。</li>
<li><code>bindFramebuffer</code>：绑定该帧缓冲（亦即接下来的渲染操作全部针对该帧缓冲）。</li>
<li><code>framebufferClear</code>：清空帧缓冲中的渲染数据。</li>
</ul>

<p>每个 <code>ShaderGroup</code> 的实例都对应到一个 JSON 文件。通常该 JSON 文件位于资源包中特定 Mod ID 所处资源路径下的 <code>shaders/post</code> 目录中，本文为 <code>assets/examplelitfurnacehl/shaders/post</code> 目录下的 <code>furnace_outline.json</code>。以下是该 JSON 的全部内容：</p>

<pre><code class="language-json">{
    "targets": [
        "examplelitfurnacehl:swap",
        "examplelitfurnacehl:final"
    ],
    "passes": [{
        "name": "minecraft:entity_outline",
        "intarget": "examplelitfurnacehl:final",
        "outtarget": "examplelitfurnacehl:swap"
    }, {
        "name": "minecraft:blur",
        "intarget": "examplelitfurnacehl:swap",
        "outtarget": "examplelitfurnacehl:final",
        "uniforms": [{
            "name": "BlurDir",
            "values": [1.0, 0.0]
        }, {
            "name": "Radius",
            "values": [2.0]
        }]
    }, {
        "name": "minecraft:blur",
        "intarget": "examplelitfurnacehl:final",
        "outtarget": "examplelitfurnacehl:swap",
        "uniforms": [{
            "name": "BlurDir",
            "values": [0.0, 1.0]
        }, {
            "name": "Radius",
            "values": [2.0]
        }]
    }, {
        "name": "minecraft:blit",
        "intarget": "examplelitfurnacehl:swap",
        "outtarget": "examplelitfurnacehl:final"
    }]
}
</code></pre>

<p><code>targets</code> 代表创建多少相关联的帧缓冲，这里创建了两个：</p>

<ul>
<li>第一个帧缓冲名为 <code>examplelitfurnacehl:swap</code>。</li>
<li>第二个帧缓冲名为 <code>examplelitfurnacehl:final</code>。</li>
</ul>

<p><code>passes</code> 代表应用着色器的渲染次数，这里一共四次，由三组着色器控制：</p>

<ul>
<li>第一次由 <code>minecraft:entity_outline</code> 控制，负责边缘探测。</li>
<li>第二次和第三次由 <code>minecraft:blur</code> 控制，负责动态模糊。</li>
<li>最后一次由 <code>minecraft:blit</code> 控制，负责单纯复制。</li>
</ul>

<p>注意动态模糊一共两次，一次是水平方向的，一次是竖直方向的，由下面 <code>uniforms</code> 中 <code>BlurDir</code> 对应的值确定。事实上 <code>uniforms</code> 将会作为 GLSL 的 <code>uniform</code> 输入传递给着色器。</p>

<p>每一组着色器的控制文件位于资源包中特定 Mod ID 所处资源路径下的 <code>shaders/program</code> 目录，比如 <code>assets/minecraft/shaders/program</code> 目录下的 <code>blur.json</code>。该文件由 Minecraft 本身提供，对应 <code>minecraft:blur</code>，其中定义了每一次渲染是如何进行的。以下是该文件的大致内容：</p>

<pre><code class="language-json">{
    "blend": {
        "func": "add",
        "srcrgb": "one",
        "dstrgb": "zero"
    },
    "vertex": "sobel",
    "fragment": "blur",
    "attributes": ["Position"],
    "samplers": [{
        "name": "DiffuseSampler"
    }],
    "uniforms": [{
        "name": "ProjMat",
        "type": "matrix4x4",
        "count": 16,
        "values": [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
    }, {
        "name": "InSize",
        "type": "float",
        "count": 2,
        "values": [1.0, 1.0]
    }, {
        "name": "OutSize",
        "type": "float",
        "count": 2,
        "values": [1.0, 1.0]
    }, {
        "name": "BlurDir",
        "type": "float",
        "count": 2,
        "values": [1.0, 1.0]
    }, {
        "name": "Radius",
        "type": "float",
        "count": 1,
        "values": [5.0]
    }]
}
</code></pre>

<ul>
<li><code>blend</code> 代表混合模式。</li>
<li><code>vertex</code> 代表顶点着色器的位置。</li>
<li><code>fragment</code> 代表片元着色器的位置。</li>
<li><code>attributes</code> 代表着色器的 <code>attribute</code> 输入，通常只用得到 <code>Position</code>。</li>
<li><code>samplers</code> 代表着色器的 <code>sampler2D</code> 输入，通常只用得到 <code>DiffuseSampler</code>。</li>
<li><code>uniforms</code> 代表着色器的 <code>uniform</code> 输入和默认值，通常而言它们是固定的。</li>
</ul>

<p><code>ShaderGroup</code> 中的每一次渲染，本质上都是将一个帧缓冲中的渲染数据提取出来，重新绘制到另一个帧缓冲上，这使得顶点着色器虽然不是完全没有用处，但一定程度上也有一点鸡肋——只有固定的 1 个面和 4 个顶点，因此不同的 <code>ShaderGroup</code> 复用同一个顶点着色器是很常发生的事情，不过片元着色器相对而言要有用得多。</p>

<p>可能有读者对边缘探测的算法感兴趣，其实就是相当于对整个渲染数据做了一次差分计算，感兴趣的可以进一步了解 <a href="https://zh.wikipedia.org/wiki/%E7%B4%A2%E8%B4%9D%E5%B0%94%E7%AE%97%E5%AD%90">Sobel Filter</a> 相关的资料。</p>

<h2 id="mod">Mod 主类</h2>

<p>以下是最初的 Mod 主类（已略去 <code>package</code> 和 <code>import</code>）：</p>

<pre><code class="language-java">@Mod(ExampleLitFurnaceHighlighting.ID)
public final class ExampleLitFurnaceHighlighting {  
    public static final String ID = "examplelitfurnacehl";
    public static final Logger LOGGER = LogManager.getLogger(ExampleLitFurnaceHighlighting.class);

    public ExampleLitFurnaceHighlighting() {
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelRegistry);
        MinecraftForge.EVENT_BUS.addListener(this::onRenderWorldLast);
    }

    private void onModelRegistry(ModelRegistryEvent event) {
        // TODO
    }

    private void onRenderWorldLast(RenderWorldLastEvent event) {
        // TODO: step 0
        // TODO: step 1
        // TODO: step 2
        // TODO: step 3
        // TODO: step 4
        // TODO: step 5
        // TODO: step 6
        // TODO: step 7
        // TODO: step 8
        // TODO: step 9
    }
}
</code></pre>

<p>我们把 <code>onModelRegistry</code> 和 <code>onRenderWorldLast</code> 两个方法的方法引用作为事件监听器，稍后我们再完善这两个方法的实现。</p>

<h2 id="">加载着色器和帧缓冲</h2>

<p>由于 <code>ShaderGroup</code> 的相关定义位于资源包中，因此我们需要在资源包重新加载（如按下 <code>F3 + T</code>）时生成新的 <code>ShaderGroup</code>，因此我们需要寻找每次重新加载时都触发的事件。在 Minecraft Forge 中，我们可以监听 <code>net.minecraftforge.client.event.ModelRegistryEvent</code>。</p>

<p>以下是 <code>onModelRegistry</code> 的实现：</p>

<pre><code class="language-java">private int framebufferWidth = -1;  
private int framebufferHeight = -1;

private ShaderGroup shaders = null;

private void onModelRegistry(ModelRegistryEvent event) {  
    if (this.shaders != null) this.shaders.close();

    this.framebufferWidth = this.framebufferHeight = -1;

    var resourceLocation = new ResourceLocation(ID, "shaders/post/furnace_outline.json");

    try {
        var mc = Minecraft.getInstance();
        var mainFramebuffer = mc.getFramebuffer();
        var textureManager = mc.getTextureManager();
        var resourceManager = mc.getResourceManager();
        this.shaders = new ShaderGroup(textureManager, resourceManager, mainFramebuffer, resourceLocation);
    } catch (IOException | JsonSyntaxException e) {
        LOGGER.warn("Failed to load shader: {}", resourceLocation, e);
        this.shaders = null;
    }
}
</code></pre>

<p>注意这里我们还没有调整着色器对应的帧缓冲的长宽，因此我们新建了两个名为 <code>framebufferWidth</code> 和 <code>framebufferHeight</code> 的字段，并且把它们都设成 <code>-1</code>，稍后我们会在渲染的时候填入正确的值。</p>

<p><code>mainFramebuffer</code> 是游戏的主帧缓冲，所有玩家能看得到的画面，对应的都是这一帧缓冲的渲染数据。</p>

<h2 id="">完成渲染</h2>

<p>我们需要在世界渲染完成后在我们自己的帧缓冲上完成渲染，并叠加到游戏的主帧缓冲上，因此我们需要 Minecraft Forge 提供的名为 <code>net.minecraftforge.client.event.RenderWorldLastEvent</code> 的事件。</p>

<h3 id="">收集方块数据</h3>

<p>首先我们检查 <code>ShaderGroup</code> 是否受支持：</p>

<pre><code class="language-java">// step 0: check if shaders are supported
if (this.shaders == null) return;  
</code></pre>

<p>然后遍历客户端世界所有的 <code>TileEntity</code>，从而确定所有工作中的熔炉和高炉：</p>

<pre><code class="language-java">// step 1: collect furnaces
var mc = Minecraft.getInstance();  
var world = Objects.requireNonNull(mc.world);  
var furnaceCollection = new HashMap&lt;BlockPos, BlockState&gt;();  
for (var tileEntity : world.loadedTileEntityList) {  
    var blockState = tileEntity.getBlockState();
    if (Blocks.FURNACE.equals(blockState.getBlock()) &amp;&amp; blockState.get(BlockStateProperties.LIT)) {
        furnaceCollection.put(tileEntity.getPos(), blockState);
    }
    if (Blocks.BLAST_FURNACE.equals(blockState.getBlock()) &amp;&amp; blockState.get(BlockStateProperties.LIT)) {
        furnaceCollection.put(tileEntity.getPos(), blockState);
    }
}
if (furnaceCollection.isEmpty()) return;  
</code></pre>

<p>如果不存在这样的 <code>TileEntity</code>，那么也没有进行下一步渲染的必要了。</p>

<h3 id="">设置帧缓冲的长宽</h3>

<p>我们还没设置帧缓冲的长宽，我们把长宽缓存到两个字段中，如果发现不一样（比如说玩家调整了窗口的大小等）则重新设置一次。</p>

<pre><code class="language-java">// step 2: resize our framebuffer
var mainWindow = mc.getMainWindow();  
var width = mainWindow.getFramebufferWidth();  
var height = mainWindow.getFramebufferHeight();  
if (width != this.framebufferWidth || height != this.framebufferHeight) {  
    this.framebufferWidth = width;
    this.framebufferHeight = height;
    this.shaders.createBindFramebuffers(width, height);
}
</code></pre>

<h3 id="">收集顶点数据</h3>

<p>Minecraft 自身提供了 <code>net.minecraft.client.renderer.BufferBuilder</code> 用于收集顶点数据。</p>

<pre><code class="language-java">private final BufferBuilder bufferBuilder = new BufferBuilder(256);

// step 3: prepare block faces
var matrixStack = event.getMatrixStack();  
var dispatcher = mc.getBlockRendererDispatcher();  
var view = mc.gameRenderer.getActiveRenderInfo().getProjectedView();  
this.bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION);  
for (var entry : furnaceCollection.entrySet()) {  
    var blockPos = entry.getKey();
    var blockState = entry.getValue();
    var model = dispatcher.getModelForState(blockState);

    matrixStack.push();
    matrixStack.translate(-view.getX(), -view.getY(), -view.getZ());
    matrixStack.translate(blockPos.getX(), blockPos.getY(), blockPos.getZ());

    dispatcher.getBlockModelRenderer().renderModel(
            matrixStack.getLast(), this.bufferBuilder, blockState, model,
            /*red*/1.0F, /*green*/1.0F, /*blue*/1.0F, /*light*/0xFFFFFFFF,
            /*overlay*/OverlayTexture.NO_OVERLAY, /*model data*/EmptyModelData.INSTANCE);

    matrixStack.pop();
}
this.bufferBuilder.finishDrawing();  
</code></pre>

<p>开始收集数据（<code>begin</code> 方法）需要两个参数。其中，第一个参数是 <code>GL11.GL_QUADS</code>，因为是方块数据的默认形式，而第二个参数我们采用了 <code>DefaultVertexFormats.POSITION</code>，因为我们根本不需要顶点位置之外的任何数据（通常情况下的渲染还需要颜色材质等其他数据）。</p>

<p>此外，注意 <code>matrixStack</code> 需要平移两次，一次针对玩家位置，一次针对方块位置。</p>

<h3 id="">渲染到我们的帧缓冲</h3>

<p>首先需要绑定我们的帧缓冲。通过分析上面提到的 JSON，我们可以注意到，我们需要绑定的帧缓冲的名称是 <code>examplelitfurnacehl:final</code>：</p>

<pre><code class="language-java">// step 4: bind our framebuffer
var framebuffer = this.shaders.getFramebufferRaw(ID + ":final");  
framebuffer.framebufferClear(Minecraft.IS_RUNNING_ON_MAC);  
framebuffer.bindFramebuffer(/*set viewport*/false);  
</code></pre>

<p>然后执行渲染，注意我们：</p>

<ul>
<li>不需要和已有的渲染数据混合</li>
<li>不需要绑定任何材质</li>
<li>不需要透明度测试</li>
<li>不需要深度数据</li>
<li>重置颜色</li>
</ul>

<pre><code class="language-java">// step 5: render block faces to our framebuffer
RenderSystem.disableBlend();  
RenderSystem.disableTexture();  
RenderSystem.disableAlphaTest();  
RenderSystem.depthMask(/*flag*/false);  
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);  
WorldVertexBufferUploader.draw(this.bufferBuilder);  
</code></pre>

<p>上面有一些设置不是针对可编程图形管线的，但是由于 Minecraft 目前并没有采用纯粹的可编程图形管线（亦即 OpenGL Core Profile），因此还是需要设置一下。</p>

<h3 id="">使用着色器渲染</h3>

<p>使用着色器渲染不需要绑定特定的帧缓冲。</p>

<pre><code class="language-java">// step 6: apply shaders
this.shaders.render(event.getPartialTicks());  
</code></pre>

<p>刚才的 JSON 告诉我们，我们最终仍然渲染到 <code>examplelitfurnacehl:final</code>，稍后我们会重新用到这一帧缓冲。</p>

<h3 id="">渲染到主帧缓冲</h3>

<p>渲染之前首先要绑定主帧缓冲：</p>

<pre><code class="language-java">// step 7: bind main framebuffer
mc.getFramebuffer().bindFramebuffer(/*set viewport*/false);  
</code></pre>

<p>然后把混合打开，执行最终渲染。注意 <code>Dst</code> 是主帧缓冲，<code>Src</code> 是我们自己的帧缓冲：</p>

<pre><code class="language-java">// step 8: render our framebuffer to main framebuffer
RenderSystem.enableBlend();  
RenderSystem.blendFuncSeparate(  
        GlStateManager.SourceFactor.SRC_ALPHA,
        GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA,
        GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE);
framebuffer.framebufferRenderExt(width, height, /*replacement*/false);  
</code></pre>

<h3 id="">收尾</h3>

<p>记得把弄乱了的设置复原回去：</p>

<pre><code class="language-java">// step 9: clean up
RenderSystem.disableBlend();  
RenderSystem.enableTexture();  
RenderSystem.depthMask(/*flag*/true);  
</code></pre>

<h2 id="">最终效果</h2>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/11/image2.png" alt=""></p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/11/image3.png" alt=""></p>

<p>TeaConMC 旗下的开源项目 <a href="https://github.com/teaconmc/SlideShow/tree/feature/projector-highlighting-new">Slide Show</a> 已经将上述特性写进相关代码中，并作为方便创造模式玩家寻找被埋藏的方块的一种解决方案。</p>]]></content:encoded></item><item><title><![CDATA[从 Lambda 表达式中捕获类型参数]]></title><description><![CDATA[<h2 id="">引言</h2>

<p>Forge 在高版本（Minecraft 1.13+）为事件总线添加了使用 Functional Interface 监听事件的方式。以下是接口声明：</p>

<pre><code class="language-java">&lt;T extends Event&gt; void addListener(Consumer&lt;T&gt; consumer);  
</code></pre>

<p>我们可以注意到，我们不需要向 <code>addListener</code> 方法传入一个额外的 <code>Class</code> 代表事件的类型，也就是说事件类型只能通过我们传入的 <code>Consumer&lt;T&gt;</code> 拿到。换言之，我们需要从 <code>Consumer&lt;T&gt;</code> 中推断出具体的 <code>T</code> 是什么类型，考虑到 Java 的泛型擦除机制，这不得不说是一个困难。</p>

<p>本文将以 <code>Consumer&</code></p>]]></description><link>https://blog.ustc-zzzz.net/capturing-lambda-parameter-type/</link><guid isPermaLink="false">8adc48da-4e53-40fd-b81c-32940cac1765</guid><category><![CDATA[Minecraft]]></category><category><![CDATA[Modded Minecraft Dev]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Sun, 28 Jun 2020 15:12:00 GMT</pubDate><content:encoded><![CDATA[<h2 id="">引言</h2>

<p>Forge 在高版本（Minecraft 1.13+）为事件总线添加了使用 Functional Interface 监听事件的方式。以下是接口声明：</p>

<pre><code class="language-java">&lt;T extends Event&gt; void addListener(Consumer&lt;T&gt; consumer);  
</code></pre>

<p>我们可以注意到，我们不需要向 <code>addListener</code> 方法传入一个额外的 <code>Class</code> 代表事件的类型，也就是说事件类型只能通过我们传入的 <code>Consumer&lt;T&gt;</code> 拿到。换言之，我们需要从 <code>Consumer&lt;T&gt;</code> 中推断出具体的 <code>T</code> 是什么类型，考虑到 Java 的泛型擦除机制，这不得不说是一个困难。</p>

<p>本文将以 <code>Consumer&lt;T&gt;</code> 类型为例，阐述将类型参数从泛型类型的实例（尤其是 Lambda 表达式）中捕获的方式。读者应能相对容易地将其推广到其他类型。</p>

<p>本文将使用 Java 11（实际上相较基于 Java 8 的等价代码，只是单纯地多了一些 <code>var</code> 而已），以证明该解决方案不单纯限于 Java 8 或更低版本。</p>

<h2 id="">常规解决方案</h2>

<p>有的读者可能会说，这很简单啊：我们只需要通过一点反射的小技巧，就可以拿到具体的类型。</p>

<p>类似的实现有很多，比如 Guava 在 <code>TypeToken</code> 中的实现。这里我们也随手写一个：</p>

<pre><code class="language-java">public static Class&lt;?&gt; getErased(Type type)  
{
    if (type instanceof ParameterizedType)
    {
        return getErased(((ParameterizedType) type).getRawType());
    }
    if (type instanceof GenericArrayType)
    {
        return Array.newInstance(getErased(((GenericArrayType) type).getGenericComponentType()), 0).getClass();
    }
    if (type instanceof TypeVariable&lt;?&gt;)
    {
        var bounds = ((TypeVariable&lt;?&gt;) type).getBounds();
        return bounds.length &gt; 0 ? getErased(bounds[0]) : Object.class;
    }
    if (type instanceof WildcardType)
    {
        var bounds = ((WildcardType) type).getUpperBounds();
        return bounds.length &gt; 0 ? getErased(bounds[0]) : Object.class;
    }
    if (type instanceof Class&lt;?&gt;)
    {
        return (Class&lt;?&gt;) type;
    }
    return Object.class;
}

public static Class&lt;?&gt; getConsumerParameterType(Consumer&lt;?&gt; consumer) throws ReflectiveOperationException  
{
    for (var type : consumer.getClass().getGenericInterfaces())
    {
        if (type instanceof ParameterizedType &amp;&amp; ((ParameterizedType) type).getRawType() == Consumer.class)
        {
            return getErased(((ParameterizedType) type).getActualTypeArguments()[0]);
        }
    }
    if (consumer.getClass().isSynthetic())
    {
        return getConsumerLambdaParameterType(consumer);
    }
    throw new NoSuchMethodException();
}
</code></pre>

<p><code>getConsumerParameterType</code> 方法的实现对于匿名内部类非常完美，换句话说，下面这一实例中的具体参数类型将会很容易地被捕获：</p>

<pre><code class="language-java">Consumer&lt;String&gt; a = new Consumer&lt;String&gt;  
{
    @Override
    public void accept(String s)
    {
        System.out.println(s);
    }
}
</code></pre>

<p>但对于 Lambda 表达式（也包括方法引用）呢？</p>

<pre><code class="language-java">Consumer&lt;String&gt; b = s -&gt; System.out.println(s);  
Consumer&lt;String&gt; c = System.out::println;  
</code></pre>

<p>实际上，我们从 Lambda 表达式中，根本拿不到一个 <code>ParameterizedType</code>，更不要说从里面提取参数类型了。我们需要其他的方法，当然了，也是更为 dirty hack 的方法。</p>

<h2 id="lambda">探究 Lambda 表达式常量池</h2>

<p>每个 <code>.class</code> 后缀的文件中都有一段二进制存放的是该类或接口的常量池（Constant Pool），其中包含着描述每个字段和方法的符号引用。</p>

<p>我们知道，对于每个 Lambda 表达式，JVM 都会为其生成对应的类型，而它们也包含了常量池。我们需要做的，就是把 Lambda 表达式对应的常量池提取出来，并寻找对我们有用的方法的符号引用。</p>

<p>我们需要排除这些符号引用：</p>

<ul>
<li>构造方法的符号引用</li>
<li>覆盖 <code>Object</code> 类的方法的符号引用</li>
</ul>

<p>我们可以通过调用 <code>Class</code> 类的 <code>getConstantPool</code> 方法（非公开）拿到常量池，也就是 <code>ConstantPool</code> 类的实例。但是，从 Java 9 开始，常量池的实现被移动到了 <code>jdk.internal.reflect</code> 包下，换言之，如果想要调用常量池的一些非公开方法，我们需要一些更激进的策略。</p>

<p>我们可以通过替换 <code>Method</code> 类下的 <code>override</code> 字段来绕过 JVM 的限制。为此，我们先编写辅助用的方法：</p>

<pre><code class="language-java">public static Method getMethod(Class&lt;?&gt; objClass, String methodName) throws NoSuchMethodException  
{
    for (var method : objClass.getDeclaredMethods())
    {
        if (methodName.equals(method.getName()))
        {
            return method;
        }
    }
    throw new NoSuchMethodException();
}

public static Object invoke(Object obj, String methodName, Object... args) throws ReflectiveOperationException  
{
    var overrideField = AccessibleObject.class.getDeclaredField("override");
    overrideField.setAccessible(true);
    var targetMethod = getMethod(obj.getClass(), methodName);
    overrideField.set(targetMethod, true);
    return targetMethod.invoke(obj, args);
}
</code></pre>

<p>上面的 <code>invoke</code> 方法将会找到特定名称的方法，并针对性的调用该方法。由于仅为演示可行性用，因此上面的方法并未考虑性能，因此如果读者需要在实际开发中用到，请自行对该实现进行优化。</p>

<h2 id="">从常量池中获取参数类型</h2>

<p>我们将接下来的工作分为四步：</p>

<ul>
<li>找到 Lambda 表达式对应的 <code>Class</code> 的常量池</li>
<li>依次遍历常量池中对方法的符号引用</li>
<li>排除无关方法的符号引用</li>
<li>从第一个满足条件的方法中取出参数类型</li>
</ul>

<p>需要用到 <code>ConstantPool</code> 的两个方法：</p>

<ul>
<li><code>getSize</code> 方法：用于获取常量池的元素个数</li>
<li><code>getMethodAt</code> 方法：用于获取常量池特定位置对方法的符号引用</li>
</ul>

<p>注意如果 <code>getMethodAt</code> 寻找的位置对应的不是对方法的符号引用，调用该方法将会报错。我们需要把该报错屏蔽掉，然后尝试寻找下一个常量池中的元素。</p>

<p>下面的实现贯彻了上面提到的四步。需要注意的一点是，遍历常量池是倒序进行的：</p>

<pre><code class="language-java">public static Class&lt;?&gt; getConsumerLambdaParameterType(Consumer&lt;?&gt; consumer) throws ReflectiveOperationException  
{
    var consumerClass = consumer.getClass();
    var constantPool = invoke(consumerClass, "getConstantPool");
    for (var i = (int) invoke(constantPool, "getSize") - 1; i &gt;= 0; --i)
    {
        try
        {
            var member = (Member) invoke(constantPool, "getMethodAt", i);
            if (member instanceof Method &amp;&amp; member.getDeclaringClass() != Object.class)
            {
                return ((Method) member).getParameterTypes()[0];
            }
        }
        catch (Exception ignored)
        {
            // ignored
        }
    }
    throw new NoSuchMethodException();
}
</code></pre>

<p>我们可以把该方法的调用补充到之前编写的 <code>getConsumerParameterType</code> 方法下。这里使用的判别标准是该方法所对应的类是否是 Java 编译器自动生成的（<code>isSynthetic</code> 方法返回 <code>true</code>）：</p>

<pre><code class="language-java">public static Class&lt;?&gt; getConsumerParameterType(Consumer&lt;?&gt; consumer) throws ReflectiveOperationException  
{
    for (var type : consumer.getClass().getGenericInterfaces())
    {
        if (type instanceof ParameterizedType &amp;&amp; ((ParameterizedType) type).getRawType() == Consumer.class)
        {
            return getErased(((ParameterizedType) type).getActualTypeArguments()[0]);
        }
    }
    // lambda start
    if (consumer.getClass().isSynthetic())
    {
        return getConsumerLambdaParameterType(consumer);
    }
    // lambda end
    throw new NoSuchMethodException();
}
</code></pre>

<p>各位可以自己试一试了：</p>

<pre><code class="language-java">public static void main(String[] args)  
{
    try
    {
        Consumer&lt;Consumer&lt;String&gt;&gt; consumerConsumer = c -&gt; c.accept("");
        System.out.println(getConsumerParameterType(consumerConsumer));

        Consumer&lt;String&gt; stringConsumer = System.out::println;
        System.out.println(getConsumerParameterType(stringConsumer));

        Consumer&lt;Long&gt; longConsumer = l -&gt; System.out.println(l + "L");
        System.out.println(getConsumerParameterType(longConsumer));
    }
    catch (ReflectiveOperationException e)
    {
        e.printStackTrace();
    }
}
</code></pre>

<h2 id="">鸣谢</h2>

<ul>
<li>Forge 的事件总线的实现：<a href="https://github.com/MinecraftForge/EventBus">https://github.com/MinecraftForge/EventBus</a></li>
<li>Forge 实现该机制所依赖的库：<a href="https://github.com/jhalterman/typetools">https://github.com/jhalterman/typetools</a></li>
</ul>]]></content:encoded></item><item><title><![CDATA[使用 Scorge 编写基于 Scala 的 Mod]]></title><description><![CDATA[<p>从 Minecraft 1.13 开始，Forge 不再自带 Scala 标准库作为依赖<del>（作为一个 Scala 吹，这让我很不爽）</del>，但 Forge 也为 Scala 提供了一个名为 Scorge 的解决方案。</p>

<p>Scorge 这个项目相当低调，虽然我很快就从 GitHub 上找到了 Scorge 的源代码，但我翻遍了 CurseForge 都没有找到 Scorge 这个 Mod 本身的下载链接，最后通过对 URL 的连蒙带猜从 Forge 官网上找到了下载地址（目前的最新版本是 3.0.6）：<a href="http://files.minecraftforge.net/maven/net/minecraftforge/Scorge">http://files.minecraftforge.net/maven/net/minecraftforge/</a></p>]]></description><link>https://blog.ustc-zzzz.net/scorge-example-mod/</link><guid isPermaLink="false">e6f5a487-fd8d-4b39-b9d2-2757a1f8c09e</guid><category><![CDATA[Minecraft]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Sun, 14 Jun 2020 14:38:00 GMT</pubDate><content:encoded><![CDATA[<p>从 Minecraft 1.13 开始，Forge 不再自带 Scala 标准库作为依赖<del>（作为一个 Scala 吹，这让我很不爽）</del>，但 Forge 也为 Scala 提供了一个名为 Scorge 的解决方案。</p>

<p>Scorge 这个项目相当低调，虽然我很快就从 GitHub 上找到了 Scorge 的源代码，但我翻遍了 CurseForge 都没有找到 Scorge 这个 Mod 本身的下载链接，最后通过对 URL 的连蒙带猜从 Forge 官网上找到了下载地址（目前的最新版本是 3.0.6）：<a href="http://files.minecraftforge.net/maven/net/minecraftforge/Scorge">http://files.minecraftforge.net/maven/net/minecraftforge/Scorge</a></p>

<p>虽然说他们的代码仍然是基于 1.14 的，但事实上 1.15 也能用，本文将基于 Minecraft 1.15.2 和 Forge 31.2.0，使用的 Gradle 版本是 5.6.4。</p>

<h2 id="">构建文件</h2>

<p>让我们先从 <code>build.gradle</code> 开始：</p>

<pre><code class="language-gradle">buildscript {  
    repositories {
        maven {
            url = 'https://files.minecraftforge.net/maven'
        }
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
    }
}

apply plugin: 'scala'  
apply plugin: 'net.minecraftforge.gradle'

version = '1.0.0'  
group = 'com.github.ustc-zzzz'  
archivesBaseName = 'ScorgeExampleMod'

sourceCompatibility = targetCompatibility = '1.8'

minecraft {  
    mappings channel: 'snapshot', version: '20200514-1.15.1'
    runs {
        client {
            properties 'forge.logging.markers': 'SCAN,REGISTRIES,REGISTRYDUMP'
            properties 'forge.logging.console.level': 'debug'
            workingDirectory project.file('run')
            source sourceSets.main
        }
        server {
            properties 'forge.logging.markers': 'SCAN,REGISTRIES,REGISTRYDUMP,CLASSLOADING'
            properties 'forge.logging.console.level': 'debug,trace'
            workingDirectory project.file('run')
            source sourceSets.main
        }
    }
}

dependencies {  
    minecraft 'net.minecraftforge:forge:1.15.2-31.2.0'
    compile 'org.scala-lang:scala-library:2.13.1'
    compile 'net.minecraftforge:Scorge:3.0.6'
}

jar {  
    manifest.attributes([
        "Specification-Title"     : "scorgeexamplemod",
        "Specification-Vendor"    : "scorgeexamplemodsareus",
        "Specification-Version"   : "1", // We are version 1 of ourselves
        "Implementation-Title"    : project.name,
        "Implementation-Version"  : project.version,
        "Implementation-Vendor"   : "scorgeexamplemodsareus",
        "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
    ])
}
</code></pre>

<p>一方面，和基于 Java 的项目相比，基于 Scala 的项目需要 <code>apply plugin: 'scala'</code> 才行。</p>

<p>另一方面，我们需要留意 <code>dependency</code> 块的变化：</p>

<pre><code class="language-gradle">dependencies {  
    minecraft 'net.minecraftforge:forge:1.15.2-31.2.0'
    compile 'org.scala-lang:scala-library:2.13.1'
    compile 'net.minecraftforge:Scorge:3.0.6'
}
</code></pre>

<p>我们不仅要引入 Scorge 的依赖，还需要引入 Scala 标准库的依赖（请保证 Scala 标准库版本和 Scorge 所使用的版本一致，这里是 2.13.1）。</p>

<h2 id="">主类</h2>

<p>然后我们随便写一个主类：</p>

<pre><code class="language-scala">package com.github.ustc_zzzz

import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent  
import net.minecraftforge.scorge.lang.ScorgeModLoadingContext  
import org.apache.logging.log4j.LogManager

class ScorgeExampleMod {  
  ScorgeModLoadingContext.get.getModEventBus.addListener { _: FMLCommonSetupEvent =&gt;
    LogManager.getLogger(classOf[ScorgeExampleMod]).info("Hello Scorge Example Mod!")
  }
}
</code></pre>

<p>这里有三点需要注意：</p>

<ul>
<li>我们不需要为主类添加 <code>@Mod</code> 注解。</li>
<li>和 1.12 或更低版本不同，Scorge 要求主类是 <code>class</code> 而不是 <code>object</code>。</li>
<li>需要使用 <code>ScorgeModLoadingContext</code> 而非 <code>FMLJavaModLoadingContext</code> 获取事件总线。</li>
</ul>

<p>得益于 Scala 编译器从 2.12 开始能够将相关代码编译到 Lambda 表达式，我们可以直接使用 Lambda 表达式块的格式向事件总线注册监听器（1.12 或更低不行，因为使用的是 Scala 2.11）。</p>

<p>因为主类没有 <code>@Mod</code> 注解，所以如果想要在游戏启动的时候看到这句话，我们还需要修改 <code>META_INF</code> 目录下的 <code>mods.toml</code>。</p>

<h2 id="mod">Mod 描述文件</h2>

<p>只有我们在 <code>mods.toml</code> 中指定了主类名，我们才能让 Scorge 加载我们的 Mod 主类：</p>

<pre><code class="language-toml">modLoader="scorge"  
loaderVersion="[3,)"

[[mods]]
version="1.0.0"  
authors="ustc-zzzz"  
modId="scorgeexamplemod"  
displayName="Scorge Example Mod"  
description="Scorge Example Mod"  
entryClass="com.github.ustc_zzzz.ScorgeExampleMod"

[[dependencies.watersprayer]]
modId="forge"  
mandatory=true  
versionRange="[31,)"  
ordering="NONE"  
side="BOTH"

[[dependencies.watersprayer]]
modId="minecraft"  
mandatory=true  
versionRange="[1.15.2]"  
ordering="NONE"  
side="BOTH"  
</code></pre>

<p>注意以下两点：</p>

<ul>
<li><code>modLoader</code> 应取为 <code>scorge</code>，而 <code>loaderVersion</code> 应使用 Scorge 版本。</li>
<li>和基于 Java 的 Mod 相比，我们还需要额外指定一个 <code>entryClass</code> 描述主类的位置。</li>
</ul>

<p>现在打开游戏就可以看到这句话了（别忘了把 Scorge 本体放进 <code>mods</code> 目录）：</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/06/2l7OndkFpRX1PHv.png" alt=""></p>]]></content:encoded></item><item><title><![CDATA[Forge 能量系统简述（五）]]></title><description><![CDATA[<p>欢迎来到整个系列教程中最难的一讲。本讲将侧重于介绍如何为传统意义上的导线实现能量传输。</p>

<p>和现实世界不同，在游戏中实现传统意义上的导线，要比无线充电等其他实现方式困难得多。因此读者如果实在无法完整实现传统意义上的导线，那也可以退而求其次，去实现其他的能量传输形式。导线之外的能量传输形式往往也是会受到玩家欢迎的。</p>

<h2 id="">导线连通网络</h2>

<p>一个最朴素的想法是让每根导线每 tick 都将附近导线的能量传输过来。实际上一些 Mod（比方说 RailCraft 等）也正是这么做的。</p>

<p>但这样做无疑从游戏体验上就存在一个问题：如果是一根长长的导线，那么每 tick 能量自然只能传输一格，如果导线长达几百根，那毫无疑问需要数秒甚至十多秒的时间才能将能量从一头传到另一头。如果考虑到游戏性能的话，问题更大了：所有的导线都需要每 tick 更新一次，那势必导致世界上每 tick 都更新的方块实体数量大大增加。</p>

<p>所以，一个非常重要的原则就是：不要为代表导线的方块实体实现 <code>ITickableTileEntity</code> 接口。那我们应当什么时候执行导线相关的逻辑呢？</p>

<p>部分 Mod 会为导线指定一个中心方块（比如说 AppliedEnergistics2 的 ME 控制器），这不失为一个好的选择：我们只需要为中心方块实现</p>]]></description><link>https://blog.ustc-zzzz.net/forge-energy-demo-5/</link><guid isPermaLink="false">dad3f51a-7880-4bee-a104-e3abf616c884</guid><category><![CDATA[Minecraft]]></category><category><![CDATA[Modded Minecraft Dev]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Sat, 02 May 2020 05:11:00 GMT</pubDate><content:encoded><![CDATA[<p>欢迎来到整个系列教程中最难的一讲。本讲将侧重于介绍如何为传统意义上的导线实现能量传输。</p>

<p>和现实世界不同，在游戏中实现传统意义上的导线，要比无线充电等其他实现方式困难得多。因此读者如果实在无法完整实现传统意义上的导线，那也可以退而求其次，去实现其他的能量传输形式。导线之外的能量传输形式往往也是会受到玩家欢迎的。</p>

<h2 id="">导线连通网络</h2>

<p>一个最朴素的想法是让每根导线每 tick 都将附近导线的能量传输过来。实际上一些 Mod（比方说 RailCraft 等）也正是这么做的。</p>

<p>但这样做无疑从游戏体验上就存在一个问题：如果是一根长长的导线，那么每 tick 能量自然只能传输一格，如果导线长达几百根，那毫无疑问需要数秒甚至十多秒的时间才能将能量从一头传到另一头。如果考虑到游戏性能的话，问题更大了：所有的导线都需要每 tick 更新一次，那势必导致世界上每 tick 都更新的方块实体数量大大增加。</p>

<p>所以，一个非常重要的原则就是：不要为代表导线的方块实体实现 <code>ITickableTileEntity</code> 接口。那我们应当什么时候执行导线相关的逻辑呢？</p>

<p>部分 Mod 会为导线指定一个中心方块（比如说 AppliedEnergistics2 的 ME 控制器），这不失为一个好的选择：我们只需要为中心方块实现 <code>ITickableTileEntity</code>，并由它接管所有能量相关的逻辑即可。但是，我们需要实现的是传统意义上的导线，换言之，我们要实现的能量传输系统没有中心方块，对每一根导线而言，它们都是相互平等的。</p>

<p>为了解决这一问题。我们必须为每个世界单独提供一个管理能量传输的导线连通网络，并且自动接管导线的通断相关逻辑。为了方便进一步的操作，我们可以从每一组互相连通的导线（又称一个连通域）中挑选一个代表方块，然后使用该方块代表整组导线。当然，导线的通断会导致一组导线分裂成两组，或是两组导线合并成一组，这些都是我们需要考虑的。</p>

<p>我们现在将接口声明如下：</p>

<pre><code class="language-java">public interface IBlockNetwork  
{
    int size(BlockPos node);

    BlockPos root(BlockPos node);

    void cut(BlockPos node, Direction direction, ConnectivityListener afterSplit);

    void link(BlockPos node, Direction direction, ConnectivityListener beforeMerge);

    @FunctionalInterface
    interface ConnectivityListener
    {
        void onChange(BlockPos primaryNode, BlockPos secondaryNode);
    }
}
</code></pre>

<ul>
<li><code>size</code> 返回的是导线所处连通域含有的导线数量，如果导线没有和其他导线连通，那么返回值为 <code>1</code>。</li>
<li><code>root</code> 返回的是导线所处连通域的代表导线，也有可能是该导线自身（比方说未和其他导线连通的时候）。</li>
<li><code>cut</code> 指将某根导线的某个方向切断。切断导线如果会导致一个连通域分裂成两个，那么会在分裂后调用 <code>afterSplit</code> 的相关方法。</li>
<li><code>link</code> 指将某根导线在某个方向上实施连接。连接导线如果会导致两个连通域合并为一个，那么会在合并前调用 <code>beforeMerge</code> 的相关方法。</li>
<li><code>onChange</code> 方法将在连通域发生变化时调用，其中第一个参数是主连通域（其代表导线不会发生变化），而第二个参数是次连通域（会由于合并而消失，或由于分裂而新出现）。</li>
</ul>

<p>如何实现这个接口呢？本讲将提供相对简单直观的实现，该实现可以达到 <code>O(N)</code> 的时间复杂度。高效的实现可以做到多项式对数级（<code>O(polylog N)</code>）的时间复杂度，但过于复杂：感兴趣的读者可以通过阅读 <a href="https://en.wikipedia.org/wiki/Dynamic_connectivity#Fully_dynamic_connectivity">Wikipedia（英文页面）</a>加以了解。</p>

<p>实现的思路很简单：除了维护所有连接外，我们只需要对每个方块维护一个连通域的相关集合就好了，而集合的第一个元素自然便是连通域的代表方块：</p>

<pre><code class="language-java">public class SimpleBlockNetwork implements IBlockNetwork  
{
    private final Map&lt;BlockPos, Set&lt;BlockPos&gt;&gt; components;
    private final SetMultimap&lt;BlockPos, Direction&gt; connections;

    public SimpleBlockNetwork()
    {
        this.components = Maps.newHashMap();
        this.connections = Multimaps.newSetMultimap(Maps.newHashMap(), () -&gt; EnumSet.noneOf(Direction.class));
    }

    @Override
    public int size(BlockPos node)
    {
        return 1; // TODO
    }

    @Override
    public BlockPos root(BlockPos node)
    {
        return node; // TODO
    }

    @Override
    public void cut(BlockPos node, Direction direction, ConnectivityListener afterSplit)
    {
        // TODO
    }

    @Override
    public void link(BlockPos node, Direction direction, ConnectivityListener beforeMerge)
    {
        // TODO
    }
}
</code></pre>

<p>上面的代码中，<code>components</code> 自然是方块到连通域（<code>Set&lt;BlockPos&gt;</code>）的映射，而 <code>connections</code> 中存储着所有连接。</p>

<p>我们先从 <code>size</code> 和 <code>root</code> 方法的实现开始：</p>

<pre><code class="language-java">@Override
public int size(BlockPos node)  
{
    return this.components.containsKey(node) ? this.components.get(node).size() : 1;
}

@Override
public BlockPos root(BlockPos node)  
{
    return this.components.containsKey(node) ? this.components.get(node).iterator().next() : node.toImmutable();
}
</code></pre>

<p>两个实现都十分直观，且都考虑到了有连通域和无连通域的情况。唯一需要注意的是我们需要 <code>toImmutable</code> 方法把 <code>BlockPos</code> 转为不可变的，这样后续我们才能将相应 <code>BlockPos</code> 直接存入 <code>Set</code> 或 <code>Map</code> 中。</p>

<p>接下来我们实现 <code>cut</code> 和 <code>link</code> 两个方法。</p>

<h3 id="">导线连通域的合并</h3>

<p>我们再来实现 <code>link</code> 方法：</p>

<pre><code class="language-java">@Override
public void link(BlockPos node, Direction direction, ConnectivityListener beforeMerge)  
{
    BlockPos secondary = node.toImmutable();
    if (this.connections.put(secondary, direction))
    {
        BlockPos primary = node.offset(direction);
        this.connections.put(primary, direction.getOpposite());
        Set&lt;BlockPos&gt; primaryComponent = this.components.get(primary);
        Set&lt;BlockPos&gt; secondaryComponent = this.components.get(secondary);
        if (primaryComponent == null &amp;&amp; secondaryComponent == null)
        {
            Set&lt;BlockPos&gt; union = Sets.newLinkedHashSet();
            beforeMerge.onChange(secondary, primary);
            this.components.put(secondary, union);
            this.components.put(primary, union);
            union.add(secondary);
            union.add(primary);
        }
        else if (primaryComponent == null)
        {
            beforeMerge.onChange(secondaryComponent.iterator().next(), primary);
            this.components.put(primary, secondaryComponent);
            secondaryComponent.add(primary);
        }
        else if (secondaryComponent == null)
        {
            beforeMerge.onChange(primaryComponent.iterator().next(), secondary);
            this.components.put(secondary, primaryComponent);
            primaryComponent.add(secondary);
        }
        else if (primaryComponent != secondaryComponent)
        {
            beforeMerge.onChange(primaryComponent.iterator().next(), secondaryComponent.iterator().next());
            Set&lt;BlockPos&gt; union = Sets.newLinkedHashSet(Sets.union(primaryComponent, secondaryComponent));
            union.forEach(pos -&gt; this.components.put(pos, union));
        }
    }
}
</code></pre>

<p>我们一段一段地来分析：</p>

<pre><code class="language-java">BlockPos secondary = node.toImmutable();  
if (this.connections.put(secondary, direction))  
</code></pre>

<p>这一段是将 <code>BlockPos</code> 和对应 <code>Direction</code> 添加到 <code>connections</code> 中，如果在这之前 <code>connections</code> 中并不存在该连接，那么 <code>put</code> 方法将返回 <code>true</code>，如果不存在，那么自然就没有进行下一步的意义了。</p>

<pre><code class="language-java">BlockPos primary = node.offset(direction);  
this.connections.put(primary, direction.getOpposite());  
</code></pre>

<p>如果连接不存在的话，那么我们还需要找到连接到的 <code>BlockPos</code>，为其相反方向添加连接。</p>

<pre><code class="language-java">Set&lt;BlockPos&gt; primaryComponent = this.components.get(primary);  
Set&lt;BlockPos&gt; secondaryComponent = this.components.get(secondary);  
</code></pre>

<p>我们试图获取两个 <code>BlockPos</code> 所处的连通域，至此我们需要分三种情况：</p>

<ol>
<li>两个连通域都不存在，那我们需要新创建一个连通域，然后把两个 <code>BlockPos</code> 加上去。  </li>
<li>一个连通域存在，另一个不存在，那我们需要把对应的 <code>BlockPos</code> 加到相应的连通域中。  </li>
<li>两个连通域都存在，那如果它们不相同，我们需要把两个连通域相互合并，然后应用到所有相关节点上去。</li>
</ol>

<pre><code class="language-java">if (primaryComponent == null &amp;&amp; secondaryComponent == null)  
{
    Set&lt;BlockPos&gt; union = Sets.newLinkedHashSet();
    beforeMerge.onChange(secondary, primary);
    this.components.put(secondary, union);
    this.components.put(primary, union);
    union.add(secondary);
    union.add(primary);
}
</code></pre>

<p>这对应两个连通域都不存在的情况：创建一个新连通域（<code>union</code>），然后把两个 <code>BlockPos</code> 加上去。别忘了调用 <code>beforeMerge</code> 的相关方法。</p>

<pre><code class="language-java">else if (primaryComponent == null)  
{
    beforeMerge.onChange(secondaryComponent.iterator().next(), primary);
    this.components.put(primary, secondaryComponent);
    secondaryComponent.add(primary);
}
</code></pre>

<p>这对应第一个连通域不存在而第二个存在的情况，我们需要把第一个 <code>BlockPos</code> 加上去。</p>

<pre><code class="language-java">else if (secondaryComponent == null)  
{
    beforeMerge.onChange(primaryComponent.iterator().next(), secondary);
    this.components.put(secondary, primaryComponent);
    primaryComponent.add(secondary);
}
</code></pre>

<p>这对应第一个连通域存在而第二个不存在的情况，我们需要把第二个 <code>BlockPos</code> 加上去。</p>

<pre><code class="language-java">else if (primaryComponent != secondaryComponent)  
{
    beforeMerge.onChange(primaryComponent.iterator().next(), secondaryComponent.iterator().next());
    Set&lt;BlockPos&gt; union = Sets.newLinkedHashSet(Sets.union(primaryComponent, secondaryComponent));
    union.forEach(pos -&gt; this.components.put(pos, union));
}
</code></pre>

<p>这对应两个连通域都存在且不相同的情况，我们需要创建一个连通域把两个连通域合并到一起，然后应用到两个连通域中的所有节点上。</p>

<p>最后我们注意到，只有两种情况下我们不会调用 <code>beforeMerge</code> 的 <code>onChange</code> 方法：</p>

<ul>
<li>试图添加的连接已存在。</li>
<li>添加了连接同一个连通域的连接。</li>
</ul>

<h3 id="">导线连通域的分裂</h3>

<p>最后我们实现 <code>cut</code> 方法。<code>cut</code> 方法是整个接口中最难实现的一个，因此在动手写代码时，我们首先需要了解相关原理。</p>

<p>我们知道删除某个连接有可能将一个连通域分裂成两半，也有可能不会为一个连通域带来变化。为了检查这两件事，我们需要从被删除的连接所对应的两个 <code>BlockPos</code> 开始，分别进行<a href="https://zh.wikipedia.org/wiki/%E5%B9%BF%E5%BA%A6%E4%BC%98%E5%85%88%E6%90%9C%E7%B4%A2">广度优先搜索</a>，并在以下两个条件中的任何一个达成时同时终止搜索：</p>

<ul>
<li>当一方搜索到的某个节点已经在另一方搜索到的节点列表中，则代表连通域并未分裂。</li>
<li>当一方已经遍历了所有能够遍历的节点，则代表连通域已被分裂为两半，搜索完成的一方代表其中的一半。</li>
</ul>

<p>为此，我们需要首先实现一个基于广度优先搜索的 <code>Iterator</code>：</p>

<pre><code class="language-java">public class BFSIterator implements Iterator&lt;BlockPos&gt;  
{
    private final Set&lt;BlockPos&gt; searched = Sets.newLinkedHashSet();
    private final Queue&lt;BlockPos&gt; queue = Queues.newArrayDeque();

    public BFSIterator(BlockPos node)
    {
        node = node.toImmutable();
        this.searched.add(node);
        this.queue.offer(node);
    }

    @Override
    public boolean hasNext()
    {
        return this.queue.size() &gt; 0;
    }

    @Override
    public BlockPos next()
    {
        BlockPos node = this.queue.remove();
        for (Direction direction : SimpleBlockNetwork.this.connections.get(node))
        {
            BlockPos another = node.offset(direction);
            if (this.searched.add(another))
            {
                this.queue.offer(another);
            }
        }
        return node;
    }

    public Set&lt;BlockPos&gt; getSearched()
    {
        return this.searched;
    }
}
</code></pre>

<p>广度优先搜索的实现很简单，上面的代码也很清晰，这里就不展开讲解了。</p>

<p>接下来我们使用 <code>BFSIterator</code> 实现 <code>cut</code> 方法：</p>

<pre><code class="language-java">@Override
public void cut(BlockPos node, Direction direction, ConnectivityListener afterSplit)  
{
    if (this.connections.remove(node, direction))
    {
        BlockPos another = node.offset(direction);
        this.connections.remove(another, direction.getOpposite());
        BFSIterator nodeIterator = new BFSIterator(node), anotherIterator = new BFSIterator(another);
        while (nodeIterator.hasNext())
        {
            BlockPos next = nodeIterator.next();
            if (!anotherIterator.getSearched().contains(next))
            {
                BFSIterator iterator = anotherIterator;
                anotherIterator = nodeIterator;
                nodeIterator = iterator;
                continue;
            }
            return;
        }
        Set&lt;BlockPos&gt; primaryComponent = this.components.get(node), secondaryComponent;
        BlockPos primaryNode = primaryComponent.iterator().next();
        Set&lt;BlockPos&gt; searched = nodeIterator.getSearched();
        if (searched.contains(primaryNode))
        {
            secondaryComponent = Sets.newLinkedHashSet(Sets.difference(primaryComponent, searched));
            primaryComponent.retainAll(searched);
        }
        else
        {
            secondaryComponent = searched;
            primaryComponent.removeAll(searched);
        }
        if (secondaryComponent.size() &lt;= 1)
        {
            secondaryComponent.forEach(this.components::remove);
        }
        else
        {
            secondaryComponent.forEach(pos -&gt; this.components.put(pos, secondaryComponent));
        }
        if (primaryComponent.size() &lt;= 1)
        {
            primaryComponent.forEach(this.components::remove);
        }
        afterSplit.onChange(primaryNode, secondaryComponent.iterator().next());
    }
}
</code></pre>

<p>我们在这里还是一段一段地讲解：</p>

<pre><code class="language-java">if (this.connections.remove(node, direction))  
</code></pre>

<p>这里将移除对应边，如果对应边在移除前存在，那么该方法返回 <code>true</code>。</p>

<pre><code class="language-java">BlockPos another = node.offset(direction);  
this.connections.remove(another, direction.getOpposite());  
</code></pre>

<p>如果连接存在的话，那么我们还需要找到连接到的 <code>BlockPos</code>，为其相反方向删除连接。</p>

<pre><code class="language-java">BFSIterator nodeIterator = new BFSIterator(node), anotherIterator = new BFSIterator(another);  
while (nodeIterator.hasNext())  
{
    BlockPos next = nodeIterator.next();
    if (!anotherIterator.getSearched().contains(next))
    {
        BFSIterator iterator = anotherIterator;
        anotherIterator = nodeIterator;
        nodeIterator = iterator;
        continue;
    }
    return;
}
</code></pre>

<p>然后我们为两边的 <code>BlockPos</code> 分别创立 <code>BFSIterator</code>，轮流实施迭代过程。</p>

<ul>
<li>若当前 <code>BFSIterator</code> 已遍历完所有能够遍历得到的 <code>BlockPos</code>（<code>hasNext</code> 为 <code>false</code>）则循环结束。</li>
<li>否则，如果另一个 <code>BFSIterator</code> 包含当前节点，那说明它们仍然在同一个连通域，直接 <code>return</code>。</li>
<li>最后，如果另一个 <code>BFSIterator</code> 不包含当前节点，那么把两个节点相交换，继续循环过程。</li>
</ul>

<pre><code class="language-java">Set&lt;BlockPos&gt; primaryComponent = this.components.get(node), secondaryComponent;  
BlockPos primaryNode = primaryComponent.iterator().next();  
Set&lt;BlockPos&gt; searched = nodeIterator.getSearched();  
if (searched.contains(primaryNode))  
{
    secondaryComponent = Sets.newLinkedHashSet(Sets.difference(primaryComponent, searched));
    primaryComponent.retainAll(searched);
}
else  
{
    secondaryComponent = searched;
    primaryComponent.removeAll(searched);
}
</code></pre>

<p>如果我们证实我们的连通域会分裂成两半，并且已经搜索到了其中一半（<code>searched</code>），那么接下来我们需要定主连通域和次连通域。主连通域自然是当前节点所在连通域，但我们刚刚遍历收集到的，到底是不是主连通域呢？我们需要 <code>searched.contains(primaryNode)</code> 这一表达式加以判断：</p>

<ul>
<li>如果是（返回 <code>true</code>），那么我们需要构造一个未遍历到的 <code>BlockPos</code> 集合作为次连通域，然后我们在主连通域中只保留归属于 <code>searched</code> 的 <code>BlockPos</code>（<code>retainAll</code> 方法）。</li>
<li>如果不是（返回 <code>false</code>），那么我们可以直接将 <code>searched</code> 作为次连通域，然后把主连通域中已经从属于 <code>searched</code> 的 <code>BlockPos</code> 全去掉（<code>removeAll</code> 方法）。</li>
</ul>

<pre><code class="language-java">if (secondaryComponent.size() &lt;= 1)  
{
    secondaryComponent.forEach(this.components::remove);
}
else  
{
    secondaryComponent.forEach(pos -&gt; this.components.put(pos, secondaryComponent));
}
if (primaryComponent.size() &lt;= 1)  
{
    primaryComponent.forEach(this.components::remove);
}
afterSplit.onChange(primaryNode, secondaryComponent.iterator().next());  
</code></pre>

<p>接下来就要把这两个集合应用到每一个从属于它们的 <code>BlockPos</code> 了。注意如果该连通域中只有一个 <code>BlockPos</code>，那么可以直接将其从 <code>components</code> 中删除。</p>

<p>最后我们调用了 <code>afterSplit</code> 的 <code>onChange</code> 方法。</p>

<h2 id="">导线能量网络</h2>

<p>我们现在可以基于连通网络实现能量网络了。除了连通网络外，我们还需要存储什么呢？</p>

<ul>
<li>每个连通域都会存储一定能量用于能量传输，因此我们需要为每个连通域存储这个。</li>
<li>导线并不一定只连着导线，还可能连着机器，因此我们需要把所有和机器有关的连接单独储存。</li>
<li>导线的连接和切断和能量存取会导致数据变化，因此我们需要记录所有变化的区块，从而保证它们能够保存进存档中。</li>
</ul>

<p>关于能量存储这里补充一点：我们只需要为每个连通域的代表方块存储能量值，而由于能量值一定是非负整数，因此这里使用 <code>Multiset</code> 将十分适合。</p>

<pre><code class="language-java">public class SimpleEnergyNetwork  
{
    private final IWorld world;
    private final IBlockNetwork blockNetwork;
    private final Queue&lt;Runnable&gt; taskCollection;
    private final Multiset&lt;BlockPos&gt; energyCollection;
    private final SetMultimap&lt;ChunkPos, BlockPos&gt; chunkCollection;
    private final SetMultimap&lt;BlockPos, Direction&gt; machineCollection;

    private SimpleEnergyNetwork(IWorld world, IBlockNetwork blockNetwork)
    {
        this.world = world;
        this.blockNetwork = blockNetwork;
        this.taskCollection = Queues.newArrayDeque();
        this.energyCollection = HashMultiset.create();
        this.chunkCollection = Multimaps.newSetMultimap(Maps.newHashMap(), Sets::newHashSet);
        this.machineCollection = Multimaps.newSetMultimap(Maps.newHashMap(), () -&gt; EnumSet.noneOf(Direction.class));
    }
}
</code></pre>

<p>除了上面提到的这些和 <code>world</code> 外，我们还额外添加了一个 <code>taskCollection</code> 字段，稍后我们监听 tick 事件时用得着。</p>

<p>我们还需要考虑一个问题：刚刚我们提到过，我们的能量网络是相对于某个世界的，因此对于某个特定的世界而言，导线的能量数据是全局存储的，但我们应如何把数据放到存档里呢？以连通域为单位存储在这里显然不适合，因为连通域会合并和分裂，从而使得维护存档中导线和连通域之间的关系成为非常困难的工作（在内存中这很容易）。一个很不错的解决方案是：我们可以把能量放到导线里均摊储存，这样不管连通域如何合并和分裂，最终都将落实到每根导线和存档的交互上。为了实现这一解决方案，我们需要声明四个方法：</p>

<ul>
<li><code>getNetworkSize</code>：获取导线所处连通域的导线数量。</li>
<li><code>getNetworkEnergy</code>：获取导线所处连通域的整体能量。</li>
<li><code>getSharedEnergy</code>：获取导线所处连通域均摊到当前导线的能量。</li>
<li><code>addEnergy</code>：调整导线所处连通域的能量（正数为增加，负数为减少）。</li>
</ul>

<p>这四个方法的实现都非常简单。Guava 的 <code>Multiset</code> 和 <code>Multimap</code> 在实现上为我们带来了极大的方便：</p>

<pre><code class="language-java">public int getNetworkSize(BlockPos pos)  
{
    return this.blockNetwork.size(pos);
}

public int getNetworkEnergy(BlockPos pos)  
{
    BlockPos root = this.blockNetwork.root(pos);
    return this.energyCollection.count(root);
}

public int getSharedEnergy(BlockPos pos)  
{
    int size = this.blockNetwork.size(pos);
    BlockPos root = this.blockNetwork.root(pos);
    int total = this.energyCollection.count(root);
    return root.equals(pos) ? total / size + total % size : total / size;
}

public void addEnergy(BlockPos pos, int diff)  
{
    if (diff &gt;= 0)
    {
        this.energyCollection.add(this.blockNetwork.root(pos), diff);
    }
    else
    {
        this.energyCollection.remove(this.blockNetwork.root(pos), -diff);
    }
}
</code></pre>

<p>这里唯一需要指出的是能量的分摊方式，也就是在整体能量除以连通域导线数量除不开的时候，问题是如何解决的：</p>

<ul>
<li>如果当前导线是连通域的代表导线，那么把余数都分摊到该导线上。</li>
<li>如果当前导线不是连通域的代表导线，那么照常除就可以了，不必考虑余数。</li>
</ul>

<h3 id="tick">在 tick 事件中增删导线</h3>

<p>我们现在声明用于删除导线的 <code>disableBlock</code> 方法，和用于添加导线的 <code>enableBlock</code> 方法。但是，这两个方法的实现并没有那么直接，因为我们需要把相关行为托管到 tick 事件中执行。</p>

<p>为什么我们不能立刻增删导线？这是因为在增删导线的时候，我们需要检查导线和周围方块的连通性，而很多时候导线是在世界加载阶段加载的，因此如果在世界加载时获取周围方块的相关信息，将会极易导致死锁。因此我们需要把增删导线的相关逻辑放到 tick 事件中，这正是 <code>taskCollection</code> 字段的存在意义。</p>

<pre><code class="language-java">public void disableBlock(BlockPos pos, Runnable callback)  
{
    this.taskCollection.offer(() -&gt;
    {
        // TODO
        callback.run();
    });
}

public void enableBlock(BlockPos pos, Runnable callback)  
{
    this.taskCollection.offer(() -&gt;
    {
        // TODO
        callback.run();
    });
}

private void tickStart()  
{
    for (Runnable runnable = this.taskCollection.poll(); runnable != null; runnable = this.taskCollection.poll())
    {
        runnable.run();
    }
}
</code></pre>

<p>我们为 <code>disableBlock</code> 和 <code>enableBlock</code> 两个方法添加了 <code>Runnable</code> 作为回调函数，并在 <code>tickStart</code> 方法调用时调用。我们稍后便会在 tick 事件的监听器里调用 <code>tickStart</code> 方法。</p>

<h3 id="">向能量网络增删导线</h3>

<p>我们先来实现删除导线：</p>

<pre><code class="language-java">public void disableBlock(BlockPos pos, Runnable callback)  
{
    this.taskCollection.offer(() -&gt;
    {
        this.chunkCollection.remove(new ChunkPos(pos), pos);
        for (Direction side : Direction.values())
        {
            this.blockNetwork.cut(pos, side, this::afterSplit);
        }
        this.machineCollection.removeAll(pos);
        callback.run();
    });
}

private void afterSplit(BlockPos primaryNode, BlockPos secondaryNode)  
{
    int primarySize = this.blockNetwork.size(primaryNode), secondarySize = this.blockNetwork.size(secondaryNode);
    int diff = this.energyCollection.count(primaryNode) * secondarySize / (primarySize + secondarySize);
    this.energyCollection.remove(primaryNode, diff);
    this.energyCollection.add(secondaryNode, diff);
}
</code></pre>

<p>除了调用回调函数外，删除导线主要做三件事：</p>

<ul>
<li>记录导线所归属的区块。</li>
<li>切断导线在六个方向的所有连接。</li>
<li>切断导线在所有方向上和机器的连接。</li>
</ul>

<p>切断导线连接时需要传入 <code>ConnectivityListener</code>，这里声明并实现了 <code>afterSplit</code> 方法，并传入方法引用作为实现。<code>afterSplit</code> 方法所做的事很简单：把当前连通域的整体能量按所拥有的导线数量分离一部分出来给一个新的连通域。</p>

<p>然后我们再来实现添加导线：</p>

<pre><code class="language-java">public void enableBlock(BlockPos pos, Runnable callback)  
{
    this.taskCollection.offer(() -&gt;
    {
        this.chunkCollection.put(new ChunkPos(pos), pos.toImmutable());
        for (Direction side : Direction.values())
        {
            if (this.hasWireConnection(pos, side))
            {
                if (this.hasWireConnection(pos.offset(side), side.getOpposite()))
                {
                    this.machineCollection.remove(pos, side);
                    this.blockNetwork.link(pos, side, this::beforeMerge);
                }
                else
                {
                    this.machineCollection.put(pos.toImmutable(), side);
                    this.blockNetwork.cut(pos, side, this::afterSplit);
                }
            }
            else
            {
                this.machineCollection.remove(pos, side);
                this.blockNetwork.cut(pos, side, this::afterSplit);
            }
        }
        callback.run();
    });
}

private boolean hasWireConnection(BlockPos pos, Direction side)  
{
    return false; // TODO
}

private void beforeMerge(BlockPos primaryNode, BlockPos secondaryNode)  
{
    int diff = this.energyCollection.count(secondaryNode);
    this.energyCollection.remove(secondaryNode, diff);
    this.energyCollection.add(primaryNode, diff);
}
</code></pre>

<p>除了调用回调函数外，添加导线主要做的也是三件事：</p>

<ul>
<li>记录导线所归属的区块。</li>
<li>添加导线和其他导线之间的连接。</li>
<li>添加导线和机器的连接。</li>
</ul>

<p>和删除导线相比，添加导线还需要检查周围方块是否能够与其相互连接，因此实现会稍加复杂：</p>

<ul>
<li>如果导线在某个方向上不和相邻方块连接，那自然既不考虑连通网络，也不考虑机器了。</li>
<li>如果导线在某个方向上和相邻方块连接，且连接的方块是在相反方向上连接的导线，那么将该导线添加到连通网络。</li>
<li>如果导线在某个方向上和相邻方块连接，且连接的方块不是在相反方向上连接的导线，那么将该导线连接的方块视为机器。</li>
</ul>

<p>我们现在实现 <code>hasWireConnection</code> 方法：</p>

<pre><code class="language-java">@SuppressWarnings("deprecation")
private boolean hasWireConnection(BlockPos pos, Direction side)  
{
    if (this.world.isBlockLoaded(pos))
    {
        BlockState state = this.world.getBlockState(pos);
        return state.getBlock().equals(FEDemoWireBlock.BLOCK) &amp;&amp; state.get(FEDemoWireBlock.PROPERTY_MAP.get(side));
    }
    return false;
}
</code></pre>

<p>这里需要额外注意 <code>isBlockLoaded</code> 方法的调用。如果我们不事先进行 <code>isBlockLoaded</code> 这一检查，那么 <code>getBlockState</code> 方法在检查未加载的方块坐标时，将会自动将该方块坐标所处的区块予以加载，而加载会导致连接状态的变化，因此如果世界上有一长链导线，这会导致途径的所有区块全部加载，这显然是没有必要的。更为重要的是，游戏会在加载区块后试图卸载不必要的区块，而卸载区块同样会导致连接状态的变化，这一变化又会反过来加载区块，因此区块会不断地在加载和卸载之间循环，这显然会带来不必要的性能损失。稍后我们会在其他方法再次调用 <code>isBlockLoaded</code> 方法进行方块是否已加载的检查。</p>

<p>增删导线的逻辑到这里就彻底写完了。接下来我们要写另一处需要在 tick 事件中执行的逻辑。</p>

<h3 id="tick">在 tick 事件中输送能量</h3>

<p>在编写发电机的时候我们曾经提到，能量的流动应由发电机控制，而发电机实现了 <code>ITickableTileEntity</code> 接口，因此可以在实现该接口的 <code>tick</code> 方法时输送能量。刚刚我们提到，导线能量网络是以世界为单位的，因此我们同样需要监听世界的 tick 事件完成这件事。我们把这一行为写进 <code>tickEnd</code> 方法：</p>

<pre><code class="language-java">@SuppressWarnings("deprecation")
private void tickEnd()  
{
    for (Map.Entry&lt;BlockPos, Direction&gt; entry : this.shuffled(this.machineCollection.entries()))
    {
        Direction direction = entry.getValue();
        BlockPos node = entry.getKey(), root = this.blockNetwork.root(node);
        if (this.world.isBlockLoaded(node.offset(direction)))
        {
            TileEntity tileEntity = this.world.getTileEntity(node.offset(direction));
            if (tileEntity != null)
            {
                tileEntity.getCapability(CapabilityEnergy.ENERGY, direction.getOpposite()).ifPresent(e -&gt;
                {
                    if (e.canReceive())
                    {
                        int diff = this.energyCollection.count(root);
                        this.energyCollection.remove(root, e.receiveEnergy(diff, false));
                    }
                });
            }
        }
    }
}

private &lt;T&gt; List&lt;T&gt; shuffled(Iterable&lt;? extends T&gt; iterable)  
{
    List&lt;T&gt; list = Lists.newArrayList(iterable);
    Random rand = this.world.getRandom();
    Collections.shuffle(list, rand);
    return list;
}
</code></pre>

<p>该方法的实现很简单：遍历所有的机器（在遍历前打乱了一遍次序），然后如果机器可以接收能量，那么便向其输送能量。注意 <code>isBlockLoaded</code> 方法的调用，因为我们并不希望向未加载的区块中的方块实体输送能量。</p>

<h3 id="">标记需要保存的区块</h3>

<p>我们需要在保存存档的时候标记所有需要保存的区块。我们声明一个 <code>markDirty</code> 方法，并在该方法内部实现相应的逻辑：</p>

<pre><code class="language-java">@SuppressWarnings("deprecation")
private void markDirty()  
{
    for (ChunkPos chunkPos : this.chunkCollection.keys())
    {
        BlockPos pos = chunkPos.asBlockPos();
        if (this.world.isBlockLoaded(pos))
        {
            this.world.getChunk(pos).setModified(true);
        }
    }
}
</code></pre>

<p>稍后我们会监听保存世界存档的事件，然后调用这一方法。</p>

<h3 id="">导线能量网络的管理</h3>

<p>我们需要一个全局化的管理类，我们决定让它成为 <code>SimpleEnergyNetwork</code> 的嵌套类：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE)
public static class Factory  
{
    private static final Map&lt;IWorld, SimpleEnergyNetwork&gt; INSTANCES = Maps.newIdentityHashMap();

    public static SimpleEnergyNetwork get(IWorld world)
    {
        return INSTANCES.computeIfAbsent(world, k -&gt; new SimpleEnergyNetwork(k, new SimpleBlockNetwork()));
    }

    @SubscribeEvent
    public static void onSave(WorldEvent.Save event)
    {
        if (INSTANCES.containsKey(event.getWorld()))
        {
            INSTANCES.get(event.getWorld()).markDirty();
        }
    }

    @SubscribeEvent
    public static void onUnload(WorldEvent.Unload event)
    {
        INSTANCES.remove(event.getWorld());
    }

    @SubscribeEvent
    public static void onWorldTick(TickEvent.WorldTickEvent event)
    {
        if (LogicalSide.SERVER.equals(event.side))
        {
            switch (event.phase)
            {
                case START:
                {
                    Factory.get(event.world).tickStart();
                    break;
                }
                case END:
                {
                    Factory.get(event.world).tickEnd();
                    break;
                }
            }
        }
    }
}
</code></pre>

<p>该类提供了构造并返回 <code>SimpleEnergyNetwork</code> 方法，并且有三个事件监听器：</p>

<ul>
<li>在世界开始保存存档时调用 <code>markDirty</code> 方法。</li>
<li>在世界准备卸载时移除已经持有的 <code>SimpleEnergyNetwork</code> 实例。</li>
<li>在世界的 tick 事件触发时调用 <code>tickStart</code> 和 <code>tickEnd</code> 方法。</li>
</ul>

<p>到这里，整个 <code>SimpleEnergyNetwork</code>，就完全实现完了，我们稍后会在导线的方块实体类里调用里面的相关方法。</p>

<h2 id="capability">为导线实现 Capability</h2>

<p>我们现在为代表导线的方块实体添加 Capability：</p>

<pre><code class="language-java">private final LazyOptional&lt;IEnergyStorage&gt; lazyOptional = LazyOptional.of(() -&gt; new IEnergyStorage()  
{
    private final SimpleEnergyNetwork network = SimpleEnergyNetwork.Factory.get(FEDemoWireTileEntity.this.world);

    @Override
    public int receiveEnergy(int maxReceive, boolean simulate)
    {
        int energy = this.getEnergyStored();
        int diff = Math.min(500, Math.min(this.getMaxEnergyStored() - energy, maxReceive));
        if (!simulate)
        {
            this.network.addEnergy(FEDemoWireTileEntity.this.pos, diff);
            if (diff != 0)
            {
                FEDemoWireTileEntity.this.markDirty();
            }
        }
        return diff;
    }

    @Override
    public int extractEnergy(int maxExtract, boolean simulate)
    {
        int energy = this.getEnergyStored();
        int diff = Math.min(500, Math.min(energy, maxExtract));
        if (!simulate)
        {
            this.network.addEnergy(FEDemoWireTileEntity.this.pos, -diff);
            if (diff != 0)
            {
                FEDemoWireTileEntity.this.markDirty();
            }
        }
        return diff;
    }

    @Override
    public int getEnergyStored()
    {
        return Math.min(this.getMaxEnergyStored(), this.network.getNetworkEnergy(FEDemoWireTileEntity.this.pos));
    }

    @Override
    public int getMaxEnergyStored()
    {
        return 1_000 * this.network.getNetworkSize(FEDemoWireTileEntity.this.pos);
    }

    @Override
    public boolean canExtract()
    {
        return true;
    }

    @Override
    public boolean canReceive()
    {
        return true;
    }
});

@Nonnull
@Override
public &lt;T&gt; LazyOptional&lt;T&gt; getCapability(@Nonnull Capability&lt;T&gt; cap, Direction side)  
{
    boolean isEnergy = Objects.equals(cap, CapabilityEnergy.ENERGY);
    return isEnergy ? this.lazyOptional.cast() : super.getCapability(cap, side);
}
</code></pre>

<p>由于导线既可以输入能量，也可以输出能量，因此 <code>canExtract</code> 和 <code>canReceive</code> 都应返回 <code>true</code>，剩下的实现和之前的发电机和用电器都大同小异，这里就不展开了。</p>

<h2 id="">导线本身的加载与卸载</h2>

<p>Minecraft 原版和 Forge 共为 <code>TileEntity</code> 提供了三个方法用于描述方块实体的加载和卸载过程：</p>

<ul>
<li><code>onLoad</code> 方法将在方块实体加载时（包括手动放置对应方块和以及区块加载）触发。</li>
<li><code>onChunkUnloaded</code> 方法将在方块实体所在区块被卸载时触发。</li>
<li><code>remove</code> 方法将在方块实体被拆除时触发。</li>
</ul>

<p>我们还需要覆盖读取 NBT 里会调用的 <code>read</code> 方法和写入 NBT 时会调用的 <code>write</code> 方法。我们先实现这两个方法：</p>

<pre><code class="language-java">private Integer tmpEnergy = null;

@Override
public void read(@Nonnull CompoundNBT compound)  
{
    this.tmpEnergy = compound.getInt("WireEnergy");
    super.read(compound);
}

@Nonnull
@Override
public CompoundNBT write(@Nonnull CompoundNBT compound)  
{
    SimpleEnergyNetwork network = SimpleEnergyNetwork.Factory.get(this.world);
    compound.putInt("WireEnergy", network.getSharedEnergy(this.pos));
    return super.write(compound);
}
</code></pre>

<p>我们可以注意到一件事：<code>write</code> 方法是直接从导线能量网络里获取均摊能量，而 <code>read</code> 方法却写入到了一个临时值，为什么要这样做？这是因为，<code>read</code> 方法第一次调用的时机特别特别早，甚至方块实体还没有被加载到世界中，因此我们甚至连方块实体所处的世界都无法获取得到，更逞论获取导线能量网络中的均摊能量了。因此，我们只能先写入一个临时值，然后在 <code>onLoad</code> 方法里读取这个临时值：</p>

<pre><code class="language-java">@Override
public void onLoad()  
{
    if (this.world != null &amp;&amp; !this.world.isRemote)
    {
        SimpleEnergyNetwork network = SimpleEnergyNetwork.Factory.get(this.world);
        if (this.tmpEnergy != null)
        {
            int diff = this.tmpEnergy - network.getSharedEnergy(this.pos);
            network.addEnergy(this.pos, diff);
            this.tmpEnergy = null;
        }
        network.enableBlock(this.pos, this::markDirty);
    }
    super.onLoad();
}
</code></pre>

<p>注意该方法设置能量的方式：通过添加差额能量的方式设置。</p>

<p>最后我们还剩下 <code>onChunkUnloaded</code> 和 <code>remove</code> 两个方法。我们现在实现这两个方法：</p>

<pre><code class="language-java">@Override
public void onChunkUnloaded()  
{
    if (this.world != null &amp;&amp; !this.world.isRemote)
    {
        SimpleEnergyNetwork network = SimpleEnergyNetwork.Factory.get(this.world);
        network.disableBlock(this.pos, this::markDirty);
    }
    super.onChunkUnloaded();
}

@Override
public void remove()  
{
    if (this.world != null &amp;&amp; !this.world.isRemote)
    {
        SimpleEnergyNetwork network = SimpleEnergyNetwork.Factory.get(this.world);
        network.disableBlock(this.pos, () -&gt;
        {
            int diff = network.getSharedEnergy(this.pos);
            network.addEnergy(this.pos, -diff);
            this.markDirty();
        });
    }
    super.remove();
}
</code></pre>

<p>和 <code>onChunkUnloaded</code> 相比，<code>remove</code> 方法额外多做了一件事：把导线连通网络里当前位置的能量清零。这可以避免在该位置重新添加导线时附带残留能量。</p>

<p>到这里，整个导线的方块实体相关代码，就全部实现完了。但我们还有一件事没处理：如果导线附近的方块发生变化了怎么办？</p>

<h2 id="">导线附近方块的变化</h2>

<p>如果导线附近添加了新的机器，那么我们应当将这件事通知能量网络。这可以通过覆盖 <code>Block</code> 类的 <code>neighborChanged</code> 方法来实现。</p>

<p>我们在方块类（<code>FEDemoWireBlock</code>）写下以下代码：</p>

<pre><code class="language-java">@Override
@SuppressWarnings("deprecation")
public void neighborChanged(@Nonnull BlockState state, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull Block fromBlock, @Nonnull BlockPos fromPos, boolean isMoving)  
{
    if (!world.isRemote)
    {
        TileEntity tileEntity = world.getTileEntity(pos);
        if (tileEntity instanceof FEDemoWireTileEntity)
        {
            SimpleEnergyNetwork.Factory.get(world).enableBlock(pos, tileEntity::markDirty);
        }
    }
}
</code></pre>

<p>很好，关于导线的一切我们都已经写完了。</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/05/image-10.png" alt=""></p>

<h2 id="">代码清单</h2>

<p>这一部分添加的文件有：</p>

<ul>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/util/IBlockNetwork.java</code></li>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/util/SimpleBlockNetwork.java</code></li>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/util/SimpleEnergyNetwork.java</code></li>
</ul>

<p>这一部分修改的文件有：</p>

<ul>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/block/FEDemoWireBlock.java</code></li>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/tileentity/FEDemoWireTileEntity.java</code></li>
</ul>]]></content:encoded></item><item><title><![CDATA[Forge 能量系统简述（四）]]></title><description><![CDATA[<p>在这一讲和下一讲我们将制造一个作为导线的方块。</p>

<p>这一讲我们将从作为方块的导线着手（换言之只是一个空壳子），而下一讲我们将着重介绍作为能量传输载体的导线。</p>

<h2 id="">添加方块和方块实体</h2>

<p>以下是方块类的基础实现：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class FEDemoWireBlock extends Block  
{
    public static final String NAME = "fedemo:wire";

    @ObjectHolder(NAME)
    public static FEDemoWireBlock BLOCK;

    @SubscribeEvent
    public static void onRegisterBlock(@Nonnull RegistryEvent.Register&lt;Block&gt; event)
    {
        FEDemo.LOGGER.info("Registering wire block ...");
        event.</code></pre>]]></description><link>https://blog.ustc-zzzz.net/forge-energy-demo-4/</link><guid isPermaLink="false">5cbba9c5-19c4-4904-b0cc-7f2cea337089</guid><category><![CDATA[Minecraft]]></category><category><![CDATA[Modded Minecraft Dev]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Tue, 28 Apr 2020 17:36:14 GMT</pubDate><content:encoded><![CDATA[<p>在这一讲和下一讲我们将制造一个作为导线的方块。</p>

<p>这一讲我们将从作为方块的导线着手（换言之只是一个空壳子），而下一讲我们将着重介绍作为能量传输载体的导线。</p>

<h2 id="">添加方块和方块实体</h2>

<p>以下是方块类的基础实现：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class FEDemoWireBlock extends Block  
{
    public static final String NAME = "fedemo:wire";

    @ObjectHolder(NAME)
    public static FEDemoWireBlock BLOCK;

    @SubscribeEvent
    public static void onRegisterBlock(@Nonnull RegistryEvent.Register&lt;Block&gt; event)
    {
        FEDemo.LOGGER.info("Registering wire block ...");
        event.getRegistry().register(new FEDemoWireBlock().setRegistryName(NAME));
    }

    @SubscribeEvent
    public static void onRegisterItem(@Nonnull RegistryEvent.Register&lt;Item&gt; event)
    {
        FEDemo.LOGGER.info("Registering wire item ...");
        event.getRegistry().register(new BlockItem(BLOCK, new Item.Properties().group(ItemGroup.MISC)).setRegistryName(NAME));
    }

    private FEDemoWireBlock()
    {
        super(Block.Properties.create(Material.GLASS).hardnessAndResistance(2));
    }

    @Override
    public boolean hasTileEntity(@Nonnull BlockState state)
    {
        return true;
    }

    @Override
    public TileEntity createTileEntity(@Nonnull BlockState state, @Nonnull IBlockReader world)
    {
        return FEDemoWireTileEntity.TILE_ENTITY_TYPE.create();
    }
}
</code></pre>

<p>以下是方块实体类的基础实现：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class FEDemoWireTileEntity extends TileEntity  
{
    public static final String NAME = "fedemo:wire";

    @ObjectHolder(NAME)
    public static TileEntityType&lt;FEDemoWireTileEntity&gt; TILE_ENTITY_TYPE;

    @SubscribeEvent
    public static void onRegisterTileEntityType(@Nonnull RegistryEvent.Register&lt;TileEntityType&lt;?&gt;&gt; event)
    {
        FEDemo.LOGGER.info("Registering wire tile entity type ...");
        event.getRegistry().register(TileEntityType.Builder.create(FEDemoWireTileEntity::new, FEDemoWireBlock.BLOCK).build(DSL.remainderType()).setRegistryName(NAME));
    }

    private FEDemoWireTileEntity()
    {
        super(TILE_ENTITY_TYPE);
    }
}
</code></pre>

<p>我们还可以在 <code>en_us,json</code> 给方块起个名字：</p>

<pre><code class="language-json">"block.fedemo.wire": "FE Energy Transmission Conduit"
</code></pre>

<p>本讲接下来将不会涉及到方块实体的任何内容（放到下一讲进行）。</p>

<h2 id="">方块状态</h2>

<p>由于导线在和周围连通时的状态会随着周边环境有所不同，因此我们需要为同一个导线指定不同的方块状态（<code>BlockState</code>）。每个方块状态都是特定属性（<code>Property</code>）和对应值的结合，我们需要声明导线在六个方向的连接状态，因此我们需要共六个描述方块状态属性。这六个属性都可以在 <code>BlockStateProperties</code> 类里找到，我们为这六个属性建立一个针对方向的映射表：</p>

<pre><code class="language-java">public static final Map&lt;Direction, BooleanProperty&gt; PROPERTY_MAP;

static  
{
    Map&lt;Direction, BooleanProperty&gt; map = Maps.newEnumMap(Direction.class);
    map.put(Direction.NORTH, BlockStateProperties.NORTH);
    map.put(Direction.EAST, BlockStateProperties.EAST);
    map.put(Direction.SOUTH, BlockStateProperties.SOUTH);
    map.put(Direction.WEST, BlockStateProperties.WEST);
    map.put(Direction.UP, BlockStateProperties.UP);
    map.put(Direction.DOWN, BlockStateProperties.DOWN);
    PROPERTY_MAP = Collections.unmodifiableMap(map);
}
</code></pre>

<p>接下来我们需要覆盖 <code>fillStateContainer</code> 方法，用来声明该方块拥有以上全部六个属性：</p>

<pre><code class="language-java">@Override
protected void fillStateContainer(@Nonnull StateContainer.Builder&lt;Block, BlockState&gt; builder)  
{
    builder.add(PROPERTY_MAP.values().toArray(new IProperty&lt;?&gt;[0]));
    super.fillStateContainer(builder);
}
</code></pre>

<p><code>StateContainer.Builder</code> 的 <code>add</code> 方法需要传入变长参数，因此这里直接构造并传入了一个数组。</p>

<p>接下来我们需要在特定场合自动调整方块状态，我们需要：</p>

<ul>
<li>在放置该方块时调整方块状态</li>
<li>在该方块周围的方块发生变动时调整方块状态</li>
</ul>

<p>前者对应 <code>getStateForPlacement</code> 方法，后者对应 <code>updatePostPlacement</code> 方法。我们覆盖这两个方法：</p>

<pre><code class="language-java">@Override
public BlockState getStateForPlacement(@Nonnull BlockItemUseContext context)  
{
    BlockState state = this.getDefaultState();
    for (Direction facing : Direction.values())
    {
        World world = context.getWorld();
        BlockPos facingPos = context.getPos().offset(facing);
        BlockState facingState = world.getBlockState(facingPos);
        state = state.with(PROPERTY_MAP.get(facing), this.canConnect(world, facing.getOpposite(), facingPos, facingState));
    }
    return state;
}

@Nonnull
@Override
@SuppressWarnings("deprecation")
public BlockState updatePostPlacement(@Nonnull BlockState state, @Nonnull Direction facing, @Nonnull BlockState facingState, @Nonnull IWorld world, @Nonnull BlockPos pos, @Nonnull BlockPos facingPos)  
{
    return state.with(PROPERTY_MAP.get(facing), this.canConnect(world, facing.getOpposite(), facingPos, facingState));
}

private boolean canConnect(@Nonnull IWorld world, @Nonnull Direction facing, @Nonnull BlockPos pos, @Nonnull BlockState state)  
{
    return false; // TODO
}
</code></pre>

<p>前者我们需要对六个方向分别检查属性值，而后者我们只需要对受到影响的方向检查就可以了。</p>

<p>我们对连接状态的检查主要分为两部分：</p>

<ul>
<li>检查连接的是不是我们的导线</li>
<li>检查连接的方块是否有能量相关的 Capability</li>
</ul>

<pre><code class="language-java">private boolean canConnect(@Nonnull IWorld world, @Nonnull Direction facing, @Nonnull BlockPos pos, @Nonnull BlockState state)  
{
    if (!state.getBlock().equals(BLOCK))
    {
        TileEntity tileEntity = world.getTileEntity(pos);
        return tileEntity != null &amp;&amp; tileEntity.getCapability(CapabilityEnergy.ENERGY, facing).isPresent();
    }
    return true;
}
</code></pre>

<h2 id="">方块材质</h2>

<p>如果考虑所有的方块状态，一个导线甚至能够有多达 64 个方块状态。如果我们为每一个方块状态都指定一次材质和模型，那这注定会带来很大的工作量。</p>

<p>不过，原版 Minecraft 提供了 <code>multipart</code> 机制，能够让我们为每个属性指定独有的一部分模型和材质，然后将每个属性所指定的拼合起来。</p>

<p>以下是我们的整个方块状态 JSON：</p>

<pre><code class="language-json">{
  "multipart": [
    {
      "apply": {
        "model": "fedemo:block/wire_core"
      }
    },
    {
      "when": {
        "north": "true"
      },
      "apply": {
        "model": "fedemo:block/wire_part"
      }
    },
    {
      "when": {
        "east": "true"
      },
      "apply": {
        "model": "fedemo:block/wire_part",
        "y": 90
      }
    },
    {
      "when": {
        "south": "true"
      },
      "apply": {
        "model": "fedemo:block/wire_part",
        "y": 180
      }
    },
    {
      "when": {
        "west": "true"
      },
      "apply": {
        "model": "fedemo:block/wire_part",
        "y": 270
      }
    },
    {
      "when": {
        "up": "true"
      },
      "apply": {
        "model": "fedemo:block/wire_part",
        "x": 270
      }
    },
    {
      "when": {
        "down": "true"
      },
      "apply": {
        "model": "fedemo:block/wire_part",
        "x": 90
      }
    }
  ]
}
</code></pre>

<ul>
<li>我们的核心位于 <code>fedemo:block/wire_core</code>，这是无论什么方块状态都会有的。</li>
<li>我们为每个属性都指定了 <code>fedemo:block/wire_part</code>，在特定方向的连接存在时提供相应的模型和材质。</li>
</ul>

<p>不同的连接方向属性所引用的 JSON 是相同的，但旋转方向有细微的差别（注意是顺时针）：</p>

<ul>
<li><code>north</code> 为默认，也就是不旋转。</li>
<li><code>east</code> 沿 Y 轴顺时针旋转 90 度。</li>
<li><code>south</code> 沿 Y 轴顺时针旋转 180 度。</li>
<li><code>west</code> 沿 Y 轴顺时针旋转 270 度。</li>
<li><code>up</code> 沿 X 轴顺时针旋转 270 度。</li>
<li><code>down</code> 沿 X 轴顺时针旋转 90 度。</li>
</ul>

<p>现在我们需要制作一个代表核心的 <code>wire_core.json</code>：</p>

<pre><code class="language-json">{
  "parent": "block/block",
  "ambientocclusion": false,
  "textures": {
    "wire": "fedemo:block/wire_core_part",
    "particle": "fedemo:block/wire_core_part"
  },
  "elements": [
    {
      "from": [5, 5, 5],
      "to": [11, 11, 11],
      "faces": {
        "north": {
          "uv": [7, 7, 13, 13],
          "texture": "#wire"
        },
        "east": {
          "uv": [7, 7, 13, 13],
          "texture": "#wire"
        },
        "south": {
          "uv": [7, 7, 13, 13],
          "texture": "#wire"
        },
        "west": {
          "uv": [7, 7, 13, 13],
          "texture": "#wire"
        },
        "up": {
          "uv": [7, 7, 13, 13],
          "texture": "#wire"
        },
        "down": {
          "uv": [7, 7, 13, 13],
          "texture": "#wire"
        }
      }
    }
  ]
}
</code></pre>

<p>和一个代表连接状态的 <code>wire_part.json</code>：</p>

<pre><code class="language-json">{
  "ambientocclusion": false,
  "textures": {
    "wire": "fedemo:block/wire_core_part",
    "particle": "fedemo:block/wire_core_part"
  },
  "elements": [
    {
      "from": [6, 6, 0],
      "to": [10, 10, 7],
      "faces": {
        "north": {
          "uv": [3, 3, 7, 7],
          "texture": "#wire"
        },
        "east": {
          "uv": [6, 3, 13, 7],
          "texture": "#wire"
        },
        "west": {
          "uv": [6, 3, 13, 7],
          "texture": "#wire"
        },
        "up": {
          "uv": [3, 6, 7, 13],
          "texture": "#wire"
        },
        "down": {
          "uv": [3, 6, 7, 13],
          "texture": "#wire"
        }
      }
    }
  ]
}
</code></pre>

<p>两个 JSON 引用的是同一个材质（见下图 <code>wire_core_part.png</code>）：</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/04/image-7.png" alt=""></p>

<p>最后别忘了添加描述物品材质的 JSON：</p>

<pre><code class="language-json">{
  "parent": "fedemo:block/wire_core"
}
</code></pre>

<p>现在我们可以打开游戏看看效果了：</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/04/image-8.png" alt=""></p>

<h2 id="">方块碰撞箱和选择框</h2>

<p>由于导线是不完整方块，因此我们需要指定方块的碰撞箱和选择框的形态。</p>

<p>我们先从碰撞箱开始，我们需要覆盖 <code>getCollisionShape</code> 方法：</p>

<pre><code class="language-java">@Nonnull
@Override
@SuppressWarnings("deprecation")
public VoxelShape getCollisionShape(@Nonnull BlockState state, @Nonnull IBlockReader world, @Nonnull BlockPos pos, @Nonnull ISelectionContext context)  
{
    return VoxelShapes.empty();
}
</code></pre>

<p>这里设置的是没有碰撞箱，读者也可以根据自己的喜好设置成其他的碰撞箱。</p>

<p>然后是选择框，我们在这里这里需要覆盖 <code>getShape</code> 方法：</p>

<pre><code class="language-java">@Nonnull
@Override
@SuppressWarnings("deprecation")
public VoxelShape getShape(@Nonnull BlockState state, @Nonnull IBlockReader world, @Nonnull BlockPos pos, @Nonnull ISelectionContext context)  
{
    return Block.makeCuboidShape(4, 4, 4, 12, 12, 12);
}
</code></pre>

<p>我们已经在第二讲接触过碰撞箱的相关内容了，这里的设置大同小异。</p>

<p>这里设置的选择框比导线核心大了一圈，现在可以打开游戏看看了。</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/04/image-9.png" alt=""></p>

<h2 id="">代码清单</h2>

<p>这一部分添加的文件有：</p>

<ul>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/block/FEDemoWireBlock.java</code></li>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/tileentity/FEDemoWireTileEntity.java</code></li>
<li><code>src/main/resources/assets/fedemo/blockstates/wire.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/block/wire_core.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/block/wire_part.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/item/wire.json</code></li>
<li><code>src/main/resources/assets/fedemo/textures/block/wire_core_part.png</code></li>
</ul>

<p>这一部分修改的文件有：</p>

<ul>
<li><code>src/main/resources/assets/fedemo/lang/en_us.json</code></li>
</ul>]]></content:encoded></item><item><title><![CDATA[Forge 能量系统简述（三）]]></title><description><![CDATA[<p>在这一讲我们将制造一个作为发电机的机器方块：</p>

<ul>
<li>该方块收集太阳能作为能量来源。</li>
<li>该方块能够向周围方块输出能量。</li>
</ul>

<h2 id="">添加方块和方块实体</h2>

<p>以下是方块类的基础实现：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class FEDemoGeneratorBlock extends Block  
{
    public static final String NAME = "fedemo:generator";

    @ObjectHolder(NAME)
    public static FEDemoGeneratorBlock BLOCK;

    @SubscribeEvent
    public static void onRegisterBlock(@Nonnull RegistryEvent.Register&lt;Block&gt; event)
    {
        FEDemo.LOGGER.info("Registering generator block ...");
        event.getRegistry(</code></pre>]]></description><link>https://blog.ustc-zzzz.net/forge-energy-demo-3/</link><guid isPermaLink="false">798e920d-ce80-46f9-9607-851366595d72</guid><category><![CDATA[Minecraft]]></category><category><![CDATA[Modded Minecraft Dev]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Sat, 25 Apr 2020 22:14:15 GMT</pubDate><content:encoded><![CDATA[<p>在这一讲我们将制造一个作为发电机的机器方块：</p>

<ul>
<li>该方块收集太阳能作为能量来源。</li>
<li>该方块能够向周围方块输出能量。</li>
</ul>

<h2 id="">添加方块和方块实体</h2>

<p>以下是方块类的基础实现：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class FEDemoGeneratorBlock extends Block  
{
    public static final String NAME = "fedemo:generator";

    @ObjectHolder(NAME)
    public static FEDemoGeneratorBlock BLOCK;

    @SubscribeEvent
    public static void onRegisterBlock(@Nonnull RegistryEvent.Register&lt;Block&gt; event)
    {
        FEDemo.LOGGER.info("Registering generator block ...");
        event.getRegistry().register(new FEDemoGeneratorBlock().setRegistryName(NAME));
    }

    @SubscribeEvent
    public static void onRegisterItem(@Nonnull RegistryEvent.Register&lt;Item&gt; event)
    {
        FEDemo.LOGGER.info("Registering generator item ...");
        event.getRegistry().register(new BlockItem(BLOCK, new Item.Properties().group(ItemGroup.MISC)).setRegistryName(NAME));
    }

    private FEDemoGeneratorBlock()
    {
        super(Block.Properties.create(Material.IRON).hardnessAndResistance(3));
    }

    @Override
    public boolean hasTileEntity(@Nonnull BlockState state)
    {
        return true;
    }

    @Override
    public TileEntity createTileEntity(@Nonnull BlockState state, @Nonnull IBlockReader world)
    {
        return FEDemoGeneratorTileEntity.TILE_ENTITY_TYPE.create();
    }
}
</code></pre>

<p>以下是方块实体类的基础实现：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class FEDemoGeneratorTileEntity extends TileEntity implements ITickableTileEntity  
{
    public static final String NAME = "fedemo:generator";

    @ObjectHolder(NAME)
    public static TileEntityType&lt;FEDemoGeneratorTileEntity&gt; TILE_ENTITY_TYPE;

    @SubscribeEvent
    public static void onRegisterTileEntityType(@Nonnull RegistryEvent.Register&lt;TileEntityType&lt;?&gt;&gt; event)
    {
        FEDemo.LOGGER.info("Registering generator tile entity type ...");
        event.getRegistry().register(TileEntityType.Builder.create(FEDemoGeneratorTileEntity::new, FEDemoGeneratorBlock.BLOCK).build(DSL.remainderType()).setRegistryName(NAME));
    }

    private FEDemoGeneratorTileEntity()
    {
        super(TILE_ENTITY_TYPE);
    }
}
</code></pre>

<p>方块和方块实体类的实现和上一讲针对用电器的实现大同小异。</p>

<p>然后我们指定方块状态 JSON（<code>generator.json</code>）：</p>

<pre><code class="language-json">{
  "variants": {
    "": {
      "model": "fedemo:block/generator"
    }
  }
}
</code></pre>

<p>接下来是描述方块材质的同名 JSON（<code>generator.json</code>）：</p>

<pre><code class="language-json">{
  "parent": "block/cube_bottom_top",
  "textures": {
    "bottom": "block/furnace_top",
    "top": "fedemo:block/generator_top",
    "side": "fedemo:block/energy_side"
  }
}
</code></pre>

<p>以及描述方块对应物品的同名 JSON（<code>generator.json</code>）：</p>

<pre><code class="language-json">{
  "parent": "fedemo:block/generator"
}
</code></pre>

<p>相较上一讲，我们额外添加了 <code>generator_top.png</code> 作为发电机顶部的新材质。</p>

<p>最后我们补充语言文件（<code>en_us.json</code>）：</p>

<pre><code class="language-json">"block.fedemo.generator": "FE Energy Generator"
</code></pre>

<p>打开游戏就可以看到效果了：</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/04/image-5.png" alt=""></p>

<h2 id="capability">为方块实体实现 Capability</h2>

<p>我们仍然使用一个 <code>int</code> 字段存储方块实体的能量，并将其通过 <code>read</code> 和 <code>write</code> 方法和 NBT 映射：</p>

<pre><code class="language-java">private int energy = 0;

@Override
public void read(@Nonnull CompoundNBT compound)  
{
    this.energy = compound.getInt("GeneratorEnergy");
    super.read(compound);
}

@Nonnull
@Override
public CompoundNBT write(@Nonnull CompoundNBT compound)  
{
    compound.putInt("GeneratorEnergy", this.energy);
    return super.write(compound);
}
</code></pre>

<p>然后我们基于此实现我们自己的 <code>LazyOptional&lt;IEnergyStorage&gt;</code> 和基于能量的 Capability 实现：</p>

<pre><code class="language-java">private final LazyOptional&lt;IEnergyStorage&gt; lazyOptional = LazyOptional.of(() -&gt; new IEnergyStorage()  
{
    @Override
    public int receiveEnergy(int maxReceive, boolean simulate)
    {
        return 0;
    }

    @Override
    public int extractEnergy(int maxExtract, boolean simulate)
    {
        int energy = this.getEnergyStored();
        int diff = Math.min(energy, maxExtract);
        if (!simulate)
        {
            FEDemoGeneratorTileEntity.this.energy -= diff;
            if (diff != 0)
            {
                FEDemoGeneratorTileEntity.this.markDirty();
            }
        }
        return diff;
    }

    @Override
    public int getEnergyStored()
    {
        return Math.max(0, Math.min(this.getMaxEnergyStored(), FEDemoGeneratorTileEntity.this.energy));
    }

    @Override
    public int getMaxEnergyStored()
    {
        return 192_000;
    }

    @Override
    public boolean canExtract()
    {
        return true;
    }

    @Override
    public boolean canReceive()
    {
        return false;
    }
});

@Nonnull
@Override
public &lt;T&gt; LazyOptional&lt;T&gt; getCapability(@Nonnull Capability&lt;T&gt; cap, Direction side)  
{
    boolean isEnergy = Objects.equals(cap, CapabilityEnergy.ENERGY) &amp;&amp; side.getAxis().isHorizontal();
    return isEnergy ? this.lazyOptional.cast() : super.getCapability(cap, side);
}
</code></pre>

<p>这里的实现和上一讲针对用电器的实现类似，唯一的不同之处在于：发电机的电量应该是只出不进的。注意 <code>canReceive</code> 和 <code>receiveEnergy</code> 两个方法的返回值。</p>

<h2 id="">为方块实体实现功能</h2>

<p>我们既然希望方块收集太阳能，那我们自然是希望方块实体所存储的能量随时间递增。这需要我们让我们的方块实体每 tick 执行一段代码，原版 Minecraft 为我们提供了 <code>ITickableTileEntity</code> 接口。我们只需要让我们的类在继承 <code>TileEntity</code> 的同时实现这一接口即可：</p>

<pre><code class="language-java">public class FEDemoGeneratorTileEntity extends TileEntity implements ITickableTileEntity  
{
    // ...

    @Override
    public void tick()
    {
        if (this.world != null &amp;&amp; !this.world.isRemote)
        {
            this.generateEnergy(this.world);
            this.transferEnergy(this.world);
        }
    }

    private void generateEnergy(@Nonnull World world)
    {
        // TODO
    }

    private void transferEnergy(@Nonnull World world)
    {
        // TODO
    }

    // ...
}
</code></pre>

<p>我们先从 <code>generateEnergy</code> 方法的实现开始：</p>

<pre><code class="language-java">private void generateEnergy(@Nonnull World world)  
{
    if (world.getDimension().hasSkyLight())
    {
        int light = world.getLightFor(LightType.SKY, this.pos.up()) - world.getSkylightSubtracted();
        int diff = Math.min(192_000 - this.energy, 10 * Math.max(0, light - 10));
        if (diff != 0)
        {
            this.energy += diff;
            this.markDirty();
        }
    }
}
</code></pre>

<p>表达式 <code>world.getLightFor(LightType.SKY, this.pos.up()) - world.getSkylightSubtracted()</code> 返回的是当前方块上方的天空亮度值，不超过 15。它的下一行代码规定了亮度和能量的映射关系：亮度不超过 10 时不增加 FE，超过 10 后每增加 1 每 tick 相应增加 10 FE，亮度为 15 时为 50 FE。最后别忘了不要让能量值超过能够存储的最大值。</p>

<p>然后我们实现 <code>transferEnergy</code> 方法。</p>

<h2 id="">能量的主动输出</h2>

<p>我们希望实现发电机和用电器相邻时传输能量的功能，但仅仅为两个机器实现能量相关的 Capability 是远远不够的：计算机程序不是物理定律，不会出现自然而然的能量流动，换言之，我们需要手写能量流动的相关代码。那么这段代码到底应该是“发电机主动输出能量”，还是“用电器主动吸收能量”呢？答案是显然的：我们应该让发电机控制能量的流动，因此，我们需要让我们的发电机对应的方块实体每 tick 自动搜寻附近的方块实体，并分别注入能量。</p>

<p>我们现在来实现 <code>transferEnergy</code> 方法：</p>

<pre><code class="language-java">private final Queue&lt;Direction&gt; directionQueue = Queues.newArrayDeque(Direction.Plane.HORIZONTAL);

private void transferEnergy(@Nonnull World world)  
{
    this.directionQueue.offer(this.directionQueue.remove());
    for (Direction direction : this.directionQueue)
    {
        TileEntity tileEntity = world.getTileEntity(this.pos.offset(direction));
        if (tileEntity != null)
        {
            tileEntity.getCapability(CapabilityEnergy.ENERGY, direction.getOpposite()).ifPresent(e -&gt;
            {
                if (e.canReceive())
                {
                    int diff = e.receiveEnergy(Math.min(500, this.energy), false);
                    if (diff != 0)
                    {
                        this.energy -= diff;
                        this.markDirty();
                    }
                }
            });
        }
    }
}
</code></pre>

<p>方法还是相对简单的：通过遍历水平方向的所有相邻方块，然后逐个注入能量，一次最多注入 500 FE。注意在获取相邻方块时，需要获取的是相反的方向（例如对于东侧的方块，注入能量时应该从该方块的西侧注入），也就是对 <code>Direction</code> 调用 <code>getOpposite</code> 方法并取其返回值。</p>

<p>唯一可能令人费解的是这一行：</p>

<pre><code class="language-java">this.directionQueue.offer(this.directionQueue.remove());  
</code></pre>

<p>通过 <code>directionQueue</code> 字段的声明我们可以注意到，我们把该队列的第一个元素取出放到了最后一个元素的位置，这是为什么呢？</p>

<p>我们思考一下如何不这么做会发生什么：</p>

<ul>
<li>首先找到北侧的方块并注入能量。</li>
<li>然后找到东侧的方块并注入能量。</li>
<li>接着找到南侧的方块并注入能量。</li>
<li>最后找到西侧的方块并注入能量。</li>
</ul>

<p>我们可以注意到，如果只是平凡地遍历，那么北侧的方块将永远拥有最大的优先级。如果我们每 tick 只能产出 50 FE 能量，但北侧的方块一次可以吸收 200 FE 的能量，那势必会导致能量会全部被北侧的方块吸走。因此，我们为了雨露均沾，必须每次注入能量时人为调整能量的优先级。当然了，可以考虑的实现有很多，这里读者可以尽情地发挥自己的想象力。</p>

<p>现在打开游戏，能量应能正常收集并传输了。</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/04/image-6.png" alt=""></p>

<h2 id="">代码清单</h2>

<p>这一部分添加的文件有：</p>

<ul>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/block/FEDemoGeneratorBlock.java</code></li>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/tileentity/FEDemoGeneratorTileEntity.java</code></li>
<li><code>src/main/resources/assets/fedemo/blockstates/generator.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/block/generator.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/item/generator.json</code></li>
<li><code>src/main/resources/assets/fedemo/textures/block/generator_top.png</code></li>
</ul>

<p>这一部分修改的文件有：</p>

<ul>
<li><code>src/main/resources/assets/fedemo/lang/en_us.json</code></li>
</ul>]]></content:encoded></item><item><title><![CDATA[Forge 能量系统简述（二）]]></title><description><![CDATA[<p>这一讲我们将达成两个目标：</p>

<ul>
<li>制造一个作为用电器的机器方块，且当实体生物站在该方块上时耗费能量为实体回血。</li>
<li>使电池在右键方块时可以将自己的能量转移到特定方块，按住 Shift 右键则反过来。</li>
</ul>

<h2 id="">添加方块</h2>

<p>我们先编写一个最最基础的方块类，并为其指定材料、硬度、和爆炸抗性，同时为对应的物品指定创造模式物品栏：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class FEDemoMachineBlock extends Block  
{
    public static final String NAME = "fedemo:machine";

    @ObjectHolder(NAME)
    public static FEDemoMachineBlock BLOCK;

    @SubscribeEvent
    public static void onRegisterBlock(@Nonnull RegistryEvent.Register&lt;Block&gt; event)</code></pre>]]></description><link>https://blog.ustc-zzzz.net/forge-energy-demo-2/</link><guid isPermaLink="false">f337fb0b-4091-4ead-97bd-de305896faa3</guid><category><![CDATA[Minecraft]]></category><category><![CDATA[Modded Minecraft Dev]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Wed, 22 Apr 2020 20:51:00 GMT</pubDate><content:encoded><![CDATA[<p>这一讲我们将达成两个目标：</p>

<ul>
<li>制造一个作为用电器的机器方块，且当实体生物站在该方块上时耗费能量为实体回血。</li>
<li>使电池在右键方块时可以将自己的能量转移到特定方块，按住 Shift 右键则反过来。</li>
</ul>

<h2 id="">添加方块</h2>

<p>我们先编写一个最最基础的方块类，并为其指定材料、硬度、和爆炸抗性，同时为对应的物品指定创造模式物品栏：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class FEDemoMachineBlock extends Block  
{
    public static final String NAME = "fedemo:machine";

    @ObjectHolder(NAME)
    public static FEDemoMachineBlock BLOCK;

    @SubscribeEvent
    public static void onRegisterBlock(@Nonnull RegistryEvent.Register&lt;Block&gt; event)
    {
        FEDemo.LOGGER.info("Registering machine block ...");
        event.getRegistry().register(new FEDemoMachineBlock().setRegistryName(NAME));
    }

    @SubscribeEvent
    public static void onRegisterItem(@Nonnull RegistryEvent.Register&lt;Item&gt; event)
    {
        FEDemo.LOGGER.info("Registering machine item ...");
        event.getRegistry().register(new BlockItem(BLOCK, new Item.Properties().group(ItemGroup.MISC)).setRegistryName(NAME));
    }

    private FEDemoMachineBlock()
    {
        super(Block.Properties.create(Material.IRON).hardnessAndResistance(3));
    }
}
</code></pre>

<p>这里使用了 <code>ObjectHolder</code> 注解来使 Forge 自动注入对应的方块类型的实例。注意该注解的参数正是方块的注册名。</p>

<p>然后我们添加语言文件：</p>

<pre><code class="language-json">"block.fedemo.machine": "FE Heal Machine"
</code></pre>

<p>以及同名方块状态 JSON 文件（<code>machine.json</code>）：</p>

<pre><code class="language-json">{
  "variants": {
    "": {
      "model": "fedemo:block/machine"
    }
  }
}
</code></pre>

<p>该 JSON 文件指向同名材质描述文件。</p>

<p>我们创建 <code>machine.json</code> 文件，该文件的上一级目录名应为 <code>block</code>：</p>

<pre><code class="language-json">{
  "parent": "block/cube_bottom_top",
  "textures": {
    "bottom": "block/furnace_top",
    "top": "fedemo:block/machine_top",
    "side": "fedemo:block/energy_side"
  }
}
</code></pre>

<p>该文件复用了熔炉的 JSON 材质，并引用了两张额外的材质（<code>machine_top.png</code> 和 <code>energy_side.png</code>）。</p>

<p>在添加这两张材质的同时，我们不要忘了让 <code>item</code> 目录下的同名文件（<code>machine.json</code>）引用该 JSON：</p>

<pre><code class="language-json">{
  "parent": "fedemo:block/machine"
}
</code></pre>

<p>现在打开游戏。如一切顺利，方块和对应物品均应正常显示：</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/04/image-3.png" alt=""></p>

<h2 id="">为方块添加方块实体</h2>

<p>如果想要让方块存储复杂的数据，执行复杂的行为，方块实体（<code>TileEntity</code>）是必不可少的。更重要的一点是，<code>TileEntity</code> 本身实现了 <code>ICapabilityProvider</code> 接口，因此如果我们想要声明一个方块拥有能量，我们必须为该方块指定方块实体。</p>

<p>添加 <code>TileEntity</code> 前必须首先添加 <code>TileEntityType</code>。和方块物品等类似，<code>TileEntityType</code> 本身也有注册事件，因此我们要监听这一事件并将 <code>TileEntityType</code> 的实例注册进去：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class FEDemoMachineTileEntity extends TileEntity  
{
    public static final String NAME = "fedemo:machine";

    @ObjectHolder(NAME)
    public static TileEntityType&lt;FEDemoMachineTileEntity&gt; TILE_ENTITY_TYPE;

    @SubscribeEvent
    public static void onRegisterTileEntityType(@Nonnull RegistryEvent.Register&lt;TileEntityType&lt;?&gt;&gt; event)
    {
        FEDemo.LOGGER.info("Registering machine tile entity type ...");
        event.getRegistry().register(TileEntityType.Builder.create(FEDemoMachineTileEntity::new, FEDemoMachineBlock.BLOCK).build(DSL.remainderType()).setRegistryName(NAME));
    }

    private FEDemoMachineTileEntity()
    {
        super(TILE_ENTITY_TYPE);
    }
}
</code></pre>

<p>除去注册名外，构造一个 <code>TileEntityType</code> 一共需要不少于三个参数：</p>

<ul>
<li><code>create</code> 方法的第一个参数代表方块实体的构造器，而后续参数代表能够和方块实体相容的方块类型（由于是变长参数，因此可传入多个），这里直接传入对应方块就好了。</li>
<li><code>build</code> 方法的唯一参数代表方块实体 NBT 类型。该类型由 Mojang 官方的 DataFixer（<code>com.mojang.datafixers</code>）定义，这里直接取 <code>DSL.remainderType()</code>（代表未知类型）即可。</li>
</ul>

<p>最后我们需要在方块类中声明方块和方块实体的关联，为此我们需要覆盖 <code>Block</code> 类的 <code>hasTileEntity</code> 和 <code>createTileEntity</code> 方法：</p>

<pre><code class="language-java">@Override
public boolean hasTileEntity(@Nonnull BlockState state)  
{
    return true;
}

@Override
public TileEntity createTileEntity(@Nonnull BlockState state, @Nonnull IBlockReader world)  
{
    return FEDemoMachineTileEntity.TILE_ENTITY_TYPE.create();
}
</code></pre>

<h2 id="capability">为方块实体添加 Capability</h2>

<p>由于每个方块实体都分别对应一个 <code>TileEntity</code> 的实例，因此我们可以将数据直接以字段的方式存放在 <code>TileEntity</code> 中。唯一不同的是，为了让我们的数据能够映射到 NBT，我们需要同时覆盖 <code>TileEntity</code> 的 <code>read</code> 和 <code>write</code> 两个方法：</p>

<pre><code class="language-java">private int energy = 0;

@Override
public void read(@Nonnull CompoundNBT compound)  
{
    this.energy = compound.getInt("MachineEnergy");
    super.read(compound);
}

@Nonnull
@Override
public CompoundNBT write(@Nonnull CompoundNBT compound)  
{
    compound.putInt("MachineEnergy", this.energy);
    return super.write(compound);
}
</code></pre>

<p><code>read</code> 和 <code>write</code> 两个方法反映的分别是方块实体的反序列化和序列化两个过程。一个 <code>TileEntity</code> 通过这两个方法实现了和 NBT 复合标签的映射。</p>

<p>现在我们来实现 <code>getCapability</code> 方法。在上面的内容中我们提到过，<code>TileEntity</code> 本身实现了 <code>ICapabilityProvider</code> 接口，因此我们只需覆盖这一方法即可：</p>

<pre><code class="language-java">private LazyOptional&lt;IEnergyStorage&gt; lazyOptional; // TODO

@Nonnull
@Override
public &lt;T&gt; LazyOptional&lt;T&gt; getCapability(@Nonnull Capability&lt;T&gt; cap, Direction side)  
{
    boolean isEnergy = Objects.equals(cap, CapabilityEnergy.ENERGY) &amp;&amp; side.getAxis().isHorizontal();
    return isEnergy ? this.lazyOptional.cast() : super.getCapability(cap, side);
}
</code></pre>

<p>注意相较物品，我们的 <code>getCapability</code> 方法在判断时额外判定了传入的是否为水平朝向（东南西北）。通过这种方法我们可以设定输入输出能量相较朝向的限制，在这里我们直接禁止了能量在上下两个朝向的交互。</p>

<p>然后我们构造 <code>LazyOptional&lt;IEnergyStorage&gt;</code> 的实例：</p>

<pre><code class="language-java">private final LazyOptional&lt;IEnergyStorage&gt; lazyOptional = LazyOptional.of(() -&gt; new IEnergyStorage()  
{
    @Override
    public int receiveEnergy(int maxReceive, boolean simulate)
    {
        int energy = this.getEnergyStored();
        int diff = Math.min(this.getMaxEnergyStored() - energy, maxReceive);
        if (!simulate)
        {
            FEDemoMachineTileEntity.this.energy += diff;
            if (diff != 0)
            {
                FEDemoMachineTileEntity.this.markDirty();
            }
        }
        return diff;
    }

    @Override
    public int extractEnergy(int maxExtract, boolean simulate)
    {
        return 0;
    }

    @Override
    public int getEnergyStored()
    {
        return Math.max(0, Math.min(this.getMaxEnergyStored(), FEDemoMachineTileEntity.this.energy));
    }

    @Override
    public int getMaxEnergyStored()
    {
        return 192_000;
    }

    @Override
    public boolean canExtract()
    {
        return false;
    }

    @Override
    public boolean canReceive()
    {
        return true;
    }
});
</code></pre>

<p>和基于物品的实现，基于方块实体的实现有以下几点不同：</p>

<ul>
<li>直接通过修改 <code>energy</code> 字段调整能量。</li>
<li><code>getMaxEnergyStored</code> 返回的是最大存储能量，这里设置为 <code>192000</code>。</li>
<li>由于是作为用电器的机器，所以能量是只进不出的。注意 <code>canExtract</code> 和 <code>extractEnergy</code> 两个方法的返回值。</li>
<li>注意 <code>markDirty</code> 的使用。该方法会将相应区块标记为需要保存，虽然如果不标记，游戏通常也会保存，但我们强烈建议这么做。</li>
</ul>

<h2 id="">为方块实现具体功能</h2>

<p>为了更方便地调整方块实体的能量，我们为方块实体类添加一个 <code>heal</code> 方法用于回血，一次回复 0.1 点（约一秒一颗心）：</p>

<pre><code class="language-java">public void heal(@Nonnull LivingEntity entity)  
{
    int diff = Math.min(this.energy, 100);
    if (diff &gt; 0)
    {
        entity.heal((float) diff / 1_000);
        this.energy -= diff;
        this.markDirty();
    }
}
</code></pre>

<p>若想判断实体是否接触了方块，我们需要利用方块的 <code>onEntityCollision</code> 方法。原版 Minecraft 会在实体进入方块所处区域时触发该方法，我们覆盖 <code>Block</code> 类的这一方法即可：</p>

<pre><code class="language-java">@Override
@SuppressWarnings("deprecation")
public void onEntityCollision(@Nonnull BlockState state, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull Entity entity)  
{
    if (!world.isRemote &amp;&amp; entity instanceof LivingEntity)
    {
        LivingEntity livingEntity = (LivingEntity) entity;
        if (livingEntity.getHealth() &lt; livingEntity.getMaxHealth())
        {
            TileEntity tileEntity = world.getTileEntity(pos);
            if (tileEntity instanceof FEDemoMachineTileEntity)
            {
                ((FEDemoMachineTileEntity) tileEntity).heal(livingEntity);
            }
        }
    }
}
</code></pre>

<p>在上面的方法里我们主要检查了四件事，如果四件事均满足我们便调用方块实体类的 <code>heal</code> 方法：</p>

<ul>
<li>世界处于逻辑服务端（使用 <code>!world.isRemote</code> 判断）。</li>
<li>实体属于实体生物这一范畴（使用 <code>entity instanceof LivingEntity</code> 判断）。</li>
<li>实体生物并未满血（使用 <code>livingEntity.getHealth() &lt; livingEntity.getMaxHealth()</code> 判断）。</li>
<li>对应的方块实体是我们所期望的（使用 <code>tileEntity instanceof FEDemoMachineTileEntity</code> 判断）。</li>
</ul>

<p>最后，为了让我们的实体进入方块所处区域，我们需要重新定义碰撞箱，不能让碰撞箱占满整个方块：</p>

<pre><code class="language-java">@Nonnull
@Override
@SuppressWarnings("deprecation")
public VoxelShape getCollisionShape(@Nonnull BlockState state, @Nonnull IBlockReader world, @Nonnull BlockPos pos, @Nonnull ISelectionContext context)  
{
    return Block.makeCuboidShape(0, 0, 0, 16, 15, 16);
}
</code></pre>

<p>代码很简单，只是让高度也就是 Y 轴从 16 变成了 15 而已，X 轴和 Z 轴方向都没有变。</p>

<h2 id="">为物品实现具体功能</h2>

<p>现在进入到这一讲的最后一步，也就是实现电池右键方块的行为。原版 Minecraft 会在物品右键方块时调用 <code>Item</code> 类的 <code>onItemUse</code> 方法，因此我们可以通过覆盖这一方法实现相应行为：</p>

<pre><code class="language-java">@Nonnull
@Override
public ActionResultType onItemUse(@Nonnull ItemUseContext context)  
{
    World world = context.getWorld();
    if (!world.isRemote)
    {
        TileEntity tileEntity = world.getTileEntity(context.getPos());
        if (tileEntity != null)
        {
            Direction side = context.getFace();
            tileEntity.getCapability(CapabilityEnergy.ENERGY, side).ifPresent(e -&gt;
            {
                this.transferEnergy(context, e);
                this.notifyPlayer(context, e);
            });
        }
    }
    return ActionResultType.SUCCESS;
}

private void notifyPlayer(@Nonnull ItemUseContext context, @Nonnull IEnergyStorage target)  
{
    PlayerEntity player = context.getPlayer();
    if (player != null)
    {
        String msg = target.getEnergyStored() + " FE / " + target.getMaxEnergyStored() + " FE";
        player.sendMessage(new StringTextComponent(msg).applyTextStyle(TextFormatting.GRAY));
    }
}

private void transferEnergy(@Nonnull ItemUseContext context, @Nonnull IEnergyStorage target)  
{
    // TODO
}
</code></pre>

<ul>
<li>首先我们进行了必要的逻辑服务端检查，以及方块实体本身的检查。</li>
<li>然后我们通过 <code>getCapability</code> 方法获取方块实体的能量相关信息。</li>
<li>紧接着我们调用了 <code>transferEnergy</code> 方法，该方法将完成能量的传输。</li>
<li>最后我们调用了 <code>notifyPlayer</code> 方法，通知右键方块的玩家能量相关信息。</li>
</ul>

<p>我们现在实现 <code>transferEnergy</code> 方法：</p>

<pre><code class="language-java">private void transferEnergy(@Nonnull ItemUseContext context, @Nonnull IEnergyStorage target)  
{
    context.getItem().getCapability(CapabilityEnergy.ENERGY).ifPresent(e -&gt;
    {
        if (context.isPlacerSneaking())
        {
            if (target.canExtract())
            {
                int diff = e.getMaxEnergyStored() - e.getEnergyStored();
                e.receiveEnergy(target.extractEnergy(diff, false), false);
            }
        }
        else
        {
            if (target.canReceive())
            {
                int diff = e.getEnergyStored();
                e.extractEnergy(target.receiveEnergy(diff, false), false);
            }
        }
    });
}
</code></pre>

<p>我们获取了物品本身对应的 <code>IEnergyStorage</code> 后，判断玩家是否按下 Shift。</p>

<p>接下来进入到了两个分支。我们先从第一个分支，也就是玩家按下 Shift 取出能量开始看：</p>

<pre><code class="language-java">if (target.canExtract())  
{
    int diff = e.getMaxEnergyStored() - e.getEnergyStored();
    e.receiveEnergy(target.extractEnergy(diff, false), false);
}
</code></pre>

<p>一个重要的问题是取出多少能量。很明显，为了达成“能取多少取多少”的目标，我们需要划定一个可以承受的上限，这个上限自然是电池还可以容纳的能量。我们计算出数值后存放到 <code>diff</code> 变量下，然后我们调用方块实体的 <code>extractEnergy</code> 方法以及和物品相关的 <code>receiveEnergy</code> 方法就可以了。</p>

<p>现在我们来看第二个分支，也就是玩家不按下 Shift 存入能量：</p>

<pre><code class="language-java">if (target.canReceive())  
{
    int diff = e.getEnergyStored();
    e.extractEnergy(target.receiveEnergy(diff, false), false);
}
</code></pre>

<p>整段实现和取出能量类似，但具体上仍有细微的差别。除了存取能量的身份对调外，如果我们想贯彻“能存多少存多少”的目标，我们需要把上限划定为 <code>e.getEnergyStored()</code>。</p>

<p>以下是打开游戏后的显示结果。</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/04/image-4.png" alt=""></p>

<h2 id="">代码清单</h2>

<p>这一部分添加的文件有：</p>

<ul>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/block/FEDemoMachineBlock.java</code></li>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/tileentity/FEDemoMachineTileEntity.java</code></li>
<li><code>src/main/resources/assets/fedemo/blockstates/machine.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/block/machine.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/item/machine.json</code></li>
<li><code>src/main/resources/assets/fedemo/textures/block/energy_side.png</code></li>
<li><code>src/main/resources/assets/fedemo/textures/block/machine_top.png</code></li>
</ul>

<p>这一部分修改的文件有：</p>

<ul>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/item/FEDemoBatteryItem.java</code></li>
<li><code>src/main/resources/assets/fedemo/lang/en_us.json</code></li>
</ul>]]></content:encoded></item><item><title><![CDATA[Forge 能量系统简述（一）]]></title><description><![CDATA[<p>虽然夹杂着众多争议，但 Forge 最终仍然决定在 1.10.2 加入官方的能量系统，并一直将其延续到现在。该系统参考了 CoFH 团队的众多设计，因此和在此前已经拥有鼎鼎大名的 Redstone Flux 能量系统有着众多的相似之处。</p>

<p>在本系列教程中，各位读者将走入 Forge 能量系统所带来的奇妙世界。由于本文将使用 Minecraft 1.14.4 和 Forge 28.2.4 进行讲解，因此如果读者想要顺畅阅读本教程，那么有一些要求是需要满足的：</p>

<ul>
<li>已能够相对熟练地使用 Java 8 编写代码和设计程序。</li>
<li>已能够基于 Minecraft 1.14.4 和 Forge 添加简单的方块或物品。</li>
</ul>

<p>本系列教程相关源代码：<a download="FEDemo.zip" href="data:application/zip;base64,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ZW1vL2Jsb2NrL1BLAQIeAxQAAgAIACt4oVBx/q3ohAIAALQHAABJAAAAAAAAAAEAAADtgVPTAABzcmMvbWFpbi9qYXZhL2NvbS9naXRodWIvdXN0Y196enp6L2ZlZGVtby9ibG9jay9GRURlbW9HZW5lcmF0b3JCbG9jay5qYXZhUEsBAh4DFAACAAgAK3ihUBdr+ay0AwAAeQwAAEcAAAAAAAAAAQAAAO2BPtYAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL2Jsb2NrL0ZFRGVtb01hY2hpbmVCbG9jay5qYXZhUEsBAh4DFAACAAgAK3ihUJSWevcLBgAAQxcAAEQAAAAAAAAAAQAAAO2BV9oAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL2Jsb2NrL0ZFRGVtb1dpcmVCbG9jay5qYXZhUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAAC8AAAAAAAAAAAAQAO1BxOAAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL2l0ZW0vUEsBAh4DFAACAAgAK3ihUK81VJsJBwAAth0AAEUAAAAAAAAAAQAAAO2BEeEAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL2l0ZW0vRkVEZW1vQmF0dGVyeUl0ZW0uamF2YVBLAQIeAwoAAAAAACt4oVAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAEADtQX3oAABzcmMvbWFpbi9qYXZhL2NvbS9naXRodWIvdXN0Y196enp6L2ZlZGVtby90aWxlZW50aXR5L1BLAQIeAxQAAgAIACt4oVCVUtHJ2wUAABMVAABTAAAAAAAAAAEAAADtgdDoAABzcmMvbWFpbi9qYXZhL2NvbS9naXRodWIvdXN0Y196enp6L2ZlZGVtby90aWxlZW50aXR5L0ZFRGVtb0dlbmVyYXRvclRpbGVFbnRpdHkuamF2YVBLAQIeAxQAAgAIACt4oVAX6H+McQQAAAwPAABRAAAAAAAAAAEAAADtgRzvAABzcmMvbWFpbi9qYXZhL2NvbS9naXRodWIvdXN0Y196enp6L2ZlZGVtby90aWxlZW50aXR5L0ZFRGVtb01hY2hpbmVUaWxlRW50aXR5LmphdmFQSwECHgMUAAIACAAreKFQDOW2ogwFAADLFQAATgAAAAAAAAABAAAA7YH88wAAc3JjL21haW4vamF2YS9jb20vZ2l0aHViL3VzdGNfenp6ei9mZWRlbW8vdGlsZWVudGl0eS9GRURlbW9XaXJlVGlsZUVudGl0eS5qYXZhUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAAC8AAAAAAAAAAAAQAO1BdPkAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL3V0aWwvUEsBAh4DFAACAAgAK3ihUBknkgYIAQAAMgIAAEEAAAAAAAAAAQAAAO2BwfkAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL3V0aWwvSUJsb2NrTmV0d29yay5qYXZhUEsBAh4DFAACAAgAK3ihUPghsRHABAAAuBYAAEYAAAAAAAAAAQAAAO2BKPsAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL3V0aWwvU2ltcGxlQmxvY2tOZXR3b3JrLmphdmFQSwECHgMUAAIACAAreKFQYepXA2YHAAAXIAAARwAAAAAAAAABAAAA7YFMAAEAc3JjL21haW4vamF2YS9jb20vZ2l0aHViL3VzdGNfenp6ei9mZWRlbW8vdXRpbC9TaW1wbGVFbmVyZ3lOZXR3b3JrLmphdmFQSwECHgMKAAAAAAAreKFQAAAAAAAAAAAAAAAAEwAAAAAAAAAAABAA7UEXCAEAc3JjL21haW4vcmVzb3VyY2VzL1BLAQIeAwoAAAAAACt4oVAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAEADtQUgIAQBzcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvUEsBAh4DFAACAAgAK3ihUMX08/fbAAAAhwEAACUAAAAAAAAAAQAAAO2BgggBAHNyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tb2RzLnRvbWxQSwECHgMKAAAAAAAreKFQAAAAAAAAAAAAAAAAGgAAAAAAAAAAABAA7UGgCQEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9QSwECHgMKAAAAAAAreKFQAAAAAAAAAAAAAAAAIQAAAAAAAAAAABAA7UHYCQEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAAC0AAAAAAAAAAAAQAO1BFwoBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL2Jsb2Nrc3RhdGVzL1BLAQIeAxQAAgAIACt4oVAk2ZAwQAAAAFAAAAA7AAAAAAAAAAEAAADtgWIKAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby9ibG9ja3N0YXRlcy9nZW5lcmF0b3IuanNvblBLAQIeAxQAAgAIACt4oVBT7IG6PgAAAE4AAAA5AAAAAAAAAAEAAADtgfsKAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby9ibG9ja3N0YXRlcy9tYWNoaW5lLmpzb25QSwECHgMUAAIACAAreKFQ6CtDuKYAAADAAwAANgAAAAAAAAABAAAA7YGQCwEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vYmxvY2tzdGF0ZXMvd2lyZS5qc29uUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAACYAAAAAAAAAAAAQAO1BigwBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL2xhbmcvUEsBAh4DFAACAAgAK3ihUBHU8VV0AAAAwwAAADAAAAAAAAAAAQAAAO2BzgwBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL2xhbmcvZW5fdXMuanNvblBLAQIeAwoAAAAAACt4oVAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAEADtQZANAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby9tb2RlbHMvUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAAC4AAAAAAAAAAAAQAO1B1g0BAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9ibG9jay9QSwECHgMUAAIACAAreKFQZPThYm0AAACwAAAAPAAAAAAAAAABAAAA7YEiDgEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2Jsb2NrL2dlbmVyYXRvci5qc29uUEsBAh4DFAACAAgAK3ihUOCSz9VuAAAArgAAADoAAAAAAAAAAQAAAO2B6Q4BAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9ibG9jay9tYWNoaW5lLmpzb25QSwECHgMUAAIACAAreKFQcW/g7dIAAAAxAwAAPAAAAAAAAAABAAAA7YGvDwEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2Jsb2NrL3dpcmVfY29yZS5qc29uUEsBAh4DFAACAAgAK3ihUEXGtTPSAAAAtAIAADwAAAAAAAAAAQAAAO2B2xABAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9ibG9jay93aXJlX3BhcnQuanNvblBLAQIeAwoAAAAAACt4oVAAAAAAAAAAAAAAAAAtAAAAAAAAAAAAEADtQQcSAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby9tb2RlbHMvaXRlbS9QSwECHgMUAAIACAAreKFQHgifAJ0AAAATAgAAOQAAAAAAAAABAAAA7YFSEgEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2l0ZW0vYmF0dGVyeS5qc29uUEsBAh4DFAACAAgAK3ihUA8yGEFPAAAAWwAAADoAAAAAAAAAAQAAAO2BRhMBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9pdGVtL2JhdHRlcnkxLmpzb25QSwECHgMUAAIACAAreKFQyg6VeE8AAABbAAAAOgAAAAAAAAABAAAA7YHtEwEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2l0ZW0vYmF0dGVyeTIuanNvblBLAQIeAxQAAgAIACt4oVCJGu5vUAAAAFsAAAA6AAAAAAAAAAEAAADtgZQUAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby9tb2RlbHMvaXRlbS9iYXR0ZXJ5My5qc29uUEsBAh4DFAACAAgAK3ihUEB3jwtQAAAAWwAAADoAAAAAAAAAAQAAAO2BPBUBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9pdGVtL2JhdHRlcnk0Lmpzb25QSwECHgMKAAIAAAAreKFQhYSszikAAAApAAAAOwAAAAAAAAABAAAA7YHkFQEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2l0ZW0vZ2VuZXJhdG9yLmpzb25QSwECHgMKAAIAAAAreKFQ37pBlCcAAAAnAAAAOQAAAAAAAAABAAAA7YFmFgEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2l0ZW0vbWFjaGluZS5qc29uUEsBAh4DCgACAAAAK3ihULjJh+IpAAAAKQAAADYAAAAAAAAAAQAAAO2B5BYBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9pdGVtL3dpcmUuanNvblBLAQIeAwoAAAAAACt4oVAAAAAAAAAAAAAAAAAqAAAAAAAAAAAAEADtQWEXAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby90ZXh0dXJlcy9QSwECHgMKAAAAAAAreKFQAAAAAAAAAAAAAAAAMAAAAAAAAAAAABAA7UGpFwEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvYmxvY2svUEsBAh4DCgACAAAAK3ihUIj1ZrwLBAAACwQAAD8AAAAAAAAAAAAAAO2B9xcBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL3RleHR1cmVzL2Jsb2NrL2VuZXJneV9zaWRlLnBuZ1BLAQIeAwoAAgAAACt4oVB5gNBENQIAADUCAABBAAAAAAAAAAAAAADtgV8cAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby90ZXh0dXJlcy9ibG9jay9nZW5lcmF0b3JfdG9wLnBuZ1BLAQIeAwoAAgAAACt4oVCvAhKhqwQAAKsEAAA/AAAAAAAAAAAAAADtgfMeAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby90ZXh0dXJlcy9ibG9jay9tYWNoaW5lX3RvcC5wbmdQSwECHgMKAAIAAAAreKFQjhXAXpoBAACaAQAAQgAAAAAAAAAAAAAA7YH7IwEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvYmxvY2svd2lyZV9jb3JlX3BhcnQucG5nUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAAC8AAAAAAAAAAAAQAO1B9SUBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL3RleHR1cmVzL2l0ZW0vUEsBAh4DCgACAAAAK3ihUOULfT2bAQAAmwEAADoAAAAAAAAAAAAAAO2BQiYBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL3RleHR1cmVzL2l0ZW0vYmF0dGVyeS5wbmdQSwECHgMKAAIAAAAreKFQg5zSHqcBAACnAQAAOwAAAAAAAAAAAAAA7YE1KAEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvaXRlbS9iYXR0ZXJ5MS5wbmdQSwECHgMKAAIAAAAreKFQ/8tf+64BAACuAQAAOwAAAAAAAAAAAAAA7YE1KgEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvaXRlbS9iYXR0ZXJ5Mi5wbmdQSwECHgMKAAIAAAAreKFQ3o2vmqwBAACsAQAAOwAAAAAAAAAAAAAA7YE8LAEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvaXRlbS9iYXR0ZXJ5My5wbmdQSwECHgMKAAIAAAAreKFQiAFSLrABAACwAQAAOwAAAAAAAAAAAAAA7YFBLgEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvaXRlbS9iYXR0ZXJ5NC5wbmdQSwECHgMUAAIACAAreKFQOlRG5lAAAABqAAAAHgAAAAAAAAABAAAA7YFKMAEAc3JjL21haW4vcmVzb3VyY2VzL3BhY2subWNtZXRhUEsFBgAAAABFAEUAHhkAANYwAQAAAA==">FEDemo.zip</a>（82.5</p>]]></description><link>https://blog.ustc-zzzz.net/forge-energy-demo-1/</link><guid isPermaLink="false">00e647dd-c781-474b-9ac0-9d75e0441270</guid><category><![CDATA[Minecraft]]></category><category><![CDATA[Modded Minecraft Dev]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Sun, 19 Apr 2020 16:15:00 GMT</pubDate><content:encoded><![CDATA[<p>虽然夹杂着众多争议，但 Forge 最终仍然决定在 1.10.2 加入官方的能量系统，并一直将其延续到现在。该系统参考了 CoFH 团队的众多设计，因此和在此前已经拥有鼎鼎大名的 Redstone Flux 能量系统有着众多的相似之处。</p>

<p>在本系列教程中，各位读者将走入 Forge 能量系统所带来的奇妙世界。由于本文将使用 Minecraft 1.14.4 和 Forge 28.2.4 进行讲解，因此如果读者想要顺畅阅读本教程，那么有一些要求是需要满足的：</p>

<ul>
<li>已能够相对熟练地使用 Java 8 编写代码和设计程序。</li>
<li>已能够基于 Minecraft 1.14.4 和 Forge 添加简单的方块或物品。</li>
</ul>

<p>本系列教程相关源代码：<a download="FEDemo.zip" href="data:application/zip;base64,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ZW1vL2Jsb2NrL1BLAQIeAxQAAgAIACt4oVBx/q3ohAIAALQHAABJAAAAAAAAAAEAAADtgVPTAABzcmMvbWFpbi9qYXZhL2NvbS9naXRodWIvdXN0Y196enp6L2ZlZGVtby9ibG9jay9GRURlbW9HZW5lcmF0b3JCbG9jay5qYXZhUEsBAh4DFAACAAgAK3ihUBdr+ay0AwAAeQwAAEcAAAAAAAAAAQAAAO2BPtYAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL2Jsb2NrL0ZFRGVtb01hY2hpbmVCbG9jay5qYXZhUEsBAh4DFAACAAgAK3ihUJSWevcLBgAAQxcAAEQAAAAAAAAAAQAAAO2BV9oAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL2Jsb2NrL0ZFRGVtb1dpcmVCbG9jay5qYXZhUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAAC8AAAAAAAAAAAAQAO1BxOAAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL2l0ZW0vUEsBAh4DFAACAAgAK3ihUK81VJsJBwAAth0AAEUAAAAAAAAAAQAAAO2BEeEAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL2l0ZW0vRkVEZW1vQmF0dGVyeUl0ZW0uamF2YVBLAQIeAwoAAAAAACt4oVAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAEADtQX3oAABzcmMvbWFpbi9qYXZhL2NvbS9naXRodWIvdXN0Y196enp6L2ZlZGVtby90aWxlZW50aXR5L1BLAQIeAxQAAgAIACt4oVCVUtHJ2wUAABMVAABTAAAAAAAAAAEAAADtgdDoAABzcmMvbWFpbi9qYXZhL2NvbS9naXRodWIvdXN0Y196enp6L2ZlZGVtby90aWxlZW50aXR5L0ZFRGVtb0dlbmVyYXRvclRpbGVFbnRpdHkuamF2YVBLAQIeAxQAAgAIACt4oVAX6H+McQQAAAwPAABRAAAAAAAAAAEAAADtgRzvAABzcmMvbWFpbi9qYXZhL2NvbS9naXRodWIvdXN0Y196enp6L2ZlZGVtby90aWxlZW50aXR5L0ZFRGVtb01hY2hpbmVUaWxlRW50aXR5LmphdmFQSwECHgMUAAIACAAreKFQDOW2ogwFAADLFQAATgAAAAAAAAABAAAA7YH88wAAc3JjL21haW4vamF2YS9jb20vZ2l0aHViL3VzdGNfenp6ei9mZWRlbW8vdGlsZWVudGl0eS9GRURlbW9XaXJlVGlsZUVudGl0eS5qYXZhUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAAC8AAAAAAAAAAAAQAO1BdPkAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL3V0aWwvUEsBAh4DFAACAAgAK3ihUBknkgYIAQAAMgIAAEEAAAAAAAAAAQAAAO2BwfkAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL3V0aWwvSUJsb2NrTmV0d29yay5qYXZhUEsBAh4DFAACAAgAK3ihUPghsRHABAAAuBYAAEYAAAAAAAAAAQAAAO2BKPsAAHNyYy9tYWluL2phdmEvY29tL2dpdGh1Yi91c3RjX3p6enovZmVkZW1vL3V0aWwvU2ltcGxlQmxvY2tOZXR3b3JrLmphdmFQSwECHgMUAAIACAAreKFQYepXA2YHAAAXIAAARwAAAAAAAAABAAAA7YFMAAEAc3JjL21haW4vamF2YS9jb20vZ2l0aHViL3VzdGNfenp6ei9mZWRlbW8vdXRpbC9TaW1wbGVFbmVyZ3lOZXR3b3JrLmphdmFQSwECHgMKAAAAAAAreKFQAAAAAAAAAAAAAAAAEwAAAAAAAAAAABAA7UEXCAEAc3JjL21haW4vcmVzb3VyY2VzL1BLAQIeAwoAAAAAACt4oVAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAEADtQUgIAQBzcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvUEsBAh4DFAACAAgAK3ihUMX08/fbAAAAhwEAACUAAAAAAAAAAQAAAO2BgggBAHNyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tb2RzLnRvbWxQSwECHgMKAAAAAAAreKFQAAAAAAAAAAAAAAAAGgAAAAAAAAAAABAA7UGgCQEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9QSwECHgMKAAAAAAAreKFQAAAAAAAAAAAAAAAAIQAAAAAAAAAAABAA7UHYCQEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAAC0AAAAAAAAAAAAQAO1BFwoBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL2Jsb2Nrc3RhdGVzL1BLAQIeAxQAAgAIACt4oVAk2ZAwQAAAAFAAAAA7AAAAAAAAAAEAAADtgWIKAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby9ibG9ja3N0YXRlcy9nZW5lcmF0b3IuanNvblBLAQIeAxQAAgAIACt4oVBT7IG6PgAAAE4AAAA5AAAAAAAAAAEAAADtgfsKAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby9ibG9ja3N0YXRlcy9tYWNoaW5lLmpzb25QSwECHgMUAAIACAAreKFQ6CtDuKYAAADAAwAANgAAAAAAAAABAAAA7YGQCwEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vYmxvY2tzdGF0ZXMvd2lyZS5qc29uUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAACYAAAAAAAAAAAAQAO1BigwBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL2xhbmcvUEsBAh4DFAACAAgAK3ihUBHU8VV0AAAAwwAAADAAAAAAAAAAAQAAAO2BzgwBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL2xhbmcvZW5fdXMuanNvblBLAQIeAwoAAAAAACt4oVAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAEADtQZANAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby9tb2RlbHMvUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAAC4AAAAAAAAAAAAQAO1B1g0BAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9ibG9jay9QSwECHgMUAAIACAAreKFQZPThYm0AAACwAAAAPAAAAAAAAAABAAAA7YEiDgEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2Jsb2NrL2dlbmVyYXRvci5qc29uUEsBAh4DFAACAAgAK3ihUOCSz9VuAAAArgAAADoAAAAAAAAAAQAAAO2B6Q4BAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9ibG9jay9tYWNoaW5lLmpzb25QSwECHgMUAAIACAAreKFQcW/g7dIAAAAxAwAAPAAAAAAAAAABAAAA7YGvDwEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2Jsb2NrL3dpcmVfY29yZS5qc29uUEsBAh4DFAACAAgAK3ihUEXGtTPSAAAAtAIAADwAAAAAAAAAAQAAAO2B2xABAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9ibG9jay93aXJlX3BhcnQuanNvblBLAQIeAwoAAAAAACt4oVAAAAAAAAAAAAAAAAAtAAAAAAAAAAAAEADtQQcSAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby9tb2RlbHMvaXRlbS9QSwECHgMUAAIACAAreKFQHgifAJ0AAAATAgAAOQAAAAAAAAABAAAA7YFSEgEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2l0ZW0vYmF0dGVyeS5qc29uUEsBAh4DFAACAAgAK3ihUA8yGEFPAAAAWwAAADoAAAAAAAAAAQAAAO2BRhMBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9pdGVtL2JhdHRlcnkxLmpzb25QSwECHgMUAAIACAAreKFQyg6VeE8AAABbAAAAOgAAAAAAAAABAAAA7YHtEwEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2l0ZW0vYmF0dGVyeTIuanNvblBLAQIeAxQAAgAIACt4oVCJGu5vUAAAAFsAAAA6AAAAAAAAAAEAAADtgZQUAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby9tb2RlbHMvaXRlbS9iYXR0ZXJ5My5qc29uUEsBAh4DFAACAAgAK3ihUEB3jwtQAAAAWwAAADoAAAAAAAAAAQAAAO2BPBUBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9pdGVtL2JhdHRlcnk0Lmpzb25QSwECHgMKAAIAAAAreKFQhYSszikAAAApAAAAOwAAAAAAAAABAAAA7YHkFQEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2l0ZW0vZ2VuZXJhdG9yLmpzb25QSwECHgMKAAIAAAAreKFQ37pBlCcAAAAnAAAAOQAAAAAAAAABAAAA7YFmFgEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vbW9kZWxzL2l0ZW0vbWFjaGluZS5qc29uUEsBAh4DCgACAAAAK3ihULjJh+IpAAAAKQAAADYAAAAAAAAAAQAAAO2B5BYBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL21vZGVscy9pdGVtL3dpcmUuanNvblBLAQIeAwoAAAAAACt4oVAAAAAAAAAAAAAAAAAqAAAAAAAAAAAAEADtQWEXAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby90ZXh0dXJlcy9QSwECHgMKAAAAAAAreKFQAAAAAAAAAAAAAAAAMAAAAAAAAAAAABAA7UGpFwEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvYmxvY2svUEsBAh4DCgACAAAAK3ihUIj1ZrwLBAAACwQAAD8AAAAAAAAAAAAAAO2B9xcBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL3RleHR1cmVzL2Jsb2NrL2VuZXJneV9zaWRlLnBuZ1BLAQIeAwoAAgAAACt4oVB5gNBENQIAADUCAABBAAAAAAAAAAAAAADtgV8cAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby90ZXh0dXJlcy9ibG9jay9nZW5lcmF0b3JfdG9wLnBuZ1BLAQIeAwoAAgAAACt4oVCvAhKhqwQAAKsEAAA/AAAAAAAAAAAAAADtgfMeAQBzcmMvbWFpbi9yZXNvdXJjZXMvYXNzZXRzL2ZlZGVtby90ZXh0dXJlcy9ibG9jay9tYWNoaW5lX3RvcC5wbmdQSwECHgMKAAIAAAAreKFQjhXAXpoBAACaAQAAQgAAAAAAAAAAAAAA7YH7IwEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvYmxvY2svd2lyZV9jb3JlX3BhcnQucG5nUEsBAh4DCgAAAAAAK3ihUAAAAAAAAAAAAAAAAC8AAAAAAAAAAAAQAO1B9SUBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL3RleHR1cmVzL2l0ZW0vUEsBAh4DCgACAAAAK3ihUOULfT2bAQAAmwEAADoAAAAAAAAAAAAAAO2BQiYBAHNyYy9tYWluL3Jlc291cmNlcy9hc3NldHMvZmVkZW1vL3RleHR1cmVzL2l0ZW0vYmF0dGVyeS5wbmdQSwECHgMKAAIAAAAreKFQg5zSHqcBAACnAQAAOwAAAAAAAAAAAAAA7YE1KAEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvaXRlbS9iYXR0ZXJ5MS5wbmdQSwECHgMKAAIAAAAreKFQ/8tf+64BAACuAQAAOwAAAAAAAAAAAAAA7YE1KgEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvaXRlbS9iYXR0ZXJ5Mi5wbmdQSwECHgMKAAIAAAAreKFQ3o2vmqwBAACsAQAAOwAAAAAAAAAAAAAA7YE8LAEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvaXRlbS9iYXR0ZXJ5My5wbmdQSwECHgMKAAIAAAAreKFQiAFSLrABAACwAQAAOwAAAAAAAAAAAAAA7YFBLgEAc3JjL21haW4vcmVzb3VyY2VzL2Fzc2V0cy9mZWRlbW8vdGV4dHVyZXMvaXRlbS9iYXR0ZXJ5NC5wbmdQSwECHgMUAAIACAAreKFQOlRG5lAAAABqAAAAHgAAAAAAAAABAAAA7YFKMAEAc3JjL21haW4vcmVzb3VyY2VzL3BhY2subWNtZXRhUEsFBgAAAABFAEUAHhkAANYwAQAAAA==">FEDemo.zip</a>（82.5 KiB）。</p>

<p>废话不多说，我们开始吧。</p>

<h2 id="">准备工作</h2>

<p>我们决定将 ModID 起名为 <code>fedemo</code>，以下是 <code>META-INF/mods.toml</code> 文件：</p>

<pre><code class="language-toml">modLoader="javafml"  
loaderVersion="[28,)"

[[mods]]
modId="fedemo"  
version="${file.jarVersion}"  
displayName="FE Demonstration Mod"  
description="Demonstration for Forge Energy"

[[dependencies.fedemo]]
modId="forge"  
mandatory=true  
versionRange="[28.2,)"  
ordering="NONE"  
side="BOTH"

[[dependencies.fedemo]]
modId="minecraft"  
mandatory=true  
versionRange="[1.14.4]"  
ordering="NONE"  
side="BOTH"  
</code></pre>

<p>以下是主类，非常简洁：</p>

<pre><code class="language-java">@Mod("fedemo")
public class FEDemo  
{
    public static final Logger LOGGER = LogManager.getLogger(FEDemo.class);
}
</code></pre>

<p>本系列教程的所有 Java 代码均在 <code>com.github.ustc_zzzz.fedemo</code> 包下。</p>

<h2 id="capability">Capability 系统</h2>

<p>Capability 系统是 Forge 能量系统的基石。</p>

<p>Capability 系统对原版游戏元素和第三方行为（大多数情况下和 Mod 有关）实施了一定程度的解耦合。具体来说，Mod 开发者可通过调用 <code>getCapability</code> 方法获取并操纵特定的第三方行为。<code>getCapability</code> 方法由 <code>ICapabilityProvider</code> 接口声明，而 Forge 为很多游戏元素都实现了这一接口，比如我们耳熟能详的物品堆叠（<code>ItemStack</code>）、实体（<code>Entity</code>）、方块实体（<code>TileEntity</code>）等。</p>

<p><code>CapabilityDispatcher</code> 是一类特殊的 <code>ICapabilityProvider</code>，因为它可以存有多个 <code>ICapabilityProvider</code>。刚才我们提到的物品堆叠、实体、方块实体等游戏元素，内部都存在一个由 Forge 提供的 <code>CapabilityDispatcher</code>，这使得我们向已有的游戏元素添加 <code>ICapabilityProvider</code> 成为可能。</p>

<p>我们来看 <code>getCapability</code> 方法的声明：</p>

<pre><code class="language-java">@Nonnull &lt;T&gt; LazyOptional&lt;T&gt; getCapability(@Nonnull Capability&lt;T&gt; cap, Direction side);
</code></pre>

<p><code>getCapability</code> 方法的第一个参数代表的是特定的 Capability，我们可以通过 <code>CapabilityEnergy.ENERGY</code> 来拿到它，从而为实现 Forge 能量系统铺路；<code>getCapability</code> 方法的第二个参数代表一个方向，在和方块实体打交道的时候我们用得着。</p>

<h2 id="capability">为物品添加 Capability</h2>

<p>我们决定制作一个存储 FE 的电池。我们先编写一个最最基础的物品类，并为其指定创造模式物品栏和最大物品数量：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class FEDemoBatteryItem extends Item  
{
    public static final String NAME = "fedemo:battery";

    @SubscribeEvent
    public static void onRegisterItem(@Nonnull RegistryEvent.Register&lt;Item&gt; event)
    {
        FEDemo.LOGGER.info("Registering battery item ...");
        event.getRegistry().register(new FEDemoBatteryItem().setRegistryName(NAME));
    }

    private FEDemoBatteryItem()
    {
        super(new Item.Properties().maxStackSize(1).group(ItemGroup.MISC));
    }
}
</code></pre>

<p>Forge 为 <code>Item</code> 额外追加了 <code>initCapabilities</code> 方法，这个方法的返回值是 <code>ICapabilityProvider</code>，我们需要覆盖这个方法：</p>

<pre><code class="language-java">@Override
public ICapabilityProvider initCapabilities(@Nonnull ItemStack stack, CompoundNBT nbt)  
{
    return new ICapabilityProvider()
    {
        private LazyOptional&lt;IEnergyStorage&gt; lazyOptional; // TODO

        @Nonnull
        @Override
        public &lt;T&gt; LazyOptional&lt;T&gt; getCapability(@Nonnull Capability&lt;T&gt; cap, Direction side)
        {
            boolean isEnergy = Objects.equals(cap, CapabilityEnergy.ENERGY);
            return isEnergy ? this.lazyOptional.cast() : LazyOptional.empty();
        }
    };
}
</code></pre>

<p>我们注意到了 <code>LazyOptional</code> 的存在。<code>LazyOptional</code> 类由 Forge 提供，本质和 Java 的 Optional 类似，不过其内部的实例只在用到的时候才会加载。我们在参数为 <code>CapabilityEnergy.ENERGY</code> 的时候返回一个预先准备好的 <code>LazyOptional</code>，否则便返回一个 <code>LazyOptional.empty()</code>。</p>

<p><code>CapabilityEnergy.ENERGY</code> 的类型是 <code>Capability&lt;IEnergyStorage&gt;</code>，因此我们要实现的也是 <code>IEnergyStorage</code>。</p>

<h2 id="">物品能量的具体实现</h2>

<p><code>ItemStack</code> 存储三种数据：物品类型、数量、和 NBT。很明显，我们的物品能量只能放在 NBT 里。</p>

<p>我们会用到以下五个方法操纵 NBT：</p>

<ul>
<li><code>hasTag</code>：检查一个 <code>ItemStack</code> 是否拥有 NBT。</li>
<li><code>getTag</code>：返回一个 <code>ItemStack</code> 的 NBT，如果不存在则返回 <code>null</code>。</li>
<li><code>getOrCreateTag</code>：返回一个 <code>ItemStack</code> 的 NBT，如果不存在则为其创建一个。</li>
<li><code>putInt</code>：设置 NBT 复合标签的特定整数值。</li>
<li><code>getInt</code>：获取 NBT 复合标签的特定整数值，如果值不存在或者不是整数则返回 <code>0</code>。</li>
</ul>

<p>很好。以下是具体实现：</p>

<pre><code class="language-java">private final LazyOptional&lt;IEnergyStorage&gt; lazyOptional = LazyOptional.of(() -&gt; new IEnergyStorage()  
{
    @Override
    public int receiveEnergy(int maxReceive, boolean simulate)
    {
        int energy = this.getEnergyStored();
        int diff = Math.min(this.getMaxEnergyStored() - energy, maxReceive);
        if (!simulate)
        {
            stack.getOrCreateTag().putInt("BatteryEnergy", energy + diff);
        }
        return diff;
    }

    @Override
    public int extractEnergy(int maxExtract, boolean simulate)
    {
        int energy = this.getEnergyStored();
        int diff = Math.min(energy, maxExtract);
        if (!simulate)
        {
            stack.getOrCreateTag().putInt("BatteryEnergy", energy - diff);
        }
        return diff;
    }

    @Override
    public int getEnergyStored()
    {
        if (stack.hasTag())
        {
            int energy = Objects.requireNonNull(stack.getTag()).getInt("BatteryEnergy");
            return Math.max(0, Math.min(this.getMaxEnergyStored(), energy));
        }
        return 0;
    }

    @Override
    public int getMaxEnergyStored()
    {
        return 48_000;
    }

    @Override
    public boolean canExtract()
    {
        return true;
    }

    @Override
    public boolean canReceive()
    {
        return true;
    }
});
</code></pre>

<p>代码有点复杂，我们一个方法一个方法拆开看。</p>

<ul>
<li><code>canReceive</code> 代表是否能输入能量，这里我们让它返回 <code>true</code>。</li>
<li><code>canExtract</code> 代表是否能输出能量，这里我们也让它返回 <code>true</code>。</li>
<li><code>getMaxEnergyStored</code> 代表内部能够存储的最大能量，这里我们设定在 <code>48000</code>。</li>
<li><code>getEnergyStored</code> 代表内部存储的实际能量，这里我们通过物品的 NBT 读取能量。</li>
<li><code>extractEnergy</code> 代表实施输出能量的行为，其中 <code>simulate</code> 参数代表是否为模拟行为。</li>
<li><code>receiveEnergy</code> 代表实施输入能量的行为，其中 <code>simulate</code> 参数代表是否为模拟行为。</li>
</ul>

<p><code>extractEnergy</code> 和 <code>receiveEnergy</code> 各自均接收一个 <code>int</code> 作为参数，并生成 <code>int</code> 作为返回值。其中，作为参数传入的 <code>int</code> 代表期望输入输出的能量，而作为返回值的 <code>int</code> 代表实际输入输出的能量。这两个参数都非常重要，希望读者能够加以注意。</p>

<h2 id="">杂项</h2>

<p>我们可以向 <code>en_us.json</code> 这一语言文件里添加一项：</p>

<pre><code class="language-json">"item.fedemo.battery": "FE Battery"
</code></pre>

<p>我们还可以通过覆盖 <code>addInformation</code> 方法添加额外的提示文本：</p>

<pre><code class="language-java">@Override
@OnlyIn(Dist.CLIENT)
public void addInformation(@Nonnull ItemStack stack, World world, @Nonnull List&lt;ITextComponent&gt; tooltip, @Nonnull ITooltipFlag flag)  
{
    stack.getCapability(CapabilityEnergy.ENERGY).ifPresent(e -&gt;
    {
        String msg = e.getEnergyStored() + " FE / " + e.getMaxEnergyStored() + " FE";
        tooltip.add(new StringTextComponent(msg).applyTextStyle(TextFormatting.GRAY));
    });
}
</code></pre>

<p>我们也可以通过覆盖 <code>fillItemGroup</code> 方法为创造模式物品栏添加多个物品，分别对应 0 FE，12000 FE，24000 FE，36000 FE，和 48000 FE：</p>

<pre><code class="language-java">@Override
public void fillItemGroup(@Nonnull ItemGroup group, @Nonnull NonNullList&lt;ItemStack&gt; items)  
{
    if (this.isInGroup(group))
    {
        IntStream.rangeClosed(0, 4).forEach(i -&gt;
        {
            ItemStack stack = new ItemStack(this);
            stack.getCapability(CapabilityEnergy.ENERGY).ifPresent(e -&gt;
            {
                int energy = e.getMaxEnergyStored() / 4 * i;
                e.receiveEnergy(energy, false);
                items.add(stack);
            });
        });
    }
}
</code></pre>

<p>到目前为止，我们已经解决了除材质外的所有问题了。</p>

<h2 id="">材质</h2>

<p>我们为电池绘制了五种材质，分别对应电量空到电量满等五种情况，也恰好对应创造模式物品栏的五个物品：</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/04/image-1.png" alt=""></p>

<p>默认情况自然是电量空，那我们怎么映射剩下的四种情况呢？原版 Minecraft 为我们提供了 Item Property Override 机制，该机制使得根据 NBT 动态调整材质成为可能。</p>

<p>欲使用 Item Property Override，我们只需在构造方法中添加下面一句：</p>

<pre><code class="language-java">this.addPropertyOverride(new ResourceLocation("energy"), (stack, world, entity) -&gt;  
{
    LazyOptional&lt;IEnergyStorage&gt; lazyOptional = stack.getCapability(CapabilityEnergy.ENERGY);
    return lazyOptional.map(e -&gt; (float) e.getEnergyStored() / e.getMaxEnergyStored()).orElse(0.0F);
});
</code></pre>

<p>这样我们的物品就有了一个名为 <code>energy</code> 的属性，我们在描述材质的 JSON 文件（应为 <code>battery.json</code>）写下：</p>

<pre><code class="language-json">{
  "parent": "item/generated",
  "textures": {
    "layer0": "fedemo:item/battery"
  },
  "overrides": [
    {
      "predicate": {
        "energy": 0.125
      },
      "model": "fedemo:item/battery1"
    },
    {
      "predicate": {
        "energy": 0.375
      },
      "model": "fedemo:item/battery2"
    },
    {
      "predicate": {
        "energy": 0.625
      },
      "model": "fedemo:item/battery3"
    },
    {
      "predicate": {
        "energy": 0.875
      },
      "model": "fedemo:item/battery4"
    }
  ]
}
</code></pre>

<p>注意和普通 JSON 相比，该文件额外多出了 <code>override</code> 部分，其中 <code>predicate</code> 判定的是当前属性值是否不小于提供的值，因此我们在该 JSON 中将 <code>energy</code> 划分为了五档，从而应对五种可能的情况。</p>

<p>接下来我们只需要完善 <code>battery1.json</code> 到 <code>battery4.json</code> 就可以了。以下是 <code>battery4.json</code> 的全部内容：</p>

<pre><code class="language-json">{
  "parent": "item/generated",
  "textures": {
    "layer0": "fedemo:item/battery4"
  }
}
</code></pre>

<p>以下是打开游戏后的显示结果。</p>

<p><img src="https://blog.ustc-zzzz.net/content/images/2020/04/image-2.png" alt=""></p>

<h2 id="">代码清单</h2>

<p>这一部分添加的文件有：</p>

<ul>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/FEDemo.java</code></li>
<li><code>src/main/java/com/github/ustc_zzzz/fedemo/item/FEDemoBatteryItem.java</code></li>
<li><code>src/main/resources/pack.mcmeta</code></li>
<li><code>src/main/resources/META-INF/mods.toml</code></li>
<li><code>src/main/resources/assets/fedemo/lang/en_us.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/item/battery.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/item/battery1.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/item/battery2.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/item/battery3.json</code></li>
<li><code>src/main/resources/assets/fedemo/models/item/battery4.json</code></li>
<li><code>src/main/resources/assets/fedemo/textures/item/battery.png</code></li>
<li><code>src/main/resources/assets/fedemo/textures/item/battery1.png</code></li>
<li><code>src/main/resources/assets/fedemo/textures/item/battery2.png</code></li>
<li><code>src/main/resources/assets/fedemo/textures/item/battery3.png</code></li>
<li><code>src/main/resources/assets/fedemo/textures/item/battery4.png</code></li>
</ul>]]></content:encoded></item><item><title><![CDATA[如何写好教程——作为教程作者对于更好编写教程的一些经验和心得]]></title><description><![CDATA[<p><img src="https://licensebuttons.net/l/by-nd/4.0/88x31.png" alt="Creative Commons License"></p>

<p>本文作者 zzzz，使用 CC-BY-ND 4.0 协议授权，亦即：</p>

<ul>
<li>[👍] 你可以在署名本人的同时使用任何形式转载分发本文章。</li>
<li>[👎] 你不能在转载分发本文章的同时修改本文章。</li>
<li>[👍] 你可以在商业目的下使用本文章。</li>
</ul>

<h2 id="1">1 引言</h2>

<p>这篇文章算是“教程的教程”。本人也算是写过几年教程的人了，因此在写教程这一块也积累了一些东西，现在拿出来分享给大家。本人并不是什么名师大家，也没有读过什么教育学的书籍，因此一定程度的闭门造车在所难免，不过本人还是希望能够通过这篇文章，给所有想要写或者已经在写教程，尤其是系列性技术类教程的人一些帮助。</p>

<h2 id="2">2 为什么要有教程</h2>

<p>对于一篇特定的教程而言，它可不可以没有呢？当然可以。难道说教程的作者在编写该教程之前，人们就没有办法学到相应的知识了吗？但是，在此之前，人们学习特定领域的知识的过程，往往充满着弯路和误导性的见解，因此教程起到的，恰恰是整理归纳，帮后来者少走弯路的过程。</p>

<h3 id="21">2.1 教程不是手把手</h3>

<p>教程通常情况下是以图文或者视频的形式展现给大家的，因此往往很难产生实时性的回馈。当然，对于连载型的教程，读者的回馈一定程度上能够引导作者在接下来的教程编撰过程，不过实质上这方面的影响微乎其微。</p>

<p>因此，虽然教程读者可能很容易找到教程中的事实性错误（比方说哪里哪里写得不够全面，</p>]]></description><link>https://blog.ustc-zzzz.net/meta-tutorial/</link><guid isPermaLink="false">8c4259b6-df3c-4dc2-9a4d-3cbf7ca57867</guid><category><![CDATA[Minecraft]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Sun, 12 Apr 2020 10:43:54 GMT</pubDate><content:encoded><![CDATA[<p><img src="https://licensebuttons.net/l/by-nd/4.0/88x31.png" alt="Creative Commons License"></p>

<p>本文作者 zzzz，使用 CC-BY-ND 4.0 协议授权，亦即：</p>

<ul>
<li>[👍] 你可以在署名本人的同时使用任何形式转载分发本文章。</li>
<li>[👎] 你不能在转载分发本文章的同时修改本文章。</li>
<li>[👍] 你可以在商业目的下使用本文章。</li>
</ul>

<h2 id="1">1 引言</h2>

<p>这篇文章算是“教程的教程”。本人也算是写过几年教程的人了，因此在写教程这一块也积累了一些东西，现在拿出来分享给大家。本人并不是什么名师大家，也没有读过什么教育学的书籍，因此一定程度的闭门造车在所难免，不过本人还是希望能够通过这篇文章，给所有想要写或者已经在写教程，尤其是系列性技术类教程的人一些帮助。</p>

<h2 id="2">2 为什么要有教程</h2>

<p>对于一篇特定的教程而言，它可不可以没有呢？当然可以。难道说教程的作者在编写该教程之前，人们就没有办法学到相应的知识了吗？但是，在此之前，人们学习特定领域的知识的过程，往往充满着弯路和误导性的见解，因此教程起到的，恰恰是整理归纳，帮后来者少走弯路的过程。</p>

<h3 id="21">2.1 教程不是手把手</h3>

<p>教程通常情况下是以图文或者视频的形式展现给大家的，因此往往很难产生实时性的回馈。当然，对于连载型的教程，读者的回馈一定程度上能够引导作者在接下来的教程编撰过程，不过实质上这方面的影响微乎其微。</p>

<p>因此，虽然教程读者可能很容易找到教程中的事实性错误（比方说哪里哪里写得不够全面，或者干脆就是写错了），但我们不能期望教程的受众能够从字里行间看到一些教程在设计编排和行文思路等方面存在的一些问题。</p>

<p>这恰恰是写教程的一大难点所在，因为我们要面对各种各样的读者：有的读者从未接触过相关领域，学得很慢；而有的读者可能已经是这个领域的熟手，只是想通过教程看看能不能学到一些新的东西。能够让大部分期待受众满意，应当是教程作者自始至终孜孜不倦所追求的目标。</p>

<h3 id="22">2.2 教程不是开发文档</h3>

<p>很多人倾向于把教程写成开发文档。这也难怪，因为这些人在编写教程的时候，市面上可能真的一个同类的教程都没有，因此这些人完全是通过开发文档甚至一定程度自己的摸索进行学习的。</p>

<p>但是，我们为什么会需要第三方开发者编撰的开发文档？请在编写教程时务必牢记：我们不是像流水账一样把知识点介绍完，而是应考虑到读者的学习规律，合理地划分知识点，从而引导读者完成一系列的学习过程。</p>

<h3 id="23">2.3 教程相当于用户指南</h3>

<p>本人很喜欢“用户指南”这一比喻。教程在系统性地介绍知识点的同时，也会把读者领入相关领域的大门，并尽可能地减少未来在该领域会遇到的阻碍。唯一的区别是：用户指南是官方的，而教程通常都是第三方的。</p>

<h2 id="3">3 教程的受众</h2>

<p>在写教程的时候，可不要犯搞不清“阳春白雪”和“下里巴人”的错误。把复杂的内容教给初学者去听，那显然是对牛弹琴；但如果把简单的内容教给熟练工去学，那只会让读者觉着太啰嗦。</p>

<p>但是，如果在某个知识点搞不清是什么样的人会看到，那应该写得精炼一些还是啰嗦一些呢？个人感觉还是要写得啰嗦一点，因为写得精炼会直接把新手拒之门外，而写得啰嗦顶多会让老手看得烦一些，通常不会把老手劝退。</p>

<h3 id="31">3.1 遣词造句的调整</h3>

<p>为了让读者在阅读时搞清楚自己在作者期望中的位置，我们可以在编写时采用一点语言上的小技巧。传言孔仲尼在编纂《春秋》时以一字为褒贬，我们虽然达不到孔老夫子的思想深度，但是一点点小的尝试还是可以有的，比如：</p>

<ul>
<li>如果对编程知之甚少，那么建议使用广受好评的 <code>VSCode</code> 入门。</li>
<li><code>VSCode</code> 在开发者中广受欢迎，同时也是编程初学者的上佳之选。</li>
</ul>

<p>这两句话的含义几乎是一样的，但前者在表述中有默许编程初学者阅读本教程的倾向，而后者却没有这样的意思。如果教程不希望编程初学者阅读，那么使用后一个表述则更为合适。</p>

<h3 id="32">3.2 遇到新手怎么办</h3>

<p>很多时候，即使教程作者尽力了，还是会有超出作者预期的读者来阅读，尤其是新手。虽然每个人其实都是新手过来的，但整个社区由于处在浮躁的大环境下，因此很少能够产生相当的共情能力。幸运的是，编写教程本身不需要特别强的共情能力，因此我们应尽量避免新手在阅读教程遇到困难里，接触到来自社区内部缺乏共情能力所带来的恶意。</p>

<p>我们可以通过设定目标的方式来让新手完成一次自我筛查（比如提醒读者读完某本教材便有阅读当前教程的能力等），从而让超出作者预期的新手读者转而先去完善其他的知识。</p>

<h3 id="33">3.3 遇到老手怎么办</h3>

<p>有的时候，会有一些在特定领域十分熟练的人作为教程的读者。他们可能已经掌握了教程大部分的内容，因此教程中的很多东西对于他们是可有可无的，甚至是啰嗦的。对于这部分读者，本人的建议是在教程中分阶段编写总结性的内容（比如添加专门的“本章小结”），这样熟手便可直奔小结而去，从而节省他们阅读教程的时间。</p>

<h2 id="4">4 教程整体结构的编排</h2>

<p>很多人会像开发文档一样安排教程的整体结构。文档读者大多会直奔主题而去，因此文档的章节顺序是按照内容关注度排序的：最常用的东西放在最前，而不常用的东西放到偏后的位置。但如果我们编写教程时这么想，那是万万不可的。因此，设计开发文档的时候，往往可以想到什么写什么，而设计教程的时候，往往需要在一开始就把教程的整体结构设计完毕，如果之后再作调整，教程将会变得非常难改。</p>

<p>设计教程的整体结构时，考虑到教程的目标读者通常会从头开始，一章一章地读完，因此一定要顺应目标读者的学习过程。如果一个概念本身很常用，但是相对较难掌握，那么它可能很适合放在文档的最开头几章，而放在教程的最开头几章是极为不合适的。</p>

<h3 id="41">4.1 前言怎么写</h3>

<p>前言，又称引言、序，主要起到提纲挈领的作用。通常情况下，教程会在前言里提到教程本身大概写了什么，教程本身的适用背景，以及教程期望读者本身达到什么样的门槛，等等。个人感觉，前言的写法相对比较自由，但十分不建议不写前言。这是因为，如果一篇教程不写前言，尤其当标题写得不那么清楚的时候，很多读者上来便会云里雾里，不知道教程的重心是什么。</p>

<h3 id="42">4.2 第一章怎么写</h3>

<p>对于偏实践的教程而言，第一章通常会写一些工作环境的配置，Hello World 等。读者本身会通过模仿的方式在第一章形成对整个领域最朴素的认知，而且写 Hello World 什么的，是整个教程最基础的部分。一方面，编写该部分时应当尽可能准确，同时也应该与时俱进（这里不一定要求采用最新版本，但往往需要保证在当前的环境下教程里使用的版本也能正常工作）。这块写起来倒是没什么难度，而且开发文档的第一章往往也是类似的，因此流水账通常也能胜任。</p>

<p>对于偏理论的教程而言，第一章通常会介绍一些基本概念。在这一方面，教程作者就应当十分小心了。这一部分相当于后续章节的根基，因此给读者的印象需要经过极其细致的斟酌。此外，由于后续章节往往依赖于这一章，因此该部分一旦落成，后续便会极难更改。作者在编写时，应当把整个教程最核心，最精炼的地方拿出来。</p>

<p>有的教程会同时看重理论和实践，因此上面提到的两方面都会有，而一些篇幅偏短的教程，两方面都没有也是可行的。</p>

<h3 id="43">4.3 后续章节怎么写</h3>

<p>一个领域的知识点往往十分复杂，并且相互盘根错节，而两个章节的知识点相互引用，更是十分常有的事。那读者更容易接受的是靠前章节引用靠后章节的知识点，还是靠后章节引用靠前章节的知识点呢？显然是引用靠前的知识点。</p>

<p>因此，我们在尽量使各章相互保持松散的同时，如果万不得已，一定要尽可能地保证靠前的章节所介绍的知识的完备性。我们在编写教程的时候应该能注意到，教程越往后越好写，而越往前越难改，以上便是原因。</p>

<h3 id="44">4.4 最后一章怎么写</h3>

<p>最后一章通常介绍的是总结和展望性的内容，具体形式通常是资源链接和参考文献。和开发文档不同，教程实际上并不需要把一个领域的所有知识点都介绍完，而对于没有介绍到的知识点，我们便可以放到最后一章来加以简要介绍。最后一章还适用于一些很难嵌入整个教程但却相对重要的知识点。</p>

<h3 id="45">4.5 后记怎么写</h3>

<p>后记通常反映的是作者的心路历程，有的作者也会把这一部分放到前言去写，或者合并到最后一章。说白了，就是作者觉着一些东西不吐不快，但又和整个教程涉及的知识点没什么直接关联，因此放在最后可有可无的碎碎念什么的（笑）。</p>

<h3 id="46">4.6 附录怎么写</h3>

<p>附录记录的通常是流水账，一些杂七杂八的知识点有的作者也不愿意放到正文，而是放到附录来写。由于很多流水账其实是可以通过官方文档等途径，或者干脆通过直接搜索便可得到的，因此近年来也不是很时兴在教程里加附录。</p>

<h2 id="5">5 教程的具体行文</h2>

<p>在上面的内容中我们提到，和开发文档不同，教程通常情况下是会一章一章地依次读下来的。这意味着教程中，具体文段和文段之间的衔接非常重要，因为读者在阅读教程的时候，思维本身应当是连续的。</p>

<p>那什么情况下读者的思绪会被打断呢？</p>

<h3 id="51">5.1 前后无联系的知识点</h3>

<p>之前有过担当节目主持人的经历的应该知道，在两个节目切换的时候，主持人通常需要来到台前说一些转场词，以保持节目与节目之间的连贯。在教程中，这样的“转场词”也是需要精心设计的。</p>

<p>如果同一节引入了两个知识点，那么它们应能够对应读者思考问题的前后顺序，如果有两个知识点无论如何也很难联系到一起，那么它们就应当拆到不相干的两节，即使这两个知识点是作者当初一同学习的。</p>

<p>大部分场合，知识点之间的前后联系是显然的，而有的时候，知识点之间的联系却是深层次的。如果我们编写教程的时候发现两个看起来显然应该放在一起的知识点之间却找不到任何联系，那便要花时间设计引导读者的思维过程了。</p>

<p>这里我们以 Java 语言本身举例：</p>

<blockquote>
  <p>Java 中可直接构造的类型分为基本数据类型、类、和数组三种。</p>
</blockquote>

<p>这三种类型听起来像是流水账，读者大可以在这里直接硬记住，而不去思考这三种类型之间的关联。而对于熟练的 Java 开发者而言，这看起来实在是太过于显然了，以至于 Java 开发者通常情况下压根不会去多花时间思考这三种类型之间是否真的有值得注意的关联。</p>

<p>为了让教程讲得更清楚，我们便需要亲自设计引导读者的思维过程。实际上，当我们使用“基础类型”和“复合类型”两个概念时，一切都迎刃而解了：基本数据类型是基础类型，而类和数组不过是复合类型的两种复合形式嘛。</p>

<p>当然，实际编写教程时，我们往往无法苛求所有的知识点之间都能够产生适当的联系，但是我们还是十分鼓励编写教程的过程中尽可能地把知识点串起来的。事实上，个人感觉，把知识点映射到读者思维过程的能力，恰恰体现了教程作者水平的高低。</p>

<h3 id="52">5.2 使读者分心的知识点</h3>

<p>另一个极其经常出现的原因是教程中掺入了各种虽然能够自然联想到，但会使读者分心的无关知识点。这通常和教程作者过去的学习途径有关：因为学习过程中注定要出现各种弯路，而这会让一个人在学习时掌握各种杂七杂八的知识点；当然，对于他自己而言，知识体系已经整体上掌握了，但如果读者照搬这样的方式去学习，那自然是没有必要的。</p>

<p>对于教程作者来说，这其实是比较大的挑战。我们刚刚提到过，一个领域的知识点是相互盘根错节的，作为初学者必须一样一样地掌握，就像收拾背包的时候必须将物品一件一件地整理一样。教程作者做的正是将知识点“压平”的过程。</p>

<p>当知识点遇上不同的历史阶段时，事情本身将变得更复杂。这里我们仍然以 Java 语言本身作为例子：</p>

<blockquote>
  <p><code>Stream&lt;T&gt;</code> 接口的 <code>findFirst</code> 方法返回了一个 <code>Optional&lt;T&gt;</code>，为什么不直接返回一个 <code>T</code> 呢？</p>
</blockquote>

<p>相信熟悉 Java 的开发者能够很快答上来：</p>

<blockquote>
  <p><code>Optional&lt;T&gt;</code> 代表 <code>T</code> 可能存在，可能不存在，而 <code>findFirst</code> 方法代表找到第一个元素，如果 <code>Stream&lt;T&gt;</code> 为空那当然不存在，否则当然存在。</p>
</blockquote>

<p>但我们很快就能发现另一个问题：</p>

<blockquote>
  <p><code>Map&lt;String, T&gt;</code> 的 <code>get</code> 方法返回的值也可能存在可能不存在，但为什么不返回一个 <code>Optional&lt;T&gt;</code> 呢？</p>
</blockquote>

<p>作为 Java 开发者我们当然知道，设计 <code>Map</code> 时还压根没有 <code>Optional</code> 这一概念，而 Java 后来添加 <code>Stream</code> 的时候同时添加了 <code>Optional</code>，因此新的接口返回了 <code>Optional</code>，而旧的接口由于历史遗留原因，就只能维持原样，直接返回了。</p>

<p>道理我们自然都懂的，但如果我们想要把它写成教程，该怎么向读者解释呢？这其实便是写教程的难点所在。如果教程事先没有详细介绍过 <code>Map</code>，同时这里读者只想关心 <code>findFirst</code> 方法返回 <code>Optional</code> 究竟是怎么一回事，而作者却把上面的因果关系直接全套照搬进教程里，我敢打包票大部分读者肯定一时半会看不懂，而且大概率会因为 <code>Map</code> 等无关知识点发懵。</p>

<p>这类问题的解决方案有很多，比如说只介绍 <code>Stream</code> 而忽略 <code>Map</code>，或者把和 <code>Map</code> 相关的部分放到另外一节甚至另外一章，或者说把 <code>Map</code> 相关的部分单独提出一个“小贴士”提醒读者。不管怎么做，单纯全套照搬个人是极为不提倡的。</p>

<h3 id="53">5.3 糟糕的排版和错别字</h3>

<p>很多人写教程的时候很不注重排版。但个人觉着，排版就如同一个教程的脸面，一个排版良好的教程会大大激发阅读欲望，而一个排版糟糕的教程，即使写得再好，也不会有多少人兴致盎然地读下去。希望所有编写教程的人都能够使自己的教程排版干净整洁。</p>

<p>通常情况下，一个人很难保证自己的教程里没有错别字，但是把错别字降低到一个肉眼很难察觉的范围，个人感觉还是大多数人能够做得到的。当然有些错别字已被大众广泛使用（比如“下划线”的正确写法是“下画线”），个人认为不必过分关心。</p>

<h3 id="54">5.4 在教程中过分玩梗</h3>

<p>很多人喜欢把一些模因（meme）引入教程中。我个人并无意批判大多数情况下的玩梗行为，但是如果过量玩梗的话，很可能导致对梗不熟悉的读者迷失在猜谜的海洋里。当然，很多教程本身会带一定程度的冷幽默，这个个人认为是可取的，当然在提高教程趣味性这一点上，本人也还有很长的路要走。</p>

<h2 id="6">6 教程的后续维护</h2>

<p>教程写完了，自然会有后续维护。个人认为，向教程中添加东西是相对容易的工作，而删改东西则相对困难得多。以下主要分更新和修正两部分具体谈谈教程的删改工作。</p>

<h3 id="61">6.1 更新教程</h3>

<p>很多时候，读者是希望教程能够与时俱进的。但是教程更新版本所冒的风险是非常大的，至少相较开发文档大很多。这是因为开发文档通常是模块化的，每次更新通常只涉及开发文档的数个模块，而教程为了使读者更容易读懂，往往会将知识点揉碎了讲，因此经常容易出现“牵一发而动全身”的现象。</p>

<p>为了减少更新教程带来的不一致性，在最开始编写教程时，我们可以在一些地方稍加留意：一方面我们可以减少插图的数量，因为插图中的不一致性往往很难在更新教程时发现；另一方面我们可以尽量采用不会随版本发生变化的示例进行讲解，这样更新时概念的更新换代往往不会很严重。</p>

<p>当然，如果版本更新实在变动了太多太多的东西，抛弃旧包袱重新写一份新的教程也是值得考虑的。</p>

<h3 id="62">6.2 修正教程</h3>

<p>教程的作者经常能够发现教程的某一章或者其中的某一节讲得不够好。由于教程本身极容易出现不一致性，因此个人建议在修正教程的某一章或某一节时，直接将该章或该节重写，从而避免这一章或这一节内知识点相互引用错位导致的麻烦。</p>

<p>尽量不要移动教程的某一章或某一节到其他位置。因为不管是向前移动还是向后移动，都有可能出现某一章依赖的知识点跑到后面去的情况。因此，这里再次强调教程整体结构事前编排的重要性。</p>

<h2 id="7">7 总结</h2>

<p>因为本人自己写过一些教程，本身作为版主也看过一堆花花绿绿的教程，因此本人很早就有写这样一篇文章的想法了。但是因为本人拖延症发作（笑），以及这篇文章中途删了又改，改了又删，直到现在才和各位见面。</p>

<p>以上纯属个人观点，希望各位能够带着批判性的眼光看待这篇文章。</p>]]></content:encoded></item><item><title><![CDATA[Minecraft 服务端权限上下文系统及其应用]]></title><description><![CDATA[<p>权限上下文系统（英文名称 Permission Context），是一个在服务端插件开发的部分领域，有着不可或缺的重要作用的系统，但一直以来未得到广大开发者甚至服务端维护者的重视。不过，权限上下文系统已经在很多地方得到了支持。</p>

<ul>
<li>Sponge API 的权限系统自带权限上下文系统的支持。</li>
<li>LuckPerms API 自带权限上下文系统的支持，并支持你听说过的几乎所有插件服务端。</li>
</ul>

<p>一方面，考虑到本人只会写 Sponge 插件，因此后续内容将基于 Sponge API。另一方面，考虑到今年已经是 9102 年的第二年，不太可能还有人不在自己的服务端中添加并使用 LuckPerms，因此，本文内容主要使用 LuckPerms 5.0 API 完成。读者可参照相关的 <a href="https://github.com/lucko/LuckPerms/wiki/Developer-API">Wiki 页面</a>完成项目对 LuckPerms 5.0 API 的依赖设置。</p>

<h2 id="">引言</h2>

<p>很多开发者甚至服务器维护者可能都有为玩家在特定场合赋予权限的需求，比如说：</p>

<ul>
<li>当玩家在某个特定的领地时拥有 pvp</li></ul>]]></description><link>https://blog.ustc-zzzz.net/minecraft-server-permission-context/</link><guid isPermaLink="false">ab702c3b-52bb-4fb1-845b-3d93189985ab</guid><category><![CDATA[Minecraft]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Sat, 04 Apr 2020 01:44:59 GMT</pubDate><content:encoded><![CDATA[<p>权限上下文系统（英文名称 Permission Context），是一个在服务端插件开发的部分领域，有着不可或缺的重要作用的系统，但一直以来未得到广大开发者甚至服务端维护者的重视。不过，权限上下文系统已经在很多地方得到了支持。</p>

<ul>
<li>Sponge API 的权限系统自带权限上下文系统的支持。</li>
<li>LuckPerms API 自带权限上下文系统的支持，并支持你听说过的几乎所有插件服务端。</li>
</ul>

<p>一方面，考虑到本人只会写 Sponge 插件，因此后续内容将基于 Sponge API。另一方面，考虑到今年已经是 9102 年的第二年，不太可能还有人不在自己的服务端中添加并使用 LuckPerms，因此，本文内容主要使用 LuckPerms 5.0 API 完成。读者可参照相关的 <a href="https://github.com/lucko/LuckPerms/wiki/Developer-API">Wiki 页面</a>完成项目对 LuckPerms 5.0 API 的依赖设置。</p>

<h2 id="">引言</h2>

<p>很多开发者甚至服务器维护者可能都有为玩家在特定场合赋予权限的需求，比如说：</p>

<ul>
<li>当玩家在某个特定的领地时拥有 pvp 权限，而在其他地方没有。</li>
<li>玩家在特定时间段有执行某些特定命令的权限，而在其他时间段没有。</li>
</ul>

<p>我们把上面提到的“特定领地”、“特定时间段”，统称为玩家所处的上下文。那我们如何构造这样的上下文呢？</p>

<p>一个常见的思路是在玩家进入领地时为玩家赋予权限，并在玩家离开领地时取消权限。这样做也不是不可行，但是一个值得考虑的问题就是：我们需要<strong>确保</strong>玩家在进出领地时权限能够正常切换，甚至 1 tick 的差错都不能有。</p>

<p>然而，由于以下几个问题，这一目标实际上很难做到：</p>

<ol>
<li>我们要求我们需要在监听相关事件方面滴水不漏，不能有差错。  </li>
<li>目前权限设置大多需要后台文件操作或数据库操作，因而不可能没有延迟。  </li>
<li>我们需要编辑插件配置才能让插件知道哪些权限需要这样，而这理应是权限插件的事。</li>
</ol>

<p>我们不妨换个角度思考问题。我们既然不能准确把握切换上下文的时间点，那我们在检查权限的时候去动态获知上下文不就好了？众所周知，插件通常情况下使用 <code>hasPermission</code> 方法来检查权限，而该方法将会直接关联到权限插件执行进一步操作。因此，只要有权限插件的适当配合，我们就一定能够“稳、准、狠”地完成目标。</p>

<p>以上便是权限上下文系统的理论基础。</p>

<h2 id="">上下文对象</h2>

<p>LuckPerms 规定，上下文对象由键值对构成，比如说：</p>

<ul>
<li><code>world=world-nether</code> 代表当前玩家正处于下界。</li>
<li><code>server=global</code> 代表当前玩家正处于 <code>global</code> 服务器内（名称可由 LuckPerms 配置文件修改）。</li>
</ul>

<p>而当我们输入以下命令时：</p>

<blockquote>
  <p><code>/lp group default permission set minecraft.command.tp world=world-nether</code></p>
</blockquote>

<p>我们便指定了使用 <code>/tp</code> 命令的权限只会在 <code>world=world-nether</code> 存在时生效。由于该权限的设置是自带上下文的，因此我们便可以轻易地确保玩家只有在下界的时候才能使用 <code>/tp</code> 指令。</p>

<p>如果使用 LuckPerms API 添加权限节点，以下是我们的代码：</p>

<pre><code class="language-java">import net.luckperms.api.LuckPermsProvider;  
import net.luckperms.api.node.Node;

import java.util.Objects;

Objects.requireNonNull(LuckPermsProvider.get().getGroupManager().getGroup("default")).data()  
        .add(Node.builder("minecraft.command.tp").withContext("world", "world-nether").build());
</code></pre>

<h2 id="">自定义上下文</h2>

<p>LuckPerms 提供了 <code>server</code> 和 <code>world</code> 两个上下文对象，但作为插件开发者，我们更需要的是我们自己的上下文，比如说刚才提到的“特定领地”、“特定时间段”、等等。</p>

<p>LuckPerms 为我们提供了注册 <code>ContextCalculator</code> 的方式。<code>ContextCalculator</code> 接口声明了 <code>calculate</code> 方法，而该方法会在 <code>hasPermission</code> 调用时调用。因此，我们可以在该方法内部动态地收集上下文。</p>

<p><code>ContextCalculator</code> 接口需要提供一个泛型参数：</p>

<ul>
<li>对于 Bukkit 它是 <code>org.bukkit.entity.Player</code>。</li>
<li>对于 Sponge 它是 <code>org.spongepowered.api.service.permission.Subject</code>。</li>
<li>对于 BungeeCord 它是 <code>net.md_5.bungee.api.connection.ProxiedPlayer</code>。</li>
</ul>

<p>下面的代码实现了玩家在距离出生点 40 格以内时自动添加 <code>player-near-spawn=true</code> 上下文（Sponge 的 <code>Subject</code> 需要一些操作才能转换到 <code>Player</code>，对于 Bukkit 和 BungeeCord 不需要）：</p>

<pre><code class="language-java">import com.flowpowered.math.vector.Vector3d;  
import net.luckperms.api.LuckPermsProvider;  
import net.luckperms.api.context.ContextCalculator;  
import net.luckperms.api.context.ContextConsumer;  
import org.spongepowered.api.entity.living.player.Player;  
import org.spongepowered.api.service.permission.Subject;  
import org.spongepowered.api.util.annotation.NonnullByDefault;

import java.util.Optional;

LuckPermsProvider.get().getContextManager().registerCalculator(new SubjectContextCalculator());

public static class SubjectContextCalculator implements ContextCalculator&lt;Subject&gt;  
{
    @Override
    public void calculate(Subject subject, ContextConsumer accumulator)
    {
        Optional&lt;?&gt; sourceOptional = subject.getCommandSource();
        if (sourceOptional.isPresent() &amp;&amp; sourceOptional.get() instanceof Player)
        {
            this.calculatePlayer(accumulator, (Player) sourceOptional.get());
        }
    }

    private void calculatePlayer(ContextConsumer accumulator, Player player)
    {
        Vector3d playerPosition = player.getPosition();
        Vector3d spawnPosition = player.getWorld().getProperties().getSpawnPosition().toDouble();
        if (playerPosition.distance(spawnPosition) &lt;= 40)
        {
            accumulator.accept("player-near-spawn", "true");
        }
    }
}
</code></pre>

<p>LuckPerms 要求所有 <code>ContextCalculator</code> 的实现满足两点：</p>

<ul>
<li>执行效率：<code>calculate</code> 方法会被频繁调用，因此相应实现应尽可能快速。</li>
<li>线程安全：由于 <code>hasPermission</code> 会被不同的线程调用，因此实现必须保证线程安全。</li>
</ul>]]></content:encoded></item><item><title><![CDATA[在 Minecraft Mod 中使用 Coroutine]]></title><description><![CDATA[<p>Coroutine（协程）是编程语言的一种机制，该机制允许开发者编写出和过程式写法相同的代码，并在编译时得到一系列相互调用的子过程，从而使不同的子过程可以在不同的场合执行。</p>

<p>Coroutine 的最常见用途是编写异步代码，而 Minecraft 中恰恰存在大量需要使用异步代码的场合：比方说我们有时需要将某段代码延迟到一个或多个 tick 后执行，有时需要将某段代码延迟到下一次事件触发时执行，等等。</p>

<p>目前很多主流的编程语言都提供了相对官方的 Coroutine 支持，如 C#、Python、JavaScript，等等。虽然 Java 官方至今仍然没有支持 Coroutine，但 JVM 上流行的两大编程语言 Scala 和 Kotlin，已经对 Coroutine 提供了一定程度的支持。本文将分别使用 Scala 和 Kotlin 两门编程语言实现相应的机制：</p>

<p><img src="https://i.loli.net/2019/12/11/oq9sXpegHUmPLB4.png" alt="image.png"></p>

<p>上图展示的是本文的核心代码，想必对于 Scala 和 Kotlin 有着一定程度了解的读者已经猜到这段代码实现的是什么需求了。上面的代码实现的特性是玩家在攻击怪物的时候给予 100</p>]]></description><link>https://blog.ustc-zzzz.net/coroutine-in-minecraft-mod/</link><guid isPermaLink="false">83221ad0-7170-4e1a-ba4c-dae74e909fc0</guid><category><![CDATA[Minecraft]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Wed, 11 Dec 2019 18:38:54 GMT</pubDate><content:encoded><![CDATA[<p>Coroutine（协程）是编程语言的一种机制，该机制允许开发者编写出和过程式写法相同的代码，并在编译时得到一系列相互调用的子过程，从而使不同的子过程可以在不同的场合执行。</p>

<p>Coroutine 的最常见用途是编写异步代码，而 Minecraft 中恰恰存在大量需要使用异步代码的场合：比方说我们有时需要将某段代码延迟到一个或多个 tick 后执行，有时需要将某段代码延迟到下一次事件触发时执行，等等。</p>

<p>目前很多主流的编程语言都提供了相对官方的 Coroutine 支持，如 C#、Python、JavaScript，等等。虽然 Java 官方至今仍然没有支持 Coroutine，但 JVM 上流行的两大编程语言 Scala 和 Kotlin，已经对 Coroutine 提供了一定程度的支持。本文将分别使用 Scala 和 Kotlin 两门编程语言实现相应的机制：</p>

<p><img src="https://i.loli.net/2019/12/11/oq9sXpegHUmPLB4.png" alt="image.png"></p>

<p>上图展示的是本文的核心代码，想必对于 Scala 和 Kotlin 有着一定程度了解的读者已经猜到这段代码实现的是什么需求了。上面的代码实现的特性是玩家在攻击怪物的时候给予 100 tick（约五秒）的攻击冷却，并在冷却结束后通知玩家。</p>

<p>本文针对的是 Forge 平台的 1.12.2-14.23.5.2768 版本，不过对于插件等其他平台等，原理是通用的。</p>

<h2 id="">概述</h2>

<p>回调函数是实现异步逻辑的常见手段，通常异步行为执行完后会调用回调函数从而执行下一步行为：</p>

<pre><code class="language-scala">// scala
def foo(value: Int, next: (Bar) =&gt; Unit) = {  
  next(new Bar(value))
}
</code></pre>

<pre><code class="language-kotlin">// kotlin
fun foo(value: Int, next: (Bar) -&gt; Unit) {  
    next(Bar(value))
}
</code></pre>

<p>任何普通的方法通常都可以写成回调函数风格，例如下面的代码负责把两个数相加：</p>

<pre><code class="language-scala">// scala
def add(a: Int, b: Int, next: (Int) =&gt; Unit) = {  
  next(a + b)
}
</code></pre>

<pre><code class="language-kotlin">// kotlin
fun add(a: Int, b: Int, next: (Int) -&gt; Unit) {  
    next(a + b)
}
</code></pre>

<p>我们通常使用 Continuation Passing Style（简称 CPS）描述这种风格，虽然调用 CPS 风格的方法通常写起来会很痛苦（也就是通常所说的回调地狱）：</p>

<pre><code class="language-scala">// scala
add(40, 2, { value =&gt;  
  foo(value, { bar =&gt;
    doSomethingElse(bar)
  })
})
</code></pre>

<pre><code class="language-kotlin">// kotlin
add(40, 2, { value -&gt;  
    foo(value, { bar -&gt;
        doSomethingElse(bar)
    })
})
</code></pre>

<p>如果我们能直接写成 <code>doSomethingElse(foo(add(40, 2)))</code> 该多好啊。实际上，把上面的回调地狱转换成可读性较强的写法的行为被称为 CPS 变换，它是 Scala 及 Kotlin 等语言实现 Coroutine 的基础。</p>

<p>在 Scala 中，我们可以声明返回值带有 <code>@suspendable</code> 注解的方法，而 Kotlin 则可以使用 <code>suspend</code> 关键字。具体的写法如下：</p>

<pre><code class="language-scala">// scala
def add2(a: Int, b: Int): Int@suspendable = shift { next =&gt; next(a + b) }  
</code></pre>

<pre><code class="language-kotlin">// kotlin
suspend fun add2(a: Int, b: Int): Int = suspendCoroutine { next =&gt; next(a + b) }  
</code></pre>

<p>这样我们就可以在特定场合下使用它们了：</p>

<pre><code class="language-scala">// scala
reset {  
  var i = 1
  while (i &lt; 100) {
    val j = add2(i, 1)
    println(f"$i + 1 = $j")
    i = j
  }
}
</code></pre>

<pre><code class="language-kotlin">// kotlin
launch {  
    var i = 1
    while (i &lt; 100) {
        val j = add2(i, 1)
        println("$i + 1 = $j")
        i = j
    }
}
</code></pre>

<h2 id="">配置</h2>

<p>首先，因为配置环境时使用了 Gradle 新特性，而 Forge 使用的 Gradle 版本太过陈旧，因此读者需要使用 Gradle 4 或更高版本（本文使用的版本是 4.10.3），如果读者使用 Gradle Wrapper 的话，请打开 <code>gradle/wrapper/</code> 目录并修改 <code>gradle-wrapper.properties</code> 文件（注意最后一行）：</p>

<pre><code class="language-properties">distributionBase=GRADLE_USER_HOME  
distributionPath=wrapper/dists  
zipStoreBase=GRADLE_USER_HOME  
zipStorePath=wrapper/dists  
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-all.zip  
</code></pre>

<p>然后我们需要配置 <code>build.gradle</code>。基于 Scala 的实现需要 <code>scala-continuations</code> 库，考虑到该库 Forge 已经自带，因此不必额外引入该库，仅需额外声明该库对应的 Scala 编译器插件：</p>

<pre><code class="language-gradle">// scala
sourceCompatibility = targetCompatibility = '1.7'

configurations {  
    compilerPlugin
}

dependencies {  
    compilerPlugin 'org.scala-lang.plugins:scala-continuations-plugin_2.11.1:1.0.2'
}

compileScala {  
    sourceCompatibility = targetCompatibility = '1.7'
    scalaCompileOptions.additionalParameters = [
        '-Xplugin:' + configurations.compilerPlugin.asPath,
        '-P:continuations:enable'
    ]
}
</code></pre>

<p>注意声明插件的同时还需要为编译器添加 <code>-P:continuations:enable</code> 参数。</p>

<p>基于 Kotlin 的实现需要引入 Forge 并未自带的 Kotlin 环境，这通常可以通过依赖一个名为 ShadowFacts' Forgelin 的 Mod 解决：</p>

<pre><code class="language-gradle">// kotlin
sourceCompatibility = targetCompatibility = '1.8'

repositories {  
    jcenter()
    maven {
        name = 'shadowfacts'
        url = 'http://maven.shadowfacts.net/'
    }
}

dependencies {  
    deobfCompile 'net.shadowfacts:Forgelin:1.8.3'
}
</code></pre>

<p>最后别忘了把 <code>apply plugin: scala</code> 或 <code>apply plugin: kotlin</code> 添加到配置文件中。后者通常还需要引入 Kotlin 的 Gradle 插件，使用 Kotlin 配置过 Gradle 的应该都比较清楚，这里就不再赘述了。</p>

<h2 id="">代码</h2>

<p>我们声明一个 Mod 主类，并在其中实现 <code>nextTick</code> 和 <code>nextAttackEvent</code> 两个方法：</p>

<pre><code class="language-scala">// scala
object EventListener {  
  val tickListeners: mutable.Queue[ServerTickEvent =&gt; Unit] = mutable.Queue()
  val attackListeners: mutable.Queue[AttackEntityEvent =&gt; Unit] = mutable.Queue()

  @SubscribeEvent
  def onTick(event: ServerTickEvent): Unit = {
    if (event.phase == Phase.END) {
      tickListeners.dequeueAll(_ =&gt; true).foreach(listener =&gt; listener(event))
    }
  }

  @SubscribeEvent
  def onAttack(event: AttackEntityEvent): Unit = {
    if (!event.getTarget.world.isRemote) {
      attackListeners.dequeueAll(_ =&gt; true).foreach(listener =&gt; listener(event))
    }
  }
}

private def nextTick(): ServerTickEvent@suspendable = shift { continuation =&gt;  
  EventListener.tickListeners.enqueue(continuation)
}

private def nextAttackEvent(): AttackEntityEvent@suspendable = shift { continuation =&gt;  
  EventListener.attackListeners.enqueue(continuation)
}

@Mod.EventHandler
def preInit(e: FMLPreInitializationEvent): Unit = {  
  MinecraftForge.EVENT_BUS.register(EventListener)
}
</code></pre>

<pre><code class="language-kotlin">// kotlin
object EventListener {  
    val tickListeners: Queue&lt;(ServerTickEvent) -&gt; Unit&gt; = ArrayDeque()
    val attackListeners: Queue&lt;(AttackEntityEvent) -&gt; Unit&gt; = ArrayDeque()

    @SubscribeEvent
    fun onTick(event: ServerTickEvent): Unit {
        if (event.phase == Phase.END) {
            tickListeners.toList().also { tickListeners.clear() }.forEach { listener -&gt; listener(event) }
        }
    }

    @SubscribeEvent
    fun onAttack(event: AttackEntityEvent): Unit {
        if (!event.target.world.isRemote) {
            attackListeners.toList().also { attackListeners.clear() }.forEach { listener -&gt; listener(event) }
        }
    }
}

private suspend fun nextTick(): ServerTickEvent = suspendCoroutine { continuation -&gt;  
    EventListener.tickListeners.add { event -&gt; continuation.resume(event) }
}

private suspend fun nextAttackEvent(): AttackEntityEvent = suspendCoroutine { continuation -&gt;  
    EventListener.attackListeners.add { event -&gt; continuation.resume(event) }
}

@Mod.EventHandler
fun preInit(e: FMLPreInitializationEvent): Unit {  
    MinecraftForge.EVENT_BUS.register(EventListener)
}
</code></pre>

<p>我们声明了两个事件监听器，并缓存了一串回调函数的列表。<code>nextTick</code> 和 <code>nextAttackEvent</code> 两个方法能够向相应的列表添加回调函数，并在事件触发的时候：</p>

<ul>
<li>获取所有的回调函数；</li>
<li>清空缓存的回调函数列表；</li>
<li>按顺序依次执行所有回调函数。</li>
</ul>

<p>注意上面三者必须依次进行，顺序不能有任何变动，读者可以想一想为什么有这样的要求。</p>

<p>最后就是我们的核心代码了：</p>

<pre><code class="language-scala">// scala
@Mod.EventHandler
def init(e: FMLInitializationEvent): Unit = {  
  reset {
    val coolDownPlayers = mutable.HashSet[UUID]()
    while (true) {
      val event = nextAttackEvent()
      val player = event.getEntityPlayer
      val playerUUID = player.getUniqueID
      if (coolDownPlayers.contains(playerUUID)) {
        event.setCanceled(true)
      } else {
        event.getTarget match {
          case _: IMob =&gt; reset {
            coolDownPlayers.add(playerUUID)
            var coolDownTickLeft = 100
            while (coolDownTickLeft &gt; 0) {
              coolDownTickLeft -= 1
              nextTick()
            }
            coolDownPlayers.remove(playerUUID)
            val message = "Cool down has expired"
            player.sendMessage(new TextComponentString(message))
          }
          case _ =&gt; ()
        }
      }
    }
  }
}
</code></pre>

<pre><code class="language-kotlin">// kotlin
@Mod.EventHandler
fun init(e: FMLInitializationEvent): Unit {  
    GlobalScope.launch {
        val coolDownPlayers = hashSetOf&lt;UUID&gt;()
        while (true) {
            val event = nextAttackEvent()
            val player = event.entityPlayer
            val playerUUID = player.uniqueID
            if (coolDownPlayers.contains(playerUUID)) {
                event.isCanceled = true
            } else {
                when (event.target) {
                    is IMob -&gt; launch {
                        coolDownPlayers.add(playerUUID)
                        var coolDownTickLeft = 100
                        while (coolDownTickLeft &gt; 0) {
                            coolDownTickLeft -= 1
                            nextTick()
                        }
                        coolDownPlayers.remove(playerUUID)
                        val message = "Cool down has expired"
                        player.sendMessage(TextComponentString(message))
                    }
                    else -&gt; Unit
                }
            }
        }
    }
}
</code></pre>

<p>一方面，我们可以注意到所有和实现特性相关的代码和对象声明，都放在了同一个方法下，这很好地贯彻了高内聚低耦合的设计原则；另一方面，这样做可以使代码的可读性大大增加，例如跳过 100 tick 的实现声明了一个非常单纯的 <code>while</code> 循环，并重复调用 <code>nextTick</code> 方法 100 次，如果不使用 Coroutine，我难以想象类似的实现能有多复杂。</p>

<h2 id="">说明</h2>

<p>这里有几点需要说明：</p>

<ul>
<li><p>我们是在 Mod 加载的时候调用的这段代码，我们可以注意到，所有代码都是被一个以 <code>reset</code>（Scala）或 <code>launch</code>（Kotlin） 开头的块括了起来，因此即使内部写成了死循环的形式，实际运行的时候也只会在第一次 <code>nextAttackEvent</code> 调用的时候暂停，因此根本不会阻塞加载过程。</p></li>
<li><p>我们声明了一个全局性质的 <code>coolDownPlayers</code>，但在代码里是以临时变量的方式表示的。实际上，该对象会在不同的子过程之间辗转，因此虽然它看起来是一个临时变量，但它是会被一直引用着的。</p></li>
<li><p>如果游戏世界关闭，代码在执行到 <code>nextAttackEvent</code> 或 <code>nextTick</code> 的时候便永远不会继续执行下去，因此不必担心这个看起来像是死循环的代码不会终止的问题。</p></li>
<li><p>因为所有的回调函数都是在游戏内事件触发的时候执行的，因此尽管看起来代码本身不同的片段的执行时机并不完全相同，但它们都是在游戏世界的主线程执行的，不必担心任何线程安全的问题。</p></li>
</ul>

<h2 id="">总结</h2>

<p>Coroutine 虽然不是什么新的技术，但是在 Minecraft Mod 中使用 Coroutine，的确能够带来一些相对崭新的写法。这种写法粗看起来可能不那么容易让比较熟悉 Minecraft 的开发者接受（比方说我一开始也不太能接受在代码里写一个循环并在循环里直接等待下一个 tick 这种看起来像是把线程「阻塞」了的写法），但是一旦适应了这样的写法，本人相信开发效率一定能够得到显著的提升。</p>

<p>由于作者本人并不熟悉 Kotlin，因此作者不太能保证本文中的 Kotlin 代码一定完全正确，望请读者谅解。</p>]]></content:encoded></item><item><title><![CDATA[你编写的Mod，代码是从何处开始执行的？]]></title><description><![CDATA[<blockquote>
  <p>本文作者zzzz（<a href="https://github.com/ustc-zzzz">@ustc-zzzz</a>），使用CC-BY-SA 4.0协议授权。</p>
</blockquote>

<p>对于一段程序来说，需要关注的无非就两件事：程序管理的数据，以及程序操控数据的方式。对于Java来说，前者对应的是对象及其字段（Field），而后者对应的自然是对象的方法（Method）了。但是，什么样的方法，会在什么时候执行呢？对于Forge Mod来说，这并不是一件可以立刻回答上来的问题。本篇文章就将一步一步地阐述，Forge会让你编写的Mod，在什么时机，执行什么样的代码，以及Forge为什么要这样做。</p>

<h2 id="">依赖注入</h2>

<p>凡是写过比Hello World更高级的代码的普通Java开发者都一定知道，Java程序是从一个类的<code>main</code>方法开始执行的。至于这个类是什么，它通常会定义在JAR的manifast（位于<code>META-INF</code>目录下的<code>MANIFEST.MF</code>文件中）中。这样，在你直接执行JAR的时候，被指定的类的<code>main</code>方法便开始工作，从而启动整个应用程序。</p>

<p>Minecraft当然也是这样的，它的代码入口位于<code>net.</code></p>]]></description><link>https://blog.ustc-zzzz.net/where-is-the-code-entry-of-your-mods/</link><guid isPermaLink="false">0eb0fa06-0a4d-44ff-b2df-5760292de2a5</guid><category><![CDATA[Minecraft]]></category><category><![CDATA[Modded Minecraft Dev]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Sat, 09 Jun 2018 18:25:47 GMT</pubDate><content:encoded><![CDATA[<blockquote>
  <p>本文作者zzzz（<a href="https://github.com/ustc-zzzz">@ustc-zzzz</a>），使用CC-BY-SA 4.0协议授权。</p>
</blockquote>

<p>对于一段程序来说，需要关注的无非就两件事：程序管理的数据，以及程序操控数据的方式。对于Java来说，前者对应的是对象及其字段（Field），而后者对应的自然是对象的方法（Method）了。但是，什么样的方法，会在什么时候执行呢？对于Forge Mod来说，这并不是一件可以立刻回答上来的问题。本篇文章就将一步一步地阐述，Forge会让你编写的Mod，在什么时机，执行什么样的代码，以及Forge为什么要这样做。</p>

<h2 id="">依赖注入</h2>

<p>凡是写过比Hello World更高级的代码的普通Java开发者都一定知道，Java程序是从一个类的<code>main</code>方法开始执行的。至于这个类是什么，它通常会定义在JAR的manifast（位于<code>META-INF</code>目录下的<code>MANIFEST.MF</code>文件中）中。这样，在你直接执行JAR的时候，被指定的类的<code>main</code>方法便开始工作，从而启动整个应用程序。</p>

<p>Minecraft当然也是这样的，它的代码入口位于<code>net.minecraft.client.main.Main</code>下。当然了，Forge利用了一个名为<a href="https://github.com/Mojang/LegacyLauncher">LaunchWrapper</a>的工具，从而将代码入口修改为<code>net.minecraft.launchwrapper.Launch</code>下。根据包名以及GitHub上的项目所有者，我们可以猜到LaunchWrapper本身，其实也是Mojang官方的工具。</p>

<p>言归正传。不管是Minecraft本身，还是LaunchWrapper，一个Java应用程序，当然只能有一个代码执行入口，也就是说，Forge需要手动执行Mod的代码。Forge首先需要做的是，在启动后搜索<code>mods</code>或者其他的什么目录，然后把所有Mod的JAR加载进Java虚拟机中，然后Forge接着要做的事，很多人可能都已经清楚了——这项技术被称为依赖注入（Dependency Injection）。</p>

<p>依赖注入，简单地来说，就是内部代码由外部框架准备好资源，然后再通过构造方法、Setter等方式带入内部代码中，从而不需要内部代码主动获取资源。在Java中，一个最常见的声明依赖注入的方式是使用注解声明，当然了，有的框架（比如Bukkit、BungeeCord等）声明依赖注入，有时还可以在配置文件中声明，不过Forge没有采用这种做法。</p>

<h2 id="mod">Mod主类</h2>

<p>Forge约定，Mod需要执行的内部代码，其所处类应该使用<code>@net.minecraftforge.fml.common.Mod</code>注解标记。我们通常会称呼被<code>@Mod</code>注解的类为一个Mod的主类。Forge会检查Mod代码中所有添加有这一注解的类，并自动实例化，从而创建一个代表该Mod的对象。</p>

<p>Forge还规定了一些其他的注解，有的被用于监听Mod的不同生命周期事件（<code>@Mod.EventHandler</code>）、有的被用于根据不同的物理端实例化对象（<code>@SidedProxy</code>）、有的被用于获取Mod主类实例本身（<code>@Mod.Instance</code>）、有的被用于指定创建Mod主类实例的方式（<code>@Mod.InstanceFactory</code>）等等。这些注解分使用情况的不同，在不同的场合被用于不同的字段和方法上。使用这些注解对于有一定经验的Modder来说，应该再熟悉不过了，这里就不再赘述了。</p>

<h2 id="">游戏事件</h2>

<p>游戏中的事件监听是如此重要，以至于说整个Modding都建构在游戏中的事件监听上，也一点都不为过。Modder基本上都知道，想要监听游戏中的事件，首先需要定义一个类，作为事件监听器的集合。然后在这个类上定义若干方法，方法的参数代表想要监听的事件类型，从而在相应的事件触发时有机会执行Mod的代码。同时，为区分事件监听器和类的其他方法，只有添加了<code>@net.minecraftforge.fml.common.eventhandler.SubscribeEvent</code>注解的方法才会作为事件监听器处理。最后，再将这个类注册到某个特定的事件总线（Event Bus）上，触发事件同时也由特定的事件总线监管。</p>

<p>Forge定义的事件总线非常之少，其中绝大部分事件都由<code>MinecraftForge.EVENT_BUS</code>这一事件总线监管。不过，对于接触过1.8及更早版本的Minecraft的Modder来说，常用的事件总线其实有两个，而另一个事件总线可以通过<code>FMLCommonHandler.instance().bus()</code>这一方式获得。不过，在新版本的Minecraft中我们可以看到，这一方法已经被弃用了，它的返回值实际上就是<code>MinecraftForge.EVENT_BUS</code>。这是因为，在很久以前，Forge和FML是两套不同的东西，你甚至可以只使用FML加载Mod，而不使用Forge，因为Forge只是一套方便Modder的API。不过在数年后的今天，已经没有人会只使用FML而不使用Forge了。两套代码也融合到了一起，两个分立的事件总线，自然也没有分开存在的必要了。</p>

<h2 id="">管理监听器</h2>

<p>对于将包含有事件监听器的类注册到事件总线这一行为来说，Forge允许的方式也不断添加。最初的方式是将一个类实例化，然后再调用事件总线的<code>register</code>方法注册这一实例，也就是说，Mod中，这样的代码会经常出现：</p>

<pre><code class="language-java">public class XXXEventHandler {  
    @SubscribeEvent
    public void onItemCrafted(PlayerEvent.ItemCraftedEvent event) {
        // DO SOMETHING
    }
}

MinecraftForge.EVENT_BUS.register(new XXXEventHandler());  
</code></pre>

<p>后来人们发现——<code>XXXEventHandler</code>这样的类，从头到尾只会实例化一次啊，那我为什么不实例化它呢——答案是肯定的，Minecraft 1.10.2的某个Forge版本，引入了静态方法作为事件监听器这一使用方式，在注册时只需要向<code>register</code>方法传入一个<code>Class</code>对象，也就是说，我们的代码可以这么写：</p>

<pre><code class="language-java">public class XXXEventHandler {  
    @SubscribeEvent
    public static void onItemCrafted(PlayerEvent.ItemCraftedEvent event) {
        // DO SOMETHING
    }
}

MinecraftForge.EVENT_BUS.register(XXXEventHandler.class);  
</code></pre>

<p>这看起来就好多了，因为我们根本不需要实例化一个新的对象了，这甚至节省了内存空间。</p>

<p>但是，Forge觉得做的还不够，我们仍然需要在某个时刻（通常是在Mod的<code>FMLPreInitializationEvent</code>事件触发时）调用一次<code>register</code>方法，能否连这个方法的调用都省了呢？Forge在随后引入了<code>@Mod.EventBusSubscriber</code>注解，从而通过通过为类添加这一注解的方式自动将该类注册到<code>MinecraftForge.EVENT_BUS</code>中：</p>

<pre><code class="language-java">@Mod.EventBusSubscriber
public class XXXEventHandler {  
    @SubscribeEvent
    public static void onItemCrafted(PlayerEvent.ItemCraftedEvent event) {
        // DO SOMETHING
    }
}
</code></pre>

<p>Forge会自动检索所有包含有<code>@Mod.EventBusSubscriber</code>注解的类，并将它们对应的<code>Class</code>注册进事件总线中。实际上， 我个人而言更喜欢最后一种监听事件的方法。</p>

<h2 id="">为什么有两套系统？</h2>

<p>现在我们可以大概整理一下了。</p>

<ul>
<li>Mod主类的部分方法通过添加<code>@Mod.EventHandler</code>的方式，监听<code>FMLPreInitializationEvent</code>等和Mod的生命周期有关的事件。</li>
<li>一些类中的部分方法通过添加<code>@SubscribeEvent</code>的方式，监听<code>PlayerEvent.ItemCraftedEvent</code>等游戏中的相关事件。</li>
</ul>

<p>同样都是监听事件，为什么是两套注解，两套系统？合并在一起有理论上的困难吗？事实上没有——一个有一定知名度的框架Sponge，采用的就是把两套事件的监听方法统一的方式。这其实更可以说，是历史遗留的原因。</p>

<p>刚刚我们提到，在数年前，Forge和FML是两套不同的系统——Forge更倾向于形成一套API，而FML才真正负责加载Mod。那么，在很早以前，FML是没有游戏事件监听这一选项的，只需要管理和Mod的生命周期有关的事件，相关的游戏事件监听由Forge负责，Forge也为此重写了一套系统。后来，Forge的事件监听系统由于非常好用，其实现底层也基于一套非常高效的方法——因此被FML手动搬运了过来，并添加了几个FML自己的游戏事件——这也是<code>FMLCommonHandler.instance().bus()</code>的由来。这套系统沿用至今，于是就出现了监听Mod生命周期事件和监听游戏事件采用两套不同方法的现象。</p>

<p>不过，据说在即将到来的Minecraft 1.13，对应的Forge版本中，相应的代码会被重写，<code>@Mod.EventHandler</code>也将走向历史。到时候会发生什么，让我们拭目以待。</p>]]></content:encoded></item><item><title><![CDATA[SpongeAPI内置Inventory系统概述]]></title><description><![CDATA[<p>时隔约一年没有写文章了啊。这次带来的是Sponge的Inventory系统。</p>

<p>众所周知，对于一个插件API，GUI界面总是绕不过的。GUI经常被用作菜单等方便用户交互的界面，其中最常见的就是箱子界面。对于SpongeAPI而言，其对应的就是Inventory系统。</p>

<p>Inventory是一个相对复杂的系统，但是一方面，SpongeAPI是一个经过重新设计的API，操纵Inventory的方式和Bukkit大不相同，另一方面，至今（2017年底）SpongeAPI的Inventory系统仍然正在测试，其本身仍有一些实现不完善之处。不过，这不妨碍我们去使用Inventory系统的一个子集，这部分子集在SpongeAPI中已经稳定下来了。</p>

<p>这篇文件将会整理本人近年来使用SpongeAPI内置Inventory系统的一些经验，以及作者比较确定的，在最新版本的SpongeForge和SpongeVanilla中已经稳定的特性。本文使用的SpongeAPI版本为5.2.0，也就是针对Minecraft 1.10.2。针对Minecraft 1.12.2的SpongeAPI 7略有不同，本文在差异处也会略有提及。</p>

<h2 id="inventory">打开和关闭Inventory</h2>

<p>作为示例，本文将针对在世界中真实存在的一个箱子，以方便开发者随时查看箱子里的东西，以确定之前对这个箱子做了什么。我们先随便写一个插件主类，并监听一个事件：</p>

<pre><code class="language-java">package com.github.ustc_zzzz.testchestinventory;</code></pre>]]></description><link>https://blog.ustc-zzzz.net/sponge-api-inventory-system-brief-introduction/</link><guid isPermaLink="false">fdb70293-2a9e-427b-a6b4-76bce5ca088f</guid><category><![CDATA[Minecraft]]></category><dc:creator><![CDATA[Yanbing Zhao]]></dc:creator><pubDate>Mon, 11 Dec 2017 18:37:05 GMT</pubDate><content:encoded><![CDATA[<p>时隔约一年没有写文章了啊。这次带来的是Sponge的Inventory系统。</p>

<p>众所周知，对于一个插件API，GUI界面总是绕不过的。GUI经常被用作菜单等方便用户交互的界面，其中最常见的就是箱子界面。对于SpongeAPI而言，其对应的就是Inventory系统。</p>

<p>Inventory是一个相对复杂的系统，但是一方面，SpongeAPI是一个经过重新设计的API，操纵Inventory的方式和Bukkit大不相同，另一方面，至今（2017年底）SpongeAPI的Inventory系统仍然正在测试，其本身仍有一些实现不完善之处。不过，这不妨碍我们去使用Inventory系统的一个子集，这部分子集在SpongeAPI中已经稳定下来了。</p>

<p>这篇文件将会整理本人近年来使用SpongeAPI内置Inventory系统的一些经验，以及作者比较确定的，在最新版本的SpongeForge和SpongeVanilla中已经稳定的特性。本文使用的SpongeAPI版本为5.2.0，也就是针对Minecraft 1.10.2。针对Minecraft 1.12.2的SpongeAPI 7略有不同，本文在差异处也会略有提及。</p>

<h2 id="inventory">打开和关闭Inventory</h2>

<p>作为示例，本文将针对在世界中真实存在的一个箱子，以方便开发者随时查看箱子里的东西，以确定之前对这个箱子做了什么。我们先随便写一个插件主类，并监听一个事件：</p>

<pre><code class="language-java">package com.github.ustc_zzzz.testchestinventory;

import org.spongepowered.api.block.tileentity.TileEntity;  
import org.spongepowered.api.block.tileentity.carrier.Chest;  
import org.spongepowered.api.entity.living.player.Player;  
import org.spongepowered.api.event.Listener;  
import org.spongepowered.api.event.block.InteractBlockEvent;  
import org.spongepowered.api.event.cause.Cause;  
import org.spongepowered.api.event.filter.cause.First;  
import org.spongepowered.api.item.ItemTypes;  
import org.spongepowered.api.item.inventory.Inventory;  
import org.spongepowered.api.item.inventory.ItemStack;  
import org.spongepowered.api.plugin.Plugin;  
import org.spongepowered.api.scheduler.Task;  
import org.spongepowered.api.world.Location;

import java.util.Optional;

/**
 * @author ustc_zzzz
 */
@Plugin(id = "testchestinventory", name = "TestChestInventoryPlugin")
public class TestChestInventoryPlugin  
{
    @Listener
    public void onInteractBlock(InteractBlockEvent.Primary event, @First Player player)
    {
        Optional&lt;ItemStack&gt; itemInHand = player.getItemInHand(event.getHandType());
        if (!itemInHand.filter(itemStack -&gt; itemStack.getItem().equals(ItemTypes.STICK)).isPresent()) return;

        Optional&lt;TileEntity&gt; tileEntity = event.getTargetBlock().getLocation().flatMap(Location::getTileEntity);
        if (tileEntity.isPresent() &amp;&amp; tileEntity.get() instanceof Chest)
        {
            event.setCancelled(true);

            Cause cause = Cause.source(this).build();
            Inventory inventory = ((Chest) tileEntity.get()).getInventory();

            // open inventory
            player.openInventory(inventory, cause);
            // close inventory after 100 ticks (about 5 seconds)
            Task.builder().delayTicks(100).execute(task -&gt; player.closeInventory(cause)).submit(this);
        }
    }
}
</code></pre>

<p>这里将不再赘述如何搭建Sponge插件开发环境，如何编写一个主类，以及如何监听并取消一个事件。对Sponge插件开发不熟悉的读者可以参阅本人之前的文章，以及SpongeDocs。作者同时也假设读者对Java8，尤其是Optional系统十分熟悉，相关的内容也不会进行讲解。</p>

<pre><code class="language-java">Optional&lt;ItemStack&gt; itemInHand = player.getItemInHand(event.getHandType());  
if (!itemInHand.filter(itemStack -&gt; itemStack.getItem().equals(ItemTypes.STICK)).isPresent()) return;  
</code></pre>

<p>我们监听了左键单击的事件，检查并过滤掉手上的物品不是木棍的情况。</p>

<pre><code class="language-java">Optional&lt;TileEntity&gt; tileEntity = event.getTargetBlock().getLocation().flatMap(Location::getTileEntity);  
if (tileEntity.isPresent() &amp;&amp; tileEntity.get() instanceof Chest)  
</code></pre>

<p>然后我们根据一个<code>BlockSnapshot</code>确定了目标箱子的位置，并找出目标箱子对应的<code>TileEntity</code>。我们要找的Inventory就在这里面。然后我们检查这样的一个<code>TileEntity</code>是否存在，如果存在，检查它是不是实现了<code>Chest</code>接口，也就是它到底是不是一个箱子。</p>

<pre><code class="language-java">event.setCancelled(true);  
</code></pre>

<p>如果是的话，我们取消事件。</p>

<pre><code class="language-java">Cause cause = Cause.source(this).build();  
Inventory inventory = ((Chest) tileEntity.get()).getInventory();  
</code></pre>

<p>我们新建了一个<code>Cause</code>的实例备用，然后我们通过调用<code>Chest</code>类的<code>getInventory</code>方法获取我们想要的Inventory。对<code>Cause</code>系统不熟悉的读者可以参阅<a href="https://docs.spongepowered.org/stable/zh-CN/plugin/event/causes.html">SpongeDocs的相关章节</a>。</p>

<pre><code class="language-java">// open inventory
player.openInventory(inventory, cause);  
// close inventory after 100 ticks (about 5 seconds)
Task.builder().delayTicks(100).execute(task -&gt; player.closeInventory(cause)).submit(this);  
</code></pre>

<p>现在才是正戏。到这里我们确认了一点，这个玩家是手持木棍左键点击了一个箱子。我们通过调用<code>Player</code>类的<code>openInventory</code>方法打开这个Inventory，然后我们新建了一个调度器，在100tick也就是大约五秒后，通过调用<code>Player</code>类的<code>closeInventory</code>方法把Inventory关掉。对调度器不熟悉的读者可以参阅<a href="https://docs.spongepowered.org/stable/zh-CN/plugin/scheduler.html">SpongeDocs的相关章节</a>。</p>

<p>效果应该是这样的：
<img src="https://blog.ustc-zzzz.net/content/images/2017/12/Peek-2017-12-10-15-53.gif" alt=""></p>

<p>对于SpongeAPI 7来说，<code>openInventory</code>和<code>closeInventory</code>两个方法不需要传入<code>Cause</code>。</p>

<h2 id="">一些简单的操作</h2>

<p>根据上面的示例，我们可以注意到，整个Inventory系统的核心就是<code>org.spongepowered.api.item.inventory.Inventory</code>类。我们先来做一些简单的操作，比如说：</p>

<pre><code class="language-java">inventory.clear();  
</code></pre>

<p>上面的代码把整个Inventory清空。</p>

<p>然后我们在里面放两组苹果，一组胡萝卜：</p>

<pre><code class="language-java">inventory.offer(ItemStack.of(ItemTypes.APPLE, 64));  
inventory.offer(ItemStack.of(ItemTypes.APPLE, 64));  
inventory.offer(ItemStack.of(ItemTypes.CARROT, 64));  
</code></pre>

<p>现在整个方法长这样：</p>

<pre><code class="language-java">@Listener
public void onInteractBlock(InteractBlockEvent.Primary event, @First Player player)  
{
    Optional&lt;ItemStack&gt; itemInHand = player.getItemInHand(event.getHandType());
    if (!itemInHand.filter(itemStack -&gt; itemStack.getItem().equals(ItemTypes.STICK)).isPresent()) return;

    Optional&lt;TileEntity&gt; tileEntity = event.getTargetBlock().getLocation().flatMap(Location::getTileEntity);
    if (tileEntity.isPresent() &amp;&amp; tileEntity.get() instanceof Chest)
    {
        event.setCancelled(true);

        Cause cause = Cause.source(this).build();
        Inventory inventory = ((Chest) tileEntity.get()).getInventory();

        inventory.clear();
        inventory.offer(ItemStack.of(ItemTypes.APPLE, 64));
        inventory.offer(ItemStack.of(ItemTypes.APPLE, 64));
        inventory.offer(ItemStack.of(ItemTypes.CARROT, 64));

        // open inventory
        player.openInventory(inventory, cause);
        // close inventory after 100 ticks (about 5 seconds)
        Task.builder().delayTicks(100).execute(task -&gt; player.closeInventory(cause)).submit(this);
    }
}
</code></pre>

<p>现在效果是这样子的：
<img src="https://blog.ustc-zzzz.net/content/images/2017/12/Screenshot-from-2017-12-10-16-44-21.png" alt=""></p>

<p>这个苹果加胡萝卜还是符合我们的预期的。</p>

<p>除了<code>offer</code>方法可以用于向一个Inventory添加物品外，<code>Inventory</code>类还有一些别的方法，比如：</p>

<ul>
<li><code>size</code>方法返回一个Inventory里到底有多少叠物品（这里是3）</li>
<li><code>capacity</code>方法返回一个Inventory里到底有多少格物品槽（这里是27）</li>
<li><code>totalItems</code>方法返回一个Inventory里到底有多少个物品（这里是192）</li>
<li><code>set</code>方法是一个容易和<code>offer</code>方法混淆的方法，在本文的后续部分会用到这个方法 <br>
前者是直接强制性地将一个Inventory的第一个物品槽里的物品设置成想要的物品 <br>
而后者是将一个物品添加到Inventory中，原有的物品不会被替换，自然也不会消失</li>
</ul>

<h2 id="">物品槽</h2>

<p>想要制作菜单的开发者一定已经不满意了——我想要的是在某个特定的物品槽设置我想要的物品，你这个依此设置的方法，中间如果有物品槽是空的怎么办？</p>

<p>实际上Sponge采取的策略是——将一个Inventory按照树形结构看待。比如说一个箱子是一个<code>Inventory</code>，那么它有27个物品槽，这27个物品槽分别是27个小的Inventory——这种大Inventory套小Inventory的方式最后就会形成一个树形结构，27个小物品槽是箱子Inventory的子Inventory，而反过来就是父Inventory。这种树形结构的底部，也就是叶子节点就是物品槽，代表它的是<code>Slot</code>类。<code>Slot</code>类自然继承了<code>Inventory</code>类。</p>

<p>可以通过<code>Inventory</code>类的<code>parent</code>方法获取到它的父Inventory。如果它没有父Inventory，那么<code>parent</code>方法返回这个<code>Inventory</code>本身。</p>

<p><code>Inventory</code>类同时还提供了<code>slots</code>方法，用于遍历所有的叶子节点，也就是包含的所有物品槽。对于一个<code>Slot</code>类的实例来说，这个方法的返回值只包含它自己。</p>

<p>比如说，我们现在遍历我们的箱子的所有物品槽，并接物品槽的位置放置对应数量的苹果，遇到五的倍数就放置胡萝卜。放置这个操作用什么方法好呢？自然是<code>set</code>方法啦。代码如下：</p>

<pre><code class="language-java">int i = 0;  
for (Slot slot : inventory.&lt;Slot&gt;slots())  
{
    i += 1;
    slot.set(ItemStack.of(i % 5 == 0 ? ItemTypes.CARROT : ItemTypes.APPLE, i));
}
</code></pre>

<p>效果如下：
<img src="https://blog.ustc-zzzz.net/content/images/2017/12/Screenshot-from-2017-12-10-17-17-36.png" alt=""></p>

<h2 id="inventory">Inventory的属性</h2>

<p>如果我非要设置箱子中间的某一个物品槽怎么办？除了遍历箱子之外有什么办法吗？</p>

<p>办法还是有的，Sponge中的每一个Inventory，它都有若干特定的<code>InventoryProperty</code>，它们代表一个特定Inventory的属性。</p>

<p>不过很不幸的一点是，关于<code>InventoryProperty</code>的子类型有很多，Sponge还没有完全支持——不过Sponge已经支持了针对物品槽的两个<code>InventoryProperty</code>，因此我们还是可以使用这两个属性的——它们分别是<code>SlotIndex</code>和<code>SlotPos</code>。</p>

<p><code>SlotIndex</code>是物品槽的一个属性，指的是一个物品槽在整个Inventory中的位置（在这个箱子里就是0到26）。而<code>SlotPos</code>指的是对于横平竖直的网格状Inventory，一个物品槽在Inventory中的坐标（在这个箱子里就是(0, 0)）。那么比如说我想在中间的竖着的三个物品槽（它们的<code>SlotIndex</code>分别是4，13，22）分别放置一个苹果、胡萝卜、和马铃薯，那么代码应该是什么样子的呢？</p>

<pre><code class="language-java">inventory.clear();  
inventory.query(SlotIndex.of(4)).set(ItemStack.of(ItemTypes.APPLE, 1));  
inventory.query(SlotIndex.of(13)).set(ItemStack.of(ItemTypes.CARROT, 1));  
inventory.query(SlotIndex.of(22)).set(ItemStack.of(ItemTypes.POISONOUS_POTATO, 1));  
</code></pre>

<p>现在效果是这样的：
<img src="https://blog.ustc-zzzz.net/content/images/2017/12/Screenshot-from-2017-12-10-22-13-46.png" alt=""></p>

<p>我们用到了<code>Inventory</code>类的<code>query</code>魔法。</p>

<p><code>Inventory</code>类的<code>query</code>方法传入若干<code>InventoryProperty</code>，然后寻找满足条件的所有子Inventory，共同组成一个新的<code>Inventory</code>——没错，这个方法返回的是一个新的<code>Inventory</code>实例，你可以像对待你之前遇到过的所有Inventory的方式对待它，比如说：</p>

<pre><code class="language-java">inventory.query(SlotIndex.of(1), SlotIndex.of(2), SlotIndex.of(3));  
</code></pre>

<p>这个指代的是整个箱子的前三个物品槽，也就是整个箱子里所有满足这三个<code>InventoryProperty</code>之一任何物品槽的。你可以往里放三组不同的物品——再放一组就放不下了。</p>

<p>当然，你也可以用以下的方法指定三个物品槽里的物品：</p>

<pre><code class="language-java">inventory.clear();  
inventory.query(SlotPos.of(4, 0)).set(ItemStack.of(ItemTypes.APPLE, 1));  
inventory.query(SlotPos.of(4, 1)).set(ItemStack.of(ItemTypes.CARROT, 1));  
inventory.query(SlotPos.of(4, 2)).set(ItemStack.of(ItemTypes.POISONOUS_POTATO, 1));  
</code></pre>

<p>它和上面使用<code>SlotIndex</code>的方式是一样的。</p>

<h2 id="">监听交互事件</h2>

<p>在Sponge中所有和Inventory的交互相关的事件都由<code>org.spongepowered.api.event.item.inventory.InteractInventoryEvent</code>继承而来。这自然包括两个意义显而易见的事件：</p>

<ul>
<li><code>InteractInventoryEvent.Open</code></li>
<li><code>InteractInventoryEvent.Close</code></li>
</ul>

<p>还有一个非常重要的事件，<code>ClickInventoryEvent</code>事件。这个事件会在玩家于GUI中执行操作时触发。我们可以看到这个接口的声明中定义了很多子类型：</p>

<pre><code class="language-java">public interface ClickInventoryEvent extends ChangeInventoryEvent, InteractInventoryEvent {  
    interface Primary extends ClickInventoryEvent {}
    interface Middle extends ClickInventoryEvent {}
    interface Secondary extends ClickInventoryEvent {}
    interface Creative extends ClickInventoryEvent {}
    interface Shift extends ClickInventoryEvent {
        interface Primary extends Shift, ClickInventoryEvent.Primary {}
        interface Secondary extends Shift, ClickInventoryEvent.Secondary {}
    }
    interface Double extends ClickInventoryEvent.Primary {}
    interface Drop extends ClickInventoryEvent, DropItemEvent.Dispense {
        interface Single extends Drop {}
        interface Full extends Drop {}
        interface Outside extends Drop {
            interface Primary extends Outside, ClickInventoryEvent.Primary {}
            interface Secondary extends Outside, ClickInventoryEvent.Secondary {}
        }
    }
    interface Drag extends ClickInventoryEvent {
        interface Primary extends Drag, ClickInventoryEvent.Primary {}
        interface Secondary extends Drag, ClickInventoryEvent.Secondary {}
    }
    interface NumberPress extends ClickInventoryEvent {
        int getNumber();
    }
}
</code></pre>

<p>这些事件的意义都很明显，这里也就不再赘述了。当然，上面在<code>ClickInventoryEvent</code>中出现的所有事件都是<code>Cancellable</code>的子类型，也就是说它们都可以取消掉。</p>

<p>所有这些事件里，一个名叫<code>getTransactions</code>的方法十分重要，它的定义位于<code>AffectSlotEvent</code>中，返回值为一个<code>SlotTransaction</code>的列表，用于记录所有GUI中涉及到的<code>Slot</code>的变化。</p>

<p>这个方法的返回值比较难理解，我们在这里进行一项实验：我们在刚刚只有三个物品的箱子里利用GUI的Shift左键功能放入一组苹果。放入后这个GUI长这样：
<img src="https://blog.ustc-zzzz.net/content/images/2017/12/Screenshot-from-2017-12-12-02-18-02.png" alt=""></p>

<p>放入前长这样：
<img src="https://blog.ustc-zzzz.net/content/images/2017/12/Screenshot-from-2017-12-12-02-18-51.png" alt=""></p>

<p>我们在主类里添加一个方法监听<code>ClickInventoryEvent.Shift.Primary</code>事件：</p>

<pre><code class="language-java">@Listener
public void onPrimaryShiftClickInventory(ClickInventoryEvent.Shift.Primary event)  
{
    for (SlotTransaction transaction : event.getTransactions())
    {
        SlotIndex index = transaction.getSlot().getProperties(SlotIndex.class).iterator().next();
        System.out.printf("Slot %d: %s =&gt; %s\n", index.getValue(), transaction.getOriginal(), transaction.getFinal());
    }
}
</code></pre>

<p>这里的<code>getProperties</code>方法用于获取一个Inventory特定类型的所有<code>InventoryProperty</code>，因为一个物品槽的<code>SlotIndex</code>只有一个，因此这里也（通过<code>.iterator().next()</code>的方式）只取这个集合的第一个<code>SlotIndex</code>。</p>

<p>然后我们照着前面两张图的做法做一次，检查控制台，我们得到了这样三行输出：</p>

<pre><code class="language-hocon">Slot 0: SpongeItemStackSnapshot{itemType=Item{Name=none}, count=1} =&gt; SpongeItemStackSnapshot{itemType=ItemFood{Name=apple}, count=1}  
Slot 4: SpongeItemStackSnapshot{itemType=ItemFood{Name=apple}, count=1} =&gt; SpongeItemStackSnapshot{itemType=ItemFood{Name=apple}, count=64}  
Slot 54: SpongeItemStackSnapshot{itemType=ItemFood{Name=apple}, count=64} =&gt; SpongeItemStackSnapshot{itemType=Item{Name=none}, count=1}  
</code></pre>

<p>这里记录了三个<code>SlotTransaction</code>。</p>

<ul>
<li>第一个代表箱子左上角的物品槽（序号是0），它原先没有物品，后来多出了一个苹果</li>
<li>第二个代表箱子第一排正中间的物品槽（序号是4），它原先有一个苹果，后来变成了一整组</li>
<li>第三个代表玩家Hotbar的第一个物品槽（序号是54），它原先是一组苹果，后来没有了</li>
</ul>

<p>通过对物品槽的变化的记录，我们就可以清楚玩家的一个操作到底对哪些物品槽带来的影响。从而可以决定对这些变化的处理。</p>

<p>一个<code>SlotTransaction</code>继承自<code>Transaction</code>类，所有<code>Transaction</code>的实例都代表一个变化，开发者可以通过调用若干相关的方法以修改变化的结果，有关更多的细节，请参阅<code>SlotTransaction</code>的JavaDocs。</p>

<p>此外，所有的<code>InteractInventoryEvent</code>都有<code>getCursorTransaction</code>方法，这个方法记录玩家鼠标处物品的变化——例如，如果一个玩家把一个物品从GUI拿了起来，玩家鼠标处物品就会从没有物品变成一叠玩家拿起来的物品——这个方法的返回值忠实地把这件事记录了下来。</p>

<h2 id="inventorygui">Inventory和GUI</h2>

<p>现在我们有了另一个问题——刚刚我们监听的是什么Inventory呢？是代表这个箱子里27个物品槽的Inventory吗？</p>

<p>显然不是，如果是的话，那么只有27个物品槽的Inventory，上面的<code>Slot 54</code>又是怎么出来的呢？答案已经呼之欲出了——我们监听点击事件的Inventory是一个GUI所代表的Inventory，它有27个箱子的格子，27个玩家背包的格子，和9个玩家Hotbar的格子，总共63个。它的<code>SlotIndex</code>编号是从0一直到62的。</p>

<p>这种GUI所代表的Inventory在Sponge中是<code>org.spongepowered.api.item.inventory.Container</code>类的实例。在Sponge中，所有与<code>Container</code>有关的事件，都是<code>TargetContainer</code>类的实例，比如说我们刚刚看到的所有<code>InteractInventoryEvent</code>。</p>

<p>一个<code>Container</code>同时也是一个<code>Inventory</code>，所以对<code>Container</code>的操作和对普通<code>Inventory</code>的操作几乎没有区别。</p>

<p>我们在这篇文章的前半部分通过调用<code>openInventory</code>方法打开了一个箱子Inventory，这同时也生成了一个<code>Container</code>，这个<code>Container</code>正是<code>openInventory</code>方法的返回值。</p>

<p><code>Inventory</code>类提供了一个名为<code>getArchetype</code>的方法，用于获取一个Inventory的类型，不过这个方法SpongeAPI还没有完全实现，因此目前可以保证的是仅针对<code>Container</code>有效。调用一个<code>Container</code>的<code>getArchetype</code>的方法是可以获取到当前<code>Container</code>的类型的。</p>

<h2 id="inventory">创建自己的Inventory</h2>

<p><code>org.spongepowered.api.item.inventory.Inventory.Builder</code>类正是一个用于创建自己的Inventory的生成器。比如说我们现在为主类添加一个右键使用木棍的监听器，然后创建一个Inventory，并调用<code>openInventory</code>方法打开它：</p>

<pre><code class="language-java">@Listener
public void onInteractBlock(InteractBlockEvent.Secondary event, @First Player player)  
{
    Optional&lt;ItemStack&gt; itemInHand = player.getItemInHand(event.getHandType());
    if (!itemInHand.filter(itemStack -&gt; itemStack.getItem().equals(ItemTypes.STICK)).isPresent()) return;

    Inventory newInventory = Inventory.builder()
            .property(InventoryTitle.PROPERTY_NAME, new InventoryTitle(Text.of("Custom Inventory")))
            .property(InventoryDimension.PROPERTY_NAME, new InventoryDimension(9, 1))
            .of(InventoryArchetypes.CHEST).withCarrier(player).build(this);

    player.openInventory(newInventory, Cause.source(this).build());
}
</code></pre>

<p>这是效果图：
<img src="https://blog.ustc-zzzz.net/content/images/2017/12/Screenshot-from-2017-12-12-15-52-22.png" alt=""></p>

<p>我们甚至可以把这样的一个Inventory缓存起来，这样一个玩家就可以把自己的东西放进去，在下次打开时保证东西仍然存在：</p>

<pre><code class="language-java">private final Map&lt;Player, Inventory&gt; inventoriesForPlayers = new WeakHashMap&lt;&gt;();

@Listener
public void onInteractBlock(InteractBlockEvent.Secondary event, @First Player player)  
{
    Optional&lt;ItemStack&gt; itemInHand = player.getItemInHand(event.getHandType());
    if (!itemInHand.filter(itemStack -&gt; itemStack.getItem().equals(ItemTypes.STICK)).isPresent()) return;

    Inventory newInventory = this.inventoriesForPlayers.computeIfAbsent(player, p -&gt; Inventory.builder()
            .property(InventoryTitle.PROPERTY_NAME, new InventoryTitle(Text.of("Custom Inventory")))
            .property(InventoryDimension.PROPERTY_NAME, new InventoryDimension(9, 1))
            .of(InventoryArchetypes.CHEST).withCarrier(p).build(this));

    player.openInventory(newInventory, Cause.source(this).build());
}
</code></pre>

<p>当然，序列化和反序列化自定义Inventory的工作，还需要玩家自己进行。</p>]]></content:encoded></item></channel></rss>