-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
423 additions
and
8 deletions.
There are no files selected for viewing
56 changes: 56 additions & 0 deletions
56
docs/en/modpack/kubejs/1.20.1/KubeJSCourse/KubeJSAdvanced/ForgeEvent.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
# ForgeEvent的使用 | ||
> 孤梦注:可千万不要玩forge事件啊,玩了你就要长脑子了!!! | ||
`ForgeEvent`是写在**startup**里的,这个一定得注意! | ||
|
||
ForgeEvent不仅仅只能调用到forge提供的事件,如果其他模组在源代码(指的Java代码)里直接继承了`Event`类,也是可以被ForgeEvent捕捉下来的,类似的示例:[机械动力修改流体管道流体和流体产生块](../KubejsProjects/Meng/SmallProject/CreatePipeCollision.md) | ||
|
||
ForgeEvent是可以搭配着[loadClass](./JavaLoadClass.md)一起使用的 | ||
|
||
## forge提供的事件 | ||
forge本身提供了非常多的事件可以使我们捕捉到游戏内的事情,但是我们一个个去翻又太过麻烦,这里孤梦就推荐使用[crt文档](https://docs.blamejared.com/1.20.1/en)去找对应的事件! | ||
|
||
[crt文档](https://docs.blamejared.com/1.20.1/en)的forge栏里的event目录下是非常好的ForgeEvent文档 | ||
|
||
我们可以现在crt文档里找到对应的事件,然后再去[forge的GitHub](https://github.com/MinecraftForge/MinecraftForge/tree/1.20.1/src/main/java/net/minecraftforge/event)上去找到相应事件的类 | ||
|
||
## 关于使用 | ||
```js | ||
ForgeEvents.onEvent("事件类",event=>{ | ||
//关于事件的code | ||
}) | ||
``` | ||
因为每个事件给出的方法是有可能不一样的,所以这里无法举例,且提供不了详细的函数使用(这里也可以简单参考一下crt文档提供的事件的使用函数) | ||
|
||
## 事件的“热加载” | ||
绝大部分的事件都是可以“热加载”的,但是需要使用一点手段 | ||
|
||
在前面我们学习了[global全局变量](./GlobalVariable.md),我们可以在事件里嵌入一个[global全局变量](./GlobalVariable.md),将事件处理引出来,像下面这样写 | ||
```js | ||
ForgeEvents.onEvent("事件类",event=>{ | ||
global.eventTest(event); | ||
}) | ||
|
||
global.eventTest = event =>{ | ||
//事件处理 | ||
} | ||
``` | ||
这样我们在游戏里只需要输入 `/kjs reload startup_scripts` 就可以进行事件处理的热加载了 | ||
|
||
## 注意事项 | ||
startup是非常脆弱的,稍不注意就会大退然后报错,说你的“犀牛”有问题, | ||
|
||
所以建议在测试的过程中使用`try catch`包裹处理一下报错,能够减少闪退的次数 | ||
|
||
具体像下面这样写(沿用上面代码) | ||
|
||
```js | ||
global.eventTest = event =>{ | ||
try{ | ||
//事件处理 | ||
}catch(err){ | ||
console.error(err); | ||
} | ||
} | ||
``` | ||
这样在报错时,可以在`/logs/kubejs/startup.log`里看见因为什么报错,然后去调整代码,一定不要因为错误被catch了就不管不顾了,除非你的这个错误是在意料之中的,并且出现报错后也有对应的处理,不会导致一直重复报错 |
29 changes: 29 additions & 0 deletions
29
docs/en/modpack/kubejs/1.20.1/KubeJSCourse/KubeJSAdvanced/JavaLoadClass.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# LoadClass使用 | ||
> 孤梦注:千万不要玩Java.loadClass啊,这东西比较废人 | ||
在使用Java.loadClass时,孤梦建议是你有一定的Java基础,至少得知道类、类路径、静态、对象、访问修饰符等概念 | ||
|
||
在绝大多数时候我们都用不到loadClass | ||
|
||
loadclass就是kjs提供给我们用来加载java类的 | ||
|
||
这使得KubeJS的可玩性非常高,比如[注册AE存储元件和对应的组件](../KubejsProjects/Meng/RegComponent&Storage.md)就使用到了非常多的loadClass | ||
|
||
## 关于使用 | ||
```js | ||
let class = Java.loadClass("类路径"); | ||
``` | ||
在使用ProbeJS时,在绝大多数时候都会为你补齐类路径,但是ProbeJS并不是所有的类都有对应的路径,所以这个时候你可以去翻一下对应模组的GitHub开源链接,查找到你需要的类,并将其路径复制过来 | ||
|
||
在你使用`Java.loadClass`class时候,你可以直接去调用到里面的`public static`的方法或者变量常量等 | ||
|
||
但是有些内容调用不到,你就可以和写java一样去`new`这个类 | ||
|
||
沿用上面的内容 | ||
```js | ||
let newClass = new class(); | ||
``` | ||
这里的`new class()`括号里可能会需要传参有的也不需要,这里根据对应类提供的源码来写 | ||
|
||
## 总结 | ||
总的来说你如果需要更好的使用`Java.loadClass`你是需要有一定的Java基础,这不是靠一个篇章能说明白的事情 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
88 changes: 88 additions & 0 deletions
88
.../modpack/kubejs/1.20.1/KubeJSCourse/KubeJSProjects/Meng/RegComponent&Storage.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
# 注册AE存储元件和对应的组件 | ||
本章涉及内容:`Java.loadClass`的使用、`StartupEvents.registry`里的`createCustom`使用 | ||
|
||
本章使用模组: | ||
1. jei-1.20.1-forge-15.3.0.4 | ||
2. rhino-forge-2001.2.2-build.18 | ||
3. architectury-9.2.14-forge | ||
4. kubejs-forge-2001.6.5-build.14 | ||
5. probejs-6.0.1-forge | ||
6. appliedenergistics2-forge-15.2.13 | ||
|
||
## 代码部分 | ||
下面代码全部都在`startup`文件夹内 | ||
|
||
```js | ||
const $BasicStorageCell = Java.loadClass("appeng.items.storage.BasicStorageCell") | ||
const $StorageComponentItem = Java.loadClass("appeng.items.materials.StorageComponentItem") | ||
const $AEItems = Java.loadClass("appeng.core.definitions.AEItems") | ||
const $AEKeyType = Java.loadClass("appeng.api.stacks.AEKeyType") | ||
const $Item = Java.loadClass("net.minecraft.world.item.Item"); | ||
|
||
const namespace = "meng:"; | ||
|
||
let AECellComponentItems = { | ||
} | ||
|
||
/** | ||
* 注册存储元件和对应的组件 | ||
* @param {Number} byte 最大内存 kb | ||
* @param {Number} maxItemTypeCount 最大物品类型属性 1~63 | ||
* @param {Number} AE2Energy 消耗的ae能 | ||
* @param {Number} bytesPer 每一个新物品开辟所需的空间byte | ||
*/ | ||
function regCellComponent(byte,maxItemTypeCount,AE2Energy,bytesPer){ | ||
let cellComponentId = `${namespace}cell_component_${byte}k` | ||
let storageCellId = `${namespace}item_storage_cell_${byte}k` | ||
AECellComponentItems[byte] = { | ||
byte:byte, | ||
cellComponent: cellComponentId, | ||
storageCell:storageCellId, | ||
maxItemTypeCount:maxItemTypeCount, | ||
AE2Energy:AE2Energy, | ||
bytesPer:bytesPer | ||
} | ||
} | ||
|
||
regCellComponent(512,63,3.0,4096) | ||
regCellComponent(1024,63,4.0,4096) | ||
regCellComponent(2048,63,5.0,4096) | ||
regCellComponent(4096,63,6.0,4096) | ||
regCellComponent(8192,63,7.0,4096) | ||
|
||
StartupEvents.registry("item", event => { | ||
for (const key in AECellComponentItems) { | ||
let aeValue = AECellComponentItems[key]; | ||
event.createCustom(aeValue.cellComponent, | ||
()=>new $StorageComponentItem($Item.Properties().stacksTo(1), aeValue.byte)) | ||
event.createCustom(aeValue.storageCell, | ||
()=>new $BasicStorageCell( | ||
$Item.Properties().stacksTo(1), | ||
Item.of(aeValue.cellComponent), | ||
$AEItems.ITEM_CELL_HOUSING, | ||
aeValue.AE2Energy, | ||
aeValue.byte, | ||
aeValue.bytesPer, | ||
aeValue.maxItemTypeCount, | ||
$AEKeyType.items() | ||
) | ||
) | ||
} | ||
}) | ||
``` | ||
上面代码注册了512k到8192k的存储元件和对应的组件 | ||
|
||
在游戏内也可以和原版一样`shift+右键`将组件和对应的框拆开 | ||
|
||
汉化和贴图和正常注册物品流程一样 | ||
|
||
## 我该如何使用上方代码 | ||
孤梦已经为你造好了轮子,你只需要调用`regCellComponent`这个方法然后往里面传参,剩下的就是重启游戏就可以了 | ||
```js | ||
regCellComponent(512,63,3.0,4096) | ||
``` | ||
就跟上方代码一样,直接正常调用然后重启游戏就可以被加载进游戏里了 | ||
|
||
## 注意事项 | ||
1. 该项目只是作为示例,可能有些地方没有解释清除,如需请自己查阅相关资料 | ||
2. 如需使用代码请注释表明此文档链接(浏览器链接区) |
1 change: 1 addition & 0 deletions
1
...ejs/1.20.1/KubeJSCourse/KubeJSProjects/Meng/SmallProject/CreatePipeCollision.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
56 changes: 56 additions & 0 deletions
56
docs/zh/modpack/kubejs/1.20.1/KubeJSCourse/KubeJSAdvanced/ForgeEvent.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
# ForgeEvent的使用 | ||
> 孤梦注:可千万不要玩forge事件啊,玩了你就要长脑子了!!! | ||
`ForgeEvent`是写在**startup**里的,这个一定得注意! | ||
|
||
ForgeEvent不仅仅只能调用到forge提供的事件,如果其他模组在源代码(指的Java代码)里直接继承了`Event`类,也是可以被ForgeEvent捕捉下来的,类似的示例:[机械动力修改流体管道流体和流体产生块](../KubejsProjects/Meng/SmallProject/CreatePipeCollision.md) | ||
|
||
ForgeEvent是可以搭配着[loadClass](./JavaLoadClass.md)一起使用的 | ||
|
||
## forge提供的事件 | ||
forge本身提供了非常多的事件可以使我们捕捉到游戏内的事情,但是我们一个个去翻又太过麻烦,这里孤梦就推荐使用[crt文档](https://docs.blamejared.com/1.20.1/en)去找对应的事件! | ||
|
||
[crt文档](https://docs.blamejared.com/1.20.1/en)的forge栏里的event目录下是非常好的ForgeEvent文档 | ||
|
||
我们可以现在crt文档里找到对应的事件,然后再去[forge的GitHub](https://github.com/MinecraftForge/MinecraftForge/tree/1.20.1/src/main/java/net/minecraftforge/event)上去找到相应事件的类 | ||
|
||
## 关于使用 | ||
```js | ||
ForgeEvents.onEvent("事件类",event=>{ | ||
//关于事件的code | ||
}) | ||
``` | ||
因为每个事件给出的方法是有可能不一样的,所以这里无法举例,且提供不了详细的函数使用(这里也可以简单参考一下crt文档提供的事件的使用函数) | ||
|
||
## 事件的“热加载” | ||
绝大部分的事件都是可以“热加载”的,但是需要使用一点手段 | ||
|
||
在前面我们学习了[global全局变量](./GlobalVariable.md),我们可以在事件里嵌入一个[global全局变量](./GlobalVariable.md),将事件处理引出来,像下面这样写 | ||
```js | ||
ForgeEvents.onEvent("事件类",event=>{ | ||
global.eventTest(event); | ||
}) | ||
|
||
global.eventTest = event =>{ | ||
//事件处理 | ||
} | ||
``` | ||
这样我们在游戏里只需要输入 `/kjs reload startup_scripts` 就可以进行事件处理的热加载了 | ||
|
||
## 注意事项 | ||
startup是非常脆弱的,稍不注意就会大退然后报错,说你的“犀牛”有问题, | ||
|
||
所以建议在测试的过程中使用`try catch`包裹处理一下报错,能够减少闪退的次数 | ||
|
||
具体像下面这样写(沿用上面代码) | ||
|
||
```js | ||
global.eventTest = event =>{ | ||
try{ | ||
//事件处理 | ||
}catch(err){ | ||
console.error(err); | ||
} | ||
} | ||
``` | ||
这样在报错时,可以在`/logs/kubejs/startup.log`里看见因为什么报错,然后去调整代码,一定不要因为错误被catch了就不管不顾了,除非你的这个错误是在意料之中的,并且出现报错后也有对应的处理,不会导致一直重复报错 |
29 changes: 29 additions & 0 deletions
29
docs/zh/modpack/kubejs/1.20.1/KubeJSCourse/KubeJSAdvanced/JavaLoadClass.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# LoadClass使用 | ||
> 孤梦注:千万不要玩Java.loadClass啊,这东西比较废人 | ||
在使用Java.loadClass时,孤梦建议是你有一定的Java基础,至少得知道类、类路径、静态、对象、访问修饰符等概念 | ||
|
||
在绝大多数时候我们都用不到loadClass | ||
|
||
loadclass就是kjs提供给我们用来加载java类的 | ||
|
||
这使得KubeJS的可玩性非常高,比如[注册AE存储元件和对应的组件](../KubejsProjects/Meng/RegComponent&Storage.md)就使用到了非常多的loadClass | ||
|
||
## 关于使用 | ||
```js | ||
let class = Java.loadClass("类路径"); | ||
``` | ||
在使用ProbeJS时,在绝大多数时候都会为你补齐类路径,但是ProbeJS并不是所有的类都有对应的路径,所以这个时候你可以去翻一下对应模组的GitHub开源链接,查找到你需要的类,并将其路径复制过来 | ||
|
||
在你使用`Java.loadClass`class时候,你可以直接去调用到里面的`public static`的方法或者变量常量等 | ||
|
||
但是有些内容调用不到,你就可以和写java一样去`new`这个类 | ||
|
||
沿用上面的内容 | ||
```js | ||
let newClass = new class(); | ||
``` | ||
这里的`new class()`括号里可能会需要传参有的也不需要,这里根据对应类提供的源码来写 | ||
|
||
## 总结 | ||
总的来说你如果需要更好的使用`Java.loadClass`你是需要有一定的Java基础,这不是靠一个篇章能说明白的事情 |
Oops, something went wrong.