Merge branch 'develop/fix' into develop/gtl_support
# Conflicts: # build.gradle
This commit is contained in:
commit
54e0d8459d
9
.gitignore
vendored
9
.gitignore
vendored
|
|
@ -87,9 +87,6 @@ classes/
|
|||
*.zip
|
||||
|
||||
# Reference source code (should not be tracked)
|
||||
ExtendedAE-1.20-1.4.2-forge/
|
||||
GTLCore/
|
||||
|
||||
# Gradle wrapper (optional - some prefer to commit this)
|
||||
# gradle/wrapper/gradle-wrapper.jar
|
||||
# gradle/wrapper/gradle-wrapper.properties
|
||||
|
|
@ -118,6 +115,6 @@ temp/
|
|||
tmp/
|
||||
|
||||
# Allow dependencies in libs
|
||||
!libs/
|
||||
!libs/*.jar
|
||||
!libs/**/*.jar
|
||||
libs/*
|
||||
!libs/ExtendedAE-1.20-1.4.2-forge.jar
|
||||
/src/generated/resources/.cache
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@
|
|||
- Added natural sorting functionality for the upload pattern list
|
||||
- 添加合成计划字节数显示的格式化功能
|
||||
- Added formatted display for crafting plan byte count
|
||||
- 添加部分物品用于磁盘合成(与AAE、APPFLUX、MEGA均有联动)
|
||||
- Add some items for disk synthesis (linked with AAE, APPFLUX, MEGA)
|
||||
|
||||
### Changed / 变更
|
||||
- 调整实体加速器模型
|
||||
|
|
@ -31,6 +33,12 @@
|
|||
- Added version restrictions for MAE2
|
||||
- 为部分文本添加翻译键支持,改善国际化体验
|
||||
- Added translation key support for some previously hardcoded text, improving internationalization experience
|
||||
- 略微提升无线收发器基础硬度,锁定状态下挖掘速度降至10%
|
||||
- Slightly increased wireless transceiver base hardness, mining speed reduced to 10% when locked
|
||||
- 调整部分物品合成配方
|
||||
- Adjust the synthesis formula of some items
|
||||
- 优化本mod磁盘性能
|
||||
- Optimize the disk performance of this mod
|
||||
|
||||
### Fixed / 修复
|
||||
- 修复供应器高亮在服务器中不显示的问题
|
||||
|
|
|
|||
48
build.gradle
48
build.gradle
|
|
@ -11,6 +11,14 @@ base {
|
|||
archivesName = project.archives_name
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
resources {
|
||||
srcDir 'src/generated/resources'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
loom {
|
||||
silentMojangMappingsLicense()
|
||||
|
||||
|
|
@ -19,11 +27,13 @@ loom {
|
|||
}
|
||||
|
||||
runs {
|
||||
client1 {
|
||||
client()
|
||||
name "Client 1"
|
||||
runDir "run/client1"
|
||||
programArgs "--username", "Player1"
|
||||
data {
|
||||
data()
|
||||
name "Data Generation"
|
||||
// IDE 启动时传入参数
|
||||
programArgs.addAll(
|
||||
'--mod', project.name, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -75,6 +85,7 @@ dependencies {
|
|||
minecraft "net.minecraft:minecraft:${minecraft_version}"
|
||||
mappings loom.officialMojangMappings()
|
||||
forge "net.minecraftforge:forge:${forge_version}"
|
||||
annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor"
|
||||
|
||||
//exendedae前置
|
||||
modImplementation "curse.maven:glodium-957920:${glodium_version}"
|
||||
|
|
@ -85,15 +96,22 @@ dependencies {
|
|||
//ae2
|
||||
modImplementation "appeng:appliedenergistics2-forge:${ae2_version}"
|
||||
modImplementation "org.appliedenergistics:guideme:${guideme_version}"
|
||||
modCompileOnly "curse.maven:applied-energistics-2-wireless-terminals-459929:${wireless_terminals_version}"
|
||||
modImplementation "curse.maven:applied-energistics-2-wireless-terminals-459929:${wireless_terminals_version}"
|
||||
modImplementation "curse.maven:applied-flux-965012:6755986"
|
||||
modImplementation "curse.maven:mega-cells-622112:${mega_cells_version}"
|
||||
|
||||
//mae2
|
||||
modRuntimeOnly "curse.maven:modern-ae2-additions-1028068:6827727"
|
||||
modCompileOnly "curse.maven:modern-ae2-additions-1028068:6827727"
|
||||
|
||||
//aea
|
||||
modCompileOnly "curse.maven:advancedae-1084104:6939473"
|
||||
modRuntimeOnly "curse.maven:advancedae-1084104:6939473"
|
||||
|
||||
modCompileOnly "mezz.jei:jei-${minecraft_version}-forge:${jei_version}"
|
||||
|
||||
annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor"
|
||||
|
||||
modImplementation "curse.maven:applied-flux-965012:6755986"
|
||||
modCompileOnly "curse.maven:mega-cells-622112:${mega_cells_version}"
|
||||
modCompileOnly "curse.maven:jade-324717:${jade_version}"
|
||||
modRuntimeOnly "mezz.jei:jei-${minecraft_version}-forge:15.20.0.112"
|
||||
modImplementation "mezz.jei:jei-${minecraft_version}-forge:${jei_version}"
|
||||
modImplementation "curse.maven:jade-324717:${jade_version}"
|
||||
|
||||
// GregTech
|
||||
modImplementation "curse.maven:gregtechceu-modern-890405:${gregtech_version}"
|
||||
|
|
@ -111,18 +129,16 @@ dependencies {
|
|||
modImplementation("curse.maven:rhino-416294:6186971")
|
||||
|
||||
//curios
|
||||
modRuntimeOnly "curse.maven:curios-309927:${curios_version}"
|
||||
modCompileOnly "curse.maven:curios-309927:${curios_version}"
|
||||
modImplementation "curse.maven:curios-309927:${curios_version}"
|
||||
|
||||
// Runtime test
|
||||
modRuntimeOnly "curse.maven:curios-309927:${curios_version}"
|
||||
modImplementation "curse.maven:jade-324717:5339264"
|
||||
modRuntimeOnly "dev.architectury:architectury-forge:9.2.14"
|
||||
modRuntimeOnly "curse.maven:applied-energistics-2-wireless-terminals-459929:${wireless_terminals_version}"
|
||||
modRuntimeOnly "mezz.jei:jei-${minecraft_version}-forge:${jei_version}"
|
||||
modRuntimeOnly "curse.maven:cloth-config-348521:5729105"
|
||||
|
||||
//jec
|
||||
modImplementation "curse.maven:just-enough-characters-250702:6680042"
|
||||
modCompileOnly "curse.maven:just-enough-characters-250702:6680042"
|
||||
|
||||
//拼音搜索
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"type": "advanced_ae:reaction",
|
||||
"energy": 100000,
|
||||
"fluid": {
|
||||
"fluidStack": {
|
||||
"Amount": 2000,
|
||||
"FluidName": "advanced_ae:quantum_infusion_source"
|
||||
}
|
||||
},
|
||||
"input_items": [
|
||||
{
|
||||
"amount": 2,
|
||||
"ingredient": {
|
||||
"item": "ae2:singularity"
|
||||
}
|
||||
},
|
||||
{
|
||||
"amount": 1,
|
||||
"ingredient": {
|
||||
"item": "minecraft:nether_star"
|
||||
}
|
||||
},
|
||||
{
|
||||
"amount": 4,
|
||||
"ingredient": {
|
||||
"item": "advanced_ae:quantum_alloy_plate"
|
||||
}
|
||||
}
|
||||
],
|
||||
"output": {
|
||||
"#": 1,
|
||||
"#c": "ae2:i",
|
||||
"id": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_energy_stage_3": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/compat/energy_storage_core"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_energy_stage_3",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/compat/energy_storage_core"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
},
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "megacells"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_basic_core": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/compat/infinity_core_1"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_basic_core",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/compat/infinity_core_1"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
},
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_basic_core": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/compat/infinity_core_2"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_basic_core",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/compat/infinity_core_2"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
},
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_basic_core": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/compat/infinity_core_3"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_basic_core",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/compat/infinity_core_3"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
},
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_storage_stage_3": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/compat/storage_core"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_storage_stage_3",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/compat/storage_core"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "megacells"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_energy_stage_3": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/energy_storage_core"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_energy_stage_3",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/energy_storage_core"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
},
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "megacells"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_basic_core": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/energy_storage_core_1"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_basic_core",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/energy_storage_core_1"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_energy_stage_1": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/energy_storage_core_2"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_energy_stage_1",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/energy_storage_core_2"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_energy_stage_2": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/energy_storage_core_3"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_energy_stage_2",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/energy_storage_core_3"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_basic_core": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/infinity_core"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_basic_core",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/infinity_core"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_quantum_stage_3": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/quantum_storage_core"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_quantum_stage_3",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/quantum_storage_core"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_basic_core": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/quantum_storage_core_1"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_basic_core",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/quantum_storage_core_1"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_quantum_stage_1": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/quantum_storage_core_2"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_quantum_stage_1",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/quantum_storage_core_2"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_quantum_stage_2": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/quantum_storage_core_3"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_quantum_stage_2",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/quantum_storage_core_3"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
{
|
||||
"advancements": [
|
||||
{
|
||||
"advancement": {
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_storage_stage_3": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/storage_core"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_storage_stage_3",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/storage_core"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "megacells"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_assembler_matrix_wall": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"expatternprovider:assembler_matrix_wall"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:assembler_matrix_upload_core"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_assembler_matrix_wall",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:assembler_matrix_upload_core"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_advanced_card": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"ae2:advanced_card"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:channel_card"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_advanced_card",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:channel_card"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_nether_star": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"minecraft:nether_star"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/basic_core"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_nether_star",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/basic_core"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_spatial_stage_3": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/spatial_core"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_spatial_stage_3",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/spatial_core"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_basic_core": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/spatial_core_1"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_basic_core",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/spatial_core_1"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_spatial_stage_1": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/spatial_core_2"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_spatial_stage_1",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/spatial_core_2"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_spatial_stage_2": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/spatial_core_3"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_spatial_stage_2",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/spatial_core_3"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_basic_core": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/storage_core_1"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_basic_core",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/storage_core_1"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_storage_stage_1": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/storage_core_2"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_storage_stage_1",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/storage_core_2"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_storage_stage_2": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:basic_core"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:core/storage_core_3"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_storage_stage_2",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:core/storage_core_3"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_entity_speed_card_8x": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:entity_speed_card"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:entity_speed_card_16x"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_entity_speed_card_8x",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:entity_speed_card_16x"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_64x_accelerator": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:64x_crafting_accelerator"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_speed_card": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"ae2:speed_card"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:entity_speed_card_2x"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_speed_card",
|
||||
"has_64x_accelerator",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:entity_speed_card_2x"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_entity_speed_card_2x": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:entity_speed_card"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:entity_speed_card_4x"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_entity_speed_card_2x",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:entity_speed_card_4x"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_entity_speed_card_4x": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:entity_speed_card"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:entity_speed_card_8x"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_entity_speed_card_4x",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:entity_speed_card_8x"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_entity_speed_card_x2": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:entity_speed_card"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_singularity": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"ae2:singularity"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:entity_speed_ticker"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_entity_speed_card_x2",
|
||||
"has_singularity",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:entity_speed_ticker"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_oblivion_singularity": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:oblivion_singularity"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:infinity_biginteger_cell"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_oblivion_singularity",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:infinity_biginteger_cell"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_256x": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"extendedae_plus:256x_crafting_accelerator"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:network/crafting/1024x_crafting_accelerator"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_256x",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:network/crafting/1024x_crafting_accelerator"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_accelerator": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"ae2:crafting_accelerator"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:network/crafting/16x_crafting_accelerator"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_accelerator",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:network/crafting/16x_crafting_accelerator"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_accelerator": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"ae2:crafting_accelerator"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:network/crafting/256x_crafting_accelerator"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_accelerator",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:network/crafting/256x_crafting_accelerator"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_accelerator": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"ae2:crafting_accelerator"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:network/crafting/4x_crafting_accelerator"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_accelerator",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:network/crafting/4x_crafting_accelerator"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_accelerator": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"ae2:crafting_accelerator"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:network/crafting/64x_crafting_accelerator"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_accelerator",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:network/crafting/64x_crafting_accelerator"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_network_tool": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"ae2:network_tool"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_pattern_provider": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"tag": "ae2:pattern_provider"
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:network_pattern_controller"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_network_tool",
|
||||
"has_pattern_provider",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:network_pattern_controller"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_quantum_ring": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"ae2:quantum_ring"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "extendedae_plus:wireless_transceiver"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_quantum_ring",
|
||||
"has_the_recipe"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"extendedae_plus:wireless_transceiver"
|
||||
]
|
||||
},
|
||||
"sends_telemetry_event": false
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"category": "misc",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "expatternprovider:assembler_matrix_wall"
|
||||
},
|
||||
{
|
||||
"item": "minecraft:lever"
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:assembler_matrix_upload_core"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"category": "misc",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "ae2:advanced_card"
|
||||
},
|
||||
{
|
||||
"item": "extendedae_plus:wireless_transceiver"
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:channel_card"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"key": {
|
||||
"A": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"B": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"C": {
|
||||
"item": "ae2:logic_processor"
|
||||
},
|
||||
"D": {
|
||||
"item": "ae2:fluix_pearl"
|
||||
},
|
||||
"E": {
|
||||
"item": "ae2:engineering_processor"
|
||||
},
|
||||
"F": {
|
||||
"item": "ae2:calculation_processor"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"ABA",
|
||||
"CDE",
|
||||
"AFA"
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:basic_core"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
},
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "megacells"
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 3,
|
||||
"core_stage": 3
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "appflux:core_256m"
|
||||
},
|
||||
"M": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"N": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"NBN",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:energy_storage_core"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
},
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"C": {
|
||||
"item": "extendedae_plus:spatial_core"
|
||||
},
|
||||
"E": {
|
||||
"item": "extendedae_plus:energy_storage_core"
|
||||
},
|
||||
"M": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"N": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
},
|
||||
"S": {
|
||||
"item": "extendedae_plus:storage_core"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MNM",
|
||||
"SOE",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:infinity_core"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
},
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"C": {
|
||||
"item": "extendedae_plus:spatial_core"
|
||||
},
|
||||
"M": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"N": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
},
|
||||
"Q": {
|
||||
"item": "extendedae_plus:quantum_storage_core"
|
||||
},
|
||||
"S": {
|
||||
"item": "extendedae_plus:storage_core"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MNM",
|
||||
"SOQ",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:infinity_core"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
},
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"C": {
|
||||
"item": "extendedae_plus:spatial_core"
|
||||
},
|
||||
"E": {
|
||||
"item": "extendedae_plus:energy_storage_core"
|
||||
},
|
||||
"M": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
},
|
||||
"Q": {
|
||||
"item": "extendedae_plus:quantum_storage_core"
|
||||
},
|
||||
"S": {
|
||||
"item": "extendedae_plus:storage_core"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MQM",
|
||||
"SOE",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:infinity_core"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "megacells"
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 1,
|
||||
"core_stage": 3
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "megacells:cell_component_256m"
|
||||
},
|
||||
"M": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"N": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"NBN",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:storage_core"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
},
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "megacells"
|
||||
}
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 3,
|
||||
"core_stage": 3
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "appflux:core_256k"
|
||||
},
|
||||
"M": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"N": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"NBN",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:energy_storage_core"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core"
|
||||
},
|
||||
"C": {
|
||||
"item": "appflux:core_16k"
|
||||
},
|
||||
"E": {
|
||||
"item": "appflux:energy_processor"
|
||||
},
|
||||
"M": {
|
||||
"tag": "forge:gems/redstone"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MCM",
|
||||
"EBE",
|
||||
"MEM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 3,
|
||||
"core_stage": 1
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 3,
|
||||
"core_stage": 1
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "appflux:core_64k"
|
||||
},
|
||||
"M": {
|
||||
"item": "appflux:charged_redstone"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"CBC",
|
||||
"MOM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 3,
|
||||
"core_stage": 2
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 3,
|
||||
"core_stage": 2
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "appflux:core_256k"
|
||||
},
|
||||
"M": {
|
||||
"tag": "forge:ingots/sky_insulating_resin"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"CBC",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 3,
|
||||
"core_stage": 3
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "appflux"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"C": {
|
||||
"item": "extendedae_plus:spatial_core"
|
||||
},
|
||||
"M": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"N": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
},
|
||||
"S": {
|
||||
"item": "extendedae_plus:storage_core"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MNM",
|
||||
"SOS",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:infinity_core"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 4,
|
||||
"core_stage": 3
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "advanced_ae:quantum_storage_256"
|
||||
},
|
||||
"M": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"N": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"NBN",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:quantum_storage_core"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core"
|
||||
},
|
||||
"C": {
|
||||
"item": "advanced_ae:quantum_storage_component"
|
||||
},
|
||||
"E": {
|
||||
"item": "advanced_ae:quantum_processor"
|
||||
},
|
||||
"M": {
|
||||
"item": "advanced_ae:quantum_alloy"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MCM",
|
||||
"EBE",
|
||||
"MEM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 4,
|
||||
"core_stage": 1
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 4,
|
||||
"core_stage": 1
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "advanced_ae:quantum_storage_component"
|
||||
},
|
||||
"M": {
|
||||
"item": "advanced_ae:quantum_alloy_block"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"CBC",
|
||||
"MOM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 4,
|
||||
"core_stage": 2
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "advanced_ae"
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 4,
|
||||
"core_stage": 2
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "advanced_ae:quantum_storage_128"
|
||||
},
|
||||
"M": {
|
||||
"item": "advanced_ae:quantum_alloy_plate"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"CBC",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 4,
|
||||
"core_stage": 3
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 2,
|
||||
"core_stage": 3
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "ae2:spatial_cell_component_128"
|
||||
},
|
||||
"M": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"N": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"NBN",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:spatial_core"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core"
|
||||
},
|
||||
"C": {
|
||||
"item": "ae2:spatial_cell_component_2"
|
||||
},
|
||||
"E": {
|
||||
"item": "ae2:engineering_processor"
|
||||
},
|
||||
"L": {
|
||||
"item": "ae2:logic_processor"
|
||||
},
|
||||
"M": {
|
||||
"tag": "forge:dusts/fluix"
|
||||
},
|
||||
"P": {
|
||||
"item": "ae2:calculation_processor"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MCM",
|
||||
"LBP",
|
||||
"MEM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 2,
|
||||
"core_stage": 1
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 2,
|
||||
"core_stage": 1
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "ae2:spatial_cell_component_16"
|
||||
},
|
||||
"M": {
|
||||
"tag": "forge:gems/fluix"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"CBC",
|
||||
"MOM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 2,
|
||||
"core_stage": 2
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 2,
|
||||
"core_stage": 2
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "ae2:spatial_cell_component_128"
|
||||
},
|
||||
"M": {
|
||||
"item": "ae2:fluix_block"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"CBC",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 2,
|
||||
"core_stage": 3
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"type": "forge:conditional",
|
||||
"recipes": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "forge:not",
|
||||
"value": {
|
||||
"type": "forge:mod_loaded",
|
||||
"modid": "megacells"
|
||||
}
|
||||
}
|
||||
],
|
||||
"recipe": {
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 1,
|
||||
"core_stage": 3
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "ae2:cell_component_256k"
|
||||
},
|
||||
"M": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"N": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"NBN",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:storage_core"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core"
|
||||
},
|
||||
"C": {
|
||||
"item": "ae2:cell_component_16k"
|
||||
},
|
||||
"E": {
|
||||
"item": "ae2:engineering_processor"
|
||||
},
|
||||
"L": {
|
||||
"item": "ae2:logic_processor"
|
||||
},
|
||||
"M": {
|
||||
"tag": "forge:dusts/certus_quartz"
|
||||
},
|
||||
"P": {
|
||||
"item": "ae2:calculation_processor"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MCM",
|
||||
"LBP",
|
||||
"MEM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 1,
|
||||
"core_stage": 1
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 1,
|
||||
"core_stage": 1
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "ae2:cell_component_64k"
|
||||
},
|
||||
"M": {
|
||||
"tag": "ae2:all_certus_quartz"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"CBC",
|
||||
"MOM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 1,
|
||||
"core_stage": 2
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"key": {
|
||||
"B": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 1,
|
||||
"core_stage": 2
|
||||
}
|
||||
},
|
||||
"C": {
|
||||
"item": "ae2:cell_component_256k"
|
||||
},
|
||||
"M": {
|
||||
"item": "ae2:quartz_block"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"MOM",
|
||||
"CBC",
|
||||
"MCM"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:basic_core",
|
||||
"nbt": {
|
||||
"CustomModelData": 1,
|
||||
"core_stage": 3
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -1,18 +1,6 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"SAS",
|
||||
"QXQ",
|
||||
"SBS"
|
||||
],
|
||||
"key": {
|
||||
"S": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:entity_speed_card",
|
||||
"nbt": {
|
||||
"EAS:mult": 8
|
||||
}
|
||||
},
|
||||
"A": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
|
|
@ -22,16 +10,28 @@
|
|||
"Q": {
|
||||
"item": "ae2:spatial_cell_component_128"
|
||||
},
|
||||
"S": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:entity_speed_card",
|
||||
"nbt": {
|
||||
"EAS:mult": 8
|
||||
}
|
||||
},
|
||||
"X": {
|
||||
"item": "minecraft:dragon_egg"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"SAS",
|
||||
"QXQ",
|
||||
"SBS"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:entity_speed_card",
|
||||
"count": 1,
|
||||
"nbt": {
|
||||
"EAS:mult": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -1,30 +1,30 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"SBS",
|
||||
"QXQ",
|
||||
"SBS"
|
||||
],
|
||||
"key": {
|
||||
"S": {
|
||||
"item": "ae2:speed_card"
|
||||
},
|
||||
"B": {
|
||||
"item": "extendedae_plus:64x_crafting_accelerator"
|
||||
},
|
||||
"Q": {
|
||||
"item": "ae2:spatial_cell_component_2"
|
||||
},
|
||||
"S": {
|
||||
"item": "ae2:speed_card"
|
||||
},
|
||||
"X": {
|
||||
"item": "ae2:cell_component_256k"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"SBS",
|
||||
"QXQ",
|
||||
"SBS"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:entity_speed_card",
|
||||
"count": 1,
|
||||
"nbt": {
|
||||
"EAS:mult": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -1,34 +1,34 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"SBS",
|
||||
"QXQ",
|
||||
"SBS"
|
||||
],
|
||||
"key": {
|
||||
"S": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:entity_speed_card",
|
||||
"nbt": {
|
||||
"EAS:mult": 2
|
||||
}
|
||||
},
|
||||
"B": {
|
||||
"item": "extendedae_plus:256x_crafting_accelerator"
|
||||
},
|
||||
"Q": {
|
||||
"item": "ae2:spatial_cell_component_16"
|
||||
},
|
||||
"S": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:entity_speed_card",
|
||||
"nbt": {
|
||||
"EAS:mult": 2
|
||||
}
|
||||
},
|
||||
"X": {
|
||||
"item": "ae2:dense_energy_cell"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"SBS",
|
||||
"QXQ",
|
||||
"SBS"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:entity_speed_card",
|
||||
"count": 1,
|
||||
"nbt": {
|
||||
"EAS:mult": 4
|
||||
}
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -1,34 +1,34 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"SBS",
|
||||
"QXQ",
|
||||
"SBS"
|
||||
],
|
||||
"key": {
|
||||
"S": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:entity_speed_card",
|
||||
"nbt": {
|
||||
"EAS:mult": 4
|
||||
}
|
||||
},
|
||||
"B": {
|
||||
"item": "extendedae_plus:1024x_crafting_accelerator"
|
||||
},
|
||||
"Q": {
|
||||
"item": "ae2:spatial_cell_component_128"
|
||||
},
|
||||
"S": {
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:entity_speed_card",
|
||||
"nbt": {
|
||||
"EAS:mult": 4
|
||||
}
|
||||
},
|
||||
"X": {
|
||||
"item": "minecraft:nether_star"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"SBS",
|
||||
"QXQ",
|
||||
"SBS"
|
||||
],
|
||||
"result": {
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:entity_speed_card",
|
||||
"count": 1,
|
||||
"nbt": {
|
||||
"EAS:mult": 8
|
||||
}
|
||||
}
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -1,33 +1,34 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"SZS",
|
||||
"QXQ",
|
||||
"SIS"
|
||||
],
|
||||
"key": {
|
||||
"I": {
|
||||
"item": "expatternprovider:ex_io_port"
|
||||
},
|
||||
"Q": {
|
||||
"item": "ae2:singularity"
|
||||
},
|
||||
"S": {
|
||||
"type": "forge:partial_nbt",
|
||||
"type": "forge:nbt",
|
||||
"item": "extendedae_plus:entity_speed_card",
|
||||
"nbt": {
|
||||
"EAS:mult": 2
|
||||
}
|
||||
},
|
||||
"Z": {
|
||||
"item": "ae2:dense_energy_cell"
|
||||
},
|
||||
"Q": {
|
||||
"item": "ae2:singularity"
|
||||
},
|
||||
"X": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"I": {
|
||||
"item": "expatternprovider:ex_io_port"
|
||||
"Z": {
|
||||
"item": "ae2:dense_energy_cell"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"SZS",
|
||||
"QXQ",
|
||||
"SIS"
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:entity_speed_ticker",
|
||||
"count": 1
|
||||
}
|
||||
"type": "forge:partial_nbt",
|
||||
"item": "extendedae_plus:entity_speed_ticker"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"key": {
|
||||
"B": {
|
||||
"item": "minecraft:netherite_block"
|
||||
},
|
||||
"G": {
|
||||
"item": "ae2:quartz_vibrant_glass"
|
||||
},
|
||||
"I": {
|
||||
"item": "extendedae_plus:infinity_core"
|
||||
},
|
||||
"N": {
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
"O": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"GOG",
|
||||
"NIN",
|
||||
"BBB"
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:infinity_biginteger_cell"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"key": {
|
||||
"A": {
|
||||
"item": "ae2:cell_component_256k"
|
||||
},
|
||||
"C": {
|
||||
"item": "extendedae_plus:256x_crafting_accelerator"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
" ",
|
||||
"ACA",
|
||||
" "
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:1024x_crafting_accelerator"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"category": "misc",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "ae2:crafting_accelerator"
|
||||
},
|
||||
{
|
||||
"item": "ae2:cell_component_16k"
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:16x_crafting_accelerator"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"category": "misc",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "ae2:crafting_accelerator"
|
||||
},
|
||||
{
|
||||
"item": "ae2:cell_component_256k"
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:256x_crafting_accelerator"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"category": "misc",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "ae2:crafting_accelerator"
|
||||
},
|
||||
{
|
||||
"item": "ae2:cell_component_4k"
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:4x_crafting_accelerator"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"category": "misc",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "ae2:crafting_accelerator"
|
||||
},
|
||||
{
|
||||
"item": "ae2:cell_component_64k"
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:64x_crafting_accelerator"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"category": "misc",
|
||||
"ingredients": [
|
||||
{
|
||||
"tag": "ae2:illuminated_panel"
|
||||
},
|
||||
{
|
||||
"tag": "ae2:pattern_provider"
|
||||
},
|
||||
{
|
||||
"item": "ae2:network_tool"
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:network_pattern_controller"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"type": "ae2:transform",
|
||||
"circumstance": {
|
||||
"type": "explosion"
|
||||
},
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "ae2:singularity"
|
||||
},
|
||||
{
|
||||
"item": "minecraft:nether_star"
|
||||
},
|
||||
{
|
||||
"item": "minecraft:netherite_block"
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:oblivion_singularity"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"key": {
|
||||
"L": {
|
||||
"item": "ae2:quantum_link"
|
||||
},
|
||||
"R": {
|
||||
"item": "ae2:quantum_ring"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
"RRR",
|
||||
"RLR",
|
||||
"RRR"
|
||||
],
|
||||
"result": {
|
||||
"item": "extendedae_plus:wireless_transceiver"
|
||||
},
|
||||
"show_notification": true
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@ package com.extendedae_plus;
|
|||
|
||||
import appeng.api.storage.StorageCells;
|
||||
import appeng.menu.locator.MenuLocators;
|
||||
import com.extendedae_plus.ae.api.storage.InfinityBigIntegerCellHandler;
|
||||
import com.extendedae_plus.api.storage.InfinityBigIntegerCellHandler;
|
||||
import com.extendedae_plus.client.ClientRegistrar;
|
||||
import com.extendedae_plus.config.ModConfig;
|
||||
import com.extendedae_plus.init.*;
|
||||
|
|
|
|||
|
|
@ -103,13 +103,13 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTicka
|
|||
|
||||
// 注册可记忆的配置(YES/NO)
|
||||
this.getConfigManager().registerSetting(
|
||||
com.extendedae_plus.ae.api.config.Settings.ACCELERATE,
|
||||
com.extendedae_plus.api.config.Settings.ACCELERATE,
|
||||
YesNo.YES
|
||||
);
|
||||
}
|
||||
|
||||
public boolean getAccelerateEnabled() {
|
||||
return this.getConfigManager().getSetting(com.extendedae_plus.ae.api.config.Settings.ACCELERATE) == YesNo.YES;
|
||||
return this.getConfigManager().getSetting(com.extendedae_plus.api.config.Settings.ACCELERATE) == YesNo.YES;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -118,7 +118,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTicka
|
|||
* @param enabled 是否启用加速
|
||||
*/
|
||||
public void setAccelerateEnabled(boolean enabled) {
|
||||
this.getConfigManager().putSetting(com.extendedae_plus.ae.api.config.Settings.ACCELERATE, enabled ? YesNo.YES : YesNo.NO);
|
||||
this.getConfigManager().putSetting(com.extendedae_plus.api.config.Settings.ACCELERATE, enabled ? YesNo.YES : YesNo.NO);
|
||||
if (menu != null) {
|
||||
menu.setAccelerateEnabled(enabled);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package com.extendedae_plus.ae.api.config;
|
||||
package com.extendedae_plus.api.config;
|
||||
|
||||
import appeng.api.config.Setting;
|
||||
import appeng.api.config.YesNo;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.extendedae_plus.ae.api.crafting;
|
||||
package com.extendedae_plus.api.crafting;
|
||||
|
||||
import appeng.api.crafting.IPatternDetails;
|
||||
import appeng.api.stacks.AEItemKey;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.extendedae_plus.ae.api.crafting;
|
||||
package com.extendedae_plus.api.crafting;
|
||||
|
||||
import appeng.api.crafting.IPatternDetails;
|
||||
import appeng.api.stacks.AEKey;
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package com.extendedae_plus.ae.api.storage;
|
||||
package com.extendedae_plus.api.storage;
|
||||
|
||||
import appeng.api.storage.cells.ICellHandler;
|
||||
import appeng.api.storage.cells.ISaveProvider;
|
||||
import com.extendedae_plus.ae.items.InfinityBigIntegerCellItem;
|
||||
import com.extendedae_plus.items.InfinityBigIntegerCellItem;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
public class InfinityBigIntegerCellHandler implements ICellHandler {
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.extendedae_plus.ae.api.storage;
|
||||
package com.extendedae_plus.api.storage;
|
||||
|
||||
import appeng.api.config.Actionable;
|
||||
import appeng.api.networking.security.IActionSource;
|
||||
|
|
@ -10,7 +10,7 @@ import appeng.api.storage.cells.ISaveProvider;
|
|||
import appeng.api.storage.cells.StorageCell;
|
||||
import appeng.core.AELog;
|
||||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
import com.extendedae_plus.ae.items.InfinityBigIntegerCellItem;
|
||||
import com.extendedae_plus.items.InfinityBigIntegerCellItem;
|
||||
import com.extendedae_plus.util.storage.InfinityConstants;
|
||||
import com.extendedae_plus.util.storage.InfinityDataStorage;
|
||||
import com.extendedae_plus.util.storage.InfinityStorageManager;
|
||||
|
|
@ -42,10 +42,13 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
// 存储的物品种类数量
|
||||
private int totalAEKeyType;
|
||||
// 存储的物品总数
|
||||
private BigInteger totalAEKey2Amounts = BigInteger.ZERO;
|
||||
private BigInteger totalAEKey2Amounts = BI_ZERO;
|
||||
// 标记是否已持久化到 SavedData
|
||||
private boolean isPersisted = true;
|
||||
|
||||
private static final BigInteger BI_ZERO = BigInteger.ZERO;
|
||||
private static final BigInteger BI_LONG_MAX = BigInteger.valueOf(Long.MAX_VALUE);
|
||||
|
||||
|
||||
public InfinityBigIntegerCellInventory(InfinityBigIntegerCellItem cell, ItemStack stack, ISaveProvider saveProvider) {
|
||||
// 保存存储单元类型(InfinityBigIntegerCellItem 实例),用于访问磁盘属性
|
||||
|
|
@ -93,15 +96,16 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
private void initData() {
|
||||
// 如果磁盘有 UUID,加载存储的物品数据
|
||||
if (hasUUID()) {
|
||||
this.totalAEKeyType = getCellStorage().amounts.size();
|
||||
this.totalAEKey2Amounts = getCellStorage().itemCount.equals(BigInteger.ZERO) ?
|
||||
BigInteger.ZERO :
|
||||
getCellStorage().itemCount;
|
||||
InfinityDataStorage storage = getCellStorage();
|
||||
this.totalAEKeyType = storage.amounts.size();
|
||||
this.totalAEKey2Amounts = storage.itemCount.equals(BI_ZERO) ?
|
||||
BI_ZERO :
|
||||
storage.itemCount;
|
||||
|
||||
} else {
|
||||
// 否则初始化为空
|
||||
this.totalAEKeyType = 0;
|
||||
this.totalAEKey2Amounts = BigInteger.ZERO;
|
||||
this.totalAEKey2Amounts = BI_ZERO;
|
||||
// 加载物品数据
|
||||
getCellStoredMap();
|
||||
}
|
||||
|
|
@ -111,7 +115,7 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
@Override
|
||||
public CellState getStatus() {
|
||||
// 如果没有存储任何物品,返回空状态
|
||||
if (this.getTotalAEKey2Amounts().equals(BigInteger.ZERO)) {
|
||||
if (this.getTotalAEKey2Amounts().equals(BI_ZERO)) {
|
||||
return CellState.EMPTY;
|
||||
}
|
||||
// 否则返回满状态
|
||||
|
|
@ -130,7 +134,7 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
if (this.isPersisted)
|
||||
return;
|
||||
|
||||
if (totalAEKey2Amounts.equals(BigInteger.ZERO)) {
|
||||
if (totalAEKey2Amounts.equals(BI_ZERO)) {
|
||||
if (hasUUID()) {
|
||||
getStorageManagerInstance().removeCell(getUUID());
|
||||
if (self.hasTag()) {
|
||||
|
|
@ -152,12 +156,12 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
// 创建物品数量列表
|
||||
ListTag amounts = new ListTag();
|
||||
// 初始化物品总数
|
||||
BigInteger itemCount = BigInteger.ZERO;
|
||||
BigInteger itemCount = BI_ZERO;
|
||||
|
||||
for (var entry : this.AEKey2AmountsMap.object2ObjectEntrySet()) {
|
||||
BigInteger amount = entry.getValue();
|
||||
// 如果数量大于 0,添加到键和数量列表
|
||||
if (amount.compareTo(BigInteger.ZERO) > 0) {
|
||||
if (amount.compareTo(BI_ZERO) > 0) {
|
||||
keys.add(entry.getKey().toTagGeneric());
|
||||
CompoundTag amountTag = new CompoundTag();
|
||||
amountTag.putByteArray("value", amount.toByteArray());
|
||||
|
|
@ -233,7 +237,7 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
// 获取或初始化存储映射
|
||||
private Object2ObjectMap<AEKey, BigInteger> getCellStoredMap() {
|
||||
if (AEKey2AmountsMap == null) {
|
||||
AEKey2AmountsMap = new Object2ObjectOpenHashMap<>();
|
||||
AEKey2AmountsMap = new Object2ObjectOpenHashMap<>(512, 0.6f);
|
||||
this.loadCellStoredMap();
|
||||
}
|
||||
return AEKey2AmountsMap;
|
||||
|
|
@ -242,30 +246,39 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
// 获取所有可用的物品堆栈及其数量
|
||||
@Override
|
||||
public void getAvailableStacks(KeyCounter out) {
|
||||
BigInteger maxLong = BigInteger.valueOf(Long.MAX_VALUE);
|
||||
if(this.getCellStoredMap() == null) return;
|
||||
for (var entry : this.getCellStoredMap().object2ObjectEntrySet()) {
|
||||
AEKey key = entry.getKey();
|
||||
BigInteger value = entry.getValue();
|
||||
var map = getCellStoredMap();
|
||||
if (map == null || map.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取 KeyCounter 中已有的值
|
||||
for (var entry : map.object2ObjectEntrySet()) {
|
||||
AEKey key = entry.getKey();
|
||||
BigInteger amount = entry.getValue();
|
||||
|
||||
// 如果当前要添加的数量本身就超过 Long.MAX_VALUE,直接设为 MAX
|
||||
if (amount.compareTo(BI_LONG_MAX) > 0) {
|
||||
out.set(key, Long.MAX_VALUE);
|
||||
continue;
|
||||
}
|
||||
|
||||
long addAmount = amount.longValue();
|
||||
long existing = out.get(key);
|
||||
|
||||
// 计算总和并限制到 Long.MAX_VALUE
|
||||
BigInteger sum = BigInteger.valueOf(existing).add(value);
|
||||
long toSet = sum.compareTo(maxLong) > 0 ? Long.MAX_VALUE : sum.longValue();
|
||||
// 更新 KeyCounter
|
||||
// 如果已有值已是 MAX,直接跳过
|
||||
if (existing == Long.MAX_VALUE) {
|
||||
continue;
|
||||
}
|
||||
long delta = toSet - existing;
|
||||
if (delta != 0) {
|
||||
out.add(key, delta);
|
||||
|
||||
// 计算总和,防止溢出
|
||||
long sum = existing + addAmount;
|
||||
if (sum < 0 || sum < existing) { // 溢出检测
|
||||
out.set(key, Long.MAX_VALUE);
|
||||
} else {
|
||||
out.add(key, addAmount); // 安全添加
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 从存储中加载物品映射
|
||||
private void loadCellStoredMap() {
|
||||
boolean dataCorruption = false;
|
||||
|
|
@ -282,7 +295,7 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
AEKey key = AEKey.fromTagGeneric(keys.getCompound(i));
|
||||
BigInteger amount = new BigInteger(amounts.getCompound(i).getByteArray("value"));
|
||||
// 检查数据是否损坏
|
||||
if (amount.compareTo(BigInteger.ZERO) <= 0 || key == null) {
|
||||
if (amount.compareTo(BI_ZERO) <= 0 || key == null) {
|
||||
dataCorruption = true;
|
||||
} else {
|
||||
AEKey2AmountsMap.put(key, amount);
|
||||
|
|
@ -303,7 +316,7 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
// 更新存储的物品种类数量
|
||||
this.totalAEKeyType = this.AEKey2AmountsMap.size();
|
||||
// 重置物品总数
|
||||
this.totalAEKey2Amounts = BigInteger.ZERO;
|
||||
this.totalAEKey2Amounts = BI_ZERO;
|
||||
// 计算物品总数
|
||||
for (BigInteger AEKey2Amounts : this.AEKey2AmountsMap.values()) {
|
||||
this.totalAEKey2Amounts = this.totalAEKey2Amounts.add(AEKey2Amounts);
|
||||
|
|
@ -341,7 +354,7 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
loadCellStoredMap();
|
||||
}
|
||||
// 获取当前物品数量
|
||||
BigInteger currentAmount = this.getCellStoredMap().getOrDefault(what, BigInteger.ZERO);
|
||||
BigInteger currentAmount = this.getCellStoredMap().getOrDefault(what, BI_ZERO);
|
||||
|
||||
if (mode == Actionable.MODULATE) {
|
||||
// 实际插入,更新数量并保存
|
||||
|
|
@ -355,9 +368,9 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
// 从存储单元提取物品
|
||||
@Override
|
||||
public long extract(AEKey what, long amount, Actionable mode, IActionSource source) {
|
||||
BigInteger currentAmount = this.getCellStoredMap().getOrDefault(what, BigInteger.ZERO);
|
||||
BigInteger currentAmount = this.getCellStoredMap().getOrDefault(what, BI_ZERO);
|
||||
// 如果有物品可提取
|
||||
if (currentAmount.compareTo(BigInteger.ZERO) > 0) {
|
||||
if (currentAmount.compareTo(BI_ZERO) > 0) {
|
||||
|
||||
BigInteger requested = BigInteger.valueOf(amount);
|
||||
|
||||
|
|
@ -367,7 +380,7 @@ public class InfinityBigIntegerCellInventory implements StorageCell {
|
|||
getCellStoredMap().remove(what);
|
||||
this.saveChanges();
|
||||
}
|
||||
return currentAmount.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0 ? Long.MAX_VALUE : currentAmount.longValue();
|
||||
return currentAmount.compareTo(BI_LONG_MAX) > 0 ? Long.MAX_VALUE : currentAmount.longValue();
|
||||
} else {
|
||||
// 提取部分数量
|
||||
if (mode == Actionable.MODULATE) {
|
||||
|
|
@ -3,7 +3,6 @@ package com.extendedae_plus.client;
|
|||
import appeng.client.render.crafting.CraftingCubeModel;
|
||||
import appeng.init.client.InitScreens;
|
||||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
import com.extendedae_plus.ae.definitions.upgrades.EntitySpeedCardItem;
|
||||
import com.extendedae_plus.ae.menu.EntitySpeedTickerMenu;
|
||||
import com.extendedae_plus.ae.screen.EntitySpeedTickerScreen;
|
||||
import com.extendedae_plus.client.render.crafting.EPlusCraftingCubeModelProvider;
|
||||
|
|
@ -12,6 +11,7 @@ import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
|
|||
import com.extendedae_plus.hooks.BuiltInModelHooks;
|
||||
import com.extendedae_plus.init.ModItems;
|
||||
import com.extendedae_plus.init.ModMenuTypes;
|
||||
import com.extendedae_plus.items.materials.EntitySpeedCardItem;
|
||||
import net.minecraft.client.gui.screens.MenuScreens;
|
||||
import net.minecraft.client.renderer.item.ItemProperties;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
package com.extendedae_plus.content.crafting;
|
||||
|
||||
import appeng.block.crafting.ICraftingUnitType;
|
||||
import net.minecraft.world.item.Item;
|
||||
|
||||
import com.extendedae_plus.init.ModItems;
|
||||
import net.minecraft.world.item.Item;
|
||||
|
||||
public enum EPlusCraftingUnitType implements ICraftingUnitType {
|
||||
ACCELERATOR_4x(0, 4),
|
||||
|
|
@ -34,11 +33,11 @@ public enum EPlusCraftingUnitType implements ICraftingUnitType {
|
|||
@Override
|
||||
public Item getItemFromType() {
|
||||
return switch (this) {
|
||||
case ACCELERATOR_4x -> ModItems.ACCELERATOR_4x.get();
|
||||
case ACCELERATOR_16x -> ModItems.ACCELERATOR_16x.get();
|
||||
case ACCELERATOR_64x -> ModItems.ACCELERATOR_64x.get();
|
||||
case ACCELERATOR_256x -> ModItems.ACCELERATOR_256x.get();
|
||||
case ACCELERATOR_1024x -> ModItems.ACCELERATOR_1024x.get();
|
||||
case ACCELERATOR_4x -> ModItems.CRAFTING_ACCELERATOR_4x.get();
|
||||
case ACCELERATOR_16x -> ModItems.CRAFTING_ACCELERATOR_16x.get();
|
||||
case ACCELERATOR_64x -> ModItems.CRAFTING_ACCELERATOR_64x.get();
|
||||
case ACCELERATOR_256x -> ModItems.CRAFTING_ACCELERATOR_256x.get();
|
||||
case ACCELERATOR_1024x -> ModItems.CRAFTING_ACCELERATOR_1024x.get();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
package com.extendedae_plus.content.wireless;
|
||||
|
||||
import com.extendedae_plus.ae.items.ChannelCardItem;
|
||||
import com.extendedae_plus.init.ModBlockEntities;
|
||||
import com.extendedae_plus.init.ModItems;
|
||||
import com.extendedae_plus.items.materials.ChannelCardItem;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
|
|
@ -11,6 +11,7 @@ import net.minecraft.world.entity.LivingEntity;
|
|||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.EntityBlock;
|
||||
|
|
@ -154,6 +155,21 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
|||
super.onRemove(state, level, pos, newState, isMoving);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getDestroyProgress(BlockState state, Player player, BlockGetter level, BlockPos pos) {
|
||||
// 基础挖掘进度
|
||||
float baseProgress = super.getDestroyProgress(state, player, level, pos);
|
||||
|
||||
// 获取方块实体并检查锁定状态
|
||||
if (level.getBlockEntity(pos) instanceof WirelessTransceiverBlockEntity te) {
|
||||
if (te.isLocked()) {
|
||||
// 如果被锁定,大幅降低挖掘速度
|
||||
return baseProgress * 0.1f; // 只有10%的挖掘速度
|
||||
}
|
||||
}
|
||||
return baseProgress; // 正常挖掘速度
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState state, BlockEntityType<T> type) {
|
||||
if (level.isClientSide) return null;
|
||||
|
|
|
|||
527
src/main/java/com/extendedae_plus/datagen/CraftingRecipes.java
Normal file
527
src/main/java/com/extendedae_plus/datagen/CraftingRecipes.java
Normal file
|
|
@ -0,0 +1,527 @@
|
|||
package com.extendedae_plus.datagen;
|
||||
|
||||
import appeng.core.definitions.AEBlocks;
|
||||
import appeng.core.definitions.AEItems;
|
||||
import appeng.datagen.providers.tags.ConventionTags;
|
||||
import appeng.recipes.transform.TransformCircumstance;
|
||||
import appeng.recipes.transform.TransformRecipeBuilder;
|
||||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
import com.extendedae_plus.init.ModItems;
|
||||
import com.extendedae_plus.items.BasicCoreItem;
|
||||
import com.extendedae_plus.items.materials.EntitySpeedCardItem;
|
||||
import com.extendedae_plus.util.ModCheckUtils;
|
||||
import com.glodblock.github.appflux.common.AFItemAndBlock;
|
||||
import com.glodblock.github.appflux.util.AFTags;
|
||||
import com.glodblock.github.extendedae.common.EPPItemAndBlock;
|
||||
import gripe._90.megacells.definition.MEGAItems;
|
||||
import net.minecraft.data.PackOutput;
|
||||
import net.minecraft.data.recipes.*;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.pedroksl.advanced_ae.common.definitions.AAEBlocks;
|
||||
import net.pedroksl.advanced_ae.common.definitions.AAEFluids;
|
||||
import net.pedroksl.advanced_ae.common.definitions.AAEItems;
|
||||
import net.pedroksl.advanced_ae.recipes.ReactionChamberRecipeBuilder;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class CraftingRecipes extends RecipeProvider {
|
||||
public CraftingRecipes(PackOutput output) {
|
||||
super(output);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void buildRecipes(@NotNull Consumer<FinishedRecipe> consumer) {
|
||||
addCraftingAccelerators(consumer);
|
||||
addCardRecipes(consumer);
|
||||
addCoreRecipes(consumer);
|
||||
addTransformRecipes(consumer);
|
||||
addReactionChamberRecipes(consumer);
|
||||
|
||||
// 吞噬盘
|
||||
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.INFINITY_BIGINTEGER_CELL.get())
|
||||
.pattern("GOG")
|
||||
.pattern("NIN")
|
||||
.pattern("BBB")
|
||||
.define('G', AEBlocks.QUARTZ_VIBRANT_GLASS)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('N', Items.NETHER_STAR)
|
||||
.define('I', ModItems.INFINITY_CORE.get())
|
||||
.define('B', Items.NETHERITE_BLOCK)
|
||||
.unlockedBy("has_oblivion_singularity", has(ModItems.OBLIVION_SINGULARITY.get()))
|
||||
.save(consumer);
|
||||
|
||||
// 状态控制器
|
||||
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.NETWORK_PATTERN_CONTROLLER.get())
|
||||
.requires(ConventionTags.ILLUMINATED_PANEL)
|
||||
.requires(ConventionTags.PATTERN_PROVIDER)
|
||||
.requires(AEItems.NETWORK_TOOL)
|
||||
.unlockedBy("has_network_tool", has(AEItems.NETWORK_TOOL))
|
||||
.unlockedBy("has_pattern_provider", has(ConventionTags.PATTERN_PROVIDER))
|
||||
.save(consumer);
|
||||
|
||||
// 无线收发器
|
||||
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.WIRELESS_TRANSCEIVER.get())
|
||||
.pattern("RRR")
|
||||
.pattern("RLR")
|
||||
.pattern("RRR")
|
||||
.define('R', AEBlocks.QUANTUM_RING)
|
||||
.define('L', AEBlocks.QUANTUM_LINK)
|
||||
.unlockedBy("has_quantum_ring", has(AEBlocks.QUANTUM_RING))
|
||||
.save(consumer);
|
||||
|
||||
// 实体加速器
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.ENTITY_TICKER_PART_ITEM.get())
|
||||
.pattern("SZS")
|
||||
.pattern("QXQ")
|
||||
.pattern("SIS")
|
||||
.defineNbt('S', EntitySpeedCardItem.withMultiplier(2))
|
||||
.define('Z', AEBlocks.DENSE_ENERGY_CELL)
|
||||
.define('Q', AEItems.SINGULARITY)
|
||||
.define('X', Items.NETHER_STAR)
|
||||
.define('I', EPPItemAndBlock.EX_IO_PORT)
|
||||
.unlockedBy("has_entity_speed_card_x2", has(EntitySpeedCardItem.withMultiplier(2).getItem()))
|
||||
.unlockedBy("has_singularity", has(AEItems.SINGULARITY))
|
||||
.save(consumer);
|
||||
|
||||
// 上传核心
|
||||
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.ASSEMBLER_MATRIX_UPLOAD_CORE.get())
|
||||
.requires(EPPItemAndBlock.ASSEMBLER_MATRIX_WALL)
|
||||
.requires(Items.LEVER)
|
||||
.unlockedBy("has_assembler_matrix_wall", has(EPPItemAndBlock.ASSEMBLER_MATRIX_WALL))
|
||||
.save(consumer);
|
||||
|
||||
}
|
||||
|
||||
private void addCraftingAccelerators(Consumer<FinishedRecipe> consumer) {
|
||||
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.CRAFTING_ACCELERATOR_4x.get())
|
||||
.requires(AEBlocks.CRAFTING_ACCELERATOR)
|
||||
.requires(AEItems.CELL_COMPONENT_4K)
|
||||
.unlockedBy("has_accelerator", has(AEBlocks.CRAFTING_ACCELERATOR))
|
||||
.save(consumer, ExtendedAEPlus.id("network/crafting/" + ModItems.CRAFTING_ACCELERATOR_4x.get().toString().toLowerCase()));
|
||||
|
||||
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.CRAFTING_ACCELERATOR_16x.get())
|
||||
.requires(AEBlocks.CRAFTING_ACCELERATOR)
|
||||
.requires(AEItems.CELL_COMPONENT_16K)
|
||||
.unlockedBy("has_accelerator", has(AEBlocks.CRAFTING_ACCELERATOR))
|
||||
.save(consumer, ExtendedAEPlus.id("network/crafting/" + ModItems.CRAFTING_ACCELERATOR_16x.get().toString().toLowerCase()));
|
||||
|
||||
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.CRAFTING_ACCELERATOR_64x.get())
|
||||
.requires(AEBlocks.CRAFTING_ACCELERATOR)
|
||||
.requires(AEItems.CELL_COMPONENT_64K)
|
||||
.unlockedBy("has_accelerator", has(AEBlocks.CRAFTING_ACCELERATOR))
|
||||
.save(consumer, ExtendedAEPlus.id("network/crafting/" + ModItems.CRAFTING_ACCELERATOR_64x.get().toString().toLowerCase()));
|
||||
|
||||
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.CRAFTING_ACCELERATOR_256x.get())
|
||||
.requires(AEBlocks.CRAFTING_ACCELERATOR)
|
||||
.requires(AEItems.CELL_COMPONENT_256K)
|
||||
.unlockedBy("has_accelerator", has(AEBlocks.CRAFTING_ACCELERATOR))
|
||||
.save(consumer, ExtendedAEPlus.id("network/crafting/" + ModItems.CRAFTING_ACCELERATOR_256x.get().toString().toLowerCase()));
|
||||
|
||||
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.CRAFTING_ACCELERATOR_1024x.get())
|
||||
.pattern(" ")
|
||||
.pattern("ACA")
|
||||
.pattern(" ")
|
||||
.define('A', AEItems.CELL_COMPONENT_256K)
|
||||
.define('C', ModItems.CRAFTING_ACCELERATOR_256x.get())
|
||||
.unlockedBy("has_256x", has(ModItems.CRAFTING_ACCELERATOR_256x.get()))
|
||||
.save(consumer, ExtendedAEPlus.id("network/crafting/" + ModItems.CRAFTING_ACCELERATOR_1024x.get().toString().toLowerCase()));
|
||||
}
|
||||
|
||||
private void addCardRecipes(Consumer<FinishedRecipe> consumer) {
|
||||
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.CHANNEL_CARD.get())
|
||||
.requires(AEItems.ADVANCED_CARD)
|
||||
.requires(ModItems.WIRELESS_TRANSCEIVER.get())
|
||||
.unlockedBy("has_advanced_card", has(AEItems.ADVANCED_CARD))
|
||||
.save(consumer);
|
||||
|
||||
// 2x Entity Speed Card
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, EntitySpeedCardItem.withMultiplier(2))
|
||||
.pattern("SBS")
|
||||
.pattern("QXQ")
|
||||
.pattern("SBS")
|
||||
.define('S', AEItems.SPEED_CARD)
|
||||
.define('B', ModItems.CRAFTING_ACCELERATOR_64x.get())
|
||||
.define('Q', AEItems.SPATIAL_2_CELL_COMPONENT)
|
||||
.define('X', AEItems.CELL_COMPONENT_256K)
|
||||
.unlockedBy("has_speed_card", has(AEItems.SPEED_CARD))
|
||||
.unlockedBy("has_64x_accelerator", has(ModItems.CRAFTING_ACCELERATOR_64x.get()))
|
||||
.save(consumer, ExtendedAEPlus.id("entity_speed_card_2x"));
|
||||
|
||||
// 4x Entity Speed Card
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, EntitySpeedCardItem.withMultiplier(4))
|
||||
.pattern("SBS")
|
||||
.pattern("QXQ")
|
||||
.pattern("SBS")
|
||||
.defineNbt('S', EntitySpeedCardItem.withMultiplier(2))
|
||||
.define('B', ModItems.CRAFTING_ACCELERATOR_256x.get())
|
||||
.define('Q', AEItems.SPATIAL_16_CELL_COMPONENT)
|
||||
.define('X', AEBlocks.DENSE_ENERGY_CELL)
|
||||
.unlockedBy("has_entity_speed_card_2x", has(EntitySpeedCardItem.withMultiplier(2).getItem()))
|
||||
.save(consumer, ExtendedAEPlus.id("entity_speed_card_4x"));
|
||||
|
||||
// 8x Entity Speed Card
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, EntitySpeedCardItem.withMultiplier(8))
|
||||
.pattern("SBS")
|
||||
.pattern("QXQ")
|
||||
.pattern("SBS")
|
||||
.defineNbt('S', EntitySpeedCardItem.withMultiplier(4))
|
||||
.define('B', ModItems.CRAFTING_ACCELERATOR_1024x.get())
|
||||
.define('Q', AEItems.SPATIAL_128_CELL_COMPONENT)
|
||||
.define('X', Items.NETHER_STAR)
|
||||
.unlockedBy("has_entity_speed_card_4x", has(EntitySpeedCardItem.withMultiplier(4).getItem()))
|
||||
.save(consumer, ExtendedAEPlus.id("entity_speed_card_8x"));
|
||||
|
||||
// 16x Entity Speed Card
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC,
|
||||
EntitySpeedCardItem.withMultiplier(16))
|
||||
.pattern("SAS")
|
||||
.pattern("QXQ")
|
||||
.pattern("SBS")
|
||||
.defineNbt('S', EntitySpeedCardItem.withMultiplier(8))
|
||||
.define('A', Items.NETHER_STAR)
|
||||
.define('Q', AEItems.SPATIAL_128_CELL_COMPONENT)
|
||||
.define('X', Items.DRAGON_EGG)
|
||||
.define('B', Blocks.BEACON)
|
||||
.unlockedBy("has_entity_speed_card_8x", has(EntitySpeedCardItem.withMultiplier(8).getItem()))
|
||||
.save(consumer, ExtendedAEPlus.id("entity_speed_card_16x"));
|
||||
}
|
||||
|
||||
private void addCoreRecipes(Consumer<FinishedRecipe> consumer) {
|
||||
// 基础核心配方
|
||||
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.BASIC_CORE.get())
|
||||
.pattern("ABA")
|
||||
.pattern("CDE")
|
||||
.pattern("AFA")
|
||||
.define('A', Items.NETHERITE_BLOCK)
|
||||
.define('B', Items.NETHER_STAR)
|
||||
.define('C', AEItems.LOGIC_PROCESSOR)
|
||||
.define('D', AEItems.FLUIX_PEARL)
|
||||
.define('E', AEItems.ENGINEERING_PROCESSOR)
|
||||
.define('F', AEItems.CALCULATION_PROCESSOR)
|
||||
.unlockedBy("has_nether_star", has(Items.NETHER_STAR))
|
||||
.save(consumer, ExtendedAEPlus.id("core/basic_core"));
|
||||
|
||||
ItemStack base = BasicCoreItem.of(null, 0); // 未定型核心
|
||||
// ====================== STORAGE LINE ======================
|
||||
// storage_1
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.storageStage(1))
|
||||
.pattern("MCM")
|
||||
.pattern("LBP")
|
||||
.pattern("MEM")
|
||||
.define('M', ConventionTags.CERTUS_QUARTZ_DUST)
|
||||
.define('C', AEItems.CELL_COMPONENT_16K)
|
||||
.define('L', AEItems.LOGIC_PROCESSOR)
|
||||
.defineNbt('B', base)
|
||||
.define('P', AEItems.CALCULATION_PROCESSOR)
|
||||
.define('E', AEItems.ENGINEERING_PROCESSOR)
|
||||
.unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get()))
|
||||
.save(consumer, ExtendedAEPlus.id("core/storage_core_1"));
|
||||
|
||||
// storage_2
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.storageStage(2))
|
||||
.pattern("MOM")
|
||||
.pattern("CBC")
|
||||
.pattern("MOM")
|
||||
.define('M', ConventionTags.ALL_CERTUS_QUARTZ)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('C', AEItems.CELL_COMPONENT_64K)
|
||||
.defineNbt('B', BasicCoreItem.storageStage(1))
|
||||
.unlockedBy("has_storage_stage_1", has(BasicCoreItem.storageStage(1).getItem()))
|
||||
.save(consumer, ExtendedAEPlus.id("core/storage_core_2"));
|
||||
|
||||
// storage_3
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.storageStage(3))
|
||||
.pattern("MOM")
|
||||
.pattern("CBC")
|
||||
.pattern("MCM")
|
||||
.define('M', AEBlocks.QUARTZ_BLOCK)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('C', AEItems.CELL_COMPONENT_256K)
|
||||
.defineNbt('B', BasicCoreItem.storageStage(2))
|
||||
.unlockedBy("has_storage_stage_2", has(BasicCoreItem.storageStage(2).getItem()))
|
||||
.save(consumer, ExtendedAEPlus.id("core/storage_core_3"));
|
||||
|
||||
// ====================== SPATIAL LINE ======================
|
||||
// spatial_1
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.spatialStage(1))
|
||||
.pattern("MCM")
|
||||
.pattern("LBP")
|
||||
.pattern("MEM")
|
||||
.define('M', ConventionTags.FLUIX_DUST)
|
||||
.define('C', AEItems.SPATIAL_2_CELL_COMPONENT)
|
||||
.define('L', AEItems.LOGIC_PROCESSOR)
|
||||
.defineNbt('B', base)
|
||||
.define('P', AEItems.CALCULATION_PROCESSOR)
|
||||
.define('E', AEItems.ENGINEERING_PROCESSOR)
|
||||
.unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get()))
|
||||
.save(consumer, ExtendedAEPlus.id("core/spatial_core_1"));
|
||||
|
||||
// spatial_2
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.spatialStage(2))
|
||||
.pattern("MOM")
|
||||
.pattern("CBC")
|
||||
.pattern("MOM")
|
||||
.define('M', ConventionTags.FLUIX_CRYSTAL)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('C', AEItems.SPATIAL_16_CELL_COMPONENT)
|
||||
.defineNbt('B', BasicCoreItem.spatialStage(1))
|
||||
.unlockedBy("has_spatial_stage_1", has(BasicCoreItem.spatialStage(1).getItem()))
|
||||
.save(consumer, ExtendedAEPlus.id("core/spatial_core_2"));
|
||||
|
||||
// spatial_3
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.spatialStage(3))
|
||||
.pattern("MOM")
|
||||
.pattern("CBC")
|
||||
.pattern("MCM")
|
||||
.define('M', AEBlocks.FLUIX_BLOCK)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('C', AEItems.SPATIAL_128_CELL_COMPONENT)
|
||||
.defineNbt('B', BasicCoreItem.spatialStage(2))
|
||||
.unlockedBy("has_spatial_stage_2", has(BasicCoreItem.spatialStage(2).getItem()))
|
||||
.save(consumer, ExtendedAEPlus.id("core/spatial_core_3"));
|
||||
|
||||
// ====================== ENERGY LINE (依赖 AppFlux) ======================
|
||||
// energy_storage_1
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.energyStage(1))
|
||||
.pattern("MCM")
|
||||
.pattern("EBE")
|
||||
.pattern("MEM")
|
||||
.define('M', AFTags.REDSTONE_GEM)
|
||||
.define('C', AFItemAndBlock.CORE_16k)
|
||||
.define('E', AFItemAndBlock.ENERGY_PROCESSOR)
|
||||
.defineNbt('B', base)
|
||||
.unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get()))
|
||||
.requiresMod(ModCheckUtils.MODID_APPFLUX)
|
||||
.save(consumer, ExtendedAEPlus.id("core/energy_storage_core_1"));
|
||||
|
||||
// energy_storage_2
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.energyStage(2))
|
||||
.pattern("MOM")
|
||||
.pattern("CBC")
|
||||
.pattern("MOM")
|
||||
.define('M', AFItemAndBlock.CHARGED_REDSTONE)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('C', AFItemAndBlock.CORE_64k)
|
||||
.defineNbt('B', BasicCoreItem.energyStage(1))
|
||||
.unlockedBy("has_energy_stage_1", has(BasicCoreItem.energyStage(1).getItem()))
|
||||
.requiresMod(ModCheckUtils.MODID_APPFLUX)
|
||||
.save(consumer, ExtendedAEPlus.id("core/energy_storage_core_2"));
|
||||
|
||||
// energy_storage_3
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.energyStage(3))
|
||||
.pattern("MOM")
|
||||
.pattern("CBC")
|
||||
.pattern("MCM")
|
||||
.define('M', AFTags.SKY_RESIN_INGOT)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('C', AFItemAndBlock.CORE_256k)
|
||||
.defineNbt('B', BasicCoreItem.energyStage(2))
|
||||
.unlockedBy("has_energy_stage_2", has(BasicCoreItem.energyStage(2).getItem()))
|
||||
.requiresMod(ModCheckUtils.MODID_APPFLUX)
|
||||
.save(consumer, ExtendedAEPlus.id("core/energy_storage_core_3"));
|
||||
|
||||
// ====================== QUANTUM LINE (依赖 Advanced AE) ======================
|
||||
// quantum_storage_1
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.quantumStage(1))
|
||||
.pattern("MCM")
|
||||
.pattern("EBE")
|
||||
.pattern("MEM")
|
||||
.define('M', AAEItems.QUANTUM_ALLOY)
|
||||
.define('C', AAEItems.QUANTUM_STORAGE_COMPONENT)
|
||||
.define('E', AAEItems.QUANTUM_PROCESSOR)
|
||||
.defineNbt('B', base)
|
||||
.unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get()))
|
||||
.requiresMod(ModCheckUtils.MODID_AAE)
|
||||
.save(consumer, ExtendedAEPlus.id("core/quantum_storage_core_1"));
|
||||
|
||||
// quantum_storage_2
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.quantumStage(2))
|
||||
.pattern("MOM")
|
||||
.pattern("CBC")
|
||||
.pattern("MOM")
|
||||
.define('M', AAEBlocks.QUANTUM_ALLOY_BLOCK)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('C', AAEItems.QUANTUM_STORAGE_COMPONENT)
|
||||
.defineNbt('B', BasicCoreItem.quantumStage(1))
|
||||
.unlockedBy("has_quantum_stage_1", has(BasicCoreItem.quantumStage(1).getItem()))
|
||||
.requiresMod(ModCheckUtils.MODID_AAE)
|
||||
.save(consumer, ExtendedAEPlus.id("core/quantum_storage_core_2"));
|
||||
|
||||
// quantum_storage_3
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.quantumStage(3))
|
||||
.pattern("MOM")
|
||||
.pattern("CBC")
|
||||
.pattern("MCM")
|
||||
.define('M', AAEItems.QUANTUM_ALLOY_PLATE)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('C', AAEBlocks.QUANTUM_STORAGE_128M)
|
||||
.defineNbt('B', BasicCoreItem.quantumStage(2))
|
||||
.unlockedBy("has_quantum_stage_2", has(BasicCoreItem.quantumStage(2).getItem()))
|
||||
.requiresMod(ModCheckUtils.MODID_AAE)
|
||||
.save(consumer, ExtendedAEPlus.id("core/quantum_storage_core_3"));
|
||||
|
||||
// storage_core
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.STORAGE_CORE.get())
|
||||
.pattern("MOM")
|
||||
.pattern("NBN")
|
||||
.pattern("MCM")
|
||||
.define('M', Items.NETHERITE_BLOCK)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('N', Items.NETHER_STAR)
|
||||
.define('C', AEItems.CELL_COMPONENT_256K)
|
||||
.defineNbt('B', BasicCoreItem.storageStage(3))
|
||||
.unlockedBy("has_storage_stage_3", has(BasicCoreItem.storageStage(3).getItem()))
|
||||
.notRequiresMod(ModCheckUtils.MODID_MEGA)
|
||||
.save(consumer, ExtendedAEPlus.id("core/" + ModItems.STORAGE_CORE.get().toString().toLowerCase()));
|
||||
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.STORAGE_CORE.get())
|
||||
.pattern("MOM")
|
||||
.pattern("NBN")
|
||||
.pattern("MCM")
|
||||
.define('M', Items.NETHERITE_BLOCK)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('N', Items.NETHER_STAR)
|
||||
.define('C', MEGAItems.CELL_COMPONENT_256M)
|
||||
.defineNbt('B', BasicCoreItem.storageStage(3))
|
||||
.unlockedBy("has_storage_stage_3", has(BasicCoreItem.storageStage(3).getItem()))
|
||||
.requiresMod(ModCheckUtils.MODID_MEGA)
|
||||
.save(consumer, ExtendedAEPlus.id("core/compat/" + ModItems.STORAGE_CORE.get().toString().toLowerCase()));
|
||||
|
||||
// spatial_core
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.SPATIAL_CORE.get())
|
||||
.pattern("MOM")
|
||||
.pattern("NBN")
|
||||
.pattern("MCM")
|
||||
.define('M', Items.NETHERITE_BLOCK)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('N', Items.NETHER_STAR)
|
||||
.define('C', AEItems.SPATIAL_128_CELL_COMPONENT)
|
||||
.defineNbt('B', BasicCoreItem.spatialStage(3))
|
||||
.unlockedBy("has_spatial_stage_3", has(BasicCoreItem.spatialStage(3).getItem()))
|
||||
.save(consumer, ExtendedAEPlus.id("core/" + ModItems.SPATIAL_CORE.get().toString().toLowerCase()));
|
||||
|
||||
// energy_storage_core
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.ENERGY_STORAGE_CORE.get())
|
||||
.pattern("MOM")
|
||||
.pattern("NBN")
|
||||
.pattern("MCM")
|
||||
.define('M', Items.NETHERITE_BLOCK)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('N', Items.NETHER_STAR)
|
||||
.define('C', AFItemAndBlock.CORE_256k)
|
||||
.defineNbt('B', BasicCoreItem.energyStage(3))
|
||||
.unlockedBy("has_energy_stage_3", has(BasicCoreItem.energyStage(3).getItem()))
|
||||
.requiresMod(ModCheckUtils.MODID_APPFLUX)
|
||||
.notRequiresMod(ModCheckUtils.MODID_MEGA)
|
||||
.save(consumer, ExtendedAEPlus.id("core/" + ModItems.ENERGY_STORAGE_CORE.get().toString().toLowerCase()));
|
||||
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.ENERGY_STORAGE_CORE.get())
|
||||
.pattern("MOM")
|
||||
.pattern("NBN")
|
||||
.pattern("MCM")
|
||||
.define('M', Items.NETHERITE_BLOCK)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('N', Items.NETHER_STAR)
|
||||
.define('C', AFItemAndBlock.CORE_256M)
|
||||
.defineNbt('B', BasicCoreItem.energyStage(3))
|
||||
.unlockedBy("has_energy_stage_3", has(BasicCoreItem.energyStage(3).getItem()))
|
||||
.requiresMod(ModCheckUtils.MODID_APPFLUX)
|
||||
.requiresMod(ModCheckUtils.MODID_MEGA)
|
||||
.save(consumer, ExtendedAEPlus.id("core/compat/" + ModItems.ENERGY_STORAGE_CORE.get().toString().toLowerCase()));
|
||||
|
||||
// quantum_storage_core
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.QUANTUM_STORAGE_CORE.get())
|
||||
.pattern("MOM")
|
||||
.pattern("NBN")
|
||||
.pattern("MCM")
|
||||
.define('M', Items.NETHERITE_BLOCK)
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('N', Items.NETHER_STAR)
|
||||
.define('C', AAEBlocks.QUANTUM_STORAGE_256M)
|
||||
.defineNbt('B', BasicCoreItem.quantumStage(3))
|
||||
.unlockedBy("has_quantum_stage_3", has(BasicCoreItem.quantumStage(3).getItem()))
|
||||
.requiresMod(ModCheckUtils.MODID_AAE)
|
||||
.save(consumer, ExtendedAEPlus.id("core/" + ModItems.QUANTUM_STORAGE_CORE.get().toString().toLowerCase()));
|
||||
|
||||
// infinity_core
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.INFINITY_CORE.get())
|
||||
.pattern("MNM")
|
||||
.pattern("SOS")
|
||||
.pattern("MCM")
|
||||
.define('M', Items.NETHERITE_BLOCK)
|
||||
.define('N', Items.NETHER_STAR)
|
||||
.define('S', ModItems.STORAGE_CORE.get())
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('C', ModItems.SPATIAL_CORE.get())
|
||||
.unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get()))
|
||||
.notRequiresMod(ModCheckUtils.MODID_APPFLUX)
|
||||
.notRequiresMod(ModCheckUtils.MODID_AAE)
|
||||
.save(consumer, ExtendedAEPlus.id("core/" + ModItems.INFINITY_CORE.get().toString().toLowerCase()));
|
||||
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.INFINITY_CORE.get())
|
||||
.pattern("MNM")
|
||||
.pattern("SOE")
|
||||
.pattern("MCM")
|
||||
.define('M', Items.NETHERITE_BLOCK)
|
||||
.define('N', Items.NETHER_STAR)
|
||||
.define('S', ModItems.STORAGE_CORE.get())
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('E', ModItems.ENERGY_STORAGE_CORE.get())
|
||||
.define('C', ModItems.SPATIAL_CORE.get())
|
||||
.unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get()))
|
||||
.requiresMod(ModCheckUtils.MODID_APPFLUX)
|
||||
.notRequiresMod(ModCheckUtils.MODID_AAE)
|
||||
.save(consumer, ExtendedAEPlus.id("core/compat/" + ModItems.INFINITY_CORE.get().toString().toLowerCase() + "_1"));
|
||||
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.INFINITY_CORE.get())
|
||||
.pattern("MNM")
|
||||
.pattern("SOQ")
|
||||
.pattern("MCM")
|
||||
.define('M', Items.NETHERITE_BLOCK)
|
||||
.define('N', Items.NETHER_STAR)
|
||||
.define('S', ModItems.STORAGE_CORE.get())
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('Q', ModItems.QUANTUM_STORAGE_CORE.get())
|
||||
.define('C', ModItems.SPATIAL_CORE.get())
|
||||
.unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get()))
|
||||
.requiresMod(ModCheckUtils.MODID_AAE)
|
||||
.notRequiresMod(ModCheckUtils.MODID_APPFLUX)
|
||||
.save(consumer, ExtendedAEPlus.id("core/compat/" + ModItems.INFINITY_CORE.get().toString().toLowerCase() + "_2"));
|
||||
|
||||
NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.INFINITY_CORE.get())
|
||||
.pattern("MQM")
|
||||
.pattern("SOE")
|
||||
.pattern("MCM")
|
||||
.define('M', Items.NETHERITE_BLOCK)
|
||||
.define('Q', ModItems.QUANTUM_STORAGE_CORE.get())
|
||||
.define('S', ModItems.STORAGE_CORE.get())
|
||||
.define('O', ModItems.OBLIVION_SINGULARITY.get())
|
||||
.define('E', ModItems.ENERGY_STORAGE_CORE.get())
|
||||
.define('C', ModItems.SPATIAL_CORE.get())
|
||||
.unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get()))
|
||||
.requiresMod(ModCheckUtils.MODID_AAE)
|
||||
.requiresMod(ModCheckUtils.MODID_APPFLUX)
|
||||
.save(consumer, ExtendedAEPlus.id("core/compat/" + ModItems.INFINITY_CORE.get().toString().toLowerCase() + "_3"));
|
||||
}
|
||||
|
||||
private void addTransformRecipes(Consumer<FinishedRecipe> consumer) {
|
||||
TransformRecipeBuilder.transform(consumer,
|
||||
ExtendedAEPlus.id("transform/" + ModItems.OBLIVION_SINGULARITY.get().toString().toLowerCase()),
|
||||
ModItems.OBLIVION_SINGULARITY.get(), 1,
|
||||
TransformCircumstance.EXPLOSION,
|
||||
AEItems.SINGULARITY, Items.NETHER_STAR, Items.NETHERITE_BLOCK
|
||||
);
|
||||
}
|
||||
|
||||
private void addReactionChamberRecipes(Consumer<FinishedRecipe> consumer) {
|
||||
ReactionChamberRecipeBuilder.react(ModItems.OBLIVION_SINGULARITY.get(), 1, 100000)
|
||||
.input(AEItems.SINGULARITY, 2)
|
||||
.input(Items.NETHER_STAR, 1)
|
||||
.input(AAEItems.QUANTUM_ALLOY_PLATE, 4)
|
||||
.fluid(AAEFluids.QUANTUM_INFUSION.source(), 2000)
|
||||
.save(consumer, ModItems.OBLIVION_SINGULARITY.get().toString().toLowerCase());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package com.extendedae_plus.datagen;
|
||||
|
||||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
import net.minecraft.data.DataGenerator;
|
||||
import net.minecraftforge.common.data.ExistingFileHelper;
|
||||
import net.minecraftforge.data.event.GatherDataEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
|
||||
@Mod.EventBusSubscriber(modid = ExtendedAEPlus.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||
public class DataGenerators {
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onGatherData(GatherDataEvent event) {
|
||||
DataGenerator generator = event.getGenerator();
|
||||
ExistingFileHelper helper = event.getExistingFileHelper();
|
||||
|
||||
// 仅添加配方生成器
|
||||
generator.addProvider(true, new CraftingRecipes(generator.getPackOutput()));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,295 @@
|
|||
package com.extendedae_plus.datagen;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import net.minecraft.advancements.Advancement;
|
||||
import net.minecraft.advancements.AdvancementRewards;
|
||||
import net.minecraft.advancements.CriterionTriggerInstance;
|
||||
import net.minecraft.advancements.RequirementsStrategy;
|
||||
import net.minecraft.advancements.critereon.RecipeUnlockedTrigger;
|
||||
import net.minecraft.data.recipes.CraftingRecipeBuilder;
|
||||
import net.minecraft.data.recipes.FinishedRecipe;
|
||||
import net.minecraft.data.recipes.RecipeBuilder;
|
||||
import net.minecraft.data.recipes.RecipeCategory;
|
||||
import net.minecraft.nbt.*;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.crafting.CraftingBookCategory;
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
import net.minecraft.world.level.ItemLike;
|
||||
import net.minecraftforge.common.crafting.ConditionalRecipe;
|
||||
import net.minecraftforge.common.crafting.conditions.ICondition;
|
||||
import net.minecraftforge.common.crafting.conditions.ModLoadedCondition;
|
||||
import net.minecraftforge.common.crafting.conditions.NotCondition;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class NBTShapedRecipeBuilder extends CraftingRecipeBuilder implements RecipeBuilder {
|
||||
|
||||
private final RecipeCategory category;
|
||||
private final ItemStack result;
|
||||
private final List<String> rows = Lists.newArrayList();
|
||||
private final Map<Character, JsonObject> key = Maps.newLinkedHashMap();
|
||||
private final Advancement.Builder advancement = Advancement.Builder.recipeAdvancement();
|
||||
private final List<ICondition> conditions = new ArrayList<>();
|
||||
|
||||
@Nullable private String group;
|
||||
private boolean showNotification = true;
|
||||
|
||||
private NBTShapedRecipeBuilder(RecipeCategory category, ItemStack result) {
|
||||
this.category = category;
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public static NBTShapedRecipeBuilder shaped(RecipeCategory category, ItemStack result) {
|
||||
return new NBTShapedRecipeBuilder(category, result);
|
||||
}
|
||||
|
||||
public static NBTShapedRecipeBuilder shaped(RecipeCategory category, ItemLike result) {
|
||||
return shaped(category, new ItemStack(result));
|
||||
}
|
||||
|
||||
public static NBTShapedRecipeBuilder shaped(RecipeCategory category, ItemLike result, int count) {
|
||||
return shaped(category, new ItemStack(result, count));
|
||||
}
|
||||
|
||||
/** 普通物品 */
|
||||
public NBTShapedRecipeBuilder define(Character symbol, ItemLike item) {
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("item", Objects.requireNonNull(ForgeRegistries.ITEMS.getKey(item.asItem())).toString());
|
||||
this.key.put(symbol, json);
|
||||
return this;
|
||||
}
|
||||
|
||||
public NBTShapedRecipeBuilder define(Character symbol, TagKey<Item> tag) {
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("tag", tag.location().toString());
|
||||
this.key.put(symbol, json);
|
||||
return this;
|
||||
}
|
||||
|
||||
/** forge:nbt 输入(无 count,结构化 NBT) */
|
||||
public NBTShapedRecipeBuilder defineNbt(Character symbol, ItemStack stackWithNbt) {
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("type", "forge:nbt");
|
||||
json.addProperty("item", Objects.requireNonNull(ForgeRegistries.ITEMS.getKey(stackWithNbt.getItem())).toString());
|
||||
if (stackWithNbt.hasTag() && stackWithNbt.getTag() != null) {
|
||||
json.add("nbt", nbtToJson(stackWithNbt.getTag()));
|
||||
}
|
||||
this.key.put(symbol, json);
|
||||
return this;
|
||||
}
|
||||
|
||||
public NBTShapedRecipeBuilder pattern(String pattern) {
|
||||
if (!this.rows.isEmpty() && pattern.length() != this.rows.get(0).length()) {
|
||||
throw new IllegalArgumentException("Pattern must be the same width");
|
||||
}
|
||||
this.rows.add(pattern);
|
||||
return this;
|
||||
}
|
||||
|
||||
public @NotNull NBTShapedRecipeBuilder unlockedBy(@NotNull String name, @NotNull CriterionTriggerInstance criterion) {
|
||||
this.advancement.addCriterion(name, criterion);
|
||||
return this;
|
||||
}
|
||||
|
||||
public @NotNull NBTShapedRecipeBuilder group(@Nullable String group) {
|
||||
this.group = group;
|
||||
return this;
|
||||
}
|
||||
|
||||
public NBTShapedRecipeBuilder showNotification(boolean show) {
|
||||
this.showNotification = show;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** 添加 Forge 条件 */
|
||||
public NBTShapedRecipeBuilder condition(ICondition condition) {
|
||||
this.conditions.add(Objects.requireNonNull(condition));
|
||||
return this;
|
||||
}
|
||||
|
||||
/** 便捷:mod loaded 条件 */
|
||||
public NBTShapedRecipeBuilder requiresMod(String modid) {
|
||||
return condition(new ModLoadedCondition(modid));
|
||||
}
|
||||
|
||||
/** NOT 条件:mod 未加载时生效 */
|
||||
public NBTShapedRecipeBuilder notRequiresMod(String modid) {
|
||||
return condition(new NotCondition(new ModLoadedCondition(modid)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Item getResult() {
|
||||
return this.result.getItem();
|
||||
}
|
||||
|
||||
// === save 方法重载 ===
|
||||
|
||||
@Override
|
||||
public void save(@NotNull Consumer<FinishedRecipe> consumer, @NotNull String id) {
|
||||
this.save(consumer, new ResourceLocation(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(@NotNull Consumer<FinishedRecipe> consumer, @NotNull ResourceLocation id) {
|
||||
this.ensureValid(id);
|
||||
|
||||
// 构建 advancement
|
||||
Advancement.Builder advancementBuilder = this.advancement
|
||||
.parent(ROOT_RECIPE_ADVANCEMENT)
|
||||
.addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(id))
|
||||
.rewards(AdvancementRewards.Builder.recipe(id))
|
||||
.requirements(RequirementsStrategy.OR);
|
||||
|
||||
// 构建普通配方结果
|
||||
FinishedRecipe plainRecipe = new NBTResult(
|
||||
id, this.result, this.group == null ? "" : this.group,
|
||||
determineBookCategory(this.category), this.rows, this.key,
|
||||
advancementBuilder, id.withPrefix("recipes/" + this.category.getFolderName() + "/"),
|
||||
this.showNotification
|
||||
);
|
||||
|
||||
if (this.conditions.isEmpty()) {
|
||||
// 无条件 → 直接保存
|
||||
consumer.accept(plainRecipe);
|
||||
} else {
|
||||
// 有条件 → 使用 ConditionalRecipe 包装
|
||||
ConditionalRecipe.Builder builder = ConditionalRecipe.builder();
|
||||
for (ICondition cond : this.conditions) {
|
||||
builder.addCondition(cond);
|
||||
}
|
||||
builder.addRecipe(c -> c.accept(plainRecipe));
|
||||
builder.generateAdvancement();
|
||||
builder.build(consumer, id);
|
||||
}
|
||||
}
|
||||
|
||||
private void ensureValid(ResourceLocation id) {
|
||||
if (this.rows.isEmpty()) throw new IllegalStateException("No pattern for " + id);
|
||||
Set<Character> defined = Sets.newHashSet(this.key.keySet());
|
||||
defined.remove(' ');
|
||||
for (String row : this.rows) {
|
||||
for (int i = 0; i < row.length(); i++) {
|
||||
char c = row.charAt(i);
|
||||
if (!this.key.containsKey(c) && c != ' ') throw new IllegalStateException("Undefined symbol '" + c + "'");
|
||||
defined.remove(c);
|
||||
}
|
||||
}
|
||||
if (!defined.isEmpty()) throw new IllegalStateException("Unused ingredients: " + defined);
|
||||
if (this.rows.size() == 1 && this.rows.get(0).length() == 1) throw new IllegalStateException("Use shapeless for 1x1");
|
||||
if (this.advancement.getCriteria().isEmpty()) throw new IllegalStateException("No unlock criterion for " + id);
|
||||
}
|
||||
|
||||
/** NBT → JsonElement(结构化) */
|
||||
private static JsonElement nbtToJson(CompoundTag tag) {
|
||||
JsonObject obj = new JsonObject();
|
||||
tag.getAllKeys().forEach(key -> {
|
||||
Tag value = tag.get(key);
|
||||
if (value instanceof CompoundTag c) {
|
||||
obj.add(key, nbtToJson(c));
|
||||
} else if (value instanceof ListTag list) {
|
||||
JsonArray arr = new JsonArray();
|
||||
for (Tag item : list) {
|
||||
arr.add(nbtToJson(item));
|
||||
}
|
||||
obj.add(key, arr);
|
||||
} else if (value instanceof StringTag s) {
|
||||
obj.addProperty(key, s.getAsString());
|
||||
} else if (value instanceof NumericTag n) {
|
||||
if (value instanceof ByteTag) obj.addProperty(key, n.getAsByte());
|
||||
else if (value instanceof ShortTag) obj.addProperty(key, n.getAsShort());
|
||||
else if (value instanceof IntTag) obj.addProperty(key, n.getAsInt());
|
||||
else if (value instanceof LongTag) obj.addProperty(key, n.getAsLong());
|
||||
else if (value instanceof FloatTag) obj.addProperty(key, n.getAsFloat());
|
||||
else if (value instanceof DoubleTag) obj.addProperty(key, n.getAsDouble());
|
||||
} else {
|
||||
if (value != null) {
|
||||
obj.addProperty(key, value.getAsString());
|
||||
}
|
||||
}
|
||||
});
|
||||
return obj;
|
||||
}
|
||||
|
||||
private static JsonElement nbtToJson(Tag tag) {
|
||||
if (tag instanceof CompoundTag c) return nbtToJson(c);
|
||||
if (tag instanceof StringTag s) return new JsonPrimitive(s.getAsString());
|
||||
if (tag instanceof NumericTag n) {
|
||||
if (tag instanceof ByteTag) return new JsonPrimitive(n.getAsByte());
|
||||
if (tag instanceof ShortTag) return new JsonPrimitive(n.getAsShort());
|
||||
if (tag instanceof IntTag) return new JsonPrimitive(n.getAsInt());
|
||||
if (tag instanceof LongTag) return new JsonPrimitive(n.getAsLong());
|
||||
if (tag instanceof FloatTag) return new JsonPrimitive(n.getAsFloat());
|
||||
if (tag instanceof DoubleTag) return new JsonPrimitive(n.getAsDouble());
|
||||
}
|
||||
return new JsonPrimitive(tag.getAsString());
|
||||
}
|
||||
|
||||
/** 完美 Result */
|
||||
public static class NBTResult extends CraftingRecipeBuilder.CraftingResult {
|
||||
private final ResourceLocation id;
|
||||
private final ItemStack result;
|
||||
private final String group;
|
||||
private final List<String> pattern;
|
||||
private final Map<Character, JsonObject> key;
|
||||
private final Advancement.Builder advancement;
|
||||
private final ResourceLocation advancementId;
|
||||
private final boolean showNotification;
|
||||
|
||||
public NBTResult(ResourceLocation id, ItemStack result, String group,
|
||||
CraftingBookCategory category, List<String> pattern,
|
||||
Map<Character, JsonObject> key, Advancement.Builder advancement,
|
||||
ResourceLocation advancementId, boolean showNotification) {
|
||||
super(category);
|
||||
this.id = id;
|
||||
this.result = result;
|
||||
this.group = group;
|
||||
this.pattern = pattern;
|
||||
this.key = key;
|
||||
this.advancement = advancement;
|
||||
this.advancementId = advancementId;
|
||||
this.showNotification = showNotification;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serializeRecipeData(@NotNull JsonObject json) {
|
||||
if (!this.group.isEmpty()) json.addProperty("group", this.group);
|
||||
|
||||
JsonArray patternArray = new JsonArray();
|
||||
this.pattern.forEach(patternArray::add);
|
||||
json.add("pattern", patternArray);
|
||||
|
||||
JsonObject keyObj = new JsonObject();
|
||||
this.key.forEach((c, jsonObj) -> keyObj.add(String.valueOf(c), jsonObj));
|
||||
json.add("key", keyObj);
|
||||
|
||||
JsonObject resultObj = new JsonObject();
|
||||
resultObj.addProperty("type", "forge:partial_nbt");
|
||||
resultObj.addProperty("item", Objects.requireNonNull(ForgeRegistries.ITEMS.getKey(this.result.getItem())).toString());
|
||||
if (this.result.getCount() > 1) resultObj.addProperty("count", this.result.getCount());
|
||||
if (this.result.hasTag() && this.result.getTag() != null) {
|
||||
resultObj.add("nbt", nbtToJson(this.result.getTag()));
|
||||
}
|
||||
json.add("result", resultObj);
|
||||
|
||||
json.addProperty("show_notification", this.showNotification);
|
||||
}
|
||||
|
||||
@Override public @NotNull RecipeSerializer<?> getType() { return RecipeSerializer.SHAPED_RECIPE; }
|
||||
@Override public @NotNull ResourceLocation getId() { return this.id; }
|
||||
@Nullable @Override public JsonObject serializeAdvancement() { return this.advancement.serializeToJson(); }
|
||||
@Nullable @Override public ResourceLocation getAdvancementId() { return this.advancementId; }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.extendedae_plus.ae.client.gui;
|
||||
package com.extendedae_plus.gui;
|
||||
|
||||
import appeng.client.gui.style.Blitter;
|
||||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
package com.extendedae_plus.init;
|
||||
|
||||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
import com.extendedae_plus.content.wireless.WirelessTransceiverBlock;
|
||||
import com.extendedae_plus.content.matrix.UploadCoreBlock;
|
||||
import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
|
||||
import appeng.block.crafting.CraftingUnitBlock;
|
||||
import appeng.blockentity.crafting.CraftingBlockEntity;
|
||||
import appeng.core.definitions.AEBlockEntities;
|
||||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
|
||||
import com.extendedae_plus.content.matrix.UploadCoreBlock;
|
||||
import com.extendedae_plus.content.wireless.WirelessTransceiverBlock;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||
import net.minecraft.world.level.material.MapColor;
|
||||
|
|
@ -24,7 +24,7 @@ public final class ModBlocks {
|
|||
() -> new WirelessTransceiverBlock(
|
||||
BlockBehaviour.Properties.of()
|
||||
.mapColor(MapColor.METAL)
|
||||
.strength(1.5F, 6.0F)
|
||||
.strength(2F, 6.0F)
|
||||
.requiresCorrectToolForDrops()
|
||||
)
|
||||
);
|
||||
|
|
@ -51,7 +51,7 @@ public final class ModBlocks {
|
|||
);
|
||||
|
||||
// Crafting Accelerators (reuse MAE2 textures/models)
|
||||
public static final RegistryObject<CraftingUnitBlock> ACCELERATOR_4x = BLOCKS.register(
|
||||
public static final RegistryObject<CraftingUnitBlock> CRAFTING_ACCELERATOR_4x = BLOCKS.register(
|
||||
"4x_crafting_accelerator",
|
||||
() -> {
|
||||
var b = new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_4x);
|
||||
|
|
@ -60,7 +60,7 @@ public final class ModBlocks {
|
|||
}
|
||||
);
|
||||
|
||||
public static final RegistryObject<CraftingUnitBlock> ACCELERATOR_16x = BLOCKS.register(
|
||||
public static final RegistryObject<CraftingUnitBlock> CRAFTING_ACCELERATOR_16x = BLOCKS.register(
|
||||
"16x_crafting_accelerator",
|
||||
() -> {
|
||||
var b = new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_16x);
|
||||
|
|
@ -69,7 +69,7 @@ public final class ModBlocks {
|
|||
}
|
||||
);
|
||||
|
||||
public static final RegistryObject<CraftingUnitBlock> ACCELERATOR_64x = BLOCKS.register(
|
||||
public static final RegistryObject<CraftingUnitBlock> CRAFTING_ACCELERATOR_64x = BLOCKS.register(
|
||||
"64x_crafting_accelerator",
|
||||
() -> {
|
||||
var b = new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_64x);
|
||||
|
|
@ -78,7 +78,7 @@ public final class ModBlocks {
|
|||
}
|
||||
);
|
||||
|
||||
public static final RegistryObject<CraftingUnitBlock> ACCELERATOR_256x = BLOCKS.register(
|
||||
public static final RegistryObject<CraftingUnitBlock> CRAFTING_ACCELERATOR_256x = BLOCKS.register(
|
||||
"256x_crafting_accelerator",
|
||||
() -> {
|
||||
var b = new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_256x);
|
||||
|
|
@ -87,7 +87,7 @@ public final class ModBlocks {
|
|||
}
|
||||
);
|
||||
|
||||
public static final RegistryObject<CraftingUnitBlock> ACCELERATOR_1024x = BLOCKS.register(
|
||||
public static final RegistryObject<CraftingUnitBlock> CRAFTING_ACCELERATOR_1024x = BLOCKS.register(
|
||||
"1024x_crafting_accelerator",
|
||||
() -> {
|
||||
var b = new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_1024x);
|
||||
|
|
|
|||
|
|
@ -8,11 +8,8 @@ import net.minecraftforge.registries.DeferredRegister;
|
|||
import net.minecraftforge.registries.RegistryObject;
|
||||
|
||||
public final class ModCreativeTabs {
|
||||
private ModCreativeTabs() {}
|
||||
|
||||
public static final DeferredRegister<CreativeModeTab> TABS =
|
||||
DeferredRegister.create(Registries.CREATIVE_MODE_TAB, ExtendedAEPlus.MODID);
|
||||
|
||||
public static final RegistryObject<CreativeModeTab> MAIN = TABS.register("main",
|
||||
() -> CreativeModeTab.builder()
|
||||
.title(Component.translatable("itemGroup." + ExtendedAEPlus.MODID + ".main"))
|
||||
|
|
@ -23,11 +20,11 @@ public final class ModCreativeTabs {
|
|||
output.accept(ModItems.NETWORK_PATTERN_CONTROLLER.get());
|
||||
// 装配矩阵上传核心
|
||||
output.accept(ModItems.ASSEMBLER_MATRIX_UPLOAD_CORE.get());
|
||||
output.accept(ModItems.ACCELERATOR_4x.get());
|
||||
output.accept(ModItems.ACCELERATOR_16x.get());
|
||||
output.accept(ModItems.ACCELERATOR_64x.get());
|
||||
output.accept(ModItems.ACCELERATOR_256x.get());
|
||||
output.accept(ModItems.ACCELERATOR_1024x.get());
|
||||
output.accept(ModItems.CRAFTING_ACCELERATOR_4x.get());
|
||||
output.accept(ModItems.CRAFTING_ACCELERATOR_16x.get());
|
||||
output.accept(ModItems.CRAFTING_ACCELERATOR_64x.get());
|
||||
output.accept(ModItems.CRAFTING_ACCELERATOR_256x.get());
|
||||
output.accept(ModItems.CRAFTING_ACCELERATOR_1024x.get());
|
||||
output.accept(ModItems.ENTITY_TICKER_PART_ITEM.get());
|
||||
|
||||
// 放入四个预设的 stacks(x2,x4,x8,x16),使用 ModItems 工厂创建
|
||||
|
|
@ -35,11 +32,22 @@ public final class ModCreativeTabs {
|
|||
output.accept(ModItems.createEntitySpeedCardStack(4));
|
||||
output.accept(ModItems.createEntitySpeedCardStack(8));
|
||||
output.accept(ModItems.createEntitySpeedCardStack(16));
|
||||
|
||||
output.accept(ModItems.INFINITY_BIGINTEGER_CELL_ITEM.get());
|
||||
|
||||
// 频道卡
|
||||
output.accept(ModItems.CHANNEL_CARD.get());
|
||||
|
||||
output.accept(ModItems.OBLIVION_SINGULARITY.get());
|
||||
output.accept(ModItems.BASIC_CORE.get());
|
||||
output.accept(ModItems.STORAGE_CORE.get());
|
||||
if (ModItems.ENERGY_STORAGE_CORE != null) {
|
||||
output.accept(ModItems.ENERGY_STORAGE_CORE.get());
|
||||
}
|
||||
if (ModItems.QUANTUM_STORAGE_CORE != null) {
|
||||
output.accept(ModItems.QUANTUM_STORAGE_CORE.get());
|
||||
}
|
||||
output.accept(ModItems.SPATIAL_CORE.get());
|
||||
output.accept(ModItems.INFINITY_CORE.get());
|
||||
|
||||
output.accept(ModItems.INFINITY_BIGINTEGER_CELL.get());
|
||||
})
|
||||
.build());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,19 +4,20 @@ import appeng.api.parts.IPart;
|
|||
import appeng.api.parts.PartModels;
|
||||
import appeng.items.parts.PartModelsHelper;
|
||||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
import com.extendedae_plus.ae.definitions.upgrades.EntitySpeedCardItem;
|
||||
import com.extendedae_plus.ae.items.ChannelCardItem;
|
||||
import com.extendedae_plus.ae.items.EntitySpeedTickerPartItem;
|
||||
import com.extendedae_plus.ae.items.InfinityBigIntegerCellItem;
|
||||
import com.extendedae_plus.items.BasicCoreItem;
|
||||
import com.extendedae_plus.items.EntitySpeedTickerPartItem;
|
||||
import com.extendedae_plus.items.InfinityBigIntegerCellItem;
|
||||
import com.extendedae_plus.items.materials.ChannelCardItem;
|
||||
import com.extendedae_plus.items.materials.EntitySpeedCardItem;
|
||||
import com.extendedae_plus.util.ModCheckUtils;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.RegistryObject;
|
||||
|
||||
public final class ModItems {
|
||||
private ModItems() {}
|
||||
|
||||
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ExtendedAEPlus.MODID);
|
||||
|
||||
public static final RegistryObject<Item> WIRELESS_TRANSCEIVER = ITEMS.register(
|
||||
|
|
@ -36,34 +37,34 @@ public final class ModItems {
|
|||
);
|
||||
|
||||
// Crafting Accelerators
|
||||
public static final RegistryObject<Item> ACCELERATOR_4x = ITEMS.register(
|
||||
public static final RegistryObject<Item> CRAFTING_ACCELERATOR_4x = ITEMS.register(
|
||||
"4x_crafting_accelerator",
|
||||
() -> new BlockItem(ModBlocks.ACCELERATOR_4x.get(), new Item.Properties())
|
||||
() -> new BlockItem(ModBlocks.CRAFTING_ACCELERATOR_4x.get(), new Item.Properties())
|
||||
);
|
||||
|
||||
public static final RegistryObject<Item> ACCELERATOR_16x = ITEMS.register(
|
||||
public static final RegistryObject<Item> CRAFTING_ACCELERATOR_16x = ITEMS.register(
|
||||
"16x_crafting_accelerator",
|
||||
() -> new BlockItem(ModBlocks.ACCELERATOR_16x.get(), new Item.Properties())
|
||||
() -> new BlockItem(ModBlocks.CRAFTING_ACCELERATOR_16x.get(), new Item.Properties())
|
||||
);
|
||||
|
||||
public static final RegistryObject<Item> ACCELERATOR_64x = ITEMS.register(
|
||||
public static final RegistryObject<Item> CRAFTING_ACCELERATOR_64x = ITEMS.register(
|
||||
"64x_crafting_accelerator",
|
||||
() -> new BlockItem(ModBlocks.ACCELERATOR_64x.get(), new Item.Properties())
|
||||
() -> new BlockItem(ModBlocks.CRAFTING_ACCELERATOR_64x.get(), new Item.Properties())
|
||||
);
|
||||
|
||||
public static final RegistryObject<Item> ACCELERATOR_256x = ITEMS.register(
|
||||
public static final RegistryObject<Item> CRAFTING_ACCELERATOR_256x = ITEMS.register(
|
||||
"256x_crafting_accelerator",
|
||||
() -> new BlockItem(ModBlocks.ACCELERATOR_256x.get(), new Item.Properties())
|
||||
() -> new BlockItem(ModBlocks.CRAFTING_ACCELERATOR_256x.get(), new Item.Properties())
|
||||
);
|
||||
|
||||
public static final RegistryObject<Item> ACCELERATOR_1024x = ITEMS.register(
|
||||
public static final RegistryObject<Item> CRAFTING_ACCELERATOR_1024x = ITEMS.register(
|
||||
"1024x_crafting_accelerator",
|
||||
() -> new BlockItem(ModBlocks.ACCELERATOR_1024x.get(), new Item.Properties())
|
||||
() -> new BlockItem(ModBlocks.CRAFTING_ACCELERATOR_1024x.get(), new Item.Properties())
|
||||
);
|
||||
|
||||
public static final RegistryObject<EntitySpeedTickerPartItem> ENTITY_TICKER_PART_ITEM = ITEMS.register(
|
||||
"entity_speed_ticker",
|
||||
() -> new EntitySpeedTickerPartItem(new Item.Properties())
|
||||
() -> new EntitySpeedTickerPartItem(new Item.Properties())
|
||||
);
|
||||
|
||||
// AE Upgrade Cards: 实体加速卡(四个等级:x2,x4,x8,x16)
|
||||
|
|
@ -73,8 +74,8 @@ public final class ModItems {
|
|||
() -> new EntitySpeedCardItem(new Item.Properties())
|
||||
);
|
||||
|
||||
public static final RegistryObject<Item> INFINITY_BIGINTEGER_CELL_ITEM = ITEMS.register(
|
||||
"infinity_biginteger_cell", InfinityBigIntegerCellItem::new
|
||||
public static final RegistryObject<InfinityBigIntegerCellItem> INFINITY_BIGINTEGER_CELL = ITEMS.register(
|
||||
"infinity_biginteger_cell", () -> new InfinityBigIntegerCellItem(new Item.Properties())
|
||||
);
|
||||
|
||||
// 频道卡(作为 AE 升级卡使用)
|
||||
|
|
@ -83,6 +84,50 @@ public final class ModItems {
|
|||
() -> new ChannelCardItem(new Item.Properties())
|
||||
);
|
||||
|
||||
public static final RegistryObject<BasicCoreItem> BASIC_CORE = ITEMS.register(
|
||||
"basic_core",
|
||||
() -> new BasicCoreItem(new Item.Properties())
|
||||
);
|
||||
public static final RegistryObject<Item> STORAGE_CORE = ITEMS.register(
|
||||
"storage_core",
|
||||
() -> new Item(new Item.Properties())
|
||||
);
|
||||
public static final RegistryObject<Item> SPATIAL_CORE = ITEMS.register(
|
||||
"spatial_core",
|
||||
() -> new Item(new Item.Properties())
|
||||
);
|
||||
public static final RegistryObject<Item> INFINITY_CORE = ITEMS.register(
|
||||
"infinity_core",
|
||||
() -> new Item(new Item.Properties())
|
||||
);
|
||||
public static final RegistryObject<Item> OBLIVION_SINGULARITY = ITEMS.register(
|
||||
"oblivion_singularity",
|
||||
() -> new Item(new Item.Properties())
|
||||
);
|
||||
public static final RegistryObject<Item> ENERGY_STORAGE_CORE;
|
||||
public static final RegistryObject<Item> QUANTUM_STORAGE_CORE;
|
||||
|
||||
static {
|
||||
if (ModCheckUtils.isAppfluxLoading()) {
|
||||
ENERGY_STORAGE_CORE = ITEMS.register(
|
||||
"energy_storage_core",
|
||||
() -> new Item(new Item.Properties())
|
||||
);
|
||||
} else {
|
||||
ENERGY_STORAGE_CORE = null;
|
||||
}
|
||||
|
||||
if (ModCheckUtils.isAAELoading()) {
|
||||
QUANTUM_STORAGE_CORE = ITEMS.register(
|
||||
"quantum_storage_core",
|
||||
() -> new Item(new Item.Properties())
|
||||
);
|
||||
} else {
|
||||
QUANTUM_STORAGE_CORE = null;
|
||||
}
|
||||
}
|
||||
|
||||
private ModItems() {}
|
||||
|
||||
/**
|
||||
* 为 PartItem 注册 AE2 部件模型。
|
||||
|
|
@ -99,7 +144,7 @@ public final class ModItems {
|
|||
/**
|
||||
* 工厂:创建带 multiplier 的实体加速卡 ItemStack(2/4/8/16)
|
||||
*/
|
||||
public static net.minecraft.world.item.ItemStack createEntitySpeedCardStack(int multiplier) {
|
||||
public static ItemStack createEntitySpeedCardStack(int multiplier) {
|
||||
return EntitySpeedCardItem.withMultiplier(multiplier);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
package com.extendedae_plus.integration.jei;
|
||||
|
||||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
import com.extendedae_plus.ae.definitions.upgrades.EntitySpeedCardItem;
|
||||
import com.extendedae_plus.init.ModItems;
|
||||
import com.extendedae_plus.items.BasicCoreItem;
|
||||
import com.extendedae_plus.items.materials.EntitySpeedCardItem;
|
||||
import com.extendedae_plus.util.ModCheckUtils;
|
||||
import mezz.jei.api.IModPlugin;
|
||||
import mezz.jei.api.JeiPlugin;
|
||||
import mezz.jei.api.registration.ISubtypeRegistration;
|
||||
|
|
@ -24,10 +27,43 @@ public class ExtendedAEJeiPlugin implements IModPlugin {
|
|||
|
||||
@Override
|
||||
public void registerItemSubtypes(ISubtypeRegistration registration) {
|
||||
// Register NBT-based subtype interpreter so JEI treats different multipliers as distinct items
|
||||
// Entity Speed Card
|
||||
registration.registerSubtypeInterpreter(
|
||||
com.extendedae_plus.init.ModItems.ENTITY_SPEED_CARD.get(),
|
||||
(stack, context) -> String.valueOf(EntitySpeedCardItem.readMultiplier(stack))
|
||||
ModItems.ENTITY_SPEED_CARD.get(),
|
||||
(stack, ctx) -> String.valueOf(EntitySpeedCardItem.readMultiplier(stack))
|
||||
);
|
||||
|
||||
// Basic Core – 使用 CustomModelData + core_stage
|
||||
registration.registerSubtypeInterpreter(
|
||||
ModItems.BASIC_CORE.get(),
|
||||
(stack, ctx) -> {
|
||||
if (!BasicCoreItem.isTyped(stack)) {
|
||||
return "untyped";
|
||||
}
|
||||
|
||||
BasicCoreItem.CoreType type = BasicCoreItem.getType(stack).orElse(null);
|
||||
if (type == null) {
|
||||
return "untyped";
|
||||
}
|
||||
|
||||
int stage = BasicCoreItem.getStage(stack);
|
||||
|
||||
// 依赖检查
|
||||
if (!isCoreTypeAvailable(type.id)) {
|
||||
return "hidden"; // JEI 隐藏
|
||||
}
|
||||
|
||||
return type.id + "_" + stage; // 如 "0_1", "1_4"
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isCoreTypeAvailable(int typeId) {
|
||||
return switch (typeId) {
|
||||
case 1, 2 -> true; // storage, spatial
|
||||
case 3 -> ModCheckUtils.isAppfluxLoading();
|
||||
case 4 -> ModCheckUtils.isAAELoading();
|
||||
default -> false;
|
||||
};
|
||||
}
|
||||
}
|
||||
176
src/main/java/com/extendedae_plus/items/BasicCoreItem.java
Normal file
176
src/main/java/com/extendedae_plus/items/BasicCoreItem.java
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
package com.extendedae_plus.items;
|
||||
|
||||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
import com.extendedae_plus.init.ModItems;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Rarity;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public class BasicCoreItem extends Item {
|
||||
private static final String NBT_MODEL = "CustomModelData"; // 1~4 = 类型, 无或0 = 未定型
|
||||
private static final String NBT_STAGE = "core_stage"; // 0~3 = 阶段
|
||||
private static final int MAX_STAGE = 3;
|
||||
|
||||
public BasicCoreItem(Properties props) {
|
||||
super(props.stacksTo(1).setNoRepair());
|
||||
}
|
||||
|
||||
// ==================== 工厂方法 ====================
|
||||
public static ItemStack of(CoreType type, int stage) {
|
||||
ItemStack stack = new ItemStack(ModItems.BASIC_CORE.get());
|
||||
if (type != null && stage >= 0 && stage <= MAX_STAGE) {
|
||||
CompoundTag tag = stack.getOrCreateTag();
|
||||
tag.putInt(NBT_MODEL, type.id);
|
||||
tag.putInt(NBT_STAGE, stage);
|
||||
}
|
||||
// 无 NBT → 默认模型
|
||||
return stack;
|
||||
}
|
||||
|
||||
public static ItemStack storageStage(int stage) { return of(CoreType.STORAGE, stage); }
|
||||
public static ItemStack spatialStage(int stage) { return of(CoreType.SPATIAL, stage); }
|
||||
public static ItemStack energyStage(int stage) { return of(CoreType.ENERGY, stage); }
|
||||
public static ItemStack quantumStage(int stage) { return of(CoreType.QUANTUM, stage); }
|
||||
|
||||
// ==================== NBT 查询 ====================
|
||||
public static Optional<CoreType> getType(ItemStack stack) {
|
||||
if (!stack.hasTag() || !stack.getTag().contains(NBT_MODEL)) {
|
||||
return Optional.empty();
|
||||
}
|
||||
int cmd = stack.getTag().getInt(NBT_MODEL);
|
||||
return CoreType.byId(cmd);
|
||||
}
|
||||
|
||||
public static int getStage(ItemStack stack) {
|
||||
if (!stack.hasTag()) return 0;
|
||||
return Math.min(stack.getTag().getInt(NBT_STAGE), MAX_STAGE);
|
||||
}
|
||||
|
||||
public static boolean isTyped(ItemStack stack) { return getType(stack).isPresent(); }
|
||||
|
||||
public static boolean isFinalStage(ItemStack stack) { return getStage(stack) >= MAX_STAGE; }
|
||||
|
||||
// ==================== 耐久条 ====================
|
||||
@Override
|
||||
public boolean isBarVisible(ItemStack stack) {
|
||||
return isTyped(stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBarWidth(@NotNull ItemStack stack) {
|
||||
if (!isTyped(stack)) return 0;
|
||||
return Math.round(13.0f * getStage(stack) / MAX_STAGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBarColor(@NotNull ItemStack stack) {
|
||||
return getType(stack)
|
||||
.map(type -> type.getTextColor().getColor())
|
||||
.orElse(0xFFFFFF);
|
||||
}
|
||||
|
||||
// ==================== Tooltip ====================
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
@Override
|
||||
public void appendHoverText(ItemStack stack, @Nullable Level level, List<Component> tooltip, TooltipFlag flag) {
|
||||
if (!isTyped(stack)) {
|
||||
tooltip.add(Component.translatable("tooltip." + ExtendedAEPlus.MODID + ".basic_core.untyped")
|
||||
.withStyle(ChatFormatting.GRAY));
|
||||
return;
|
||||
}
|
||||
|
||||
getType(stack).ifPresent(type -> {
|
||||
String finalKey = "item." + ExtendedAEPlus.MODID + "." + type.key + "_core";
|
||||
tooltip.add(Component.translatable("tooltip." + ExtendedAEPlus.MODID + ".basic_core.evolving_to",
|
||||
Component.translatable(finalKey).withStyle(type.getTextColor()))
|
||||
.withStyle(ChatFormatting.AQUA));
|
||||
tooltip.add(Component.empty());
|
||||
|
||||
tooltip.add(Component.translatable("tooltip." + ExtendedAEPlus.MODID + ".basic_core.progress")
|
||||
.withStyle(ChatFormatting.YELLOW));
|
||||
|
||||
int stage = getStage(stack);
|
||||
for (int i = 1; i <= 3; i++) {
|
||||
String key = "item." + ExtendedAEPlus.MODID + ".basic_core." + type.key + "." + i;
|
||||
ChatFormatting color = i <= stage ? ChatFormatting.GREEN : ChatFormatting.DARK_GRAY;
|
||||
String prefix = i <= stage ? "✔ " : "✘ ";
|
||||
tooltip.add(Component.literal(prefix).withStyle(color).append(Component.translatable(key)));
|
||||
}
|
||||
|
||||
if (stage >= MAX_STAGE) {
|
||||
tooltip.add(Component.empty());
|
||||
tooltip.add(Component.translatable("tooltip." + ExtendedAEPlus.MODID + ".basic_core.ready_to_craft")
|
||||
.withStyle(ChatFormatting.GOLD));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ==================== 显示名称 ====================
|
||||
@Override
|
||||
public @NotNull Component getName(@NotNull ItemStack stack) {
|
||||
if (!isTyped(stack)) {
|
||||
return Component.translatable("item." + ExtendedAEPlus.MODID + ".basic_core");
|
||||
}
|
||||
return getType(stack).<Component>map(type -> {
|
||||
String key = "item." + ExtendedAEPlus.MODID + ".basic_core." + type.key + "." + getStage(stack);
|
||||
return Component.translatable(key).withStyle(type.getTextColor());
|
||||
}).orElseGet(() -> Component.translatable("item." + ExtendedAEPlus.MODID + ".basic_core"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Rarity getRarity(@NotNull ItemStack stack) {
|
||||
return isTyped(stack)
|
||||
? getType(stack).map(t -> t.getRarity(getStage(stack))).orElse(Rarity.COMMON)
|
||||
: Rarity.COMMON;
|
||||
}
|
||||
|
||||
// ==================== 核心类型枚举 ====================
|
||||
public enum CoreType {
|
||||
STORAGE (1, "storage", ChatFormatting.AQUA),
|
||||
SPATIAL (2, "spatial", ChatFormatting.YELLOW),
|
||||
ENERGY (3, "energy_storage", ChatFormatting.RED),
|
||||
QUANTUM (4, "quantum_storage",ChatFormatting.LIGHT_PURPLE);
|
||||
|
||||
public final int id;
|
||||
public final String key;
|
||||
public final ChatFormatting textColor;
|
||||
|
||||
CoreType(int id, String key, ChatFormatting textColor) {
|
||||
this.id = id;
|
||||
this.key = key;
|
||||
this.textColor = textColor;
|
||||
}
|
||||
|
||||
public static Optional<CoreType> byId(int id) {
|
||||
return switch (id) {
|
||||
case 1 -> Optional.of(STORAGE);
|
||||
case 2 -> Optional.of(SPATIAL);
|
||||
case 3 -> Optional.of(ENERGY);
|
||||
case 4 -> Optional.of(QUANTUM);
|
||||
default -> Optional.empty();
|
||||
};
|
||||
}
|
||||
|
||||
public ChatFormatting getTextColor() { return textColor; }
|
||||
|
||||
public Rarity getRarity(int stage) {
|
||||
return switch (stage) {
|
||||
case 1, 2 -> Rarity.UNCOMMON;
|
||||
case 3 -> Rarity.EPIC;
|
||||
default -> Rarity.COMMON;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user