Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 4 additions & 11 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
}
}
apply plugin: 'net.minecraftforge.gradle'
Expand Down Expand Up @@ -137,15 +137,7 @@ repositories {
url = "https://modmaven.k-4u.nl"
}
maven { url 'https://maven.blamejared.com' }
maven {
// CD4017BE_lib releases
name = "GitHub"
url = "https://maven.pkg.github.com/cd4017be/cd4017be_lib"
credentials {
username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
password = project.findProperty("gpr.key") ?: System.getenv("PASSWORD")
}
}

}

dependencies {
Expand All @@ -162,7 +154,8 @@ dependencies {
compileOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}:api")
runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}")
// CD4017BE_lib: using deobf version here because source code attachment isn't working with fg.deobf()
implementation "com.cd4017be.lib:cd4017be_lib:${mc_version}-${lib_version}:deobf"
//implementation fg.deobf(files("./libs/*"))
implementation fileTree(dir: 'libs', include: '*.jar')
}

task deobfJar(type: Jar) {
Expand Down
11 changes: 6 additions & 5 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
# This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx3G
org.gradle.jvmargs=-Xmx3G -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1081

org.gradle.daemon=false

java_version=1.8

//minecraft
mc_version=1.16.5
forge_version=36.1.12
forge_version=36.2.39

//mod and library
mod_version=1.1.0.0
mod_version=1.2.0.0
lib_version=7.2.0.0

//mod dependencies
jei_version=1.16.4:7.6.1.71
patchouli_version=1.16.4-53.2
jei_version=1.16.5:7.7.1.153
patchouli_version=1.16.4-53.3
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
197 changes: 102 additions & 95 deletions src/main/resources/assets/rs_ctr2/lang/zh_cn.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "自动化",
"sortnum": 1,
"description": "自动化特性总览。",
"icon": "rs_ctr2:item_mover"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "模组基础",
"sortnum": 0,
"description": "解释了\\*红石控制2\\.的核心机制。极度建议阅读,哪怕你玩过红石控制1。",
"icon": "rs_ctr2:logic_in"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "理论概念",
"sortnum": 2,
"flag": "testing_mode",
"description": "本章节旨在教授一些数字电路的基本概念,以防你对它们还不熟悉。",
"icon": "minecraft:book"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "自动合成器",
"icon": "rs_ctr2:autocraft",
"category": "rs_ctr2:automation",
"flag": "testing_mode",
"pages": [
{
"type": "patchouli:text",
"text": "\\/本章节还没完成!"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "可控方块破坏器",
"icon": "rs_ctr2:block_breaker",
"category": "rs_ctr2:automation",
"flag": "testing_mode",
"pages": [
{
"type": "patchouli:text",
"text": "\\/本章节还没完成!"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "远程方块互动",
"icon": "rs_ctr2:block_cable",
"category": "rs_ctr2:automation",
"flag": "testing_mode",
"pages": [
{
"type": "patchouli:text",
"text": "\\/本章节还没完成!"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"name": "电路调试",
"icon": "rs_ctr2:probe",
"category": "rs_ctr2:basics",
"pages": [
{
"type": "patchouli:text",
"text": "复杂的装置在第一次搭成时无法正常工作是相当正常的。无论是被忽略的边缘用例还是元件工作方式与你想的不同,有太多事情可能出错。\\p接下来的几页讲解了一些有用的工具,这些工具能在这种情况下帮到你。"
}, {
"type": "patchouli:spotlight",
"item": "rs_ctr2:probe",
"text": "大多数元件都是不透明的,而且视觉上没有任何能指示其状态的东西。因此,你需要一个\\i门探测器\\d来查看元件的内部状况。\\p使用该工具右击元件就能让探测器把元件作为目标。之后,探测器的屏幕上就会显示目标元件的缩小版模型,元件的实时状态信息会显示为下方的文本。"
}, {
"type": "patchouli:text",
"text": "这个缩小的3D模型会和真实的元件有相同的朝向,在你转动视角时也会跟着旋转。元件上的所有\\o端口\\d都有白色数字标记,这个数字与下方每行文本的开头数字对应。蓝色或者绿色指示着端口的输入输出方向:\\b输入/从\\d或者\\g输出/主\\d。\\p每个端口的状态会用与其$(l:connecting)类型$(/l)相匹配的颜色写出,额外的描述则会显示为灰色。"
}, {
"type": "patchouli:image",
"images": ["rs_ctr2:textures/gui/manual/probe.png"],
"border": true,
"title": "门探测器显示",
"text": "你可能会看见的样子。"
}, {
"type": "patchouli:text",
"title": "调试命令",
"text": "如果你在你的世界里有命令权限你还能:\\+$(c:/gateUpdater pause)暂停所有电路更新$(/c)\\+$(c:/gateUpdater step)进行单步更新$(/c)\\+$(c:/gateUpdater resume)使电路恢复常态$(/c)\\p这些命令在调试信号时序问题使非常有用,它们能让电路慢慢运行,你便能在每一tick分析其状态,而不会落在高速运转的电路后面。"
}, {
"type": "patchouli:text",
"text": "需要注意,电路tick停止后红石控制的所有设备都会停止响应,但世界里的一切其他事物都会照常运作。\\n这可能会带来预想外的副作用,所以一定要小心!"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "连接元件",
"icon": "rs_ctr2:data_cable",
"category": "rs_ctr2:basics",
"pages": [
{
"type": "patchouli:text",
"text": "小方块元件间需要通过其表明的\\o端口\\.进行交互。\\p不同种类的的\\o端口\\.可以从其材质区分:\\+\\r数据\\d(红色棋盘)\\+\\y能量\\d(金色插槽)\\+\\w物品\\d(白色管道洞)\\+\\c流体\\d(蓝色管道洞)\\+\\m方块互动\\d(紫色)\\+\\D特殊\\d(黑色正方形)"
}, {
"type": "patchouli:text",
"text": "每个\\o端口\\d还有自身的输入输出方向,通过其周围的绿色或蓝色标记指示。\\p对于\\r数据端口\\d,绿色意味着\\g输出信号\\d,蓝色意味着\\b输入信号\\d。\\p对于其他类型的端口,绿色代表着\\g“主设备”一侧\\d,控制着互动过程;蓝色代表着\\b“从设备”一侧\\d,只会被动地反应。"
}, {
"type": "patchouli:text",
"text": "连接端口最直接的方式是将两个元件有端口的一面贴在一起放置。两个端口的类型必须相同,输入输出方向必须相反。\\p如果条件所限不能直接连接,还可以通过\\i线缆\\d相连。除了只能直接相连的\\D“特殊”\\d类型端口以外,每种端口都有相应的专用线缆。"
}, {
"type": "patchouli:text",
"anchor": "cable",
"text": "线缆形成的路径只能有两个端点,不能分支。所以如果你想将一个数据输出连接到多个数据输入,或者想让一个从端口能被多个主端口访问,你就需要用到\\i分离器\\d。\\p和线缆一样,每种端口类型(除了“特殊”)都有相应的分离器。\\p注意:分离器组成元件链只能反复相连\\c$(t:参见“工作数据”提示文本)有限次$(/t)\\d,否则就会停止传输!"
}, {
"type": "patchouli:spotlight",
"item": "rs_ctr2:not_gate",
"title": "提示文本中的端口",
"text": "在物品的提示文本中,元件的端口会以彩色箭头表示。其颜色代表了端口的类型,蓝色和绿色则是代表数据输入和输出。箭头指向该元件物品模型上的对应端口的朝向。\\n在上面的示例物品中,\\g>\\d是右方的数据输出端口,\\b<\\d是左方的数据输入端口。"
}, {
"type": "patchouli:relations",
"entries": [
"rs_ctr2:placement",
"rs_ctr2:io",
"rs_ctr2:signals"
],
"text": ""
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "能量",
"icon": "rs_ctr2:power_cable",
"category": "rs_ctr2:automation",
"pages": [
{
"type": "patchouli:text",
"text": "能在世界中进行操作的设备通常需要能量运行。\\p但是红石控制的机器本身不能存储能量。作为代替,在设备需要能量进行操作时,它会尝试从$(l:connecting)相连$(/l)的能量存储设备中抽取能量。如果能量不能立即提供,这个操作就会失败。"
}, {
"type": "patchouli:text",
"text": "同样的规则也适用于发电设备。这意味着,你不能直接将用电器连接到发电机,中间必须有某种存储设备!\\p由于存储设备是被动的从设备,它们之间也不能直接相连。不过,你可以使用\\i变压器\\d来在电池间持续转移能量。"
}, {
"type": "patchouli:text",
"title": "存储",
"text": "\\i电池单元\\d在同一方块内相邻放置时会组成一个相连的结构,这个结构暴露在外的任何表面都能通过手持\\i能量线缆\\d右击转化成能量端口。类似地,使用数据线缆能创造出一个数据端口,能用于读取存储的能量读数。\\p你也可以使用兼容FE的外部方块进行存储,只需要$(l:io#resource)使用\\i能量端口\\d连接它们$(/l)。"
}, {
"type": "patchouli:text",
"title": "发电机",
"text": "当前只有用阳光发电的\\i太阳能单元\\d这一种发电机。它们工作时需要能对天空一览无余,其输出取决于太阳的角度。\\n太阳能单元也能组成相连的结构,但只能有一个能量端口。"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"name": "外部I/O",
"icon": "rs_ctr2:analog_out",
"category": "rs_ctr2:basics",
"pages": [
{
"type": "patchouli:text",
"text": "小方块元件的端口只能和端口互动,不能接上外部方块的非端口机制。为了让信号元件接收或发送常规红石信号,或者让主设备端口访问常规箱子,你需要使用特殊的转接元件,在端口和外部系统间进行转译。"
}, {
"type": "patchouli:text",
"text": "这些转接器会与它们面向的相邻方块互动,而且放置时也必须紧贴相邻方块。\\p一些转接器也有方块互动端口,使得它们也能远程连接到其他外部方块。"
}, {
"type": "rs_ctr2:spotlight2",
"a.item": "rs_ctr2:logic_out",
"b.item": "rs_ctr2:logic_in",
"_.title": "逻辑信号I/O",
"_.text": "\\i逻辑信号读取器\\d和\\i逻辑信号发射器\\d能将外部红石信号转换为基于端口的数据信号,或者反过来。但它们只会区分开和关状态(真或假),并不会保留信号强度信息。\\p它们对转换逻辑门的输入输出很有帮助。"
}, {
"type": "rs_ctr2:spotlight3",
"a.item": "rs_ctr2:analog_out",
"b.item": "rs_ctr2:analog_in",
"c.item": "rs_ctr2:comp_in",
"_.title": "模拟信号I/O",
"_.text": "\\i模拟信号读取器\\d和\\i模拟信号发射器\\d能将外部红石信号强度数值转换为基于端口的数据信号,或者反过来。\\i比较器信号读取器\\d则是在一个元件内整合了普通的原版比较器+模拟信号读取器。\\p注意:不要混用模拟和逻辑信号,除非你$(l:bitwise)知道自己在干什么$(/l)!"
}, {
"type": "rs_ctr2:spotlight2",
"a.item": "rs_ctr2:growth_sensor",
"b.item": "rs_ctr2:hardness_sensor",
"_.title": "方块传感器",
"_.text": "这些元件能测量方块的不同属性,并将其转换为数值。与前述的红石读取器不同,它们不会自动持续更新,而是需要时钟信号来刷新读数。\\p\\/可以通过\\o远程方块互动\\d工作。"
}, {
"anchor": "resource",
"type": "rs_ctr2:spotlight4",
"a.item": "rs_ctr2:power_io",
"b.item": "rs_ctr2:fluid_io",
"c.item": "rs_ctr2:item_io",
"d.item": "rs_ctr2:item_dropper",
"_.title": "资源I/O",
"_.text": "用于连接外部物品、流体容器或能量存储。\\p\\/可以通过\\o远程方块互动\\d工作。"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "可控物品使用器",
"icon": "rs_ctr2:item_placer",
"category": "rs_ctr2:automation",
"flag": "testing_mode",
"pages": [
{
"type": "patchouli:text",
"text": "\\/本章节还没完成!"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"name": "元件放置诀窍",
"icon": "cd4017be_lib:microblock",
"category": "rs_ctr2:basics",
"pages": [
{
"type": "patchouli:text",
"text": "要从一个已放置的\\i小方块结构\\d中移除元件,你需要手持另一个小方块元件对目标元件左键(手持\\i门探测器\\d也可以)。若你空手或使用常规工具破坏一个\\i小方块结构\\d,该结构会以整个方块的形式掉落。\\p此时物品形式的结构可以放在\\i小方块工作台\\d里拆解成它的组成元件,也可以用更多的元件复制出一样的结构。"
}, {
"type": "patchouli:text",
"text": "重新放置结构时,它的朝向还是和被破坏时一样,与你的放置方式无关。不过你可以手持\\i小方块结构\\d物品对空气右击,此时打开的GUI能改变其朝向。\\p小方块元件的放置和普通方块基本相同,只不过网格边长只有原来的1/4。一个例外是像线缆这样的透明或不完整元件,在用\\i小块方块\\d对其放置时会把它们覆盖住。"
}, {
"type": "patchouli:text",
"title": "有方向元件",
"text": "许多小方块元件能朝不同方向放置:\\p如果放置元件时\\*不潜行\\.,物品模型的右面会指向你,正面会则背向你放置时点击的墙。而当你垂直面向墙放置时,模型正面会指向离放置时瞄准的点最近的小方块网格边缘。"
}, {
"type": "patchouli:text",
"text": "\\*潜行放置\\.模式下,元件物品模型的右面总会指向你放置时点击的墙,正面总会指向离瞄准点最近的小方块网格边缘。\\p\\/未来可能会添加旋转小方块元件的工具。"
}, {
"type": "patchouli:text",
"title": "线缆放置",
"text": "一块线缆总是连接着两个不同的面,其中一个面是你放置时点击的面。\\p\\*不潜行\\.时另一端会指向你,这在快速放置长距离线缆时最为方便。"
}, {
"type": "patchouli:text",
"text": "\\*潜行时\\.,另一端会指向离放瞄准点最近的小方块网格边缘,而如果你瞄准点基本在网格中心的话,则会指向与墙面相反的方向。\\n该模式相当适用于在狭窄空间内进行精准放置。"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"name": "数字信号",
"icon": "rs_ctr2:not_gate",
"category": "rs_ctr2:basics",
"pages": [
{
"type": "patchouli:text",
"text": "逻辑门这样的小方块元件有着自己的一套信号系统,需要通过$(l:io)转换器$(/l)来连接到常规原版红石。这个系统和红石的主要不同是:\\n\\+输入和输出间只可能有$(l:connecting#cable)单向1对1连接$(/l)。\\+信号传输无损且没有距离限制。"
}, {
"type": "patchouli:text",
"text": "\\+信号值的范围是-2147483648到+2147483647(而不是0到15),而且这个值是通过一条线缆内32个独立的二元逻辑信道以二进制表示的。\\+断开的输入是浮置的,它们\\*不会重置到0\\.,而是维持在最后一次接受到的数据。\\p最后两点与电路行为特别相关。"
}, {
"type": "patchouli:text",
"title": "按位操作",
"text": "一些信号操作元件(包括所有逻辑门)是按位进行的,它们的逻辑操作会在所有32位信道上同时进行:\\n输出的第一位是所有输入第一位的运算结果,输出的第二位是所有输入第二位的运算结果,等等。\\p\\i位乱序选择门\\d可以用于单独设置、翻转和重排信号的每一位。"
}, {
"type": "patchouli:text",
"text": "一些情况下,比如信号作为比较器的结果时,信号应该被表示为纯布尔状态(非真即假)。纯布尔信号要么所有位都为1(真),要么所有位都为0(假)。\\n这种表示在进行按位逻辑操作时很方便,因为纯布尔信号的运算结果也是纯布尔信号。\\p\\i或缓存门\\d能对一个信号所有信道上的位进行或操作,将一般数据信号转换为纯布尔信号。"
}, {
"type": "patchouli:text",
"anchor": "clock",
"title": "时钟信号",
"text": "很多设备使用时钟信号来触发操作。本模组里相关要求的通常形式为:输入信号的任一位从0变成1,则视为一次触发;每tick里哪怕有多个位发生变化,最多也只能有一次触发。\\p使用纯布尔时钟信号最为简单,但因为全部位变成1需要时间再变回0,它们最多只能每两tick触发一次。"
}, {
"type": "patchouli:text",
"title": "浮置输入",
"text": "断开的输入端口还会维持其最后的状态,这意味着你在用常量元件设定输入后就可以将其移除,从而节省空间和元件。如果在使用有3个输入的逻辑门时只需要其中两个,你可以不管第三个输入,因为它们的输入值是不影响逻辑操作的初始值。\\p小心不要失手连上了要保留的浮置输入,否则就会变成新值!"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "时序",
"icon": "rs_ctr2:delay",
"category": "rs_ctr2:basics",
"pages": [
{
"type": "patchouli:text",
"text": "就像红石火把和中继器的传播延迟一样,大多数元件也有一tick的信号延迟(只有普通红石延迟的一半)。这意味着当前tick的输出值取决于上一tick的输入值。\\p在物品的提示文本中,输出会标记上[t+1],输入会标为[t-1]。"
}, {
"type": "patchouli:text",
"text": "少数元件的提示里你可能还会遇到[t+1/2],这代表着在两个电路tick间发生的事件。常规的世界事件,例如方块和实体更新,通通都发生在t和t+1/2之间。\\p也有一些只有一个输入的操作延迟为零tick,它们的输出会根据输入即时改变。这些操作也会计入\\c$(t:参见分离器的工作数据提示文本)分离器链路限制$(/t)\\d,所以你需要在使用这些操作时插入\\i延迟线\\d或者其他有延迟的元件来重置链路深度计数。"
}, {
"type": "patchouli:text",
"text": "\\i延迟线\\d对于其他特定情景也很重要,比如改变不同信号的相对时间来使其同时到达某设备,或者让设备以特定顺序执行动作。"
}, {
"type": "patchouli:text",
"text": "在建造复杂电路时,你会发现信号传播延迟是电路运行速度的主要瓶颈。在某些地方超频,使其运作频率超过电路支持的上限会产生错误的控制信号,而这可能造成大麻烦。所以如果电路开始出错,有可能是运转得太快了。\\p优化电路,使其支持更高时钟频率,这是高级玩家的挑战,也是他们的奖励。"
}
]
}
Loading