Merge branch 'mc1.18/dev' into pr/2503

This commit is contained in:
simibubi 2022-01-08 14:33:33 +01:00
commit 8a99a08d7c
207 changed files with 4316 additions and 3945 deletions

View file

@ -49,6 +49,7 @@ body:
label: Mod Version label: Mod Version
description: The version of the mod you were using when the bug occured description: The version of the mod you were using when the bug occured
options: options:
- "0.4.0b"
- "0.4.0a" - "0.4.0a"
- "0.4.0" - "0.4.0"
- "0.3.2g" - "0.3.2g"

View file

@ -17,11 +17,10 @@ plugins {
id 'com.matthewprenger.cursegradle' version "${cursegradle_version}" id 'com.matthewprenger.cursegradle' version "${cursegradle_version}"
} }
apply plugin: 'net.minecraftforge.gradle' apply plugin: 'net.minecraftforge.gradle'
// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. apply plugin: 'org.parchmentmc.librarian.forgegradle'
apply plugin: 'eclipse' apply plugin: 'eclipse'
apply plugin: 'maven-publish' apply plugin: 'maven-publish'
apply plugin: 'org.spongepowered.mixin' apply plugin: 'org.spongepowered.mixin'
apply plugin: 'org.parchmentmc.librarian.forgegradle'
boolean dev = System.getenv('RELEASE') == null || System.getenv('RELEASE').equals('false'); boolean dev = System.getenv('RELEASE') == null || System.getenv('RELEASE').equals('false');
// jozu: I use a gradle workspace with both projects. // jozu: I use a gradle workspace with both projects.

View file

@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G
org.gradle.daemon = false org.gradle.daemon = false
# mod version info # mod version info
mod_version = 0.4a mod_version = 0.4b
minecraft_version = 1.18.1 minecraft_version = 1.18.1
forge_version = 39.0.8 forge_version = 39.0.8
@ -19,7 +19,7 @@ parchment_version = 2021.12.19
# dependency versions # dependency versions
registrate_version = MC1.18-1.0.21 registrate_version = MC1.18-1.0.21
flywheel_version = 1.18-0.4.2-rc.26 flywheel_version = 1.18-0.5.1.42
jei_minecraft_version = 1.18 jei_minecraft_version = 1.18
jei_version = 9.0.0.40 jei_version = 9.0.0.40

View file

@ -537,13 +537,13 @@ f7b78c385c001eccef20718886ec62aebb49920b assets/create/lang/unfinished/de_de.jso
a8cc635c26b070336407991f068e7b42b476aed7 assets/create/lang/unfinished/es_es.json a8cc635c26b070336407991f068e7b42b476aed7 assets/create/lang/unfinished/es_es.json
ce38f5577b7b96460025372563ee88cef2318e7c assets/create/lang/unfinished/fr_fr.json ce38f5577b7b96460025372563ee88cef2318e7c assets/create/lang/unfinished/fr_fr.json
2c85e6efd817348d94c55292e20fadf6b704209c assets/create/lang/unfinished/it_it.json 2c85e6efd817348d94c55292e20fadf6b704209c assets/create/lang/unfinished/it_it.json
5f72b4b2cee27254765f63e309568bcec78959f4 assets/create/lang/unfinished/ja_jp.json f6ed2a6f0f241e73f1e6a88b8500043ef0668b1d assets/create/lang/unfinished/ja_jp.json
26880b09a44d9642be8764fbbae52e384fd5883b assets/create/lang/unfinished/ko_kr.json 133188f5196da148f9dd8aa122d9b008daf36685 assets/create/lang/unfinished/ko_kr.json
983b53cab576e43b0e61f899590b6488d220cd36 assets/create/lang/unfinished/nl_nl.json 983b53cab576e43b0e61f899590b6488d220cd36 assets/create/lang/unfinished/nl_nl.json
0d4aa18fa90d8620d4761ce2fbe900ef8f407a50 assets/create/lang/unfinished/pl_pl.json 0d4aa18fa90d8620d4761ce2fbe900ef8f407a50 assets/create/lang/unfinished/pl_pl.json
776f4179fd212ca6faf0d66ad08bf204f019db6a assets/create/lang/unfinished/pt_br.json 2c765f1b8ea570d837212a7e86aec653fe155477 assets/create/lang/unfinished/pt_br.json
9a1d7bbd01321fae009c00bbf5b2bc091ef38e13 assets/create/lang/unfinished/ru_ru.json 9a1d7bbd01321fae009c00bbf5b2bc091ef38e13 assets/create/lang/unfinished/ru_ru.json
703c7a655bedc1f1a59ba6c6df5a3f7f56f28bee assets/create/lang/unfinished/zh_cn.json ecc1c5d0b5434804db76a5b6d4a589b16fa490be assets/create/lang/unfinished/zh_cn.json
b316488ca9891c2444a6df03bc5ddfbcd1f84de0 assets/create/lang/unfinished/zh_tw.json b316488ca9891c2444a6df03bc5ddfbcd1f84de0 assets/create/lang/unfinished/zh_tw.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
@ -4103,7 +4103,6 @@ a7c97582bae243ab04ff5ff9914b24af25d40d59 data/create/recipes/crushing/iron_horse
554b6555888fe01de349efaaab36b68a338ac397 data/create/recipes/crushing/iron_ore.json 554b6555888fe01de349efaaab36b68a338ac397 data/create/recipes/crushing/iron_ore.json
c9a9d6d28a7eac1210108d52840b60b26d58bcfe data/create/recipes/crushing/lapis_ore.json c9a9d6d28a7eac1210108d52840b60b26d58bcfe data/create/recipes/crushing/lapis_ore.json
e870d049abc5cd5f389f70414c67e76ddc14060d data/create/recipes/crushing/leather_horse_armor.json e870d049abc5cd5f389f70414c67e76ddc14060d data/create/recipes/crushing/leather_horse_armor.json
a3b45ccedd37bfc7e69eb72863576b6482f6fddf data/create/recipes/crushing/magma_block.json
cc5a817901d6f0d68e4ceb3e65d7f2187ab37ceb data/create/recipes/crushing/nether_gold_ore.json cc5a817901d6f0d68e4ceb3e65d7f2187ab37ceb data/create/recipes/crushing/nether_gold_ore.json
6cd97c6f12687790943db810f85036b02586c753 data/create/recipes/crushing/nether_quartz_ore.json 6cd97c6f12687790943db810f85036b02586c753 data/create/recipes/crushing/nether_quartz_ore.json
6e424d7e9f7d8b585384053a713db28f9d36448b data/create/recipes/crushing/nether_wart_block.json 6e424d7e9f7d8b585384053a713db28f9d36448b data/create/recipes/crushing/nether_wart_block.json
@ -5216,10 +5215,14 @@ fb9bfb4c84ed9cf2da8c4b2fbc4cd4d9f37d3016 data/forge/tags/items/plates/gold.json
9f7a428085b1aac66da32a43e9d51c7efc1f0d81 data/forge/tags/items/storage_blocks.json 9f7a428085b1aac66da32a43e9d51c7efc1f0d81 data/forge/tags/items/storage_blocks.json
ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/items/storage_blocks/brass.json ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/items/storage_blocks/brass.json
7f71a774800111e50b42de0e6159ed2d2a807d32 data/forge/tags/items/storage_blocks/zinc.json 7f71a774800111e50b42de0e6159ed2d2a807d32 data/forge/tags/items/storage_blocks/zinc.json
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/azalea_root_replaceable.json
9f7a428085b1aac66da32a43e9d51c7efc1f0d81 data/minecraft/tags/blocks/beacon_base_blocks.json 9f7a428085b1aac66da32a43e9d51c7efc1f0d81 data/minecraft/tags/blocks/beacon_base_blocks.json
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/dripstone_replaceable_blocks.json
69f596fcb065e26b02ce246760432b5174191b76 data/minecraft/tags/blocks/impermeable.json 69f596fcb065e26b02ce246760432b5174191b76 data/minecraft/tags/blocks/impermeable.json
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/lush_ground_replaceable.json
59681910c06f8b7385c6641a409d352056235506 data/minecraft/tags/blocks/mineable/axe.json 59681910c06f8b7385c6641a409d352056235506 data/minecraft/tags/blocks/mineable/axe.json
f8c66b3808efb61d2d928748783bb7eb8a1357f9 data/minecraft/tags/blocks/mineable/pickaxe.json f8c66b3808efb61d2d928748783bb7eb8a1357f9 data/minecraft/tags/blocks/mineable/pickaxe.json
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/moss_replaceable.json
e157c1d3af30e409e34bbefbe15a037e6e1c8daa data/minecraft/tags/blocks/needs_iron_tool.json e157c1d3af30e409e34bbefbe15a037e6e1c8daa data/minecraft/tags/blocks/needs_iron_tool.json
a08f67865337f62601c5e333b4011382d10020e4 data/minecraft/tags/blocks/needs_stone_tool.json a08f67865337f62601c5e333b4011382d10020e4 data/minecraft/tags/blocks/needs_stone_tool.json
6bcabbc1c0479caa80a0ebc676bb34ce0052efb0 data/minecraft/tags/blocks/rails.json 6bcabbc1c0479caa80a0ebc676bb34ce0052efb0 data/minecraft/tags/blocks/rails.json

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 333", "_": "Missing Localizations: 5",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -9,14 +9,14 @@
"block.create.analog_lever": "아날로그 레버", "block.create.analog_lever": "아날로그 레버",
"block.create.andesite_belt_funnel": "안산암 퍼널", "block.create.andesite_belt_funnel": "안산암 퍼널",
"block.create.andesite_casing": "안산암 케이스", "block.create.andesite_casing": "안산암 케이스",
"block.create.andesite_encased_cogwheel": "UNLOCALIZED: Andesite Encased Cogwheel", "block.create.andesite_encased_cogwheel": "안산암 케이스를 씌운 톱니바퀴",
"block.create.andesite_encased_large_cogwheel": "UNLOCALIZED: Andesite Encased Large Cogwheel", "block.create.andesite_encased_large_cogwheel": "안산암 케이스를 씌운 큰 톱니바퀴",
"block.create.andesite_encased_shaft": "안산암 케이스를 씌운 축", "block.create.andesite_encased_shaft": "안산암 케이스를 씌운 축",
"block.create.andesite_funnel": "안산암 퍼널", "block.create.andesite_funnel": "안산암 퍼널",
"block.create.andesite_pillar": "안산암 기둥", "block.create.andesite_pillar": "안산암 기둥",
"block.create.andesite_tunnel": "안산암 터널", "block.create.andesite_tunnel": "안산암 터널",
"block.create.asurine": "UNLOCALIZED: Asurine", "block.create.asurine": "유리암",
"block.create.asurine_pillar": "UNLOCALIZED: Asurine Pillar", "block.create.asurine_pillar": "유리암 기둥",
"block.create.basin": "대야", "block.create.basin": "대야",
"block.create.belt": "벨트", "block.create.belt": "벨트",
"block.create.birch_window": "자작나무 유리창", "block.create.birch_window": "자작나무 유리창",
@ -35,8 +35,8 @@
"block.create.brass_belt_funnel": "황동 퍼널", "block.create.brass_belt_funnel": "황동 퍼널",
"block.create.brass_block": "황동 블록", "block.create.brass_block": "황동 블록",
"block.create.brass_casing": "황동 케이스", "block.create.brass_casing": "황동 케이스",
"block.create.brass_encased_cogwheel": "UNLOCALIZED: Brass Encased Cogwheel", "block.create.brass_encased_cogwheel": "황동 케이스를 씌운 톱니바퀴",
"block.create.brass_encased_large_cogwheel": "UNLOCALIZED: Brass Encased Large Cogwheel", "block.create.brass_encased_large_cogwheel": "황동 케이스를 씌운 큰 톱니바퀴",
"block.create.brass_encased_shaft": "황동 케이스를 씌운 축", "block.create.brass_encased_shaft": "황동 케이스를 씌운 축",
"block.create.brass_funnel": "황동 퍼널", "block.create.brass_funnel": "황동 퍼널",
"block.create.brass_tunnel": "황동 터널", "block.create.brass_tunnel": "황동 터널",
@ -45,7 +45,7 @@
"block.create.brown_seat": "갈색 좌석", "block.create.brown_seat": "갈색 좌석",
"block.create.brown_toolbox": "갈색 공구상자", "block.create.brown_toolbox": "갈색 공구상자",
"block.create.brown_valve_handle": "갈색 밸브 손잡이", "block.create.brown_valve_handle": "갈색 밸브 손잡이",
"block.create.calcite_pillar": "UNLOCALIZED: Calcite Pillar", "block.create.calcite_pillar": "방해석 기둥",
"block.create.cart_assembler": "카트 조립기", "block.create.cart_assembler": "카트 조립기",
"block.create.chocolate": "초콜릿", "block.create.chocolate": "초콜릿",
"block.create.chute": "슈트", "block.create.chute": "슈트",
@ -56,135 +56,135 @@
"block.create.controller_rail": "방향 레일", "block.create.controller_rail": "방향 레일",
"block.create.copper_backtank": "구리 산소통", "block.create.copper_backtank": "구리 산소통",
"block.create.copper_casing": "구리 케이스", "block.create.copper_casing": "구리 케이스",
"block.create.copper_shingle_slab": "UNLOCALIZED: Copper Shingle Slab", "block.create.copper_shingle_slab": "구리 판자 반 블록",
"block.create.copper_shingle_stairs": "UNLOCALIZED: Copper Shingle Stairs", "block.create.copper_shingle_stairs": "구리 판자 계단",
"block.create.copper_shingles": "구리 판자", "block.create.copper_shingles": "구리 판자",
"block.create.copper_tile_slab": "UNLOCALIZED: Copper Tile Slab", "block.create.copper_tile_slab": "구리 타일 반 블록",
"block.create.copper_tile_stairs": "UNLOCALIZED: Copper Tile Stairs", "block.create.copper_tile_stairs": "구리 타일 계단",
"block.create.copper_tiles": "구리 타일", "block.create.copper_tiles": "구리 타일",
"block.create.copper_valve_handle": "구리 밸브 손잡이", "block.create.copper_valve_handle": "구리 밸브 손잡이",
"block.create.creative_crate": "크리에이티브 창고", "block.create.creative_crate": "크리에이티브 창고",
"block.create.creative_fluid_tank": "크리에이티브 탱크", "block.create.creative_fluid_tank": "크리에이티브 탱크",
"block.create.creative_motor": "크리에이티브 모터", "block.create.creative_motor": "크리에이티브 모터",
"block.create.crimsite": "UNLOCALIZED: Crimsite", "block.create.crimsite": "진홍암",
"block.create.crimsite_pillar": "UNLOCALIZED: Crimsite Pillar", "block.create.crimsite_pillar": "진홍암 기둥",
"block.create.crimson_window": "진홍빛 유리창", "block.create.crimson_window": "진홍빛 유리창",
"block.create.crimson_window_pane": "진홍빛 유리판", "block.create.crimson_window_pane": "진홍빛 유리판",
"block.create.crushing_wheel": "분쇄 휠", "block.create.crushing_wheel": "분쇄 휠",
"block.create.crushing_wheel_controller": "분쇄 휠 컨트롤러", "block.create.crushing_wheel_controller": "분쇄 휠 컨트롤러",
"block.create.cuckoo_clock": "뻐꾸기 시계", "block.create.cuckoo_clock": "뻐꾸기 시계",
"block.create.cut_andesite": "UNLOCALIZED: Cut Andesite", "block.create.cut_andesite": "깎인 안산암",
"block.create.cut_andesite_brick_slab": "UNLOCALIZED: Cut Andesite Brick Slab", "block.create.cut_andesite_brick_slab": "깎인 안산암 벽돌 반 블록",
"block.create.cut_andesite_brick_stairs": "UNLOCALIZED: Cut Andesite Brick Stairs", "block.create.cut_andesite_brick_stairs": "깎인 안산암 벽돌 계단",
"block.create.cut_andesite_brick_wall": "UNLOCALIZED: Cut Andesite Brick Wall", "block.create.cut_andesite_brick_wall": "깎인 안산암 벽돌 담장",
"block.create.cut_andesite_bricks": "UNLOCALIZED: Cut Andesite Bricks", "block.create.cut_andesite_bricks": "깎인 안산암 벽돌",
"block.create.cut_andesite_slab": "UNLOCALIZED: Cut Andesite Slab", "block.create.cut_andesite_slab": "깎인 안산암 반 블록",
"block.create.cut_andesite_stairs": "UNLOCALIZED: Cut Andesite Stairs", "block.create.cut_andesite_stairs": "깎인 안산암 계단",
"block.create.cut_andesite_wall": "UNLOCALIZED: Cut Andesite Wall", "block.create.cut_andesite_wall": "깎인 안산암 담장",
"block.create.cut_asurine": "UNLOCALIZED: Cut Asurine", "block.create.cut_asurine": "깎인 유리암",
"block.create.cut_asurine_brick_slab": "UNLOCALIZED: Cut Asurine Brick Slab", "block.create.cut_asurine_brick_slab": "깎인 유리암 벽돌 반 블록",
"block.create.cut_asurine_brick_stairs": "UNLOCALIZED: Cut Asurine Brick Stairs", "block.create.cut_asurine_brick_stairs": "깎인 유리암 벽돌 계단",
"block.create.cut_asurine_brick_wall": "UNLOCALIZED: Cut Asurine Brick Wall", "block.create.cut_asurine_brick_wall": "깎인 유리암 벽돌 담장",
"block.create.cut_asurine_bricks": "UNLOCALIZED: Cut Asurine Bricks", "block.create.cut_asurine_bricks": "깎인 유리암 벽돌",
"block.create.cut_asurine_slab": "UNLOCALIZED: Cut Asurine Slab", "block.create.cut_asurine_slab": "깎인 유리암 반 블록",
"block.create.cut_asurine_stairs": "UNLOCALIZED: Cut Asurine Stairs", "block.create.cut_asurine_stairs": "깎인 유리암 계단",
"block.create.cut_asurine_wall": "UNLOCALIZED: Cut Asurine Wall", "block.create.cut_asurine_wall": "깎인 유리암 담장",
"block.create.cut_calcite": "UNLOCALIZED: Cut Calcite", "block.create.cut_calcite": "깎인 방해석",
"block.create.cut_calcite_brick_slab": "UNLOCALIZED: Cut Calcite Brick Slab", "block.create.cut_calcite_brick_slab": "깎인 방해석 벽돌 반 블록",
"block.create.cut_calcite_brick_stairs": "UNLOCALIZED: Cut Calcite Brick Stairs", "block.create.cut_calcite_brick_stairs": "깎인 방해석 벽돌 계단",
"block.create.cut_calcite_brick_wall": "UNLOCALIZED: Cut Calcite Brick Wall", "block.create.cut_calcite_brick_wall": "깎인 방해석 벽돌 담장",
"block.create.cut_calcite_bricks": "UNLOCALIZED: Cut Calcite Bricks", "block.create.cut_calcite_bricks": "깎인 방해석 벽돌",
"block.create.cut_calcite_slab": "UNLOCALIZED: Cut Calcite Slab", "block.create.cut_calcite_slab": "깎인 방해석 반 블록",
"block.create.cut_calcite_stairs": "UNLOCALIZED: Cut Calcite Stairs", "block.create.cut_calcite_stairs": "깎인 방해석 계단",
"block.create.cut_calcite_wall": "UNLOCALIZED: Cut Calcite Wall", "block.create.cut_calcite_wall": "깎인 방해석 담장",
"block.create.cut_crimsite": "UNLOCALIZED: Cut Crimsite", "block.create.cut_crimsite": "깎인 진홍암",
"block.create.cut_crimsite_brick_slab": "UNLOCALIZED: Cut Crimsite Brick Slab", "block.create.cut_crimsite_brick_slab": "깎인 진홍암 벽돌 반 블록",
"block.create.cut_crimsite_brick_stairs": "UNLOCALIZED: Cut Crimsite Brick Stairs", "block.create.cut_crimsite_brick_stairs": "깎인 진홍암 벽돌 계단",
"block.create.cut_crimsite_brick_wall": "UNLOCALIZED: Cut Crimsite Brick Wall", "block.create.cut_crimsite_brick_wall": "깎인 진홍암 벽돌 담장",
"block.create.cut_crimsite_bricks": "UNLOCALIZED: Cut Crimsite Bricks", "block.create.cut_crimsite_bricks": "깎인 진홍암 벽돌",
"block.create.cut_crimsite_slab": "UNLOCALIZED: Cut Crimsite Slab", "block.create.cut_crimsite_slab": "깎인 진홍암 반 블록",
"block.create.cut_crimsite_stairs": "UNLOCALIZED: Cut Crimsite Stairs", "block.create.cut_crimsite_stairs": "깎인 진홍암 계단",
"block.create.cut_crimsite_wall": "UNLOCALIZED: Cut Crimsite Wall", "block.create.cut_crimsite_wall": "깎인 진홍암 담장",
"block.create.cut_deepslate": "UNLOCALIZED: Cut Deepslate", "block.create.cut_deepslate": "깎인 심층암",
"block.create.cut_deepslate_brick_slab": "UNLOCALIZED: Cut Deepslate Brick Slab", "block.create.cut_deepslate_brick_slab": "깎인 심층암 벽돌 반 블록",
"block.create.cut_deepslate_brick_stairs": "UNLOCALIZED: Cut Deepslate Brick Stairs", "block.create.cut_deepslate_brick_stairs": "깎인 심층암 벽돌 계단",
"block.create.cut_deepslate_brick_wall": "UNLOCALIZED: Cut Deepslate Brick Wall", "block.create.cut_deepslate_brick_wall": "깎인 심층암 벽돌 담장",
"block.create.cut_deepslate_bricks": "UNLOCALIZED: Cut Deepslate Bricks", "block.create.cut_deepslate_bricks": "깎인 심층암 벽돌",
"block.create.cut_deepslate_slab": "UNLOCALIZED: Cut Deepslate Slab", "block.create.cut_deepslate_slab": "깎인 심층암 반 블록",
"block.create.cut_deepslate_stairs": "UNLOCALIZED: Cut Deepslate Stairs", "block.create.cut_deepslate_stairs": "깎인 심층암 계단",
"block.create.cut_deepslate_wall": "UNLOCALIZED: Cut Deepslate Wall", "block.create.cut_deepslate_wall": "깎인 심층암 담장",
"block.create.cut_diorite": "UNLOCALIZED: Cut Diorite", "block.create.cut_diorite": "깎인 섬록암",
"block.create.cut_diorite_brick_slab": "UNLOCALIZED: Cut Diorite Brick Slab", "block.create.cut_diorite_brick_slab": "깎인 섬록암 벽돌 반 블록",
"block.create.cut_diorite_brick_stairs": "UNLOCALIZED: Cut Diorite Brick Stairs", "block.create.cut_diorite_brick_stairs": "깎인 섬록암 벽돌 계단",
"block.create.cut_diorite_brick_wall": "UNLOCALIZED: Cut Diorite Brick Wall", "block.create.cut_diorite_brick_wall": "깎인 섬록암 벽돌 담장",
"block.create.cut_diorite_bricks": "UNLOCALIZED: Cut Diorite Bricks", "block.create.cut_diorite_bricks": "깎인 섬록암 벽돌",
"block.create.cut_diorite_slab": "UNLOCALIZED: Cut Diorite Slab", "block.create.cut_diorite_slab": "깎인 섬록암 반 블록",
"block.create.cut_diorite_stairs": "UNLOCALIZED: Cut Diorite Stairs", "block.create.cut_diorite_stairs": "깎인 섬록암 계단",
"block.create.cut_diorite_wall": "UNLOCALIZED: Cut Diorite Wall", "block.create.cut_diorite_wall": "깎인 섬록암 담장",
"block.create.cut_dripstone": "UNLOCALIZED: Cut Dripstone", "block.create.cut_dripstone": "깎인 점적석",
"block.create.cut_dripstone_brick_slab": "UNLOCALIZED: Cut Dripstone Brick Slab", "block.create.cut_dripstone_brick_slab": "깎인 점적석 벽돌 반 블록",
"block.create.cut_dripstone_brick_stairs": "UNLOCALIZED: Cut Dripstone Brick Stairs", "block.create.cut_dripstone_brick_stairs": "깎인 점적석 벽돌 계단",
"block.create.cut_dripstone_brick_wall": "UNLOCALIZED: Cut Dripstone Brick Wall", "block.create.cut_dripstone_brick_wall": "깎인 점적석 벽돌 담장",
"block.create.cut_dripstone_bricks": "UNLOCALIZED: Cut Dripstone Bricks", "block.create.cut_dripstone_bricks": "깎인 점적석 벽돌",
"block.create.cut_dripstone_slab": "UNLOCALIZED: Cut Dripstone Slab", "block.create.cut_dripstone_slab": "깎인 점적석 반 블록",
"block.create.cut_dripstone_stairs": "UNLOCALIZED: Cut Dripstone Stairs", "block.create.cut_dripstone_stairs": "깎인 점적석 계단",
"block.create.cut_dripstone_wall": "UNLOCALIZED: Cut Dripstone Wall", "block.create.cut_dripstone_wall": "깎인 점적석 담장",
"block.create.cut_granite": "UNLOCALIZED: Cut Granite", "block.create.cut_granite": "깎인 화강암",
"block.create.cut_granite_brick_slab": "UNLOCALIZED: Cut Granite Brick Slab", "block.create.cut_granite_brick_slab": "깎인 화강암 벽돌 반 블록",
"block.create.cut_granite_brick_stairs": "UNLOCALIZED: Cut Granite Brick Stairs", "block.create.cut_granite_brick_stairs": "깎인 화강암 벽돌 계단",
"block.create.cut_granite_brick_wall": "UNLOCALIZED: Cut Granite Brick Wall", "block.create.cut_granite_brick_wall": "깎인 화강암 벽돌 담장",
"block.create.cut_granite_bricks": "UNLOCALIZED: Cut Granite Bricks", "block.create.cut_granite_bricks": "깎인 화강암 벽돌",
"block.create.cut_granite_slab": "UNLOCALIZED: Cut Granite Slab", "block.create.cut_granite_slab": "깎인 화강암 반 블록",
"block.create.cut_granite_stairs": "UNLOCALIZED: Cut Granite Stairs", "block.create.cut_granite_stairs": "깎인 화강암 계단",
"block.create.cut_granite_wall": "UNLOCALIZED: Cut Granite Wall", "block.create.cut_granite_wall": "깎인 화강암 담장",
"block.create.cut_limestone": "UNLOCALIZED: Cut Limestone", "block.create.cut_limestone": "깎인 석회암",
"block.create.cut_limestone_brick_slab": "UNLOCALIZED: Cut Limestone Brick Slab", "block.create.cut_limestone_brick_slab": "깎인 석회암 벽돌 반 블록",
"block.create.cut_limestone_brick_stairs": "UNLOCALIZED: Cut Limestone Brick Stairs", "block.create.cut_limestone_brick_stairs": "깎인 석회암 벽돌 계단",
"block.create.cut_limestone_brick_wall": "UNLOCALIZED: Cut Limestone Brick Wall", "block.create.cut_limestone_brick_wall": "깎인 석회암 벽돌 담장",
"block.create.cut_limestone_bricks": "UNLOCALIZED: Cut Limestone Bricks", "block.create.cut_limestone_bricks": "깎인 석회암 벽돌",
"block.create.cut_limestone_slab": "UNLOCALIZED: Cut Limestone Slab", "block.create.cut_limestone_slab": "깎인 석회암 반 블록",
"block.create.cut_limestone_stairs": "UNLOCALIZED: Cut Limestone Stairs", "block.create.cut_limestone_stairs": "깎인 석회암 계단",
"block.create.cut_limestone_wall": "UNLOCALIZED: Cut Limestone Wall", "block.create.cut_limestone_wall": "깎인 석회암 담장",
"block.create.cut_ochrum": "UNLOCALIZED: Cut Ochrum", "block.create.cut_ochrum": "깎인 황토암",
"block.create.cut_ochrum_brick_slab": "UNLOCALIZED: Cut Ochrum Brick Slab", "block.create.cut_ochrum_brick_slab": "깎인 황토암 벽돌 반 블록",
"block.create.cut_ochrum_brick_stairs": "UNLOCALIZED: Cut Ochrum Brick Stairs", "block.create.cut_ochrum_brick_stairs": "깎인 황토암 벽돌 계단",
"block.create.cut_ochrum_brick_wall": "UNLOCALIZED: Cut Ochrum Brick Wall", "block.create.cut_ochrum_brick_wall": "깎인 황토암 벽돌 담장",
"block.create.cut_ochrum_bricks": "UNLOCALIZED: Cut Ochrum Bricks", "block.create.cut_ochrum_bricks": "깎인 황토암 벽돌",
"block.create.cut_ochrum_slab": "UNLOCALIZED: Cut Ochrum Slab", "block.create.cut_ochrum_slab": "깎인 황토암 반 블록",
"block.create.cut_ochrum_stairs": "UNLOCALIZED: Cut Ochrum Stairs", "block.create.cut_ochrum_stairs": "깎인 황토암 계단",
"block.create.cut_ochrum_wall": "UNLOCALIZED: Cut Ochrum Wall", "block.create.cut_ochrum_wall": "깎인 황토암 담장",
"block.create.cut_scorchia": "UNLOCALIZED: Cut Scorchia", "block.create.cut_scorchia": "깎인 짙은 스코리아",
"block.create.cut_scorchia_brick_slab": "UNLOCALIZED: Cut Scorchia Brick Slab", "block.create.cut_scorchia_brick_slab": "깎인 짙은 스코리아 벽돌 반 블록",
"block.create.cut_scorchia_brick_stairs": "UNLOCALIZED: Cut Scorchia Brick Stairs", "block.create.cut_scorchia_brick_stairs": "깎인 짙은 스코리아 벽돌 계단",
"block.create.cut_scorchia_brick_wall": "UNLOCALIZED: Cut Scorchia Brick Wall", "block.create.cut_scorchia_brick_wall": "깎인 짙은 스코리아 벽돌 담장",
"block.create.cut_scorchia_bricks": "UNLOCALIZED: Cut Scorchia Bricks", "block.create.cut_scorchia_bricks": "깎인 짙은 스코리아 벽돌",
"block.create.cut_scorchia_slab": "UNLOCALIZED: Cut Scorchia Slab", "block.create.cut_scorchia_slab": "깎인 짙은 스코리아 반 블록",
"block.create.cut_scorchia_stairs": "UNLOCALIZED: Cut Scorchia Stairs", "block.create.cut_scorchia_stairs": "깎인 짙은 스코리아 계단",
"block.create.cut_scorchia_wall": "UNLOCALIZED: Cut Scorchia Wall", "block.create.cut_scorchia_wall": "깎인 짙은 스코리아 담장",
"block.create.cut_scoria": "UNLOCALIZED: Cut Scoria", "block.create.cut_scoria": "깎인 스코리아",
"block.create.cut_scoria_brick_slab": "UNLOCALIZED: Cut Scoria Brick Slab", "block.create.cut_scoria_brick_slab": "깎인 스코리아 벽돌 반 블록",
"block.create.cut_scoria_brick_stairs": "UNLOCALIZED: Cut Scoria Brick Stairs", "block.create.cut_scoria_brick_stairs": "깎인 스코리아 벽돌 계단",
"block.create.cut_scoria_brick_wall": "UNLOCALIZED: Cut Scoria Brick Wall", "block.create.cut_scoria_brick_wall": "깎인 스코리아 벽돌 담장",
"block.create.cut_scoria_bricks": "UNLOCALIZED: Cut Scoria Bricks", "block.create.cut_scoria_bricks": "깎인 스코리아 벽돌",
"block.create.cut_scoria_slab": "UNLOCALIZED: Cut Scoria Slab", "block.create.cut_scoria_slab": "깎인 스코리아 반 블록",
"block.create.cut_scoria_stairs": "UNLOCALIZED: Cut Scoria Stairs", "block.create.cut_scoria_stairs": "깎인 스코리아 계단",
"block.create.cut_scoria_wall": "UNLOCALIZED: Cut Scoria Wall", "block.create.cut_scoria_wall": "깎인 스코리아 담장",
"block.create.cut_tuff": "UNLOCALIZED: Cut Tuff", "block.create.cut_tuff": "깎인 응회암",
"block.create.cut_tuff_brick_slab": "UNLOCALIZED: Cut Tuff Brick Slab", "block.create.cut_tuff_brick_slab": "깎인 응회암 벽돌 반 블록",
"block.create.cut_tuff_brick_stairs": "UNLOCALIZED: Cut Tuff Brick Stairs", "block.create.cut_tuff_brick_stairs": "깎인 응회암 벽돌 계단",
"block.create.cut_tuff_brick_wall": "UNLOCALIZED: Cut Tuff Brick Wall", "block.create.cut_tuff_brick_wall": "깎인 응회암 벽돌 담장",
"block.create.cut_tuff_bricks": "UNLOCALIZED: Cut Tuff Bricks", "block.create.cut_tuff_bricks": "깎인 응회암 벽돌",
"block.create.cut_tuff_slab": "UNLOCALIZED: Cut Tuff Slab", "block.create.cut_tuff_slab": "깎인 응회암 반 블록",
"block.create.cut_tuff_stairs": "UNLOCALIZED: Cut Tuff Stairs", "block.create.cut_tuff_stairs": "깎인 응회암 계단",
"block.create.cut_tuff_wall": "UNLOCALIZED: Cut Tuff Wall", "block.create.cut_tuff_wall": "깎인 응회암 담장",
"block.create.cut_veridium": "UNLOCALIZED: Cut Veridium", "block.create.cut_veridium": "깎인 심록암",
"block.create.cut_veridium_brick_slab": "UNLOCALIZED: Cut Veridium Brick Slab", "block.create.cut_veridium_brick_slab": "깎인 심록암 벽돌 반 블록",
"block.create.cut_veridium_brick_stairs": "UNLOCALIZED: Cut Veridium Brick Stairs", "block.create.cut_veridium_brick_stairs": "깎인 심록암 벽돌 계단",
"block.create.cut_veridium_brick_wall": "UNLOCALIZED: Cut Veridium Brick Wall", "block.create.cut_veridium_brick_wall": "깎인 심록암 벽돌 담장",
"block.create.cut_veridium_bricks": "UNLOCALIZED: Cut Veridium Bricks", "block.create.cut_veridium_bricks": "깎인 심록암 벽돌",
"block.create.cut_veridium_slab": "UNLOCALIZED: Cut Veridium Slab", "block.create.cut_veridium_slab": "깎인 심록암 반 블록",
"block.create.cut_veridium_stairs": "UNLOCALIZED: Cut Veridium Stairs", "block.create.cut_veridium_stairs": "깎인 심록암 계단",
"block.create.cut_veridium_wall": "UNLOCALIZED: Cut Veridium Wall", "block.create.cut_veridium_wall": "깎인 심록암 담장",
"block.create.cyan_nixie_tube": "청록색 닉시관", "block.create.cyan_nixie_tube": "청록색 닉시관",
"block.create.cyan_sail": "청록색 날개", "block.create.cyan_sail": "청록색 날개",
"block.create.cyan_seat": "청록색 좌석", "block.create.cyan_seat": "청록색 좌석",
@ -192,21 +192,21 @@
"block.create.cyan_valve_handle": "청록색 밸브 손잡이", "block.create.cyan_valve_handle": "청록색 밸브 손잡이",
"block.create.dark_oak_window": "짙은 참나무 유리창", "block.create.dark_oak_window": "짙은 참나무 유리창",
"block.create.dark_oak_window_pane": "짙은 참나무 유리판", "block.create.dark_oak_window_pane": "짙은 참나무 유리판",
"block.create.deepslate_pillar": "UNLOCALIZED: Deepslate Pillar", "block.create.deepslate_pillar": "심층암 기둥",
"block.create.deepslate_zinc_ore": "UNLOCALIZED: Deepslate Zinc Ore", "block.create.deepslate_zinc_ore": "심층암 아연 광석",
"block.create.deployer": "배포기", "block.create.deployer": "계 손",
"block.create.depot": "아이템 거치대", "block.create.depot": "아이템 거치대",
"block.create.diorite_pillar": "섬록암 기둥", "block.create.diorite_pillar": "섬록암 기둥",
"block.create.dripstone_pillar": "UNLOCALIZED: Dripstone Pillar", "block.create.dripstone_pillar": "점적석 기둥",
"block.create.encased_chain_drive": "체인 드라이브", "block.create.encased_chain_drive": "체인 드라이브",
"block.create.encased_fan": "선풍기", "block.create.encased_fan": "선풍기",
"block.create.encased_fluid_pipe": "구리 케이스를 씌운 파이프", "block.create.encased_fluid_pipe": "구리 케이스를 씌운 파이프",
"block.create.exposed_copper_shingle_slab": "UNLOCALIZED: Exposed Copper Shingle Slab", "block.create.exposed_copper_shingle_slab": "약간 녹슨 구리 판자 반 블록",
"block.create.exposed_copper_shingle_stairs": "UNLOCALIZED: Exposed Copper Shingle Stairs", "block.create.exposed_copper_shingle_stairs": "약간 녹슨 구리 판자 계단",
"block.create.exposed_copper_shingles": "UNLOCALIZED: Exposed Copper Shingles", "block.create.exposed_copper_shingles": "약간 녹슨 구리 판자",
"block.create.exposed_copper_tile_slab": "UNLOCALIZED: Exposed Copper Tile Slab", "block.create.exposed_copper_tile_slab": "약간 녹슨 구리 타일 반 블록",
"block.create.exposed_copper_tile_stairs": "UNLOCALIZED: Exposed Copper Tile Stairs", "block.create.exposed_copper_tile_stairs": "약간 녹슨 구리 타일 계단",
"block.create.exposed_copper_tiles": "UNLOCALIZED: Exposed Copper Tiles", "block.create.exposed_copper_tiles": "약간 녹슨 구리 타일",
"block.create.fluid_pipe": "액체 파이프", "block.create.fluid_pipe": "액체 파이프",
"block.create.fluid_tank": "액체 탱크", "block.create.fluid_tank": "액체 탱크",
"block.create.fluid_valve": "액체 밸브", "block.create.fluid_valve": "액체 밸브",
@ -237,24 +237,24 @@
"block.create.horizontal_framed_glass_pane": "수평 유리판", "block.create.horizontal_framed_glass_pane": "수평 유리판",
"block.create.hose_pulley": "호스 도르래", "block.create.hose_pulley": "호스 도르래",
"block.create.item_drain": "아이템 배수구", "block.create.item_drain": "아이템 배수구",
"block.create.item_vault": "UNLOCALIZED: Item Vault", "block.create.item_vault": "아이템 금고",
"block.create.jungle_window": "정글나무 유리창", "block.create.jungle_window": "정글나무 유리창",
"block.create.jungle_window_pane": "정글나무 유리판", "block.create.jungle_window_pane": "정글나무 유리판",
"block.create.large_cogwheel": "큰 톱니바퀴", "block.create.large_cogwheel": "큰 톱니바퀴",
"block.create.layered_andesite": "이어지는 안산암", "block.create.layered_andesite": "이어지는 안산암",
"block.create.layered_asurine": "UNLOCALIZED: Layered Asurine", "block.create.layered_asurine": "이어지는 유리암",
"block.create.layered_calcite": "UNLOCALIZED: Layered Calcite", "block.create.layered_calcite": "이어지는 방해석",
"block.create.layered_crimsite": "UNLOCALIZED: Layered Crimsite", "block.create.layered_crimsite": "이어지는 진홍암",
"block.create.layered_deepslate": "UNLOCALIZED: Layered Deepslate", "block.create.layered_deepslate": "이어지는 심층암",
"block.create.layered_diorite": "이어지는 섬록암", "block.create.layered_diorite": "이어지는 섬록암",
"block.create.layered_dripstone": "UNLOCALIZED: Layered Dripstone", "block.create.layered_dripstone": "이어지는 점적석",
"block.create.layered_granite": "이어지는 화강암", "block.create.layered_granite": "이어지는 화강암",
"block.create.layered_limestone": "이어지는 석회암", "block.create.layered_limestone": "이어지는 석회암",
"block.create.layered_ochrum": "UNLOCALIZED: Layered Ochrum", "block.create.layered_ochrum": "이어지는 황토암",
"block.create.layered_scorchia": "UNLOCALIZED: Layered Scorchia", "block.create.layered_scorchia": "이어지는 짙은 스코리아",
"block.create.layered_scoria": "이어지는 스코리아", "block.create.layered_scoria": "이어지는 스코리아",
"block.create.layered_tuff": "UNLOCALIZED: Layered Tuff", "block.create.layered_tuff": "이어지는 응회암",
"block.create.layered_veridium": "UNLOCALIZED: Layered Veridium", "block.create.layered_veridium": "이어지는 심록암",
"block.create.lectern_controller": "독서대 조작기", "block.create.lectern_controller": "독서대 조작기",
"block.create.light_blue_nixie_tube": "하늘색 닉시관", "block.create.light_blue_nixie_tube": "하늘색 닉시관",
"block.create.light_blue_sail": "하늘색 날개", "block.create.light_blue_sail": "하늘색 날개",
@ -300,20 +300,20 @@
"block.create.nozzle": "노즐", "block.create.nozzle": "노즐",
"block.create.oak_window": "참나무 유리창", "block.create.oak_window": "참나무 유리창",
"block.create.oak_window_pane": "참나무 유리판", "block.create.oak_window_pane": "참나무 유리판",
"block.create.ochrum": "UNLOCALIZED: Ochrum", "block.create.ochrum": "황토암",
"block.create.ochrum_pillar": "UNLOCALIZED: Ochrum Pillar", "block.create.ochrum_pillar": "황토암 기둥",
"block.create.orange_sail": "주황색 날개", "block.create.orange_sail": "주황색 날개",
"block.create.orange_seat": "주황색 좌석", "block.create.orange_seat": "주황색 좌석",
"block.create.orange_toolbox": "주황색 공구상자", "block.create.orange_toolbox": "주황색 공구상자",
"block.create.orange_valve_handle": "주황색 밸브 손잡이", "block.create.orange_valve_handle": "주황색 밸브 손잡이",
"block.create.ornate_iron_window": "장식된 철 유리창", "block.create.ornate_iron_window": "장식된 철 유리창",
"block.create.ornate_iron_window_pane": "장식된 철 유리판", "block.create.ornate_iron_window_pane": "장식된 철 유리판",
"block.create.oxidized_copper_shingle_slab": "UNLOCALIZED: Oxidized Copper Shingle Slab", "block.create.oxidized_copper_shingle_slab": "산화된 구리 판자 반 블록",
"block.create.oxidized_copper_shingle_stairs": "UNLOCALIZED: Oxidized Copper Shingle Stairs", "block.create.oxidized_copper_shingle_stairs": "산화된 구리 판자 계단",
"block.create.oxidized_copper_shingles": "UNLOCALIZED: Oxidized Copper Shingles", "block.create.oxidized_copper_shingles": "산화된 구리 판자",
"block.create.oxidized_copper_tile_slab": "UNLOCALIZED: Oxidized Copper Tile Slab", "block.create.oxidized_copper_tile_slab": "산화된 구리 타일 반 블록",
"block.create.oxidized_copper_tile_stairs": "UNLOCALIZED: Oxidized Copper Tile Stairs", "block.create.oxidized_copper_tile_stairs": "산화된 구리 타일 계단",
"block.create.oxidized_copper_tiles": "UNLOCALIZED: Oxidized Copper Tiles", "block.create.oxidized_copper_tiles": "산화된 구리 타일",
"block.create.peculiar_bell": "황동 종", "block.create.peculiar_bell": "황동 종",
"block.create.pink_nixie_tube": "분홍색 닉시관", "block.create.pink_nixie_tube": "분홍색 닉시관",
"block.create.pink_sail": "분홍색 날개", "block.create.pink_sail": "분홍색 날개",
@ -321,68 +321,68 @@
"block.create.pink_toolbox": "분홍색 공구상자", "block.create.pink_toolbox": "분홍색 공구상자",
"block.create.pink_valve_handle": "분홍색 밸브 손잡이", "block.create.pink_valve_handle": "분홍색 밸브 손잡이",
"block.create.piston_extension_pole": "피스톤 연장 축", "block.create.piston_extension_pole": "피스톤 연장 축",
"block.create.polished_cut_andesite": "UNLOCALIZED: Polished Cut Andesite", "block.create.polished_cut_andesite": "윤나는 깎인 안산암",
"block.create.polished_cut_andesite_slab": "UNLOCALIZED: Polished Cut Andesite Slab", "block.create.polished_cut_andesite_slab": "윤나는 깎인 안산암 반 블록",
"block.create.polished_cut_andesite_stairs": "UNLOCALIZED: Polished Cut Andesite Stairs", "block.create.polished_cut_andesite_stairs": "윤나는 깎인 안산암 계단",
"block.create.polished_cut_andesite_wall": "UNLOCALIZED: Polished Cut Andesite Wall", "block.create.polished_cut_andesite_wall": "윤나는 깎인 안산암 담장",
"block.create.polished_cut_asurine": "UNLOCALIZED: Polished Cut Asurine", "block.create.polished_cut_asurine": "윤나는 깎인 유리암",
"block.create.polished_cut_asurine_slab": "UNLOCALIZED: Polished Cut Asurine Slab", "block.create.polished_cut_asurine_slab": "윤나는 깎인 유리암 반 블록",
"block.create.polished_cut_asurine_stairs": "UNLOCALIZED: Polished Cut Asurine Stairs", "block.create.polished_cut_asurine_stairs": "윤나는 깎인 유리암 계단",
"block.create.polished_cut_asurine_wall": "UNLOCALIZED: Polished Cut Asurine Wall", "block.create.polished_cut_asurine_wall": "윤나는 깎인 유리암 담장",
"block.create.polished_cut_calcite": "UNLOCALIZED: Polished Cut Calcite", "block.create.polished_cut_calcite": "윤나는 깎인 방해석",
"block.create.polished_cut_calcite_slab": "UNLOCALIZED: Polished Cut Calcite Slab", "block.create.polished_cut_calcite_slab": "윤나는 깎인 방해석 반 블록",
"block.create.polished_cut_calcite_stairs": "UNLOCALIZED: Polished Cut Calcite Stairs", "block.create.polished_cut_calcite_stairs": "윤나는 깎인 방해석 계단",
"block.create.polished_cut_calcite_wall": "UNLOCALIZED: Polished Cut Calcite Wall", "block.create.polished_cut_calcite_wall": "윤나는 깎인 방해석 담장",
"block.create.polished_cut_crimsite": "UNLOCALIZED: Polished Cut Crimsite", "block.create.polished_cut_crimsite": "윤나는 깎인 진홍암",
"block.create.polished_cut_crimsite_slab": "UNLOCALIZED: Polished Cut Crimsite Slab", "block.create.polished_cut_crimsite_slab": "윤나는 깎인 진홍암 반 블록",
"block.create.polished_cut_crimsite_stairs": "UNLOCALIZED: Polished Cut Crimsite Stairs", "block.create.polished_cut_crimsite_stairs": "윤나는 깎인 진홍암 계단",
"block.create.polished_cut_crimsite_wall": "UNLOCALIZED: Polished Cut Crimsite Wall", "block.create.polished_cut_crimsite_wall": "윤나는 깎인 진홍암 담장",
"block.create.polished_cut_deepslate": "UNLOCALIZED: Polished Cut Deepslate", "block.create.polished_cut_deepslate": "윤나는 깎인 심층암",
"block.create.polished_cut_deepslate_slab": "UNLOCALIZED: Polished Cut Deepslate Slab", "block.create.polished_cut_deepslate_slab": "윤나는 깎인 심층암 반 블록",
"block.create.polished_cut_deepslate_stairs": "UNLOCALIZED: Polished Cut Deepslate Stairs", "block.create.polished_cut_deepslate_stairs": "윤나는 깎인 심층암 계단",
"block.create.polished_cut_deepslate_wall": "UNLOCALIZED: Polished Cut Deepslate Wall", "block.create.polished_cut_deepslate_wall": "윤나는 깎인 심층암 담장",
"block.create.polished_cut_diorite": "UNLOCALIZED: Polished Cut Diorite", "block.create.polished_cut_diorite": "윤나는 깎인 섬록암",
"block.create.polished_cut_diorite_slab": "UNLOCALIZED: Polished Cut Diorite Slab", "block.create.polished_cut_diorite_slab": "윤나는 깎인 섬록암 반 블록",
"block.create.polished_cut_diorite_stairs": "UNLOCALIZED: Polished Cut Diorite Stairs", "block.create.polished_cut_diorite_stairs": "윤나는 깎인 섬록암 계단",
"block.create.polished_cut_diorite_wall": "UNLOCALIZED: Polished Cut Diorite Wall", "block.create.polished_cut_diorite_wall": "윤나는 깎인 섬록암 담장",
"block.create.polished_cut_dripstone": "UNLOCALIZED: Polished Cut Dripstone", "block.create.polished_cut_dripstone": "윤나는 깎인 점적석",
"block.create.polished_cut_dripstone_slab": "UNLOCALIZED: Polished Cut Dripstone Slab", "block.create.polished_cut_dripstone_slab": "윤나는 깎인 점적석 반 블록",
"block.create.polished_cut_dripstone_stairs": "UNLOCALIZED: Polished Cut Dripstone Stairs", "block.create.polished_cut_dripstone_stairs": "윤나는 깎인 점적석 계단",
"block.create.polished_cut_dripstone_wall": "UNLOCALIZED: Polished Cut Dripstone Wall", "block.create.polished_cut_dripstone_wall": "윤나는 깎인 점적석 담장",
"block.create.polished_cut_granite": "UNLOCALIZED: Polished Cut Granite", "block.create.polished_cut_granite": "윤나는 깎인 화강암",
"block.create.polished_cut_granite_slab": "UNLOCALIZED: Polished Cut Granite Slab", "block.create.polished_cut_granite_slab": "윤나는 깎인 화강암 반 블록",
"block.create.polished_cut_granite_stairs": "UNLOCALIZED: Polished Cut Granite Stairs", "block.create.polished_cut_granite_stairs": "윤나는 깎인 화강암 계단",
"block.create.polished_cut_granite_wall": "UNLOCALIZED: Polished Cut Granite Wall", "block.create.polished_cut_granite_wall": "윤나는 깎인 화강암 담장",
"block.create.polished_cut_limestone": "UNLOCALIZED: Polished Cut Limestone", "block.create.polished_cut_limestone": "윤나는 깎인 석회암",
"block.create.polished_cut_limestone_slab": "UNLOCALIZED: Polished Cut Limestone Slab", "block.create.polished_cut_limestone_slab": "윤나는 깎인 석회암 반 블록",
"block.create.polished_cut_limestone_stairs": "UNLOCALIZED: Polished Cut Limestone Stairs", "block.create.polished_cut_limestone_stairs": "윤나는 깎인 석회암 계단",
"block.create.polished_cut_limestone_wall": "UNLOCALIZED: Polished Cut Limestone Wall", "block.create.polished_cut_limestone_wall": "윤나는 깎인 석회암 담장",
"block.create.polished_cut_ochrum": "UNLOCALIZED: Polished Cut Ochrum", "block.create.polished_cut_ochrum": "윤나는 깎인 황토암",
"block.create.polished_cut_ochrum_slab": "UNLOCALIZED: Polished Cut Ochrum Slab", "block.create.polished_cut_ochrum_slab": "윤나는 깎인 황토암 반 블록",
"block.create.polished_cut_ochrum_stairs": "UNLOCALIZED: Polished Cut Ochrum Stairs", "block.create.polished_cut_ochrum_stairs": "윤나는 깎인 황토암 계단",
"block.create.polished_cut_ochrum_wall": "UNLOCALIZED: Polished Cut Ochrum Wall", "block.create.polished_cut_ochrum_wall": "윤나는 깎인 황토암 담장",
"block.create.polished_cut_scorchia": "UNLOCALIZED: Polished Cut Scorchia", "block.create.polished_cut_scorchia": "윤나는 깎인 짙은 스코리아",
"block.create.polished_cut_scorchia_slab": "UNLOCALIZED: Polished Cut Scorchia Slab", "block.create.polished_cut_scorchia_slab": "윤나는 깎인 짙은 스코리아 반 블록",
"block.create.polished_cut_scorchia_stairs": "UNLOCALIZED: Polished Cut Scorchia Stairs", "block.create.polished_cut_scorchia_stairs": "윤나는 깎인 짙은 스코리아 계단",
"block.create.polished_cut_scorchia_wall": "UNLOCALIZED: Polished Cut Scorchia Wall", "block.create.polished_cut_scorchia_wall": "윤나는 깎인 짙은 스코리아 담장",
"block.create.polished_cut_scoria": "UNLOCALIZED: Polished Cut Scoria", "block.create.polished_cut_scoria": "윤나는 깎인 스코리아",
"block.create.polished_cut_scoria_slab": "UNLOCALIZED: Polished Cut Scoria Slab", "block.create.polished_cut_scoria_slab": "윤나는 깎인 스코리아 반 블록",
"block.create.polished_cut_scoria_stairs": "UNLOCALIZED: Polished Cut Scoria Stairs", "block.create.polished_cut_scoria_stairs": "윤나는 깎인 스코리아 계단",
"block.create.polished_cut_scoria_wall": "UNLOCALIZED: Polished Cut Scoria Wall", "block.create.polished_cut_scoria_wall": "윤나는 깎인 스코리아 담장",
"block.create.polished_cut_tuff": "UNLOCALIZED: Polished Cut Tuff", "block.create.polished_cut_tuff": "윤나는 깎인 응회암",
"block.create.polished_cut_tuff_slab": "UNLOCALIZED: Polished Cut Tuff Slab", "block.create.polished_cut_tuff_slab": "윤나는 깎인 응회암 반 블록",
"block.create.polished_cut_tuff_stairs": "UNLOCALIZED: Polished Cut Tuff Stairs", "block.create.polished_cut_tuff_stairs": "윤나는 깎인 응회암 계단",
"block.create.polished_cut_tuff_wall": "UNLOCALIZED: Polished Cut Tuff Wall", "block.create.polished_cut_tuff_wall": "윤나는 깎인 응회암 담장",
"block.create.polished_cut_veridium": "UNLOCALIZED: Polished Cut Veridium", "block.create.polished_cut_veridium": "윤나는 깎인 심록암",
"block.create.polished_cut_veridium_slab": "UNLOCALIZED: Polished Cut Veridium Slab", "block.create.polished_cut_veridium_slab": "윤나는 깎인 심록암 반 블록",
"block.create.polished_cut_veridium_stairs": "UNLOCALIZED: Polished Cut Veridium Stairs", "block.create.polished_cut_veridium_stairs": "윤나는 깎인 심록암 계단",
"block.create.polished_cut_veridium_wall": "UNLOCALIZED: Polished Cut Veridium Wall", "block.create.polished_cut_veridium_wall": "윤나는 깎인 심록암 담장",
"block.create.portable_fluid_interface": "액체 인터페이스", "block.create.portable_fluid_interface": "액체 인터페이스",
"block.create.portable_storage_interface": "아이템 인터페이스", "block.create.portable_storage_interface": "아이템 인터페이스",
"block.create.powered_latch": "레드스톤 걸쇠", "block.create.powered_latch": "레드스톤 걸쇠",
"block.create.powered_toggle_latch": "레드스톤 토글 걸쇠", "block.create.powered_toggle_latch": "레드스톤 토글 걸쇠",
"block.create.pulley_magnet": "도르래 자석", "block.create.pulley_magnet": "도르래 자석",
"block.create.pulse_extender": "UNLOCALIZED: Pulse Extender", "block.create.pulse_extender": "펄스 연장기",
"block.create.pulse_repeater": "펄스 중계기", "block.create.pulse_repeater": "펄스 중계기",
"block.create.purple_nixie_tube": "보라색 닉시관", "block.create.purple_nixie_tube": "보라색 닉시관",
"block.create.purple_sail": "보라색 날개", "block.create.purple_sail": "보라색 날개",
@ -390,7 +390,7 @@
"block.create.purple_toolbox": "보라색 공구상자", "block.create.purple_toolbox": "보라색 공구상자",
"block.create.purple_valve_handle": "보라색 밸브 손잡이", "block.create.purple_valve_handle": "보라색 밸브 손잡이",
"block.create.radial_chassis": "원형 섀시", "block.create.radial_chassis": "원형 섀시",
"block.create.raw_zinc_block": "UNLOCALIZED: Block of Raw Zinc", "block.create.raw_zinc_block": "아연 원석 블록",
"block.create.red_nixie_tube": "빨간색 닉시관", "block.create.red_nixie_tube": "빨간색 닉시관",
"block.create.red_sail": "빨간색 날개", "block.create.red_sail": "빨간색 날개",
"block.create.red_seat": "빨간색 좌석", "block.create.red_seat": "빨간색 좌석",
@ -405,70 +405,70 @@
"block.create.sail_frame": "풍차 날개 틀", "block.create.sail_frame": "풍차 날개 틀",
"block.create.schematic_table": "청사진 탁자", "block.create.schematic_table": "청사진 탁자",
"block.create.schematicannon": "청사진 대포", "block.create.schematicannon": "청사진 대포",
"block.create.scorchia": "UNLOCALIZED: Scorchia", "block.create.scorchia": "짙은 스코리아",
"block.create.scorchia_pillar": "UNLOCALIZED: Scorchia Pillar", "block.create.scorchia_pillar": "짙은 스코리아 기둥",
"block.create.scoria": "스코리아", "block.create.scoria": "스코리아",
"block.create.scoria_pillar": "스코리아 기둥", "block.create.scoria_pillar": "스코리아 기둥",
"block.create.secondary_linear_chassis": "밝은 직선 섀시", "block.create.secondary_linear_chassis": "밝은 직선 섀시",
"block.create.sequenced_gearshift": "순서 기어쉬프트", "block.create.sequenced_gearshift": "순서 기어쉬프트",
"block.create.shadow_steel_casing": "그림자 케이스", "block.create.shadow_steel_casing": "그림자 케이스",
"block.create.shaft": "축", "block.create.shaft": "축",
"block.create.small_andesite_brick_slab": "UNLOCALIZED: Small Andesite Brick Slab", "block.create.small_andesite_brick_slab": "작은 안산암 벽돌 반 블록",
"block.create.small_andesite_brick_stairs": "UNLOCALIZED: Small Andesite Brick Stairs", "block.create.small_andesite_brick_stairs": "작은 안산암 벽돌 계단",
"block.create.small_andesite_brick_wall": "UNLOCALIZED: Small Andesite Brick Wall", "block.create.small_andesite_brick_wall": "작은 안산암 벽돌 담장",
"block.create.small_andesite_bricks": "UNLOCALIZED: Small Andesite Bricks", "block.create.small_andesite_bricks": "작은 안산암 벽돌",
"block.create.small_asurine_brick_slab": "UNLOCALIZED: Small Asurine Brick Slab", "block.create.small_asurine_brick_slab": "작은 유리암 벽돌 반 블록",
"block.create.small_asurine_brick_stairs": "UNLOCALIZED: Small Asurine Brick Stairs", "block.create.small_asurine_brick_stairs": "작은 유리암 벽돌 계단",
"block.create.small_asurine_brick_wall": "UNLOCALIZED: Small Asurine Brick Wall", "block.create.small_asurine_brick_wall": "작은 유리암 벽돌 담장",
"block.create.small_asurine_bricks": "UNLOCALIZED: Small Asurine Bricks", "block.create.small_asurine_bricks": "작은 유리암 벽돌",
"block.create.small_calcite_brick_slab": "UNLOCALIZED: Small Calcite Brick Slab", "block.create.small_calcite_brick_slab": "작은 방해석 벽돌 반 블록",
"block.create.small_calcite_brick_stairs": "UNLOCALIZED: Small Calcite Brick Stairs", "block.create.small_calcite_brick_stairs": "작은 방해석 벽돌 계단",
"block.create.small_calcite_brick_wall": "UNLOCALIZED: Small Calcite Brick Wall", "block.create.small_calcite_brick_wall": "작은 방해석 벽돌 담장",
"block.create.small_calcite_bricks": "UNLOCALIZED: Small Calcite Bricks", "block.create.small_calcite_bricks": "작은 방해석 벽돌",
"block.create.small_crimsite_brick_slab": "UNLOCALIZED: Small Crimsite Brick Slab", "block.create.small_crimsite_brick_slab": "작은 진홍암 벽돌 반 블록",
"block.create.small_crimsite_brick_stairs": "UNLOCALIZED: Small Crimsite Brick Stairs", "block.create.small_crimsite_brick_stairs": "작은 진홍암 벽돌 계단",
"block.create.small_crimsite_brick_wall": "UNLOCALIZED: Small Crimsite Brick Wall", "block.create.small_crimsite_brick_wall": "작은 진홍암 벽돌 담장",
"block.create.small_crimsite_bricks": "UNLOCALIZED: Small Crimsite Bricks", "block.create.small_crimsite_bricks": "작은 진홍암 벽돌",
"block.create.small_deepslate_brick_slab": "UNLOCALIZED: Small Deepslate Brick Slab", "block.create.small_deepslate_brick_slab": "작은 심층암 벽돌 반 블록",
"block.create.small_deepslate_brick_stairs": "UNLOCALIZED: Small Deepslate Brick Stairs", "block.create.small_deepslate_brick_stairs": "작은 심층암 벽돌 계단",
"block.create.small_deepslate_brick_wall": "UNLOCALIZED: Small Deepslate Brick Wall", "block.create.small_deepslate_brick_wall": "작은 심층암 벽돌 담장",
"block.create.small_deepslate_bricks": "UNLOCALIZED: Small Deepslate Bricks", "block.create.small_deepslate_bricks": "작은 심층암 벽돌",
"block.create.small_diorite_brick_slab": "UNLOCALIZED: Small Diorite Brick Slab", "block.create.small_diorite_brick_slab": "작은 섬록암 벽돌 반 블록",
"block.create.small_diorite_brick_stairs": "UNLOCALIZED: Small Diorite Brick Stairs", "block.create.small_diorite_brick_stairs": "작은 섬록암 벽돌 계단",
"block.create.small_diorite_brick_wall": "UNLOCALIZED: Small Diorite Brick Wall", "block.create.small_diorite_brick_wall": "작은 섬록암 벽돌 담장",
"block.create.small_diorite_bricks": "UNLOCALIZED: Small Diorite Bricks", "block.create.small_diorite_bricks": "작은 섬록암 벽돌",
"block.create.small_dripstone_brick_slab": "UNLOCALIZED: Small Dripstone Brick Slab", "block.create.small_dripstone_brick_slab": "작은 점적석 벽돌 반 블록",
"block.create.small_dripstone_brick_stairs": "UNLOCALIZED: Small Dripstone Brick Stairs", "block.create.small_dripstone_brick_stairs": "작은 점적석 벽돌 계단",
"block.create.small_dripstone_brick_wall": "UNLOCALIZED: Small Dripstone Brick Wall", "block.create.small_dripstone_brick_wall": "작은 점적석 벽돌 담장",
"block.create.small_dripstone_bricks": "UNLOCALIZED: Small Dripstone Bricks", "block.create.small_dripstone_bricks": "작은 점적석 벽돌",
"block.create.small_granite_brick_slab": "UNLOCALIZED: Small Granite Brick Slab", "block.create.small_granite_brick_slab": "작은 화강암 벽돌 반 블록",
"block.create.small_granite_brick_stairs": "UNLOCALIZED: Small Granite Brick Stairs", "block.create.small_granite_brick_stairs": "작은 화강암 벽돌 계단",
"block.create.small_granite_brick_wall": "UNLOCALIZED: Small Granite Brick Wall", "block.create.small_granite_brick_wall": "작은 화강암 벽돌 담장",
"block.create.small_granite_bricks": "UNLOCALIZED: Small Granite Bricks", "block.create.small_granite_bricks": "작은 화강암 벽돌",
"block.create.small_limestone_brick_slab": "UNLOCALIZED: Small Limestone Brick Slab", "block.create.small_limestone_brick_slab": "작은 석회암 벽돌 반 블록",
"block.create.small_limestone_brick_stairs": "UNLOCALIZED: Small Limestone Brick Stairs", "block.create.small_limestone_brick_stairs": "작은 석회암 벽돌 계단",
"block.create.small_limestone_brick_wall": "UNLOCALIZED: Small Limestone Brick Wall", "block.create.small_limestone_brick_wall": "작은 석회암 벽돌 담장",
"block.create.small_limestone_bricks": "UNLOCALIZED: Small Limestone Bricks", "block.create.small_limestone_bricks": "작은 석회암 벽돌",
"block.create.small_ochrum_brick_slab": "UNLOCALIZED: Small Ochrum Brick Slab", "block.create.small_ochrum_brick_slab": "작은 황토암 벽돌 반 블록",
"block.create.small_ochrum_brick_stairs": "UNLOCALIZED: Small Ochrum Brick Stairs", "block.create.small_ochrum_brick_stairs": "작은 황토암 벽돌 계단",
"block.create.small_ochrum_brick_wall": "UNLOCALIZED: Small Ochrum Brick Wall", "block.create.small_ochrum_brick_wall": "작은 황토암 벽돌 담장",
"block.create.small_ochrum_bricks": "UNLOCALIZED: Small Ochrum Bricks", "block.create.small_ochrum_bricks": "작은 황토암 벽돌",
"block.create.small_scorchia_brick_slab": "UNLOCALIZED: Small Scorchia Brick Slab", "block.create.small_scorchia_brick_slab": "작은 짙은 스코리아 벽돌 반 블록",
"block.create.small_scorchia_brick_stairs": "UNLOCALIZED: Small Scorchia Brick Stairs", "block.create.small_scorchia_brick_stairs": "작은 짙은 스코리아 벽돌 계단",
"block.create.small_scorchia_brick_wall": "UNLOCALIZED: Small Scorchia Brick Wall", "block.create.small_scorchia_brick_wall": "작은 짙은 스코리아 벽돌 담장",
"block.create.small_scorchia_bricks": "UNLOCALIZED: Small Scorchia Bricks", "block.create.small_scorchia_bricks": "작은 짙은 스코리아 벽돌",
"block.create.small_scoria_brick_slab": "UNLOCALIZED: Small Scoria Brick Slab", "block.create.small_scoria_brick_slab": "작은 스코리아 벽돌 반 블록",
"block.create.small_scoria_brick_stairs": "UNLOCALIZED: Small Scoria Brick Stairs", "block.create.small_scoria_brick_stairs": "작은 스코리아 벽돌 계단",
"block.create.small_scoria_brick_wall": "UNLOCALIZED: Small Scoria Brick Wall", "block.create.small_scoria_brick_wall": "작은 스코리아 벽돌 담장",
"block.create.small_scoria_bricks": "UNLOCALIZED: Small Scoria Bricks", "block.create.small_scoria_bricks": "작은 스코리아 벽돌",
"block.create.small_tuff_brick_slab": "UNLOCALIZED: Small Tuff Brick Slab", "block.create.small_tuff_brick_slab": "작은 응회암 벽돌 반 블록",
"block.create.small_tuff_brick_stairs": "UNLOCALIZED: Small Tuff Brick Stairs", "block.create.small_tuff_brick_stairs": "작은 응회암 벽돌 계단",
"block.create.small_tuff_brick_wall": "UNLOCALIZED: Small Tuff Brick Wall", "block.create.small_tuff_brick_wall": "작은 응회암 벽돌 담장",
"block.create.small_tuff_bricks": "UNLOCALIZED: Small Tuff Bricks", "block.create.small_tuff_bricks": "작은 응회암 벽돌",
"block.create.small_veridium_brick_slab": "UNLOCALIZED: Small Veridium Brick Slab", "block.create.small_veridium_brick_slab": "작은 심록암 벽돌 반 블록",
"block.create.small_veridium_brick_stairs": "UNLOCALIZED: Small Veridium Brick Stairs", "block.create.small_veridium_brick_stairs": "작은 심록암 벽돌 계단",
"block.create.small_veridium_brick_wall": "UNLOCALIZED: Small Veridium Brick Wall", "block.create.small_veridium_brick_wall": "작은 심록암 벽돌 담장",
"block.create.small_veridium_bricks": "UNLOCALIZED: Small Veridium Bricks", "block.create.small_veridium_bricks": "작은 심록암 벽돌",
"block.create.smart_chute": "스마트 슈트", "block.create.smart_chute": "스마트 슈트",
"block.create.smart_fluid_pipe": "스마트 액체 파이프", "block.create.smart_fluid_pipe": "스마트 액체 파이프",
"block.create.speedometer": "속도 계측기", "block.create.speedometer": "속도 계측기",
@ -481,45 +481,45 @@
"block.create.stressometer": "피로도 계측기", "block.create.stressometer": "피로도 계측기",
"block.create.tiled_glass": "타일 유리", "block.create.tiled_glass": "타일 유리",
"block.create.tiled_glass_pane": "타일 유리판", "block.create.tiled_glass_pane": "타일 유리판",
"block.create.tuff_pillar": "UNLOCALIZED: Tuff Pillar", "block.create.tuff_pillar": "응회암 기둥",
"block.create.turntable": "돌림판", "block.create.turntable": "돌림판",
"block.create.veridium": "UNLOCALIZED: Veridium", "block.create.veridium": "심록암",
"block.create.veridium_pillar": "UNLOCALIZED: Veridium Pillar", "block.create.veridium_pillar": "심록암 기둥",
"block.create.vertical_framed_glass": "수직 유리", "block.create.vertical_framed_glass": "수직 유리",
"block.create.vertical_framed_glass_pane": "수직 유리판", "block.create.vertical_framed_glass_pane": "수직 유리판",
"block.create.warped_window": "뒤틀린 유리창", "block.create.warped_window": "뒤틀린 유리창",
"block.create.warped_window_pane": "뒤틀린 유리판", "block.create.warped_window_pane": "뒤틀린 유리판",
"block.create.water_wheel": "물레바퀴", "block.create.water_wheel": "물레바퀴",
"block.create.waxed_copper_shingle_slab": "UNLOCALIZED: Waxed Copper Shingle Slab", "block.create.waxed_copper_shingle_slab": "밀랍칠한 구리 판자 반 블록",
"block.create.waxed_copper_shingle_stairs": "UNLOCALIZED: Waxed Copper Shingle Stairs", "block.create.waxed_copper_shingle_stairs": "밀랍칠한 구리 판자 계단",
"block.create.waxed_copper_shingles": "UNLOCALIZED: Waxed Copper Shingles", "block.create.waxed_copper_shingles": "밀랍칠한 구리 판자",
"block.create.waxed_copper_tile_slab": "UNLOCALIZED: Waxed Copper Tile Slab", "block.create.waxed_copper_tile_slab": "밀랍칠한 구리 타일 반 블록",
"block.create.waxed_copper_tile_stairs": "UNLOCALIZED: Waxed Copper Tile Stairs", "block.create.waxed_copper_tile_stairs": "밀랍칠한 구리 타일 계단",
"block.create.waxed_copper_tiles": "UNLOCALIZED: Waxed Copper Tiles", "block.create.waxed_copper_tiles": "밀랍칠한 구리 타일",
"block.create.waxed_exposed_copper_shingle_slab": "UNLOCALIZED: Waxed Exposed Copper Shingle Slab", "block.create.waxed_exposed_copper_shingle_slab": "밀랍칠한 약간 녹슨 구리 판자 반 블록",
"block.create.waxed_exposed_copper_shingle_stairs": "UNLOCALIZED: Waxed Exposed Copper Shingle Stairs", "block.create.waxed_exposed_copper_shingle_stairs": "밀랍칠한 약간 녹슨 구리 판자 계단",
"block.create.waxed_exposed_copper_shingles": "UNLOCALIZED: Waxed Exposed Copper Shingles", "block.create.waxed_exposed_copper_shingles": "밀랍칠한 약간 녹슨 구리 판자",
"block.create.waxed_exposed_copper_tile_slab": "UNLOCALIZED: Waxed Exposed Copper Tile Slab", "block.create.waxed_exposed_copper_tile_slab": "밀랍칠한 약간 녹슨 구리 타일 반 블록",
"block.create.waxed_exposed_copper_tile_stairs": "UNLOCALIZED: Waxed Exposed Copper Tile Stairs", "block.create.waxed_exposed_copper_tile_stairs": "밀랍칠한 약간 녹슨 구리 타일 계단",
"block.create.waxed_exposed_copper_tiles": "UNLOCALIZED: Waxed Exposed Copper Tiles", "block.create.waxed_exposed_copper_tiles": "밀랍칠한 약간 녹슨 구리 타일",
"block.create.waxed_oxidized_copper_shingle_slab": "UNLOCALIZED: Waxed Oxidized Copper Shingle Slab", "block.create.waxed_oxidized_copper_shingle_slab": "밀랍칠한 산화된 구리 판자 반 블록",
"block.create.waxed_oxidized_copper_shingle_stairs": "UNLOCALIZED: Waxed Oxidized Copper Shingle Stairs", "block.create.waxed_oxidized_copper_shingle_stairs": "밀랍칠한 산화된 구리 판자 계단",
"block.create.waxed_oxidized_copper_shingles": "UNLOCALIZED: Waxed Oxidized Copper Shingles", "block.create.waxed_oxidized_copper_shingles": "밀랍칠한 산화된 구리 판자",
"block.create.waxed_oxidized_copper_tile_slab": "UNLOCALIZED: Waxed Oxidized Copper Tile Slab", "block.create.waxed_oxidized_copper_tile_slab": "밀랍칠한 산화된 구리 타일 반 블록",
"block.create.waxed_oxidized_copper_tile_stairs": "UNLOCALIZED: Waxed Oxidized Copper Tile Stairs", "block.create.waxed_oxidized_copper_tile_stairs": "밀랍칠한 산화된 구리 타일 계단",
"block.create.waxed_oxidized_copper_tiles": "UNLOCALIZED: Waxed Oxidized Copper Tiles", "block.create.waxed_oxidized_copper_tiles": "밀랍칠한 산화된 구리 타일",
"block.create.waxed_weathered_copper_shingle_slab": "UNLOCALIZED: Waxed Weathered Copper Shingle Slab", "block.create.waxed_weathered_copper_shingle_slab": "밀랍칠한 녹슨 구리 판자 반 블록",
"block.create.waxed_weathered_copper_shingle_stairs": "UNLOCALIZED: Waxed Weathered Copper Shingle Stairs", "block.create.waxed_weathered_copper_shingle_stairs": "밀랍칠한 녹슨 구리 판자 계단",
"block.create.waxed_weathered_copper_shingles": "UNLOCALIZED: Waxed Weathered Copper Shingles", "block.create.waxed_weathered_copper_shingles": "밀랍칠한 녹슨 구리 판자",
"block.create.waxed_weathered_copper_tile_slab": "UNLOCALIZED: Waxed Weathered Copper Tile Slab", "block.create.waxed_weathered_copper_tile_slab": "밀랍칠한 녹슨 구리 타일 반 블록",
"block.create.waxed_weathered_copper_tile_stairs": "UNLOCALIZED: Waxed Weathered Copper Tile Stairs", "block.create.waxed_weathered_copper_tile_stairs": "밀랍칠한 녹슨 구리 타일 계단",
"block.create.waxed_weathered_copper_tiles": "UNLOCALIZED: Waxed Weathered Copper Tiles", "block.create.waxed_weathered_copper_tiles": "밀랍칠한 녹슨 구리 타일",
"block.create.weathered_copper_shingle_slab": "UNLOCALIZED: Weathered Copper Shingle Slab", "block.create.weathered_copper_shingle_slab": "녹슨 구리 판자 반 블록",
"block.create.weathered_copper_shingle_stairs": "UNLOCALIZED: Weathered Copper Shingle Stairs", "block.create.weathered_copper_shingle_stairs": "녹슨 구리 판자 계단",
"block.create.weathered_copper_shingles": "UNLOCALIZED: Weathered Copper Shingles", "block.create.weathered_copper_shingles": "녹슨 구리 판자",
"block.create.weathered_copper_tile_slab": "UNLOCALIZED: Weathered Copper Tile Slab", "block.create.weathered_copper_tile_slab": "녹슨 구리 타일 반 블록",
"block.create.weathered_copper_tile_stairs": "UNLOCALIZED: Weathered Copper Tile Stairs", "block.create.weathered_copper_tile_stairs": "녹슨 구리 타일 계단",
"block.create.weathered_copper_tiles": "UNLOCALIZED: Weathered Copper Tiles", "block.create.weathered_copper_tiles": "녹슨 구리 타일",
"block.create.weighted_ejector": "투척기", "block.create.weighted_ejector": "투척기",
"block.create.white_nixie_tube": "하얀색 닉시관", "block.create.white_nixie_tube": "하얀색 닉시관",
"block.create.white_sail": "하얀색 날개", "block.create.white_sail": "하얀색 날개",
@ -591,7 +591,7 @@
"item.create.electron_tube": "전지 튜브", "item.create.electron_tube": "전지 튜브",
"item.create.empty_blaze_burner": "빈 블레이즈 버너", "item.create.empty_blaze_burner": "빈 블레이즈 버너",
"item.create.empty_schematic": "빈 청사진", "item.create.empty_schematic": "빈 청사진",
"item.create.experience_nugget": "UNLOCALIZED: Nugget of Experience", "item.create.experience_nugget": "경험의 조각",
"item.create.extendo_grip": "외장형 연장 팔", "item.create.extendo_grip": "외장형 연장 팔",
"item.create.filter": "필터 틀", "item.create.filter": "필터 틀",
"item.create.furnace_minecart_contraption": "화로가 실린 광산 수레 구조물", "item.create.furnace_minecart_contraption": "화로가 실린 광산 수레 구조물",
@ -613,7 +613,7 @@
"item.create.powdered_obsidian": "흑요석 가루", "item.create.powdered_obsidian": "흑요석 가루",
"item.create.precision_mechanism": "정밀 기계장치", "item.create.precision_mechanism": "정밀 기계장치",
"item.create.propeller": "프로펠러", "item.create.propeller": "프로펠러",
"item.create.raw_zinc": "UNLOCALIZED: Raw Zinc", "item.create.raw_zinc": "아연 원석",
"item.create.red_sand_paper": "붉은 사포", "item.create.red_sand_paper": "붉은 사포",
"item.create.refined_radiance": "정제된 광채", "item.create.refined_radiance": "정제된 광채",
"item.create.rose_quartz": "장밋빛 석영", "item.create.rose_quartz": "장밋빛 석영",
@ -750,7 +750,7 @@
"advancement.create.nixie_tube": "나는 스타일있게 표시해", "advancement.create.nixie_tube": "나는 스타일있게 표시해",
"advancement.create.nixie_tube.desc": "닉시관을 만들고 설치하세요.", "advancement.create.nixie_tube.desc": "닉시관을 만들고 설치하세요.",
"advancement.create.deployer": "찌르고, 설치하고, 공격!", "advancement.create.deployer": "찌르고, 설치하고, 공격!",
"advancement.create.deployer.desc": "당신의 분신, 배포기를 설치하고 작동시키세요.", "advancement.create.deployer.desc": "당신의 분신, 기계 손을 설치하고 작동시키세요.",
"advancement.create.speed_controller": "엔지니어들이 이 장치를 싫어합니다", "advancement.create.speed_controller": "엔지니어들이 이 장치를 싫어합니다",
"advancement.create.speed_controller.desc": "궁극의 회전속도 변경장치, 회전 속도 컨트롤러를 설치하세요.", "advancement.create.speed_controller.desc": "궁극의 회전속도 변경장치, 회전 속도 컨트롤러를 설치하세요.",
"advancement.create.flywheel": "공장의 심장", "advancement.create.flywheel": "공장의 심장",
@ -768,7 +768,7 @@
"advancement.create.arm_blaze_burner": "연료를 줄 수 있는 정도의 능력", "advancement.create.arm_blaze_burner": "연료를 줄 수 있는 정도의 능력",
"advancement.create.arm_blaze_burner.desc": "기계 팔이 블레이즈 버너에 연료를 넣도록 하세요.", "advancement.create.arm_blaze_burner.desc": "기계 팔이 블레이즈 버너에 연료를 넣도록 하세요.",
"advancement.create.fist_bump": "하이파이브!", "advancement.create.fist_bump": "하이파이브!",
"advancement.create.fist_bump.desc": "두 배포기를 서로 부딫치게 하세요.", "advancement.create.fist_bump.desc": "두 기계 손을 서로 부딫치게 하세요.",
"advancement.create.crushing_wheel": "한 쌍의 거인들", "advancement.create.crushing_wheel": "한 쌍의 거인들",
"advancement.create.crushing_wheel.desc": "더 많은 재료를 더 효율적으로 갈 분쇄 휠을 만드세요.", "advancement.create.crushing_wheel.desc": "더 많은 재료를 더 효율적으로 갈 분쇄 휠을 만드세요.",
"advancement.create.blaze_cake": "폭주", "advancement.create.blaze_cake": "폭주",
@ -805,7 +805,7 @@
"death.attack.create.cuckoo_clock_explosion": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다", "death.attack.create.cuckoo_clock_explosion": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다",
"death.attack.create.cuckoo_clock_explosion.player": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다", "death.attack.create.cuckoo_clock_explosion.player": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다",
"create.block.deployer.damage_source_name": "배포기", "create.block.deployer.damage_source_name": "계 손",
"create.block.cart_assembler.invalid": "카트 조립기를 레일 위에 설치하세요", "create.block.cart_assembler.invalid": "카트 조립기를 레일 위에 설치하세요",
"create.menu.return": "메뉴로 돌아가기", "create.menu.return": "메뉴로 돌아가기",
@ -828,7 +828,7 @@
"create.recipe.fan_blasting.fan": "용암과 선풍기", "create.recipe.fan_blasting.fan": "용암과 선풍기",
"create.recipe.pressing": "압착", "create.recipe.pressing": "압착",
"create.recipe.mixing": "혼합", "create.recipe.mixing": "혼합",
"create.recipe.deploying": "Deploying", "create.recipe.deploying": "행동 모방",
"create.recipe.automatic_shapeless": "무형 자동 조합", "create.recipe.automatic_shapeless": "무형 자동 조합",
"create.recipe.automatic_brewing": "자동 양조", "create.recipe.automatic_brewing": "자동 양조",
"create.recipe.packing": "압축", "create.recipe.packing": "압축",
@ -1101,12 +1101,12 @@
"create.gui.schematicannon.option.replaceWithAny": "온전한 블록을 아무 재료로 대체함", "create.gui.schematicannon.option.replaceWithAny": "온전한 블록을 아무 재료로 대체함",
"create.gui.schematicannon.option.replaceWithEmpty": "온전한 블록을 공기로 채움", "create.gui.schematicannon.option.replaceWithEmpty": "온전한 블록을 공기로 채움",
"create.gui.schematicannon.option.skipMissing": "부족한 블록을 무시하고 진행", "create.gui.schematicannon.option.skipMissing": "부족한 블록을 무시하고 진행",
"create.gui.schematicannon.option.skipTileEntities": "타일 엔티티를 보호", "create.gui.schematicannon.option.skipTileEntities": "UNLOCALIZED: Protect Tile Entities",
"create.gui.schematicannon.slot.gunpowder": "화약을 넣어 대포 연료를 채우세요", "create.gui.schematicannon.slot.gunpowder": "화약을 넣어 대포 연료를 채우세요",
"create.gui.schematicannon.slot.listPrinter": "책을 넣어 건축 재료 체크리스트를 인쇄하세요", "create.gui.schematicannon.slot.listPrinter": "책을 넣어 건축 재료 체크리스트를 인쇄하세요",
"create.gui.schematicannon.slot.schematic": "여기에 청사진을 넣으세요. 건설 구역이 설정되어 있어야 합니다.", "create.gui.schematicannon.slot.schematic": "여기에 청사진을 넣으세요. 건설 구역이 설정되어 있어야 합니다.",
"create.gui.schematicannon.option.skipMissing.description": "만약 대포가 설치에 필요한 블록을 찾지 못할 경우,건너뛰고 다음 블록 설치를 진행합니다.", "create.gui.schematicannon.option.skipMissing.description": "만약 대포가 설치에 필요한 블록을 찾지 못할 경우,건너뛰고 다음 블록 설치를 진행합니다.",
"create.gui.schematicannon.option.skipTileEntities.description": "대포가 상세정보가 든 상자같은 타일 엔티티 설치를 무시합니다.", "create.gui.schematicannon.option.skipTileEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.",
"create.gui.schematicannon.option.dontReplaceSolid.description": "대포가 작업구역의 온전한 블록을 대체하지 않습니다.", "create.gui.schematicannon.option.dontReplaceSolid.description": "대포가 작업구역의 온전한 블록을 대체하지 않습니다.",
"create.gui.schematicannon.option.replaceWithSolid.description": "대포가 작업구역의 온전한 블록을 대포가 가진 재료로 대체합니다.", "create.gui.schematicannon.option.replaceWithSolid.description": "대포가 작업구역의 온전한 블록을 대포가 가진 재료로 대체합니다.",
"create.gui.schematicannon.option.replaceWithAny.description": "대포가 작업구역의 온전한 블록을 대포가 가진 어떠한 재료로든 대체합니다.", "create.gui.schematicannon.option.replaceWithAny.description": "대포가 작업구역의 온전한 블록을 대포가 가진 어떠한 재료로든 대체합니다.",
@ -1131,7 +1131,7 @@
"create.schematicannon.status.schematicExpired": "청사진 파일이 제거됨", "create.schematicannon.status.schematicExpired": "청사진 파일이 제거됨",
"create.materialChecklist": "재료 목록", "create.materialChecklist": "재료 목록",
"create.materialChecklist.blocksNotLoaded": "* 경고 *\n\n관련된 청크가 불러와지지 않아 재료 목록이 부정확할 수 있습니다.", "create.materialChecklist.blocksNotLoaded": "* 경고 *\n\n관련된 청크가 불러올 수 없어 재료 목록이 부정확할 수 있습니다.",
"create.gui.filter.deny_list": "블랙리스트", "create.gui.filter.deny_list": "블랙리스트",
"create.gui.filter.deny_list.description": "위에 등록된 아이템은 통과할 수 없습니다. 빈 블랙리스트는 모든 아이템을 통과시킵니다.", "create.gui.filter.deny_list.description": "위에 등록된 아이템은 통과할 수 없습니다. 빈 블랙리스트는 모든 아이템을 통과시킵니다.",
@ -1306,8 +1306,8 @@
"create.hint.mechanical_arm_no_targets": "이 _기계 팔_은 _목표_가 설정되지 않았습니다. _기계 팔을 손에 들고_ 벨트, 아이템 거치대, 퍼널을 _우클릭_하여 목표로 지정하세요.", "create.hint.mechanical_arm_no_targets": "이 _기계 팔_은 _목표_가 설정되지 않았습니다. _기계 팔을 손에 들고_ 벨트, 아이템 거치대, 퍼널을 _우클릭_하여 목표로 지정하세요.",
"create.hint.empty_bearing.title": "베어링 업데이트", "create.hint.empty_bearing.title": "베어링 업데이트",
"create.hint.empty_bearing": "_맨 손_으로 베어링을 _우클릭_하여 구조물을 _부착_하세요.", "create.hint.empty_bearing": "_맨 손_으로 베어링을 _우클릭_하여 구조물을 _부착_하세요.",
"create.hint.full_deployer.title": "배포기 아이템 과적", "create.hint.full_deployer.title": "계 손 아이템 과적",
"create.hint.full_deployer": "이 _배포기_는 _배출_할 아이템을 가지고 있습니다. 호퍼 , 퍼널 등을 이용해 아이템을 빼내세요.", "create.hint.full_deployer": "이 _기계 손_은 _배출_할 아이템을 가지고 있습니다. 호퍼 , 퍼널 등을 이용해 아이템을 빼내세요.",
"create.gui.config.overlay1": "Hi :)", "create.gui.config.overlay1": "Hi :)",
"create.gui.config.overlay2": "This is a sample overlay", "create.gui.config.overlay2": "This is a sample overlay",
@ -1338,7 +1338,7 @@
"create.subtitle.mechanical_press_activation_belt": "압착기가 작동함", "create.subtitle.mechanical_press_activation_belt": "압착기가 작동함",
"create.subtitle.fwoomp": "감자포를 쏨", "create.subtitle.fwoomp": "감자포를 쏨",
"create.subtitle.worldshaper_place": "세계편집기가 쏨", "create.subtitle.worldshaper_place": "세계편집기가 쏨",
"create.subtitle.sanding_long": "UNLOCALIZED: Sanding noises", "create.subtitle.sanding_long": "사포를 사용함",
"create.subtitle.crushing_1": "분쇄되는 소리", "create.subtitle.crushing_1": "분쇄되는 소리",
"create.subtitle.depot_slide": "아이템이 미끄러짐", "create.subtitle.depot_slide": "아이템이 미끄러짐",
"create.subtitle.saw_activate_stone": "톱이 작동함", "create.subtitle.saw_activate_stone": "톱이 작동함",
@ -1351,7 +1351,7 @@
"create.subtitle.controller_put": "조작기를 놓음", "create.subtitle.controller_put": "조작기를 놓음",
"create.subtitle.cranking": "크랭크가 돌아감", "create.subtitle.cranking": "크랭크가 돌아감",
"create.subtitle.wrench_remove": "장치가 부숴짐", "create.subtitle.wrench_remove": "장치가 부숴짐",
"create.subtitle.sanding_short": "UNLOCALIZED: Sanding noises", "create.subtitle.sanding_short": "사포를 사용함",
"create.subtitle.cogs": "톱니바퀴가 돌아감", "create.subtitle.cogs": "톱니바퀴가 돌아감",
"create.subtitle.slime_added": "슬라임이 철퍽거림", "create.subtitle.slime_added": "슬라임이 철퍽거림",
"create.subtitle.wrench_rotate": "렌치를 사용함", "create.subtitle.wrench_rotate": "렌치를 사용함",
@ -1545,7 +1545,7 @@
"block.create.controller_rail.tooltip.behaviour1": "_신호 세기에 따라_ 지나가는 수레를 _가속, 감속_합니다. 레드스톤 신호는 다른 방향 레일에도 전달됩니다. 두 방향레일에 다른 세기를 전달하면 중간 레일들은 두 세기 사이의 신호를 받습니다.", "block.create.controller_rail.tooltip.behaviour1": "_신호 세기에 따라_ 지나가는 수레를 _가속, 감속_합니다. 레드스톤 신호는 다른 방향 레일에도 전달됩니다. 두 방향레일에 다른 세기를 전달하면 중간 레일들은 두 세기 사이의 신호를 받습니다.",
"item.create.sand_paper.tooltip": "SAND PAPER", "item.create.sand_paper.tooltip": "SAND PAPER",
"item.create.sand_paper.tooltip.summary": "재료들을 _윤내는 데_ 쓰이는 거친 종이입니다. 배포기가 자동으로 쓸 수 있습니다.", "item.create.sand_paper.tooltip.summary": "재료들을 _윤내는 데_ 쓰이는 거친 종이입니다. 기계 손이 자동으로 쓸 수 있습니다.",
"item.create.sand_paper.tooltip.condition1": "사용할 때", "item.create.sand_paper.tooltip.condition1": "사용할 때",
"item.create.sand_paper.tooltip.behaviour1": "_다른 손_에있는 아이템과 _바닥에 있는 아이템_을 윤냅니다.", "item.create.sand_paper.tooltip.behaviour1": "_다른 손_에있는 아이템과 _바닥에 있는 아이템_을 윤냅니다.",
@ -1602,10 +1602,10 @@
"item.create.minecart_coupling.tooltip.condition1": "광산 수레에 사용할 때", "item.create.minecart_coupling.tooltip.condition1": "광산 수레에 사용할 때",
"item.create.minecart_coupling.tooltip.behaviour1": "_두 수레를 묶어_ 이동할 때 고정된 _거리를 유지하게_ 합니다.", "item.create.minecart_coupling.tooltip.behaviour1": "_두 수레를 묶어_ 이동할 때 고정된 _거리를 유지하게_ 합니다.",
"item.create.experience_nugget.tooltip": "UNLOCALIZED: NUGGET OF EXPERIENCE", "item.create.experience_nugget.tooltip": "NUGGET OF EXPERIENCE",
"item.create.experience_nugget.tooltip.summary": "UNLOCALIZED: _Ding!_ A speck of _inspiration_ from your fantastic inventions.", "item.create.experience_nugget.tooltip.summary": "_띵!_ 당신의 멋진 발명품에서 탄생한 _영감_의 알맹이입니다.",
"item.create.experience_nugget.tooltip.condition1": "UNLOCALIZED: When Used", "item.create.experience_nugget.tooltip.condition1": "사용했을 때",
"item.create.experience_nugget.tooltip.behaviour1": "UNLOCALIZED: _Redeems_ _Experience_ points contained within.", "item.create.experience_nugget.tooltip.behaviour1": "담겨져 있던 _경험치_를 _배출_합니다.",
"block.create.peculiar_bell.tooltip": "PECULIAR BELL", "block.create.peculiar_bell.tooltip": "PECULIAR BELL",
"block.create.peculiar_bell.tooltip.summary": "장식을 위한 황동 종입니다. 영혼 불꽃 위에 설치하면 _기이한_ 일이 일어난다고 합니다...", "block.create.peculiar_bell.tooltip.summary": "장식을 위한 황동 종입니다. 영혼 불꽃 위에 설치하면 _기이한_ 일이 일어난다고 합니다...",
@ -1725,7 +1725,7 @@
"create.ponder.blaze_burner.text_1": "블레이즈 버너는 대야 안에서 처리되는 아이템에 열을 제공합니다.", "create.ponder.blaze_burner.text_1": "블레이즈 버너는 대야 안에서 처리되는 아이템에 열을 제공합니다.",
"create.ponder.blaze_burner.text_2": "이런 식으로, 블레이즈는 가연성 물질을 먹습니다.", "create.ponder.blaze_burner.text_2": "이런 식으로, 블레이즈는 가연성 물질을 먹습니다.",
"create.ponder.blaze_burner.text_3": "블레이즈 케아크를 먹이면 버너는 더 뜨겁게 타오릅니다.", "create.ponder.blaze_burner.text_3": "블레이즈 케아크를 먹이면 버너는 더 뜨겁게 타오릅니다.",
"create.ponder.blaze_burner.text_4": "이 시스템은 배포기나 기계 팔을 이용해 자동화될 수 있습니다.", "create.ponder.blaze_burner.text_4": "이 시스템은 계 손이나 기계 팔을 이용해 자동화될 수 있습니다.",
"create.ponder.brass_funnel.header": "황동 퍼널", "create.ponder.brass_funnel.header": "황동 퍼널",
"create.ponder.brass_funnel.text_1": "안산암 퍼널는 아이템 한 개만 뽑아냅니다.", "create.ponder.brass_funnel.text_1": "안산암 퍼널는 아이템 한 개만 뽑아냅니다.",
@ -1824,10 +1824,10 @@
"create.ponder.cogwheel.text_1": "톱니바퀴는 인접한 톱니바퀴에 동력을 전달합니다.", "create.ponder.cogwheel.text_1": "톱니바퀴는 인접한 톱니바퀴에 동력을 전달합니다.",
"create.ponder.cogwheel.text_2": "이렇게 연결된 톱니바퀴 축은 반대방향으로 돌아갑니다.", "create.ponder.cogwheel.text_2": "이렇게 연결된 톱니바퀴 축은 반대방향으로 돌아갑니다.",
"create.ponder.cogwheel_casing.header": "UNLOCALIZED: Encasing Cogwheels", "create.ponder.cogwheel_casing.header": "톱니바쿼에 케이스 씌우기",
"create.ponder.cogwheel_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Cogwheels", "create.ponder.cogwheel_casing.text_1": "황동, 안산암 케이스는 톱니바퀴를 꾸밀 때 사용할 수 있습니다.",
"create.ponder.cogwheel_casing.text_2": "UNLOCALIZED: Components added after encasing will not connect to the shaft outputs", "create.ponder.cogwheel_casing.text_2": "기본적으로 케이스를 씌운 톱니바퀴는 축과 연결되지 않습니다.",
"create.ponder.cogwheel_casing.text_3": "UNLOCALIZED: The Wrench can be used to toggle connections", "create.ponder.cogwheel_casing.text_3": "렌치를 사용하여 축과 연결하거나 차단할 수 있습니다.",
"create.ponder.creative_fluid_tank.header": "크리에이티브 탱크", "create.ponder.creative_fluid_tank.header": "크리에이티브 탱크",
"create.ponder.creative_fluid_tank.text_1": "크리에이티브 탱크는 무한히 액체를 공급합니다.", "create.ponder.creative_fluid_tank.text_1": "크리에이티브 탱크는 무한히 액체를 공급합니다.",
@ -1845,41 +1845,41 @@
"create.ponder.crushing_wheels.text_3": "위에서 투입된 아이템은 가공되고, 아래로 떨어집니다.", "create.ponder.crushing_wheels.text_3": "위에서 투입된 아이템은 가공되고, 아래로 떨어집니다.",
"create.ponder.crushing_wheels.text_4": "이 과정은 자동화 될 수 있습니다.", "create.ponder.crushing_wheels.text_4": "이 과정은 자동화 될 수 있습니다.",
"create.ponder.deployer.header": "배포기 이용하기", "create.ponder.deployer.header": "계 손 이용하기",
"create.ponder.deployer.text_1": "동력을 받으면, 배포기는 플레이어의 행동을 흉내냅니다.", "create.ponder.deployer.text_1": "동력을 받으면, 기계 손은 플레이어의 행동을 흉내냅니다.",
"create.ponder.deployer.text_10": "손에다 우클릭하여 배포기가 쓸 아이템을 건네세요.", "create.ponder.deployer.text_10": "손에다 우클릭하여 기계 손이 쓸 아이템을 건네세요.",
"create.ponder.deployer.text_11": "아이템은 자동으로 투입될 수 있습니다.", "create.ponder.deployer.text_11": "아이템은 자동으로 투입될 수 있습니다.",
"create.ponder.deployer.text_12": "필터 슬롯도 있습니다.", "create.ponder.deployer.text_12": "필터 슬롯도 있습니다.",
"create.ponder.deployer.text_13": "필터가 설정되면, 필터에 맞는 아이템을 들고있을 때 작동합니다.", "create.ponder.deployer.text_13": "필터가 설정되면, 필터에 맞는 아이템을 들고있을 때 작동합니다.",
"create.ponder.deployer.text_14": "필터에 맞는 아이템만 들어가며...", "create.ponder.deployer.text_14": "필터에 맞는 아이템만 들어가며...",
"create.ponder.deployer.text_15": "...그 외의 아이템은 배출됩니다.", "create.ponder.deployer.text_15": "...그 외의 아이템은 배출됩니다.",
"create.ponder.deployer.text_2": "배포기는 한 칸 떨어진 블록에 상호작용합니다.", "create.ponder.deployer.text_2": "기계 손은 한 칸 떨어진 블록에 상호작용합니다.",
"create.ponder.deployer.text_3": "바로 앞에 블록이 있어도 상괸없습니다.", "create.ponder.deployer.text_3": "바로 앞에 블록이 있어도 상괸없습니다.",
"create.ponder.deployer.text_4": "배포기가 할 수 있는 것:", "create.ponder.deployer.text_4": "기계 손이 할 수 있는 것:",
"create.ponder.deployer.text_5": "블록 설치하기", "create.ponder.deployer.text_5": "블록 설치하기",
"create.ponder.deployer.text_6": "아이템 사용하기", "create.ponder.deployer.text_6": "아이템 사용하기",
"create.ponder.deployer.text_7": "블록 활성화하기", "create.ponder.deployer.text_7": "블록 활성화하기",
"create.ponder.deployer.text_8": "블록 수확하기", "create.ponder.deployer.text_8": "블록 수확하기",
"create.ponder.deployer.text_9": "몹 공격하기", "create.ponder.deployer.text_9": "몹 공격하기",
"create.ponder.deployer_contraption.header": "구조물에서의 배포기", "create.ponder.deployer_contraption.header": "구조물에서의 계 손",
"create.ponder.deployer_contraption.text_1": "배포기가 움직이는 구조물의 일부면...", "create.ponder.deployer_contraption.text_1": "기계 손이 움직이는 구조물의 일부면...",
"create.ponder.deployer_contraption.text_2": "...배포기는 움직일 때마다 작동하며, 구조물에 붙어있는 아무 보관함의 아이템을 사용합니다.", "create.ponder.deployer_contraption.text_2": "...기계 손은 움직일 때마다 작동하며, 구조물에 붙어있는 아무 보관함의 아이템을 사용합니다.",
"create.ponder.deployer_contraption.text_3": "필터를 이용해 어떤 아이템을 사용할 지 정할 수 있습니다.", "create.ponder.deployer_contraption.text_3": "필터를 이용해 어떤 아이템을 사용할 지 정할 수 있습니다.",
"create.ponder.deployer_modes.header": "배포기의 작동 방식", "create.ponder.deployer_modes.header": "계 손의 작동 방식",
"create.ponder.deployer_modes.text_1": "배포기는 기본적으로 우클릭을 흉내냅니다.", "create.ponder.deployer_modes.text_1": "기계 손은 기본적으로 우클릭을 흉내냅니다.",
"create.ponder.deployer_modes.text_2": "렌치를 이용해, 좌클릭을 흉내내도록 설정할 수 있습니다.", "create.ponder.deployer_modes.text_2": "렌치를 이용해, 좌클릭을 흉내내도록 설정할 수 있습니다.",
"create.ponder.deployer_processing.header": "배포기로 아이템 가공하기", "create.ponder.deployer_processing.header": "계 손으로 아이템 가공하기",
"create.ponder.deployer_processing.text_1": "배포기가 적절한 아이템을 가지고 있으면, 아래 있는 아이템을 가공합니다.", "create.ponder.deployer_processing.text_1": "기계 손이 적절한 아이템을 가지고 있으면, 아래 있는 아이템을 가공합니다.",
"create.ponder.deployer_processing.text_2": "가공할 아이템은 배포기 아래에 떨구거나 아이템 거치대에 올려두어야 합니다.", "create.ponder.deployer_processing.text_2": "가공할 아이템은 계 손 아래에 떨구거나 아이템 거치대에 올려두어야 합니다.",
"create.ponder.deployer_processing.text_3": "아이템이 벨트에 있으면...", "create.ponder.deployer_processing.text_3": "아이템이 벨트에 있으면...",
"create.ponder.deployer_processing.text_4": "...압착기가 알아서 아이템 이동을 멈추고 가공합니다.", "create.ponder.deployer_processing.text_4": "...압착기가 알아서 아이템 이동을 멈추고 가공합니다.",
"create.ponder.deployer_redstone.header": "레드스톤과 배포기", "create.ponder.deployer_redstone.header": "레드스톤과 계 손",
"create.ponder.deployer_redstone.text_1": "레드스톤 신호를 받으면, 배포기는 작동하지 않습니다.", "create.ponder.deployer_redstone.text_1": "레드스톤 신호를 받으면, 기계 손은 작동하지 않습니다.",
"create.ponder.deployer_redstone.text_2": "작동을 멈추기 전에, 배포기는 입력된 행동을 마무리합니다.", "create.ponder.deployer_redstone.text_2": "작동을 멈추기 전에, 기계 손은 입력된 행동을 마무리합니다.",
"create.ponder.deployer_redstone.text_3": "따라서 부정 펄스는 한 번만 작동하게 합니다.", "create.ponder.deployer_redstone.text_3": "따라서 부정 펄스는 한 번만 작동하게 합니다.",
"create.ponder.depot.header": "아이템 거치대 사용하기", "create.ponder.depot.header": "아이템 거치대 사용하기",
@ -2049,16 +2049,16 @@
"create.ponder.item_drain.text_4": "...아이템은 굴라가며 담긴 액체를 비웁니다.", "create.ponder.item_drain.text_4": "...아이템은 굴라가며 담긴 액체를 비웁니다.",
"create.ponder.item_drain.text_5": "배수구 탱크에 있는 액체는 파이프로 옮길 수 있습니다.", "create.ponder.item_drain.text_5": "배수구 탱크에 있는 액체는 파이프로 옮길 수 있습니다.",
"create.ponder.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault", "create.ponder.item_vault_sizes.header": "아이템 금고의 크기",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity", "create.ponder.item_vault_sizes.text_1": "아이템 금고를 여러개 연결하여 총량을 늘릴 수 있습니다.",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...", "create.ponder.item_vault_sizes.text_2": "최대 너비는 3 블록이고...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter", "create.ponder.item_vault_sizes.text_3": "...길이는 너비의 3배까지 늘릴 수 있습니다.",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults", "create.ponder.item_vault_storage.header": "금고에 아이템 보관하기",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items", "create.ponder.item_vault_storage.text_1": "아이템 금고는 많은 아이템을 보관할 수 있습니다.",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually", "create.ponder.item_vault_storage.text_2": "하지만, 플레이어가 직접 꺼내거나 보관할 수는 없습니다.",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...", "create.ponder.item_vault_storage.text_3": "아이템을 수송할 수 있는 모든 부품은 아이템을 넣거나...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container", "create.ponder.item_vault_storage.text_4": "...금고에서 아이템을 빼낼 수 있습니다",
"create.ponder.large_cogwheel.header": "큰 톱니바퀴로 동력 전달하기", "create.ponder.large_cogwheel.header": "큰 톱니바퀴로 동력 전달하기",
"create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 수직으로 서로 맞물립니다.", "create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 수직으로 서로 맞물립니다.",
@ -2263,17 +2263,17 @@
"create.ponder.powered_toggle_latch.text_3": "혹은 끕니다.", "create.ponder.powered_toggle_latch.text_3": "혹은 끕니다.",
"create.ponder.powered_toggle_latch.text_4": "레드스톤 토글 걸쇠는 직접 끄고 킬 수도 있습니다.", "create.ponder.powered_toggle_latch.text_4": "레드스톤 토글 걸쇠는 직접 끄고 킬 수도 있습니다.",
"create.ponder.pulse_extender.header": "UNLOCALIZED: Controlling signals using Pulse Extenders", "create.ponder.pulse_extender.header": "펄스 연장기로 신호 조절하기",
"create.ponder.pulse_extender.text_1": "UNLOCALIZED: Pulse Extenders can lengthen a signal passing through", "create.ponder.pulse_extender.text_1": "펄스 연장기는 지나가는 신호의 길이를 늘릴 수 있습니다.",
"create.ponder.pulse_extender.text_2": "UNLOCALIZED: They activate after a short delay...", "create.ponder.pulse_extender.text_2": "연장기는 짧은 딜레이 후에 작동하고...",
"create.ponder.pulse_extender.text_3": "UNLOCALIZED: ...and cool down for the configured duration", "create.ponder.pulse_extender.text_3": "...설정된 시간 이후에 꺼집니다.",
"create.ponder.pulse_extender.text_4": "UNLOCALIZED: Using the mouse wheel, the discharge time can be configured", "create.ponder.pulse_extender.text_4": "마우스 휠을 이용하여 연장 시간을 조절할 수 있습니다.",
"create.ponder.pulse_extender.text_5": "UNLOCALIZED: The configured duration can range up to 30 minutes", "create.ponder.pulse_extender.text_5": "최대 신호 연장 시간은 30분입니다",
"create.ponder.pulse_repeater.header": "펄스 중계기 사용하기", "create.ponder.pulse_repeater.header": "펄스 중계기 사용하기",
"create.ponder.pulse_repeater.text_1": "펄스 중계기는 어느 레드스톤 신호라도 1틱 신호로 바꿉니다.", "create.ponder.pulse_repeater.text_1": "펄스 중계기는 모든 레드스톤 신호를 1틱 신호로 바꿉니다.",
"create.ponder.pulse_repeater.text_2": "UNLOCALIZED: Using the mouse wheel, the charge time can be configured", "create.ponder.pulse_repeater.text_2": "마우스 휠을 이용하여 딜레이 시간을 조절할 수 있습니다.",
"create.ponder.pulse_repeater.text_3": "UNLOCALIZED: Configured delays can range up to 30 minutes", "create.ponder.pulse_repeater.text_3": "최대 신호 딜레이 시간은 30분입니다",
"create.ponder.radial_chassis.header": "원형 섀시를 이용해 블록 붙이기", "create.ponder.radial_chassis.header": "원형 섀시를 이용해 블록 붙이기",
"create.ponder.radial_chassis.text_1": "원형 섀시는 다른 원형 섀시와 이어집니다.", "create.ponder.radial_chassis.text_1": "원형 섀시는 다른 원형 섀시와 이어집니다.",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1673", "_": "Missing Localizations: 1556",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -9,8 +9,8 @@
"block.create.analog_lever": "Alavanca Analógica", "block.create.analog_lever": "Alavanca Analógica",
"block.create.andesite_belt_funnel": "Funil de Esteira de Andesito", "block.create.andesite_belt_funnel": "Funil de Esteira de Andesito",
"block.create.andesite_casing": "Revestimento de Andesito", "block.create.andesite_casing": "Revestimento de Andesito",
"block.create.andesite_encased_cogwheel": "UNLOCALIZED: Andesite Encased Cogwheel", "block.create.andesite_encased_cogwheel": "Roda dentada revestida com andesito",
"block.create.andesite_encased_large_cogwheel": "UNLOCALIZED: Andesite Encased Large Cogwheel", "block.create.andesite_encased_large_cogwheel": "Roda dentada grande revestida com andesito",
"block.create.andesite_encased_shaft": "Eixo revestido com latão", "block.create.andesite_encased_shaft": "Eixo revestido com latão",
"block.create.andesite_funnel": "Funil de Andesito", "block.create.andesite_funnel": "Funil de Andesito",
"block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar",
@ -21,7 +21,7 @@
"block.create.belt": "Esteira Mecânica", "block.create.belt": "Esteira Mecânica",
"block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window": "UNLOCALIZED: Birch Window",
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
"block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_nixie_tube": "Tubo nixie preto",
"block.create.black_sail": "Vela preta", "block.create.black_sail": "Vela preta",
"block.create.black_seat": "Assento preto", "block.create.black_seat": "Assento preto",
"block.create.black_toolbox": "Caixa de ferramentas preta", "block.create.black_toolbox": "Caixa de ferramentas preta",
@ -35,8 +35,8 @@
"block.create.brass_belt_funnel": "Funil de Esteira de Latão", "block.create.brass_belt_funnel": "Funil de Esteira de Latão",
"block.create.brass_block": "Bloco de Latão", "block.create.brass_block": "Bloco de Latão",
"block.create.brass_casing": "Revestimento de Latão", "block.create.brass_casing": "Revestimento de Latão",
"block.create.brass_encased_cogwheel": "UNLOCALIZED: Brass Encased Cogwheel", "block.create.brass_encased_cogwheel": "Roda dentada revestida com latão",
"block.create.brass_encased_large_cogwheel": "UNLOCALIZED: Brass Encased Large Cogwheel", "block.create.brass_encased_large_cogwheel": "Roda dentada grande revestida com latão",
"block.create.brass_encased_shaft": "Eixo Revestido com Latão", "block.create.brass_encased_shaft": "Eixo Revestido com Latão",
"block.create.brass_funnel": "Funil de Latão", "block.create.brass_funnel": "Funil de Latão",
"block.create.brass_tunnel": "Tunel de Latão", "block.create.brass_tunnel": "Tunel de Latão",
@ -72,7 +72,7 @@
"block.create.crimson_window_pane": "UNLOCALIZED: Crimson Window Pane", "block.create.crimson_window_pane": "UNLOCALIZED: Crimson Window Pane",
"block.create.crushing_wheel": "Roda de Moer", "block.create.crushing_wheel": "Roda de Moer",
"block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller",
"block.create.cuckoo_clock": "Relógio Cuckok", "block.create.cuckoo_clock": "Relógio Cuckoo",
"block.create.cut_andesite": "UNLOCALIZED: Cut Andesite", "block.create.cut_andesite": "UNLOCALIZED: Cut Andesite",
"block.create.cut_andesite_brick_slab": "UNLOCALIZED: Cut Andesite Brick Slab", "block.create.cut_andesite_brick_slab": "UNLOCALIZED: Cut Andesite Brick Slab",
"block.create.cut_andesite_brick_stairs": "UNLOCALIZED: Cut Andesite Brick Stairs", "block.create.cut_andesite_brick_stairs": "UNLOCALIZED: Cut Andesite Brick Stairs",
@ -193,7 +193,7 @@
"block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window", "block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window",
"block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane", "block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane",
"block.create.deepslate_pillar": "UNLOCALIZED: Deepslate Pillar", "block.create.deepslate_pillar": "UNLOCALIZED: Deepslate Pillar",
"block.create.deepslate_zinc_ore": "UNLOCALIZED: Deepslate Zinc Ore", "block.create.deepslate_zinc_ore": "Minério de zinco de ardósia",
"block.create.deployer": "Implantador", "block.create.deployer": "Implantador",
"block.create.depot": "Depósito", "block.create.depot": "Depósito",
"block.create.diorite_pillar": "UNLOCALIZED: Diorite Pillar", "block.create.diorite_pillar": "UNLOCALIZED: Diorite Pillar",
@ -237,10 +237,10 @@
"block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", "block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane",
"block.create.hose_pulley": "Polia de Mangueira", "block.create.hose_pulley": "Polia de Mangueira",
"block.create.item_drain": "Dreno de Item", "block.create.item_drain": "Dreno de Item",
"block.create.item_vault": "UNLOCALIZED: Item Vault", "block.create.item_vault": "Cofre de itens",
"block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window": "UNLOCALIZED: Jungle Window",
"block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane",
"block.create.large_cogwheel": "Roda Dentada Grande", "block.create.large_cogwheel": "UNLOCALIZED: Large Cogwheel",
"block.create.layered_andesite": "UNLOCALIZED: Layered Andesite", "block.create.layered_andesite": "UNLOCALIZED: Layered Andesite",
"block.create.layered_asurine": "UNLOCALIZED: Layered Asurine", "block.create.layered_asurine": "UNLOCALIZED: Layered Asurine",
"block.create.layered_calcite": "UNLOCALIZED: Layered Calcite", "block.create.layered_calcite": "UNLOCALIZED: Layered Calcite",
@ -292,7 +292,7 @@
"block.create.mechanical_press": "Prensa Mecânica", "block.create.mechanical_press": "Prensa Mecânica",
"block.create.mechanical_pump": "Bomba Mecânica", "block.create.mechanical_pump": "Bomba Mecânica",
"block.create.mechanical_saw": "Serra Mecânica", "block.create.mechanical_saw": "Serra Mecânica",
"block.create.metal_bracket": "UNLOCALIZED: Metal Bracket", "block.create.metal_bracket": "Suporte de metal",
"block.create.millstone": "Pedra de Moer", "block.create.millstone": "Pedra de Moer",
"block.create.minecart_anchor": "Ancóra de carrinho de Mina", "block.create.minecart_anchor": "Ancóra de carrinho de Mina",
"block.create.mysterious_cuckoo_clock": "Relógio cuckoo", "block.create.mysterious_cuckoo_clock": "Relógio cuckoo",
@ -377,12 +377,12 @@
"block.create.polished_cut_veridium_slab": "UNLOCALIZED: Polished Cut Veridium Slab", "block.create.polished_cut_veridium_slab": "UNLOCALIZED: Polished Cut Veridium Slab",
"block.create.polished_cut_veridium_stairs": "UNLOCALIZED: Polished Cut Veridium Stairs", "block.create.polished_cut_veridium_stairs": "UNLOCALIZED: Polished Cut Veridium Stairs",
"block.create.polished_cut_veridium_wall": "UNLOCALIZED: Polished Cut Veridium Wall", "block.create.polished_cut_veridium_wall": "UNLOCALIZED: Polished Cut Veridium Wall",
"block.create.portable_fluid_interface": "UNLOCALIZED: Portable Fluid Interface", "block.create.portable_fluid_interface": "Interface de fluidos portátil",
"block.create.portable_storage_interface": "Interface de armazenamento portátil", "block.create.portable_storage_interface": "Interface de armazenamento portátil",
"block.create.powered_latch": "UNLOCALIZED: Powered Latch", "block.create.powered_latch": "UNLOCALIZED: Powered Latch",
"block.create.powered_toggle_latch": "UNLOCALIZED: Powered Toggle Latch", "block.create.powered_toggle_latch": "UNLOCALIZED: Powered Toggle Latch",
"block.create.pulley_magnet": "Imã da Polia", "block.create.pulley_magnet": "Imã da Polia",
"block.create.pulse_extender": "UNLOCALIZED: Pulse Extender", "block.create.pulse_extender": "Extensor de pulso",
"block.create.pulse_repeater": "Repetidor de Pulso", "block.create.pulse_repeater": "Repetidor de Pulso",
"block.create.purple_nixie_tube": "Tubo nixie roxo", "block.create.purple_nixie_tube": "Tubo nixie roxo",
"block.create.purple_sail": "Vela roxo", "block.create.purple_sail": "Vela roxo",
@ -390,7 +390,7 @@
"block.create.purple_toolbox": "Caixa de ferramentas roxa", "block.create.purple_toolbox": "Caixa de ferramentas roxa",
"block.create.purple_valve_handle": "válvula roxa", "block.create.purple_valve_handle": "válvula roxa",
"block.create.radial_chassis": "Chassis Radial", "block.create.radial_chassis": "Chassis Radial",
"block.create.raw_zinc_block": "UNLOCALIZED: Block of Raw Zinc", "block.create.raw_zinc_block": "Bloco de zinco bruto",
"block.create.red_nixie_tube": "Tubo nixie vermelho", "block.create.red_nixie_tube": "Tubo nixie vermelho",
"block.create.red_sail": "Vela vermelha", "block.create.red_sail": "Vela vermelha",
"block.create.red_seat": "Assento vermelho", "block.create.red_seat": "Assento vermelho",
@ -401,7 +401,7 @@
"block.create.refined_radiance_casing": "Revestimento Brilhante", "block.create.refined_radiance_casing": "Revestimento Brilhante",
"block.create.rope": "Corda", "block.create.rope": "Corda",
"block.create.rope_pulley": "Polia", "block.create.rope_pulley": "Polia",
"block.create.rotation_speed_controller": "Controlador de Velocidade Rotacionalr", "block.create.rotation_speed_controller": "Controlador de Velocidade Rotacional",
"block.create.sail_frame": "moldura de vela", "block.create.sail_frame": "moldura de vela",
"block.create.schematic_table": "Mesa de Esquema", "block.create.schematic_table": "Mesa de Esquema",
"block.create.schematicannon": "Canhão de Esquema", "block.create.schematicannon": "Canhão de Esquema",
@ -472,7 +472,7 @@
"block.create.smart_chute": "calha Inteligente", "block.create.smart_chute": "calha Inteligente",
"block.create.smart_fluid_pipe": "Cano de Fluidos Inteligente", "block.create.smart_fluid_pipe": "Cano de Fluidos Inteligente",
"block.create.speedometer": "Velocímetro", "block.create.speedometer": "Velocímetro",
"block.create.spout": "UNLOCALIZED: Spout", "block.create.spout": "Bica",
"block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window": "UNLOCALIZED: Spruce Window",
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
"block.create.sticker": "Adesivo", "block.create.sticker": "Adesivo",
@ -520,14 +520,14 @@
"block.create.weathered_copper_tile_slab": "UNLOCALIZED: Weathered Copper Tile Slab", "block.create.weathered_copper_tile_slab": "UNLOCALIZED: Weathered Copper Tile Slab",
"block.create.weathered_copper_tile_stairs": "UNLOCALIZED: Weathered Copper Tile Stairs", "block.create.weathered_copper_tile_stairs": "UNLOCALIZED: Weathered Copper Tile Stairs",
"block.create.weathered_copper_tiles": "UNLOCALIZED: Weathered Copper Tiles", "block.create.weathered_copper_tiles": "UNLOCALIZED: Weathered Copper Tiles",
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector", "block.create.weighted_ejector": "Ejetor ´ponderado",
"block.create.white_nixie_tube": "Tubo nixie branco", "block.create.white_nixie_tube": "Tubo nixie branco",
"block.create.white_sail": "Vela branca", "block.create.white_sail": "Vela branca",
"block.create.white_seat": "Assento branco", "block.create.white_seat": "Assento branco",
"block.create.white_toolbox": "Caixa de ferramentas branca", "block.create.white_toolbox": "Caixa de ferramentas branca",
"block.create.white_valve_handle": "Válvula branca", "block.create.white_valve_handle": "Válvula branca",
"block.create.windmill_bearing": "Rolamento de moinho", "block.create.windmill_bearing": "Rolamento de moinho",
"block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket", "block.create.wooden_bracket": "Suporte de madeira",
"block.create.yellow_nixie_tube": "Tubo nixie amarelo", "block.create.yellow_nixie_tube": "Tubo nixie amarelo",
"block.create.yellow_sail": "Vela amarela", "block.create.yellow_sail": "Vela amarela",
"block.create.yellow_seat": "Assento amarelo", "block.create.yellow_seat": "Assento amarelo",
@ -569,7 +569,7 @@
"item.create.copper_backtank": "Tanque Traseiro", "item.create.copper_backtank": "Tanque Traseiro",
"item.create.copper_nugget": "Pepita de Cobre", "item.create.copper_nugget": "Pepita de Cobre",
"item.create.copper_sheet": "Chapa de Cobre", "item.create.copper_sheet": "Chapa de Cobre",
"item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover", "item.create.crafter_slot_cover": "Cobertura do slot de fabricador",
"item.create.crafting_blueprint": "Esquema de Fabricação", "item.create.crafting_blueprint": "Esquema de Fabricação",
"item.create.creative_blaze_cake": "Bolo de Blaze Criativo", "item.create.creative_blaze_cake": "Bolo de Blaze Criativo",
"item.create.crushed_aluminum_ore": "Minério de Alumínio Esmagado", "item.create.crushed_aluminum_ore": "Minério de Alumínio Esmagado",
@ -591,7 +591,7 @@
"item.create.electron_tube": "Tubo de Elétron", "item.create.electron_tube": "Tubo de Elétron",
"item.create.empty_blaze_burner": "Queimador de Blaze Vazio", "item.create.empty_blaze_burner": "Queimador de Blaze Vazio",
"item.create.empty_schematic": "Esquema vazio", "item.create.empty_schematic": "Esquema vazio",
"item.create.experience_nugget": "UNLOCALIZED: Nugget of Experience", "item.create.experience_nugget": "Pepita de experiencia",
"item.create.extendo_grip": "Extensão de Pegador", "item.create.extendo_grip": "Extensão de Pegador",
"item.create.filter": "Filtro", "item.create.filter": "Filtro",
"item.create.furnace_minecart_contraption": "Engenhoca de Carrinho de Mina com Fornalha", "item.create.furnace_minecart_contraption": "Engenhoca de Carrinho de Mina com Fornalha",
@ -609,11 +609,11 @@
"item.create.minecart_contraption": "Engenhoca de Carrino de Mina", "item.create.minecart_contraption": "Engenhoca de Carrino de Mina",
"item.create.minecart_coupling": "Acoplamento de Carrinho de Mina", "item.create.minecart_coupling": "Acoplamento de Carrinho de Mina",
"item.create.polished_rose_quartz": "Quartzo Rosa Polido", "item.create.polished_rose_quartz": "Quartzo Rosa Polido",
"item.create.potato_cannon": "Canhão de Batata", "item.create.potato_cannon": "Canhão de Batata",
"item.create.powdered_obsidian": "Pó de Obsidiana", "item.create.powdered_obsidian": "Pó de Obsidiana",
"item.create.precision_mechanism": "Mecanismo de Precisão", "item.create.precision_mechanism": "Mecanismo de Precisão",
"item.create.propeller": "Hélice", "item.create.propeller": "Hélice",
"item.create.raw_zinc": "UNLOCALIZED: Raw Zinc", "item.create.raw_zinc": "Zinco bruto",
"item.create.red_sand_paper": "Lixa Vermelha", "item.create.red_sand_paper": "Lixa Vermelha",
"item.create.refined_radiance": "Luz Refinada", "item.create.refined_radiance": "Luz Refinada",
"item.create.rose_quartz": "Quartzo Rosa", "item.create.rose_quartz": "Quartzo Rosa",
@ -624,7 +624,7 @@
"item.create.super_glue": "Super Cola", "item.create.super_glue": "Super Cola",
"item.create.sweet_roll": "Rolinho Doce", "item.create.sweet_roll": "Rolinho Doce",
"item.create.tree_fertilizer": "Fertilizante de Árvore", "item.create.tree_fertilizer": "Fertilizante de Árvore",
"item.create.vertical_gearbox": "Caixa de Transmissão Verticla", "item.create.vertical_gearbox": "Caixa de Transmissão Vertical",
"item.create.wand_of_symmetry": "Varinha de Simetria", "item.create.wand_of_symmetry": "Varinha de Simetria",
"item.create.wheat_flour": "Farinha de trigo", "item.create.wheat_flour": "Farinha de trigo",
"item.create.whisk": "Batedeira", "item.create.whisk": "Batedeira",
@ -637,7 +637,7 @@
"advancement.create.root": "Bem vindo a Create", "advancement.create.root": "Bem vindo a Create",
"advancement.create.root.desc": "É hora de construir engenhocas maravilhosas", "advancement.create.root.desc": "É hora de construir engenhocas maravilhosas",
"advancement.create.andesite_alloy": "UNLOCALIZED: Alliterations Aplenty", "advancement.create.andesite_alloy": "Alinterações Em abundância",
"advancement.create.andesite_alloy.desc": "Materiais do Create tem nomes estranhos, a liga de andesito é um deles.", "advancement.create.andesite_alloy.desc": "Materiais do Create tem nomes estranhos, a liga de andesito é um deles.",
"advancement.create.its_alive": "Esta vivo!", "advancement.create.its_alive": "Esta vivo!",
"advancement.create.its_alive.desc": "Assista o seu primeiro componente cinético rodar.", "advancement.create.its_alive.desc": "Assista o seu primeiro componente cinético rodar.",
@ -647,8 +647,8 @@
"advancement.create.overstressed.desc": "Experience os limites da tensão.", "advancement.create.overstressed.desc": "Experience os limites da tensão.",
"advancement.create.belt": "Correia de alga", "advancement.create.belt": "Correia de alga",
"advancement.create.belt.desc": "Conecte dois eixos com uma esteira mecanica.", "advancement.create.belt.desc": "Conecte dois eixos com uma esteira mecanica.",
"advancement.create.tunnel": "UNLOCALIZED: Take cover!", "advancement.create.tunnel": "Pegue cover!",
"advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your mechanical belt with a Tunnel.", "advancement.create.tunnel.desc": "Embeleze suas esteiras mecânicas com um tunel.",
"advancement.create.splitter_tunnel": "Divida e Conquiste", "advancement.create.splitter_tunnel": "Divida e Conquiste",
"advancement.create.splitter_tunnel.desc": "Crie um divisor com um grupo de túneis de latão.", "advancement.create.splitter_tunnel.desc": "Crie um divisor com um grupo de túneis de latão.",
"advancement.create.chute": "Caindo", "advancement.create.chute": "Caindo",
@ -659,48 +659,48 @@
"advancement.create.belt_funnel.desc": "Coloque um funil lateral em cima de uma esteira ou depósito para criar um tipo especial.", "advancement.create.belt_funnel.desc": "Coloque um funil lateral em cima de uma esteira ou depósito para criar um tipo especial.",
"advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps", "advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps",
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.", "advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.",
"advancement.create.fan": "UNLOCALIZED: Mechanical Airbender", "advancement.create.fan": "Dobrador de ar mecânico",
"advancement.create.fan.desc": "UNLOCALIZED: Ride the stream of air provided by an Encased Fan.", "advancement.create.fan.desc": "Pegue uma carona no fluxo de ar provido pelo ventilador revestido.",
"advancement.create.fan_lava": "UNLOCALIZED: Geothermal Space Heater", "advancement.create.fan_lava": "Aquecedor de espaço geotermal",
"advancement.create.fan_lava.desc": "UNLOCALIZED: Get caught in a stream of air that smelts things.", "advancement.create.fan_lava.desc": "Seja pego pelo fluxo de ar que fundi coisas.",
"advancement.create.fan_water": "UNLOCALIZED: Wacky Washing", "advancement.create.fan_water": "Lavagem maluca",
"advancement.create.fan_water.desc": "UNLOCALIZED: Get caught in a stream of air that washes things.", "advancement.create.fan_water.desc": "Seja pego no fluxo de ar que lava coisas.",
"advancement.create.fan_smoke": "UNLOCALIZED: Mechanical Bellows", "advancement.create.fan_smoke": "Fole mecânico",
"advancement.create.fan_smoke.desc": "UNLOCALIZED: Get caught in a stream of air that smokes items.", "advancement.create.fan_smoke.desc": "Seja pego no fluxo de ar que defuma coisas.",
"advancement.create.wrench": "UNLOCALIZED: Configure Conveniently", "advancement.create.wrench": "Configurado convenientemente",
"advancement.create.wrench.desc": "UNLOCALIZED: Create a Wrench to aid you in building your contraptions.", "advancement.create.wrench.desc": "Crie a chave inglesa para ajuda-lo em construi suas engenhocas.",
"advancement.create.goggles": "UNLOCALIZED: Stress-O-Vision", "advancement.create.goggles": "Visão do stress",
"advancement.create.goggles.desc": "UNLOCALIZED: Create some Engineer's Goggles to aid you in getting more kinetic information from components.", "advancement.create.goggles.desc": "Crie o óculos de engenheiro para ajuda-lo a conseguir mais informações cineticas dos conponentes.",
"advancement.create.speedometer": "UNLOCALIZED: But How Fast Exactly?", "advancement.create.speedometer": "Mas quão rapido exatamente?",
"advancement.create.speedometer.desc": "UNLOCALIZED: Place and power a Speedometer. Look at it through your goggles to read its exact value.", "advancement.create.speedometer.desc": "Coloque e energise o velocimetro. Olhe a este por atraves dos seus óculos para ler o valor exato.",
"advancement.create.stressometer": "UNLOCALIZED: But How Stressed Exactly?", "advancement.create.stressometer": "Mas quão estressado exatamente?",
"advancement.create.stressometer.desc": "UNLOCALIZED: Place and power a Stressometer. Look at it through your goggles to read its exact value.", "advancement.create.stressometer.desc": "Coloque e energise o estressómetro. Olhe a este por atraves dos seus óculos para ler o valor exato.",
"advancement.create.aesthetics": "UNLOCALIZED: Boom, Aesthetics!", "advancement.create.aesthetics": "Boom, estética!",
"advancement.create.aesthetics.desc": "UNLOCALIZED: Place brackets on a shaft, pipe and cogwheel.", "advancement.create.aesthetics.desc": "Coloque suportes em eixos, canos e rodas dentadas.",
"advancement.create.reinforced": "UNLOCALIZED: Boom, Reinforced!", "advancement.create.reinforced": "Boom, Reinforçado!",
"advancement.create.reinforced.desc": "UNLOCALIZED: Use fitting casing blocks on a shaft, pipe and mechanical belt.", "advancement.create.reinforced.desc": "Use um bloco de revestimento apropriado em um eixo, cano e esteira mecânica.",
"advancement.create.water_wheel": "UNLOCALIZED: Harnessing Hydraulics", "advancement.create.water_wheel": "aproveitamento hidráulico",
"advancement.create.water_wheel.desc": "UNLOCALIZED: Place a Water Wheel and try getting it to spin!", "advancement.create.water_wheel.desc": "Coloque uma roda de água e tente conseguir gira-la!",
"advancement.create.chocolate_wheel": "UNLOCALIZED: Tasteful power", "advancement.create.chocolate_wheel": "Poder delicioso",
"advancement.create.chocolate_wheel.desc": "UNLOCALIZED: Run a Water Wheel with molten Chocolate.", "advancement.create.chocolate_wheel.desc": "Gire uma roda de água com chocolate derretido.",
"advancement.create.lava_wheel": "UNLOCALIZED: Magma Wheel", "advancement.create.lava_wheel": "Roda de magma",
"advancement.create.lava_wheel.desc": "UNLOCALIZED: This shouldn't have worked.", "advancement.create.lava_wheel.desc": "Isso não deveria ter funcionado.",
"advancement.create.cuckoo": "UNLOCALIZED: Is it time?", "advancement.create.cuckoo": "É a hora?",
"advancement.create.cuckoo.desc": "UNLOCALIZED: Witness a cuckhoo clock announce bedtime.", "advancement.create.cuckoo.desc": "Veja um relógio cuckoo anunciar a hora de dormir.",
"advancement.create.millstone": "UNLOCALIZED: Pocket Crusher", "advancement.create.millstone": "Moedor portátil",
"advancement.create.millstone.desc": "UNLOCALIZED: Place and power a Millstone.", "advancement.create.millstone.desc": "Coloque e energize uma pedra de moer",
"advancement.create.windmill": "UNLOCALIZED: A mild Breeze", "advancement.create.windmill": "Uma brisa moderada",
"advancement.create.windmill.desc": "UNLOCALIZED: Assemble a windmill.", "advancement.create.windmill.desc": "Monte um moinho de vento",
"advancement.create.maxed_windmill": "UNLOCALIZED: A strong breeze", "advancement.create.maxed_windmill": "Uma brisa forte",
"advancement.create.maxed_windmill.desc": "UNLOCALIZED: Assemble a windmill of maximum strength.", "advancement.create.maxed_windmill.desc": "Monte um moinho de vento com força maxima.",
"advancement.create.andesite_casing": "A era do andesito", "advancement.create.andesite_casing": "A era do andesito",
"advancement.create.andesite_casing.desc": "Use um pouco de liga de andesito e madeira para fazer um revestimento basico.", "advancement.create.andesite_casing.desc": "Use um pouco de liga de andesito e madeira para fazer um revestimento basico.",
"advancement.create.mechanical_drill": "Mineradores estacionarios", "advancement.create.mechanical_drill": "Mineradores estacionarios",
"advancement.create.mechanical_drill.desc": "coloque e energize uma broca mecânica.", "advancement.create.mechanical_drill.desc": "coloque e energize uma broca mecânica.",
"advancement.create.press": "UNLOCALIZED: Press Goes 'Bonk!'", "advancement.create.press": "Prensa faz 'Bonk!'",
"advancement.create.press.desc": "UNLOCALIZED: Power a Mechanical Press and use it to create some Sheets.", "advancement.create.press.desc": "Energize uma prensa mecânica e usa-lá para criar algumas chapas.",
"advancement.create.polished_rose_quartz": "Diamantes rosa", "advancement.create.polished_rose_quartz": "Diamantes rosa",
"advancement.create.polished_rose_quartz.desc": "UNLOCALIZED: Use a piece of Sand Paper to polish Rose Quartz until it becomes transparent.", "advancement.create.polished_rose_quartz.desc": "Use uma lixa para polir um quartzo rosa até este ficar transparente.",
"advancement.create.electron_tube": "Beep Boop", "advancement.create.electron_tube": "Beep Boop",
"advancement.create.electron_tube.desc": "Faça alguns tubos de elétron, uteis para fabricar maquinas menos primitivas.", "advancement.create.electron_tube.desc": "Faça alguns tubos de elétron, uteis para fabricar maquinas menos primitivas.",
"advancement.create.mechanical_saw": "Cortadores estacionarios", "advancement.create.mechanical_saw": "Cortadores estacionarios",
@ -718,71 +718,71 @@
"advancement.create.brass_casing": "a era do latão", "advancement.create.brass_casing": "a era do latão",
"advancement.create.brass_casing.desc": "Use o recentemente obtido latão e um pouco de madeira para criar um revestimento mais avançado.", "advancement.create.brass_casing.desc": "Use o recentemente obtido latão e um pouco de madeira para criar um revestimento mais avançado.",
"advancement.create.copper_casing": "A era do cobre", "advancement.create.copper_casing": "A era do cobre",
"advancement.create.copper_casing.desc": "Use um pouco de chapas de cobre e madeira para criar um pouco de revestimentos de cobrepper Casings.", "advancement.create.copper_casing.desc": "Use um pouco de chapas de cobre e madeira para criar um pouco de revestimentos de cobre.",
"advancement.create.spout": "UNLOCALIZED: Sploosh", "advancement.create.spout": "Sploosh",
"advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid item being filled using a spout.", "advancement.create.spout.desc": "Assista um item ser enchido usando uma bica.",
"advancement.create.spout_potion": "UNLOCALIZED: Global Brewery", "advancement.create.spout_potion": "UNLOCALIZED: Global Brewery",
"advancement.create.spout_potion.desc": "UNLOCALIZED: Watch a spout fill a bottle with potion fluid.", "advancement.create.spout_potion.desc": "Assista uma bica encher uma garrafa com uma poção.",
"advancement.create.chocolate": "UNLOCALIZED: A world of Imagination", "advancement.create.chocolate": "Um mundo de imaginação",
"advancement.create.chocolate.desc": "UNLOCALIZED: Obtain a bucket of Molten Chocolate.", "advancement.create.chocolate.desc": "Obtenha um balde de chocolate.",
"advancement.create.item_drain": "UNLOCALIZED: Tumble Draining", "advancement.create.item_drain": "Cambalhota de drenação",
"advancement.create.item_drain.desc": "UNLOCALIZED: Watch a fluid item being emptied by an item drain.", "advancement.create.item_drain.desc": "assista um item de fluido ser esvaziado por um dreno de item.",
"advancement.create.chained_item_drain": "UNLOCALIZED: Let it roll!", "advancement.create.chained_item_drain": "Deixe rolar!",
"advancement.create.chained_item_drain.desc": "UNLOCALIZED: Watch an item roll across several chained item drains.", "advancement.create.chained_item_drain.desc": "assista um item rolar através de varios drenos consecutivos.",
"advancement.create.glass_pipe": "UNLOCALIZED: Flow Spy", "advancement.create.glass_pipe": "Espião de fluxo",
"advancement.create.glass_pipe.desc": "UNLOCALIZED: Watch fluid propagate through a windowed fluid pipe. Straight fluid pipes become windowed when a wrench is used on them.", "advancement.create.glass_pipe.desc": "Assista fluidos se propagarem por através de canos de fluido com janela. Canos retos ficam com janelas quando uma chave inglesa é usada neles.",
"advancement.create.pipe_collision": "UNLOCALIZED: Never cross the Streams!", "advancement.create.pipe_collision": "Nunca cruze o fluxo!",
"advancement.create.pipe_collision.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network.", "advancement.create.pipe_collision.desc": "Assista dois fluidos se encontrarem na sua rede de canos.",
"advancement.create.pipe_spill": "UNLOCALIZED: There's a leak!", "advancement.create.pipe_spill": "Tem um vazamento!",
"advancement.create.pipe_spill.desc": "UNLOCALIZED: Watch an open end of a pipe take or place fluids into the world.", "advancement.create.pipe_spill.desc": "Assista a extremidade aberta de um cano pegar ou colocar um fluido no mundo.",
"advancement.create.hose_pulley": "UNLOCALIZED: Industrial Spillage", "advancement.create.hose_pulley": "Vazamento industrial",
"advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a hose pulley and watch it drain or fill a body of fluid.", "advancement.create.hose_pulley.desc": "desça uma polia de mangueira e assista esta drenar ou encher qualquer corpo de fluido.",
"advancement.create.infinite_water": "UNLOCALIZED: Draining the Ocean", "advancement.create.infinite_water": "Drenando o oceano",
"advancement.create.infinite_water.desc": "UNLOCALIZED: Pump from a body of Water large enough to be considered Infinite.", "advancement.create.infinite_water.desc": "Bombeie de um corpo de água grande o bastante para ser considerado infinito.",
"advancement.create.infinite_lava": "UNLOCALIZED: Draining the Planets' Core", "advancement.create.infinite_lava": "Drenando o nucleo do planeta",
"advancement.create.infinite_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered Infinite.", "advancement.create.infinite_lava.desc": "Bombeie de um corpo de lava grande o bastante para ser considerado infinito.",
"advancement.create.infinite_chocolate": "UNLOCALIZED: Drowning in Imagination", "advancement.create.infinite_chocolate": "Afogando em imaginação",
"advancement.create.infinite_chocolate.desc": "UNLOCALIZED: Pump from a body of Molten Chocolate large enough to be considered Infinite.", "advancement.create.infinite_chocolate.desc": "Bombeie de um corpo de chocolate grande o bastante para ser considerado infinito.",
"advancement.create.crafter": "UNLOCALIZED: Automated Assembly", "advancement.create.crafter": "Montagem automatica",
"advancement.create.crafter.desc": "UNLOCALIZED: Place and power some Mechanical Crafters.", "advancement.create.crafter.desc": "Coloque e energize alguns fabricadores mecânicos.",
"advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption o'clock", "advancement.create.clockwork_bearing": "Hora da engenhoca",
"advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a Structure mounted on a Clockwork Bearing.", "advancement.create.clockwork_bearing.desc": "Ative uma estrutura conectada a um rolamento de rêlogio.",
"advancement.create.nixie_tube": "UNLOCALIZED: Signs of Style", "advancement.create.nixie_tube": "Placas estilosas",
"advancement.create.nixie_tube.desc": "UNLOCALIZED: Obtain and place down a pair of Nixie Tubes.", "advancement.create.nixie_tube.desc": "Obtenha e coloque um par de tubos nixie.",
"advancement.create.deployer": "UNLOCALIZED: Poke, Place, and Attack", "advancement.create.deployer": "Cutuque, coloque e ataque",
"advancement.create.deployer.desc": "UNLOCALIZED: Place and power a Deployer, the perfect reflection of yourself.", "advancement.create.deployer.desc": "coloque e energize um implantador, o reflexo perfeito de voce mesmo.",
"advancement.create.speed_controller": "UNLOCALIZED: Engineers hate him!", "advancement.create.speed_controller": "Engenheiros odiam ele!",
"advancement.create.speed_controller.desc": "UNLOCALIZED: Place a Rotation Speed Controller, the ultimate device for changing gear.", "advancement.create.speed_controller.desc": "Coloque um Controlador de velocidade rotacional, o dispositivo ultimato para mudança de marcha.",
"advancement.create.flywheel": "UNLOCALIZED: Heart of the Factory", "advancement.create.flywheel": "Coração da fabrica",
"advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an engine to the Flywheel.", "advancement.create.flywheel.desc": "Sucessivamente conecte um motor de fornalha a um volante de inércia.",
"advancement.create.overstress_flywheel": "UNLOCALIZED: High levels of Stress", "advancement.create.overstress_flywheel": "Altos niveis de stress",
"advancement.create.overstress_flywheel.desc": "UNLOCALIZED: Overstress a Furnace Engine.", "advancement.create.overstress_flywheel.desc": "Emperre um motor de fornalha.",
"advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", "advancement.create.precision_mechanism": "Curiosidades complexas",
"advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", "advancement.create.precision_mechanism.desc": "Monte um mecanismo de precisão.",
"advancement.create.mechanical_arm": "UNLOCALIZED: Busy Hands!", "advancement.create.mechanical_arm": "Mâos ocupadas!",
"advancement.create.mechanical_arm.desc": "UNLOCALIZED: Craft a Mechanical Arm, select in- and outputs, place it down and give it power; then watch as it does all the work for you.", "advancement.create.mechanical_arm.desc": "Fabrique um braço mecânico,selecione as entradas e saidas,Coloque e energize o; em seguida assista como elo faz todo o trabalho para você.",
"advancement.create.musical_arm": "UNLOCALIZED: Play Me My Theme Tune!", "advancement.create.musical_arm": "toque minha musica!",
"advancement.create.musical_arm.desc": "UNLOCALIZED: Watch a Mechanical Arm operate your Jukebox.", "advancement.create.musical_arm.desc": "Assista um braço mecânico operar seu toca-discos.",
"advancement.create.arm_many_targets": "UNLOCALIZED: Organize-o-Tron", "advancement.create.arm_many_targets": "Organiza-tron",
"advancement.create.arm_many_targets.desc": "UNLOCALIZED: Program a Mechanical Arm with ten or more output locations.", "advancement.create.arm_many_targets.desc": "Programe um braço mecânico com dez ou mais locais de saida.",
"advancement.create.arm_blaze_burner": "UNLOCALIZED: Combust-o-Tron", "advancement.create.arm_blaze_burner": "Combuste-tron",
"advancement.create.arm_blaze_burner.desc": "UNLOCALIZED: Instruct a Mechanical Arm to feed your Blaze Burner.", "advancement.create.arm_blaze_burner.desc": "Instrua um braço mecânico para alimentar seu queimador de blaze.",
"advancement.create.fist_bump": "UNLOCALIZED: Pound It, Bro!", "advancement.create.fist_bump": "UNLOCALIZED: Pound It, Bro!",
"advancement.create.fist_bump.desc": "UNLOCALIZED: Make two Deployers fist-bump.", "advancement.create.fist_bump.desc": "UNLOCALIZED: Make two Deployers fist-bump.",
"advancement.create.crushing_wheel": "UNLOCALIZED: A Pair of Giants", "advancement.create.crushing_wheel": "Par de gigantes",
"advancement.create.crushing_wheel.desc": "UNLOCALIZED: Create some Crushing Wheels to break down more materials more effectively.", "advancement.create.crushing_wheel.desc": "Crie algumas rodas de moer para triturar alguns materiais eficientemente.",
"advancement.create.blaze_cake": "UNLOCALIZED: Sugar Rush", "advancement.create.blaze_cake": "UNLOCALIZED: Sugar Rush",
"advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your blaze burner a special cake.", "advancement.create.blaze_cake.desc": "Asse para o seu queimador de blaze um bolo especial.",
"advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors", "advancement.create.wand_of_symmetry": "Espelhos radiantes",
"advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.", "advancement.create.wand_of_symmetry.desc": "Fabrique uma varinha de simetria.",
"advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!", "advancement.create.extendo_grip": "Boioioing!",
"advancement.create.extendo_grip.desc": "UNLOCALIZED: Get hold of an Extendo Grip.", "advancement.create.extendo_grip.desc": "Apossar-se de uma extensão de pegador.",
"advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!", "advancement.create.potato_cannon": "Fwoomp!",
"advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.", "advancement.create.potato_cannon.desc": "Derrote um inimigo com o seu canhão de batata.",
"advancement.create.dual_extendo_grip": "UNLOCALIZED: Ultimate Boing-age", "advancement.create.dual_extendo_grip": "A era ultimata do boing",
"advancement.create.dual_extendo_grip.desc": "UNLOCALIZED: Dual wield Extendo Grips for super-human reach.", "advancement.create.dual_extendo_grip.desc": "Empunhe duas extensões de pegador para ter alcance super humano.",
"advancement.create.eob": "UNLOCALIZED: End of Beta", "advancement.create.eob": "Fim do beta",
"advancement.create.eob.desc": "UNLOCALIZED: Expect more content here in the future. <3", "advancement.create.eob.desc": "Espere mais conteudo aqui no futuro. <3",
"_": "->------------------------] UI & Messages [------------------------<-", "_": "->------------------------] UI & Messages [------------------------<-",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 333", "_": "Missing Localizations: 3",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -9,14 +9,14 @@
"block.create.analog_lever": "模拟拉杆", "block.create.analog_lever": "模拟拉杆",
"block.create.andesite_belt_funnel": "安山岩传送带漏斗", "block.create.andesite_belt_funnel": "安山岩传送带漏斗",
"block.create.andesite_casing": "安山机壳", "block.create.andesite_casing": "安山机壳",
"block.create.andesite_encased_cogwheel": "UNLOCALIZED: Andesite Encased Cogwheel", "block.create.andesite_encased_cogwheel": "安山齿轮箱",
"block.create.andesite_encased_large_cogwheel": "UNLOCALIZED: Andesite Encased Large Cogwheel", "block.create.andesite_encased_large_cogwheel": "安山大齿轮箱",
"block.create.andesite_encased_shaft": "安山传动杆箱", "block.create.andesite_encased_shaft": "安山传动杆箱",
"block.create.andesite_funnel": "安山岩漏斗", "block.create.andesite_funnel": "安山岩漏斗",
"block.create.andesite_pillar": "竖纹安山岩", "block.create.andesite_pillar": "安山岩",
"block.create.andesite_tunnel": "安山岩隧道", "block.create.andesite_tunnel": "安山岩隧道",
"block.create.asurine": "UNLOCALIZED: Asurine", "block.create.asurine": "皓蓝石",
"block.create.asurine_pillar": "UNLOCALIZED: Asurine Pillar", "block.create.asurine_pillar": "皓蓝石柱",
"block.create.basin": "工作盆", "block.create.basin": "工作盆",
"block.create.belt": "传送带", "block.create.belt": "传送带",
"block.create.birch_window": "白桦木窗户", "block.create.birch_window": "白桦木窗户",
@ -35,8 +35,8 @@
"block.create.brass_belt_funnel": "黄铜传送带漏斗", "block.create.brass_belt_funnel": "黄铜传送带漏斗",
"block.create.brass_block": "黄铜块", "block.create.brass_block": "黄铜块",
"block.create.brass_casing": "黄铜机壳", "block.create.brass_casing": "黄铜机壳",
"block.create.brass_encased_cogwheel": "UNLOCALIZED: Brass Encased Cogwheel", "block.create.brass_encased_cogwheel": "黄铜齿轮箱",
"block.create.brass_encased_large_cogwheel": "UNLOCALIZED: Brass Encased Large Cogwheel", "block.create.brass_encased_large_cogwheel": "黄铜大齿轮箱",
"block.create.brass_encased_shaft": "黄铜传动杆箱", "block.create.brass_encased_shaft": "黄铜传动杆箱",
"block.create.brass_funnel": "黄铜漏斗", "block.create.brass_funnel": "黄铜漏斗",
"block.create.brass_tunnel": "黄铜隧道", "block.create.brass_tunnel": "黄铜隧道",
@ -45,7 +45,7 @@
"block.create.brown_seat": "棕色坐垫", "block.create.brown_seat": "棕色坐垫",
"block.create.brown_toolbox": "棕色工具箱", "block.create.brown_toolbox": "棕色工具箱",
"block.create.brown_valve_handle": "棕色阀门手轮", "block.create.brown_valve_handle": "棕色阀门手轮",
"block.create.calcite_pillar": "UNLOCALIZED: Calcite Pillar", "block.create.calcite_pillar": "方解石柱",
"block.create.cart_assembler": "矿车装配站", "block.create.cart_assembler": "矿车装配站",
"block.create.chocolate": "巧克力", "block.create.chocolate": "巧克力",
"block.create.chute": "溜槽", "block.create.chute": "溜槽",
@ -54,137 +54,137 @@
"block.create.cogwheel": "齿轮", "block.create.cogwheel": "齿轮",
"block.create.content_observer": "物品侦测器", "block.create.content_observer": "物品侦测器",
"block.create.controller_rail": "控制铁轨", "block.create.controller_rail": "控制铁轨",
"block.create.copper_backtank": "Copper Backtank", "block.create.copper_backtank": "铜制背罐",
"block.create.copper_casing": "铜机壳", "block.create.copper_casing": "铜机壳",
"block.create.copper_shingle_slab": "UNLOCALIZED: Copper Shingle Slab", "block.create.copper_shingle_slab": "铜砖块台阶",
"block.create.copper_shingle_stairs": "UNLOCALIZED: Copper Shingle Stairs", "block.create.copper_shingle_stairs": "铜砖块楼梯",
"block.create.copper_shingles": "铜砖块", "block.create.copper_shingles": "铜砖块",
"block.create.copper_tile_slab": "UNLOCALIZED: Copper Tile Slab", "block.create.copper_tile_slab": "铜瓦块台阶",
"block.create.copper_tile_stairs": "UNLOCALIZED: Copper Tile Stairs", "block.create.copper_tile_stairs": "铜瓦块楼梯",
"block.create.copper_tiles": "铜块", "block.create.copper_tiles": "铜块",
"block.create.copper_valve_handle": "铜阀门手轮", "block.create.copper_valve_handle": "铜阀门手轮",
"block.create.creative_crate": "创造板条箱", "block.create.creative_crate": "创造板条箱",
"block.create.creative_fluid_tank": "创造流体储罐", "block.create.creative_fluid_tank": "创造流体储罐",
"block.create.creative_motor": "创造马达", "block.create.creative_motor": "创造马达",
"block.create.crimsite": "UNLOCALIZED: Crimsite", "block.create.crimsite": "绯红岩",
"block.create.crimsite_pillar": "UNLOCALIZED: Crimsite Pillar", "block.create.crimsite_pillar": "绯红岩柱",
"block.create.crimson_window": "绯红木窗户", "block.create.crimson_window": "绯红木窗户",
"block.create.crimson_window_pane": "绯红木窗户板", "block.create.crimson_window_pane": "绯红木窗户板",
"block.create.crushing_wheel": "粉碎轮", "block.create.crushing_wheel": "粉碎轮",
"block.create.crushing_wheel_controller": "粉碎轮控制器", "block.create.crushing_wheel_controller": "粉碎轮控制器",
"block.create.cuckoo_clock": "布谷鸟闹钟", "block.create.cuckoo_clock": "布谷鸟闹钟",
"block.create.cut_andesite": "UNLOCALIZED: Cut Andesite", "block.create.cut_andesite": "切制安山岩",
"block.create.cut_andesite_brick_slab": "UNLOCALIZED: Cut Andesite Brick Slab", "block.create.cut_andesite_brick_slab": "切制安山岩砖块台阶",
"block.create.cut_andesite_brick_stairs": "UNLOCALIZED: Cut Andesite Brick Stairs", "block.create.cut_andesite_brick_stairs": "切制安山岩砖块楼梯",
"block.create.cut_andesite_brick_wall": "UNLOCALIZED: Cut Andesite Brick Wall", "block.create.cut_andesite_brick_wall": "切制安山岩砖块墙",
"block.create.cut_andesite_bricks": "UNLOCALIZED: Cut Andesite Bricks", "block.create.cut_andesite_bricks": "切制安山岩砖块",
"block.create.cut_andesite_slab": "UNLOCALIZED: Cut Andesite Slab", "block.create.cut_andesite_slab": "切制安山岩台阶",
"block.create.cut_andesite_stairs": "UNLOCALIZED: Cut Andesite Stairs", "block.create.cut_andesite_stairs": "切制安山岩楼梯",
"block.create.cut_andesite_wall": "UNLOCALIZED: Cut Andesite Wall", "block.create.cut_andesite_wall": "切制安山岩墙",
"block.create.cut_asurine": "UNLOCALIZED: Cut Asurine", "block.create.cut_asurine": "切制皓蓝石",
"block.create.cut_asurine_brick_slab": "UNLOCALIZED: Cut Asurine Brick Slab", "block.create.cut_asurine_brick_slab": "切制皓蓝石砖块台阶",
"block.create.cut_asurine_brick_stairs": "UNLOCALIZED: Cut Asurine Brick Stairs", "block.create.cut_asurine_brick_stairs": "切制皓蓝石砖块楼梯",
"block.create.cut_asurine_brick_wall": "UNLOCALIZED: Cut Asurine Brick Wall", "block.create.cut_asurine_brick_wall": "切制皓蓝石砖块墙",
"block.create.cut_asurine_bricks": "UNLOCALIZED: Cut Asurine Bricks", "block.create.cut_asurine_bricks": "切制皓蓝石砖块",
"block.create.cut_asurine_slab": "UNLOCALIZED: Cut Asurine Slab", "block.create.cut_asurine_slab": "切制皓蓝石台阶",
"block.create.cut_asurine_stairs": "UNLOCALIZED: Cut Asurine Stairs", "block.create.cut_asurine_stairs": "切制皓蓝石楼梯",
"block.create.cut_asurine_wall": "UNLOCALIZED: Cut Asurine Wall", "block.create.cut_asurine_wall": "切制皓蓝石墙",
"block.create.cut_calcite": "UNLOCALIZED: Cut Calcite", "block.create.cut_calcite": "切制方解石",
"block.create.cut_calcite_brick_slab": "UNLOCALIZED: Cut Calcite Brick Slab", "block.create.cut_calcite_brick_slab": "切制方解石砖块台阶",
"block.create.cut_calcite_brick_stairs": "UNLOCALIZED: Cut Calcite Brick Stairs", "block.create.cut_calcite_brick_stairs": "切制方解石砖块楼梯",
"block.create.cut_calcite_brick_wall": "UNLOCALIZED: Cut Calcite Brick Wall", "block.create.cut_calcite_brick_wall": "切制方解石砖块墙",
"block.create.cut_calcite_bricks": "UNLOCALIZED: Cut Calcite Bricks", "block.create.cut_calcite_bricks": "切制方解石砖块",
"block.create.cut_calcite_slab": "UNLOCALIZED: Cut Calcite Slab", "block.create.cut_calcite_slab": "切制方解石台阶",
"block.create.cut_calcite_stairs": "UNLOCALIZED: Cut Calcite Stairs", "block.create.cut_calcite_stairs": "切制方解石楼梯",
"block.create.cut_calcite_wall": "UNLOCALIZED: Cut Calcite Wall", "block.create.cut_calcite_wall": "切制方解石墙",
"block.create.cut_crimsite": "UNLOCALIZED: Cut Crimsite", "block.create.cut_crimsite": "切制绯红岩",
"block.create.cut_crimsite_brick_slab": "UNLOCALIZED: Cut Crimsite Brick Slab", "block.create.cut_crimsite_brick_slab": "切制绯红岩砖块台阶",
"block.create.cut_crimsite_brick_stairs": "UNLOCALIZED: Cut Crimsite Brick Stairs", "block.create.cut_crimsite_brick_stairs": "切制绯红岩砖块楼梯",
"block.create.cut_crimsite_brick_wall": "UNLOCALIZED: Cut Crimsite Brick Wall", "block.create.cut_crimsite_brick_wall": "切制绯红岩砖块墙",
"block.create.cut_crimsite_bricks": "UNLOCALIZED: Cut Crimsite Bricks", "block.create.cut_crimsite_bricks": "切制绯红岩砖块",
"block.create.cut_crimsite_slab": "UNLOCALIZED: Cut Crimsite Slab", "block.create.cut_crimsite_slab": "切制绯红岩台阶",
"block.create.cut_crimsite_stairs": "UNLOCALIZED: Cut Crimsite Stairs", "block.create.cut_crimsite_stairs": "切制绯红岩楼梯",
"block.create.cut_crimsite_wall": "UNLOCALIZED: Cut Crimsite Wall", "block.create.cut_crimsite_wall": "切制绯红岩墙",
"block.create.cut_deepslate": "UNLOCALIZED: Cut Deepslate", "block.create.cut_deepslate": "切制深板岩",
"block.create.cut_deepslate_brick_slab": "UNLOCALIZED: Cut Deepslate Brick Slab", "block.create.cut_deepslate_brick_slab": "切制深板岩砖块台阶",
"block.create.cut_deepslate_brick_stairs": "UNLOCALIZED: Cut Deepslate Brick Stairs", "block.create.cut_deepslate_brick_stairs": "切制深板岩砖块楼梯",
"block.create.cut_deepslate_brick_wall": "UNLOCALIZED: Cut Deepslate Brick Wall", "block.create.cut_deepslate_brick_wall": "切制深板岩砖块墙",
"block.create.cut_deepslate_bricks": "UNLOCALIZED: Cut Deepslate Bricks", "block.create.cut_deepslate_bricks": "切制深板岩砖块",
"block.create.cut_deepslate_slab": "UNLOCALIZED: Cut Deepslate Slab", "block.create.cut_deepslate_slab": "切制深板岩台阶",
"block.create.cut_deepslate_stairs": "UNLOCALIZED: Cut Deepslate Stairs", "block.create.cut_deepslate_stairs": "切制深板岩楼梯",
"block.create.cut_deepslate_wall": "UNLOCALIZED: Cut Deepslate Wall", "block.create.cut_deepslate_wall": "切制深板岩墙",
"block.create.cut_diorite": "UNLOCALIZED: Cut Diorite", "block.create.cut_diorite": "切制闪长岩",
"block.create.cut_diorite_brick_slab": "UNLOCALIZED: Cut Diorite Brick Slab", "block.create.cut_diorite_brick_slab": "切制闪长岩砖块台阶",
"block.create.cut_diorite_brick_stairs": "UNLOCALIZED: Cut Diorite Brick Stairs", "block.create.cut_diorite_brick_stairs": "切制闪长岩砖块楼梯",
"block.create.cut_diorite_brick_wall": "UNLOCALIZED: Cut Diorite Brick Wall", "block.create.cut_diorite_brick_wall": "切制闪长岩砖块墙",
"block.create.cut_diorite_bricks": "UNLOCALIZED: Cut Diorite Bricks", "block.create.cut_diorite_bricks": "切制闪长岩砖块",
"block.create.cut_diorite_slab": "UNLOCALIZED: Cut Diorite Slab", "block.create.cut_diorite_slab": "切制闪长岩台阶",
"block.create.cut_diorite_stairs": "UNLOCALIZED: Cut Diorite Stairs", "block.create.cut_diorite_stairs": "切制闪长岩楼梯",
"block.create.cut_diorite_wall": "UNLOCALIZED: Cut Diorite Wall", "block.create.cut_diorite_wall": "切制闪长岩墙",
"block.create.cut_dripstone": "UNLOCALIZED: Cut Dripstone", "block.create.cut_dripstone": "切制滴水石",
"block.create.cut_dripstone_brick_slab": "UNLOCALIZED: Cut Dripstone Brick Slab", "block.create.cut_dripstone_brick_slab": "切制滴水石砖块台阶",
"block.create.cut_dripstone_brick_stairs": "UNLOCALIZED: Cut Dripstone Brick Stairs", "block.create.cut_dripstone_brick_stairs": "切制滴水石砖块楼梯",
"block.create.cut_dripstone_brick_wall": "UNLOCALIZED: Cut Dripstone Brick Wall", "block.create.cut_dripstone_brick_wall": "切制滴水石砖块墙",
"block.create.cut_dripstone_bricks": "UNLOCALIZED: Cut Dripstone Bricks", "block.create.cut_dripstone_bricks": "切制滴水石砖块",
"block.create.cut_dripstone_slab": "UNLOCALIZED: Cut Dripstone Slab", "block.create.cut_dripstone_slab": "切制滴水石台阶",
"block.create.cut_dripstone_stairs": "UNLOCALIZED: Cut Dripstone Stairs", "block.create.cut_dripstone_stairs": "切制滴水石楼梯",
"block.create.cut_dripstone_wall": "UNLOCALIZED: Cut Dripstone Wall", "block.create.cut_dripstone_wall": "切制滴水石墙",
"block.create.cut_granite": "UNLOCALIZED: Cut Granite", "block.create.cut_granite": "切制花岗岩",
"block.create.cut_granite_brick_slab": "UNLOCALIZED: Cut Granite Brick Slab", "block.create.cut_granite_brick_slab": "切制花岗岩砖块台阶",
"block.create.cut_granite_brick_stairs": "UNLOCALIZED: Cut Granite Brick Stairs", "block.create.cut_granite_brick_stairs": "切制花岗岩砖块楼梯",
"block.create.cut_granite_brick_wall": "UNLOCALIZED: Cut Granite Brick Wall", "block.create.cut_granite_brick_wall": "切制花岗岩砖块墙",
"block.create.cut_granite_bricks": "UNLOCALIZED: Cut Granite Bricks", "block.create.cut_granite_bricks": "切制花岗岩砖块",
"block.create.cut_granite_slab": "UNLOCALIZED: Cut Granite Slab", "block.create.cut_granite_slab": "切制花岗岩台阶",
"block.create.cut_granite_stairs": "UNLOCALIZED: Cut Granite Stairs", "block.create.cut_granite_stairs": "切制花岗岩楼梯",
"block.create.cut_granite_wall": "UNLOCALIZED: Cut Granite Wall", "block.create.cut_granite_wall": "切制花岗岩墙",
"block.create.cut_limestone": "UNLOCALIZED: Cut Limestone", "block.create.cut_limestone": "切制石灰岩",
"block.create.cut_limestone_brick_slab": "UNLOCALIZED: Cut Limestone Brick Slab", "block.create.cut_limestone_brick_slab": "切制石灰岩砖块台阶",
"block.create.cut_limestone_brick_stairs": "UNLOCALIZED: Cut Limestone Brick Stairs", "block.create.cut_limestone_brick_stairs": "切制石灰岩砖块楼梯",
"block.create.cut_limestone_brick_wall": "UNLOCALIZED: Cut Limestone Brick Wall", "block.create.cut_limestone_brick_wall": "切制石灰岩砖块墙",
"block.create.cut_limestone_bricks": "UNLOCALIZED: Cut Limestone Bricks", "block.create.cut_limestone_bricks": "切制石灰岩砖块",
"block.create.cut_limestone_slab": "UNLOCALIZED: Cut Limestone Slab", "block.create.cut_limestone_slab": "切制石灰岩台阶",
"block.create.cut_limestone_stairs": "UNLOCALIZED: Cut Limestone Stairs", "block.create.cut_limestone_stairs": "切制石灰岩楼梯",
"block.create.cut_limestone_wall": "UNLOCALIZED: Cut Limestone Wall", "block.create.cut_limestone_wall": "切制石灰岩墙",
"block.create.cut_ochrum": "UNLOCALIZED: Cut Ochrum", "block.create.cut_ochrum": "切制赭金砂",
"block.create.cut_ochrum_brick_slab": "UNLOCALIZED: Cut Ochrum Brick Slab", "block.create.cut_ochrum_brick_slab": "切制赭金砂砖块台阶",
"block.create.cut_ochrum_brick_stairs": "UNLOCALIZED: Cut Ochrum Brick Stairs", "block.create.cut_ochrum_brick_stairs": "切制赭金砂砖块楼梯",
"block.create.cut_ochrum_brick_wall": "UNLOCALIZED: Cut Ochrum Brick Wall", "block.create.cut_ochrum_brick_wall": "切制赭金砂砖块墙",
"block.create.cut_ochrum_bricks": "UNLOCALIZED: Cut Ochrum Bricks", "block.create.cut_ochrum_bricks": "切制赭金砂砖块",
"block.create.cut_ochrum_slab": "UNLOCALIZED: Cut Ochrum Slab", "block.create.cut_ochrum_slab": "切制赭金砂台阶",
"block.create.cut_ochrum_stairs": "UNLOCALIZED: Cut Ochrum Stairs", "block.create.cut_ochrum_stairs": "切制赭金砂楼梯",
"block.create.cut_ochrum_wall": "UNLOCALIZED: Cut Ochrum Wall", "block.create.cut_ochrum_wall": "切制赭金砂墙",
"block.create.cut_scorchia": "UNLOCALIZED: Cut Scorchia", "block.create.cut_scorchia": "切制焦黑熔渣",
"block.create.cut_scorchia_brick_slab": "UNLOCALIZED: Cut Scorchia Brick Slab", "block.create.cut_scorchia_brick_slab": "切制焦黑熔渣砖块台阶",
"block.create.cut_scorchia_brick_stairs": "UNLOCALIZED: Cut Scorchia Brick Stairs", "block.create.cut_scorchia_brick_stairs": "切制焦黑熔渣砖块楼梯",
"block.create.cut_scorchia_brick_wall": "UNLOCALIZED: Cut Scorchia Brick Wall", "block.create.cut_scorchia_brick_wall": "切制焦黑熔渣砖块墙",
"block.create.cut_scorchia_bricks": "UNLOCALIZED: Cut Scorchia Bricks", "block.create.cut_scorchia_bricks": "切制焦黑熔渣砖块",
"block.create.cut_scorchia_slab": "UNLOCALIZED: Cut Scorchia Slab", "block.create.cut_scorchia_slab": "切制焦黑熔渣台阶",
"block.create.cut_scorchia_stairs": "UNLOCALIZED: Cut Scorchia Stairs", "block.create.cut_scorchia_stairs": "切制焦黑熔渣楼梯",
"block.create.cut_scorchia_wall": "UNLOCALIZED: Cut Scorchia Wall", "block.create.cut_scorchia_wall": "切制焦黑熔渣墙",
"block.create.cut_scoria": "UNLOCALIZED: Cut Scoria", "block.create.cut_scoria": "切制熔渣",
"block.create.cut_scoria_brick_slab": "UNLOCALIZED: Cut Scoria Brick Slab", "block.create.cut_scoria_brick_slab": "切制熔渣砖块台阶",
"block.create.cut_scoria_brick_stairs": "UNLOCALIZED: Cut Scoria Brick Stairs", "block.create.cut_scoria_brick_stairs": "切制熔渣砖块楼梯",
"block.create.cut_scoria_brick_wall": "UNLOCALIZED: Cut Scoria Brick Wall", "block.create.cut_scoria_brick_wall": "切制熔渣砖块墙",
"block.create.cut_scoria_bricks": "UNLOCALIZED: Cut Scoria Bricks", "block.create.cut_scoria_bricks": "切制熔渣砖块",
"block.create.cut_scoria_slab": "UNLOCALIZED: Cut Scoria Slab", "block.create.cut_scoria_slab": "切制熔渣台阶",
"block.create.cut_scoria_stairs": "UNLOCALIZED: Cut Scoria Stairs", "block.create.cut_scoria_stairs": "切制熔渣楼梯",
"block.create.cut_scoria_wall": "UNLOCALIZED: Cut Scoria Wall", "block.create.cut_scoria_wall": "切制熔渣墙",
"block.create.cut_tuff": "UNLOCALIZED: Cut Tuff", "block.create.cut_tuff": "切制凝灰岩",
"block.create.cut_tuff_brick_slab": "UNLOCALIZED: Cut Tuff Brick Slab", "block.create.cut_tuff_brick_slab": "切制凝灰岩砖块台阶",
"block.create.cut_tuff_brick_stairs": "UNLOCALIZED: Cut Tuff Brick Stairs", "block.create.cut_tuff_brick_stairs": "切制凝灰岩砖块楼梯",
"block.create.cut_tuff_brick_wall": "UNLOCALIZED: Cut Tuff Brick Wall", "block.create.cut_tuff_brick_wall": "切制凝灰岩砖块墙",
"block.create.cut_tuff_bricks": "UNLOCALIZED: Cut Tuff Bricks", "block.create.cut_tuff_bricks": "切制凝灰岩砖块",
"block.create.cut_tuff_slab": "UNLOCALIZED: Cut Tuff Slab", "block.create.cut_tuff_slab": "切制凝灰岩台阶",
"block.create.cut_tuff_stairs": "UNLOCALIZED: Cut Tuff Stairs", "block.create.cut_tuff_stairs": "切制凝灰岩楼梯",
"block.create.cut_tuff_wall": "UNLOCALIZED: Cut Tuff Wall", "block.create.cut_tuff_wall": "切制凝灰岩墙",
"block.create.cut_veridium": "UNLOCALIZED: Cut Veridium", "block.create.cut_veridium": "切制辉绿矿",
"block.create.cut_veridium_brick_slab": "UNLOCALIZED: Cut Veridium Brick Slab", "block.create.cut_veridium_brick_slab": "切制辉绿矿砖块台阶",
"block.create.cut_veridium_brick_stairs": "UNLOCALIZED: Cut Veridium Brick Stairs", "block.create.cut_veridium_brick_stairs": "切制辉绿矿砖块楼梯",
"block.create.cut_veridium_brick_wall": "UNLOCALIZED: Cut Veridium Brick Wall", "block.create.cut_veridium_brick_wall": "切制辉绿矿砖块墙",
"block.create.cut_veridium_bricks": "UNLOCALIZED: Cut Veridium Bricks", "block.create.cut_veridium_bricks": "切制辉绿矿砖块",
"block.create.cut_veridium_slab": "UNLOCALIZED: Cut Veridium Slab", "block.create.cut_veridium_slab": "切制辉绿矿台阶",
"block.create.cut_veridium_stairs": "UNLOCALIZED: Cut Veridium Stairs", "block.create.cut_veridium_stairs": "切制辉绿矿楼梯",
"block.create.cut_veridium_wall": "UNLOCALIZED: Cut Veridium Wall", "block.create.cut_veridium_wall": "切制辉绿矿墙",
"block.create.cyan_nixie_tube": "青色辉光管", "block.create.cyan_nixie_tube": "青色辉光管",
"block.create.cyan_sail": "青色风帆", "block.create.cyan_sail": "青色风帆",
"block.create.cyan_seat": "青色坐垫", "block.create.cyan_seat": "青色坐垫",
@ -192,21 +192,21 @@
"block.create.cyan_valve_handle": "青色阀门手轮", "block.create.cyan_valve_handle": "青色阀门手轮",
"block.create.dark_oak_window": "深色橡木窗户", "block.create.dark_oak_window": "深色橡木窗户",
"block.create.dark_oak_window_pane": "深色橡木窗户板", "block.create.dark_oak_window_pane": "深色橡木窗户板",
"block.create.deepslate_pillar": "UNLOCALIZED: Deepslate Pillar", "block.create.deepslate_pillar": "深板岩柱",
"block.create.deepslate_zinc_ore": "UNLOCALIZED: Deepslate Zinc Ore", "block.create.deepslate_zinc_ore": "深层锌矿石",
"block.create.deployer": "机械手", "block.create.deployer": "机械手",
"block.create.depot": "置物台", "block.create.depot": "置物台",
"block.create.diorite_pillar": "竖纹闪长岩", "block.create.diorite_pillar": "闪长岩",
"block.create.dripstone_pillar": "UNLOCALIZED: Dripstone Pillar", "block.create.dripstone_pillar": "滴水石柱",
"block.create.encased_chain_drive": "链式传动箱", "block.create.encased_chain_drive": "链式传动箱",
"block.create.encased_fan": "鼓风机", "block.create.encased_fan": "鼓风机",
"block.create.encased_fluid_pipe": "流体管道箱", "block.create.encased_fluid_pipe": "流体管道箱",
"block.create.exposed_copper_shingle_slab": "UNLOCALIZED: Exposed Copper Shingle Slab", "block.create.exposed_copper_shingle_slab": "斑驳的铜砖块台阶",
"block.create.exposed_copper_shingle_stairs": "UNLOCALIZED: Exposed Copper Shingle Stairs", "block.create.exposed_copper_shingle_stairs": "斑驳的铜砖块楼梯",
"block.create.exposed_copper_shingles": "UNLOCALIZED: Exposed Copper Shingles", "block.create.exposed_copper_shingles": "斑驳的铜砖块",
"block.create.exposed_copper_tile_slab": "UNLOCALIZED: Exposed Copper Tile Slab", "block.create.exposed_copper_tile_slab": "斑驳的铜瓦块台阶",
"block.create.exposed_copper_tile_stairs": "UNLOCALIZED: Exposed Copper Tile Stairs", "block.create.exposed_copper_tile_stairs": "斑驳的铜瓦块楼梯",
"block.create.exposed_copper_tiles": "UNLOCALIZED: Exposed Copper Tiles", "block.create.exposed_copper_tiles": "斑驳的铜瓦块",
"block.create.fluid_pipe": "流体管道", "block.create.fluid_pipe": "流体管道",
"block.create.fluid_tank": "流体储罐", "block.create.fluid_tank": "流体储罐",
"block.create.fluid_valve": "流体阀门", "block.create.fluid_valve": "流体阀门",
@ -219,7 +219,7 @@
"block.create.gearbox": "十字齿轮箱", "block.create.gearbox": "十字齿轮箱",
"block.create.gearshift": "反转齿轮箱", "block.create.gearshift": "反转齿轮箱",
"block.create.glass_fluid_pipe": "玻璃流体管道", "block.create.glass_fluid_pipe": "玻璃流体管道",
"block.create.granite_pillar": "竖纹花岗岩", "block.create.granite_pillar": "花岗岩",
"block.create.gray_nixie_tube": "灰色辉光管", "block.create.gray_nixie_tube": "灰色辉光管",
"block.create.gray_sail": "灰色风帆", "block.create.gray_sail": "灰色风帆",
"block.create.gray_seat": "灰色坐垫", "block.create.gray_seat": "灰色坐垫",
@ -237,24 +237,24 @@
"block.create.horizontal_framed_glass_pane": "竖直边框玻璃板", "block.create.horizontal_framed_glass_pane": "竖直边框玻璃板",
"block.create.hose_pulley": "软管滑轮", "block.create.hose_pulley": "软管滑轮",
"block.create.item_drain": "分液池", "block.create.item_drain": "分液池",
"block.create.item_vault": "UNLOCALIZED: Item Vault", "block.create.item_vault": "物品保险库",
"block.create.jungle_window": "丛林木窗户", "block.create.jungle_window": "丛林木窗户",
"block.create.jungle_window_pane": "丛林木窗户板", "block.create.jungle_window_pane": "丛林木窗户板",
"block.create.large_cogwheel": "大齿轮", "block.create.large_cogwheel": "大齿轮",
"block.create.layered_andesite": "层叠安山岩", "block.create.layered_andesite": "层叠安山岩",
"block.create.layered_asurine": "UNLOCALIZED: Layered Asurine", "block.create.layered_asurine": "层叠皓蓝石",
"block.create.layered_calcite": "UNLOCALIZED: Layered Calcite", "block.create.layered_calcite": "层叠方解石",
"block.create.layered_crimsite": "UNLOCALIZED: Layered Crimsite", "block.create.layered_crimsite": "层叠绯红岩",
"block.create.layered_deepslate": "UNLOCALIZED: Layered Deepslate", "block.create.layered_deepslate": "层叠深板岩",
"block.create.layered_diorite": "层叠闪长岩", "block.create.layered_diorite": "层叠闪长岩",
"block.create.layered_dripstone": "UNLOCALIZED: Layered Dripstone", "block.create.layered_dripstone": "层叠滴水石",
"block.create.layered_granite": "层叠花岗岩", "block.create.layered_granite": "层叠花岗岩",
"block.create.layered_limestone": "层叠石灰岩", "block.create.layered_limestone": "层叠石灰岩",
"block.create.layered_ochrum": "UNLOCALIZED: Layered Ochrum", "block.create.layered_ochrum": "层叠赭金砂",
"block.create.layered_scorchia": "UNLOCALIZED: Layered Scorchia", "block.create.layered_scorchia": "层叠焦黑熔渣",
"block.create.layered_scoria": "层叠熔渣", "block.create.layered_scoria": "层叠熔渣",
"block.create.layered_tuff": "UNLOCALIZED: Layered Tuff", "block.create.layered_tuff": "层叠凝灰岩",
"block.create.layered_veridium": "UNLOCALIZED: Layered Veridium", "block.create.layered_veridium": "层叠辉绿矿",
"block.create.lectern_controller": "遥控器讲台", "block.create.lectern_controller": "遥控器讲台",
"block.create.light_blue_nixie_tube": "淡蓝色辉光管", "block.create.light_blue_nixie_tube": "淡蓝色辉光管",
"block.create.light_blue_sail": "淡蓝色风帆", "block.create.light_blue_sail": "淡蓝色风帆",
@ -272,7 +272,7 @@
"block.create.lime_toolbox": "黄绿色工具箱", "block.create.lime_toolbox": "黄绿色工具箱",
"block.create.lime_valve_handle": "黄绿色阀门手轮", "block.create.lime_valve_handle": "黄绿色阀门手轮",
"block.create.limestone": "石灰岩", "block.create.limestone": "石灰岩",
"block.create.limestone_pillar": "竖纹石灰岩", "block.create.limestone_pillar": "石灰岩",
"block.create.linear_chassis": "机壳底盘", "block.create.linear_chassis": "机壳底盘",
"block.create.lit_blaze_burner": "烈焰人燃烧室(已点燃)", "block.create.lit_blaze_burner": "烈焰人燃烧室(已点燃)",
"block.create.magenta_nixie_tube": "品红色辉光管", "block.create.magenta_nixie_tube": "品红色辉光管",
@ -300,20 +300,20 @@
"block.create.nozzle": "分散网", "block.create.nozzle": "分散网",
"block.create.oak_window": "橡木窗户", "block.create.oak_window": "橡木窗户",
"block.create.oak_window_pane": "橡木窗户板", "block.create.oak_window_pane": "橡木窗户板",
"block.create.ochrum": "UNLOCALIZED: Ochrum", "block.create.ochrum": "赭金砂",
"block.create.ochrum_pillar": "UNLOCALIZED: Ochrum Pillar", "block.create.ochrum_pillar": "赭金砂柱",
"block.create.orange_sail": "橙色风帆", "block.create.orange_sail": "橙色风帆",
"block.create.orange_seat": "橙色坐垫", "block.create.orange_seat": "橙色坐垫",
"block.create.orange_toolbox": "橙色工具箱", "block.create.orange_toolbox": "橙色工具箱",
"block.create.orange_valve_handle": "橙色阀门手轮", "block.create.orange_valve_handle": "橙色阀门手轮",
"block.create.ornate_iron_window": "华丽铁窗户", "block.create.ornate_iron_window": "华丽铁窗户",
"block.create.ornate_iron_window_pane": "华丽铁窗户板", "block.create.ornate_iron_window_pane": "华丽铁窗户板",
"block.create.oxidized_copper_shingle_slab": "UNLOCALIZED: Oxidized Copper Shingle Slab", "block.create.oxidized_copper_shingle_slab": "氧化的铜砖块台阶",
"block.create.oxidized_copper_shingle_stairs": "UNLOCALIZED: Oxidized Copper Shingle Stairs", "block.create.oxidized_copper_shingle_stairs": "氧化的铜砖块楼梯",
"block.create.oxidized_copper_shingles": "UNLOCALIZED: Oxidized Copper Shingles", "block.create.oxidized_copper_shingles": "氧化的铜砖块",
"block.create.oxidized_copper_tile_slab": "UNLOCALIZED: Oxidized Copper Tile Slab", "block.create.oxidized_copper_tile_slab": "氧化的铜瓦块台阶",
"block.create.oxidized_copper_tile_stairs": "UNLOCALIZED: Oxidized Copper Tile Stairs", "block.create.oxidized_copper_tile_stairs": "氧化的铜瓦块楼梯",
"block.create.oxidized_copper_tiles": "UNLOCALIZED: Oxidized Copper Tiles", "block.create.oxidized_copper_tiles": "氧化的铜瓦块",
"block.create.peculiar_bell": "奇异钟", "block.create.peculiar_bell": "奇异钟",
"block.create.pink_nixie_tube": "粉红色辉光管", "block.create.pink_nixie_tube": "粉红色辉光管",
"block.create.pink_sail": "粉红色风帆", "block.create.pink_sail": "粉红色风帆",
@ -321,68 +321,68 @@
"block.create.pink_toolbox": "粉红色工具箱", "block.create.pink_toolbox": "粉红色工具箱",
"block.create.pink_valve_handle": "粉红色阀门手轮", "block.create.pink_valve_handle": "粉红色阀门手轮",
"block.create.piston_extension_pole": "活塞杆", "block.create.piston_extension_pole": "活塞杆",
"block.create.polished_cut_andesite": "UNLOCALIZED: Polished Cut Andesite", "block.create.polished_cut_andesite": "磨制切制安山岩",
"block.create.polished_cut_andesite_slab": "UNLOCALIZED: Polished Cut Andesite Slab", "block.create.polished_cut_andesite_slab": "磨制切制安山岩台阶",
"block.create.polished_cut_andesite_stairs": "UNLOCALIZED: Polished Cut Andesite Stairs", "block.create.polished_cut_andesite_stairs": "磨制切制安山岩楼梯",
"block.create.polished_cut_andesite_wall": "UNLOCALIZED: Polished Cut Andesite Wall", "block.create.polished_cut_andesite_wall": "磨制切制安山岩墙",
"block.create.polished_cut_asurine": "UNLOCALIZED: Polished Cut Asurine", "block.create.polished_cut_asurine": "磨制切制皓蓝石",
"block.create.polished_cut_asurine_slab": "UNLOCALIZED: Polished Cut Asurine Slab", "block.create.polished_cut_asurine_slab": "磨制切制皓蓝石台阶",
"block.create.polished_cut_asurine_stairs": "UNLOCALIZED: Polished Cut Asurine Stairs", "block.create.polished_cut_asurine_stairs": "磨制切制皓蓝石楼梯",
"block.create.polished_cut_asurine_wall": "UNLOCALIZED: Polished Cut Asurine Wall", "block.create.polished_cut_asurine_wall": "磨制切制皓蓝石墙",
"block.create.polished_cut_calcite": "UNLOCALIZED: Polished Cut Calcite", "block.create.polished_cut_calcite": "磨制切制方解石",
"block.create.polished_cut_calcite_slab": "UNLOCALIZED: Polished Cut Calcite Slab", "block.create.polished_cut_calcite_slab": "磨制切制方解石台阶",
"block.create.polished_cut_calcite_stairs": "UNLOCALIZED: Polished Cut Calcite Stairs", "block.create.polished_cut_calcite_stairs": "磨制切制方解石楼梯",
"block.create.polished_cut_calcite_wall": "UNLOCALIZED: Polished Cut Calcite Wall", "block.create.polished_cut_calcite_wall": "磨制切制方解石墙",
"block.create.polished_cut_crimsite": "UNLOCALIZED: Polished Cut Crimsite", "block.create.polished_cut_crimsite": "磨制切制绯红岩",
"block.create.polished_cut_crimsite_slab": "UNLOCALIZED: Polished Cut Crimsite Slab", "block.create.polished_cut_crimsite_slab": "磨制切制绯红岩台阶",
"block.create.polished_cut_crimsite_stairs": "UNLOCALIZED: Polished Cut Crimsite Stairs", "block.create.polished_cut_crimsite_stairs": "磨制切制绯红岩楼梯",
"block.create.polished_cut_crimsite_wall": "UNLOCALIZED: Polished Cut Crimsite Wall", "block.create.polished_cut_crimsite_wall": "磨制切制绯红岩墙",
"block.create.polished_cut_deepslate": "UNLOCALIZED: Polished Cut Deepslate", "block.create.polished_cut_deepslate": "磨制切制深板岩",
"block.create.polished_cut_deepslate_slab": "UNLOCALIZED: Polished Cut Deepslate Slab", "block.create.polished_cut_deepslate_slab": "磨制切制深板岩台阶",
"block.create.polished_cut_deepslate_stairs": "UNLOCALIZED: Polished Cut Deepslate Stairs", "block.create.polished_cut_deepslate_stairs": "磨制切制深板岩楼梯",
"block.create.polished_cut_deepslate_wall": "UNLOCALIZED: Polished Cut Deepslate Wall", "block.create.polished_cut_deepslate_wall": "磨制切制深板岩墙",
"block.create.polished_cut_diorite": "UNLOCALIZED: Polished Cut Diorite", "block.create.polished_cut_diorite": "磨制切制闪长岩",
"block.create.polished_cut_diorite_slab": "UNLOCALIZED: Polished Cut Diorite Slab", "block.create.polished_cut_diorite_slab": "磨制切制闪长岩台阶",
"block.create.polished_cut_diorite_stairs": "UNLOCALIZED: Polished Cut Diorite Stairs", "block.create.polished_cut_diorite_stairs": "磨制切制闪长岩楼梯",
"block.create.polished_cut_diorite_wall": "UNLOCALIZED: Polished Cut Diorite Wall", "block.create.polished_cut_diorite_wall": "磨制切制闪长岩墙",
"block.create.polished_cut_dripstone": "UNLOCALIZED: Polished Cut Dripstone", "block.create.polished_cut_dripstone": "磨制切制滴水石",
"block.create.polished_cut_dripstone_slab": "UNLOCALIZED: Polished Cut Dripstone Slab", "block.create.polished_cut_dripstone_slab": "磨制切制滴水石台阶",
"block.create.polished_cut_dripstone_stairs": "UNLOCALIZED: Polished Cut Dripstone Stairs", "block.create.polished_cut_dripstone_stairs": "磨制切制滴水石楼梯",
"block.create.polished_cut_dripstone_wall": "UNLOCALIZED: Polished Cut Dripstone Wall", "block.create.polished_cut_dripstone_wall": "磨制切制滴水石墙",
"block.create.polished_cut_granite": "UNLOCALIZED: Polished Cut Granite", "block.create.polished_cut_granite": "磨制切制花岗岩",
"block.create.polished_cut_granite_slab": "UNLOCALIZED: Polished Cut Granite Slab", "block.create.polished_cut_granite_slab": "磨制切制花岗岩台阶",
"block.create.polished_cut_granite_stairs": "UNLOCALIZED: Polished Cut Granite Stairs", "block.create.polished_cut_granite_stairs": "磨制切制花岗岩楼梯",
"block.create.polished_cut_granite_wall": "UNLOCALIZED: Polished Cut Granite Wall", "block.create.polished_cut_granite_wall": "磨制切制花岗岩墙",
"block.create.polished_cut_limestone": "UNLOCALIZED: Polished Cut Limestone", "block.create.polished_cut_limestone": "磨制切制石灰岩",
"block.create.polished_cut_limestone_slab": "UNLOCALIZED: Polished Cut Limestone Slab", "block.create.polished_cut_limestone_slab": "磨制切制石灰岩台阶",
"block.create.polished_cut_limestone_stairs": "UNLOCALIZED: Polished Cut Limestone Stairs", "block.create.polished_cut_limestone_stairs": "磨制切制石灰岩楼梯",
"block.create.polished_cut_limestone_wall": "UNLOCALIZED: Polished Cut Limestone Wall", "block.create.polished_cut_limestone_wall": "磨制切制石灰岩墙",
"block.create.polished_cut_ochrum": "UNLOCALIZED: Polished Cut Ochrum", "block.create.polished_cut_ochrum": "磨制切制赭金砂",
"block.create.polished_cut_ochrum_slab": "UNLOCALIZED: Polished Cut Ochrum Slab", "block.create.polished_cut_ochrum_slab": "磨制切制赭金砂台阶",
"block.create.polished_cut_ochrum_stairs": "UNLOCALIZED: Polished Cut Ochrum Stairs", "block.create.polished_cut_ochrum_stairs": "磨制切制赭金砂楼梯",
"block.create.polished_cut_ochrum_wall": "UNLOCALIZED: Polished Cut Ochrum Wall", "block.create.polished_cut_ochrum_wall": "磨制切制赭金砂墙",
"block.create.polished_cut_scorchia": "UNLOCALIZED: Polished Cut Scorchia", "block.create.polished_cut_scorchia": "磨制切制焦黑熔渣",
"block.create.polished_cut_scorchia_slab": "UNLOCALIZED: Polished Cut Scorchia Slab", "block.create.polished_cut_scorchia_slab": "磨制切制焦黑熔渣台阶",
"block.create.polished_cut_scorchia_stairs": "UNLOCALIZED: Polished Cut Scorchia Stairs", "block.create.polished_cut_scorchia_stairs": "磨制切制焦黑熔渣楼梯",
"block.create.polished_cut_scorchia_wall": "UNLOCALIZED: Polished Cut Scorchia Wall", "block.create.polished_cut_scorchia_wall": "磨制切制焦黑熔渣墙",
"block.create.polished_cut_scoria": "UNLOCALIZED: Polished Cut Scoria", "block.create.polished_cut_scoria": "磨制切制熔渣",
"block.create.polished_cut_scoria_slab": "UNLOCALIZED: Polished Cut Scoria Slab", "block.create.polished_cut_scoria_slab": "磨制切制熔渣台阶",
"block.create.polished_cut_scoria_stairs": "UNLOCALIZED: Polished Cut Scoria Stairs", "block.create.polished_cut_scoria_stairs": "磨制切制熔渣楼梯",
"block.create.polished_cut_scoria_wall": "UNLOCALIZED: Polished Cut Scoria Wall", "block.create.polished_cut_scoria_wall": "磨制切制熔渣墙",
"block.create.polished_cut_tuff": "UNLOCALIZED: Polished Cut Tuff", "block.create.polished_cut_tuff": "磨制切制凝灰岩",
"block.create.polished_cut_tuff_slab": "UNLOCALIZED: Polished Cut Tuff Slab", "block.create.polished_cut_tuff_slab": "磨制切制凝灰岩台阶",
"block.create.polished_cut_tuff_stairs": "UNLOCALIZED: Polished Cut Tuff Stairs", "block.create.polished_cut_tuff_stairs": "磨制切制凝灰岩楼梯",
"block.create.polished_cut_tuff_wall": "UNLOCALIZED: Polished Cut Tuff Wall", "block.create.polished_cut_tuff_wall": "磨制切制凝灰岩墙",
"block.create.polished_cut_veridium": "UNLOCALIZED: Polished Cut Veridium", "block.create.polished_cut_veridium": "磨制切制辉绿矿",
"block.create.polished_cut_veridium_slab": "UNLOCALIZED: Polished Cut Veridium Slab", "block.create.polished_cut_veridium_slab": "磨制切制辉绿矿台阶",
"block.create.polished_cut_veridium_stairs": "UNLOCALIZED: Polished Cut Veridium Stairs", "block.create.polished_cut_veridium_stairs": "磨制切制辉绿矿楼梯",
"block.create.polished_cut_veridium_wall": "UNLOCALIZED: Polished Cut Veridium Wall", "block.create.polished_cut_veridium_wall": "磨制切制辉绿矿墙",
"block.create.portable_fluid_interface": "移动式流体接口", "block.create.portable_fluid_interface": "移动式流体接口",
"block.create.portable_storage_interface": "移动式存储接口", "block.create.portable_storage_interface": "移动式存储接口",
"block.create.powered_latch": "锁存器", "block.create.powered_latch": "锁存器",
"block.create.powered_toggle_latch": "转换锁存器", "block.create.powered_toggle_latch": "转换锁存器",
"block.create.pulley_magnet": "滑轮磁铁", "block.create.pulley_magnet": "滑轮磁铁",
"block.create.pulse_extender": "UNLOCALIZED: Pulse Extender", "block.create.pulse_extender": "脉冲延长器",
"block.create.pulse_repeater": "脉冲中继器", "block.create.pulse_repeater": "脉冲中继器",
"block.create.purple_nixie_tube": "紫色辉光管", "block.create.purple_nixie_tube": "紫色辉光管",
"block.create.purple_sail": "紫色风帆", "block.create.purple_sail": "紫色风帆",
@ -390,7 +390,7 @@
"block.create.purple_toolbox": "紫色工具箱", "block.create.purple_toolbox": "紫色工具箱",
"block.create.purple_valve_handle": "紫色阀门手轮", "block.create.purple_valve_handle": "紫色阀门手轮",
"block.create.radial_chassis": "旋转底盘", "block.create.radial_chassis": "旋转底盘",
"block.create.raw_zinc_block": "UNLOCALIZED: Block of Raw Zinc", "block.create.raw_zinc_block": "粗锌块",
"block.create.red_nixie_tube": "红色辉光管", "block.create.red_nixie_tube": "红色辉光管",
"block.create.red_sail": "红色风帆", "block.create.red_sail": "红色风帆",
"block.create.red_seat": "红色坐垫", "block.create.red_seat": "红色坐垫",
@ -405,70 +405,70 @@
"block.create.sail_frame": "风帆框架", "block.create.sail_frame": "风帆框架",
"block.create.schematic_table": "蓝图桌", "block.create.schematic_table": "蓝图桌",
"block.create.schematicannon": "蓝图加农炮", "block.create.schematicannon": "蓝图加农炮",
"block.create.scorchia": "UNLOCALIZED: Scorchia", "block.create.scorchia": "焦黑熔渣",
"block.create.scorchia_pillar": "UNLOCALIZED: Scorchia Pillar", "block.create.scorchia_pillar": "焦黑熔渣柱",
"block.create.scoria": "熔渣", "block.create.scoria": "熔渣",
"block.create.scoria_pillar": "竖纹熔渣", "block.create.scoria_pillar": "熔渣",
"block.create.secondary_linear_chassis": "机壳底盘 2 号", "block.create.secondary_linear_chassis": "机壳底盘 2 号",
"block.create.sequenced_gearshift": "可编程齿轮箱", "block.create.sequenced_gearshift": "可编程齿轮箱",
"block.create.shadow_steel_casing": "暗影机壳", "block.create.shadow_steel_casing": "暗影机壳",
"block.create.shaft": "传动杆", "block.create.shaft": "传动杆",
"block.create.small_andesite_brick_slab": "UNLOCALIZED: Small Andesite Brick Slab", "block.create.small_andesite_brick_slab": "安山岩小砖块台阶",
"block.create.small_andesite_brick_stairs": "UNLOCALIZED: Small Andesite Brick Stairs", "block.create.small_andesite_brick_stairs": "安山岩小砖块楼梯",
"block.create.small_andesite_brick_wall": "UNLOCALIZED: Small Andesite Brick Wall", "block.create.small_andesite_brick_wall": "安山岩小砖块墙",
"block.create.small_andesite_bricks": "UNLOCALIZED: Small Andesite Bricks", "block.create.small_andesite_bricks": "安山岩小砖块",
"block.create.small_asurine_brick_slab": "UNLOCALIZED: Small Asurine Brick Slab", "block.create.small_asurine_brick_slab": "皓蓝石小砖块台阶",
"block.create.small_asurine_brick_stairs": "UNLOCALIZED: Small Asurine Brick Stairs", "block.create.small_asurine_brick_stairs": "皓蓝石小砖块楼梯",
"block.create.small_asurine_brick_wall": "UNLOCALIZED: Small Asurine Brick Wall", "block.create.small_asurine_brick_wall": "皓蓝石小砖块墙",
"block.create.small_asurine_bricks": "UNLOCALIZED: Small Asurine Bricks", "block.create.small_asurine_bricks": "皓蓝石小砖块",
"block.create.small_calcite_brick_slab": "UNLOCALIZED: Small Calcite Brick Slab", "block.create.small_calcite_brick_slab": "方解石小砖块台阶",
"block.create.small_calcite_brick_stairs": "UNLOCALIZED: Small Calcite Brick Stairs", "block.create.small_calcite_brick_stairs": "方解石小砖块楼梯",
"block.create.small_calcite_brick_wall": "UNLOCALIZED: Small Calcite Brick Wall", "block.create.small_calcite_brick_wall": "方解石小砖块墙",
"block.create.small_calcite_bricks": "UNLOCALIZED: Small Calcite Bricks", "block.create.small_calcite_bricks": "方解石小砖块",
"block.create.small_crimsite_brick_slab": "UNLOCALIZED: Small Crimsite Brick Slab", "block.create.small_crimsite_brick_slab": "绯红岩小砖块台阶",
"block.create.small_crimsite_brick_stairs": "UNLOCALIZED: Small Crimsite Brick Stairs", "block.create.small_crimsite_brick_stairs": "绯红岩小砖块楼梯",
"block.create.small_crimsite_brick_wall": "UNLOCALIZED: Small Crimsite Brick Wall", "block.create.small_crimsite_brick_wall": "绯红岩小砖块墙",
"block.create.small_crimsite_bricks": "UNLOCALIZED: Small Crimsite Bricks", "block.create.small_crimsite_bricks": "绯红岩小砖块",
"block.create.small_deepslate_brick_slab": "UNLOCALIZED: Small Deepslate Brick Slab", "block.create.small_deepslate_brick_slab": "深板岩小砖块台阶",
"block.create.small_deepslate_brick_stairs": "UNLOCALIZED: Small Deepslate Brick Stairs", "block.create.small_deepslate_brick_stairs": "深板岩小砖块楼梯",
"block.create.small_deepslate_brick_wall": "UNLOCALIZED: Small Deepslate Brick Wall", "block.create.small_deepslate_brick_wall": "深板岩小砖块墙",
"block.create.small_deepslate_bricks": "UNLOCALIZED: Small Deepslate Bricks", "block.create.small_deepslate_bricks": "深板岩小砖块",
"block.create.small_diorite_brick_slab": "UNLOCALIZED: Small Diorite Brick Slab", "block.create.small_diorite_brick_slab": "闪长岩小砖块台阶",
"block.create.small_diorite_brick_stairs": "UNLOCALIZED: Small Diorite Brick Stairs", "block.create.small_diorite_brick_stairs": "闪长岩小砖块楼梯",
"block.create.small_diorite_brick_wall": "UNLOCALIZED: Small Diorite Brick Wall", "block.create.small_diorite_brick_wall": "闪长岩小砖块墙",
"block.create.small_diorite_bricks": "UNLOCALIZED: Small Diorite Bricks", "block.create.small_diorite_bricks": "闪长岩小砖块",
"block.create.small_dripstone_brick_slab": "UNLOCALIZED: Small Dripstone Brick Slab", "block.create.small_dripstone_brick_slab": "滴水石小砖块台阶",
"block.create.small_dripstone_brick_stairs": "UNLOCALIZED: Small Dripstone Brick Stairs", "block.create.small_dripstone_brick_stairs": "滴水石小砖块楼梯",
"block.create.small_dripstone_brick_wall": "UNLOCALIZED: Small Dripstone Brick Wall", "block.create.small_dripstone_brick_wall": "滴水石小砖块墙",
"block.create.small_dripstone_bricks": "UNLOCALIZED: Small Dripstone Bricks", "block.create.small_dripstone_bricks": "滴水石小砖块",
"block.create.small_granite_brick_slab": "UNLOCALIZED: Small Granite Brick Slab", "block.create.small_granite_brick_slab": "花岗岩小砖块台阶",
"block.create.small_granite_brick_stairs": "UNLOCALIZED: Small Granite Brick Stairs", "block.create.small_granite_brick_stairs": "花岗岩小砖块楼梯",
"block.create.small_granite_brick_wall": "UNLOCALIZED: Small Granite Brick Wall", "block.create.small_granite_brick_wall": "花岗岩小砖块墙",
"block.create.small_granite_bricks": "UNLOCALIZED: Small Granite Bricks", "block.create.small_granite_bricks": "花岗岩小砖块",
"block.create.small_limestone_brick_slab": "UNLOCALIZED: Small Limestone Brick Slab", "block.create.small_limestone_brick_slab": "石灰岩小砖块台阶",
"block.create.small_limestone_brick_stairs": "UNLOCALIZED: Small Limestone Brick Stairs", "block.create.small_limestone_brick_stairs": "石灰岩小砖块楼梯",
"block.create.small_limestone_brick_wall": "UNLOCALIZED: Small Limestone Brick Wall", "block.create.small_limestone_brick_wall": "石灰岩小砖块墙",
"block.create.small_limestone_bricks": "UNLOCALIZED: Small Limestone Bricks", "block.create.small_limestone_bricks": "石灰岩小砖块",
"block.create.small_ochrum_brick_slab": "UNLOCALIZED: Small Ochrum Brick Slab", "block.create.small_ochrum_brick_slab": "赭金砂小砖块台阶",
"block.create.small_ochrum_brick_stairs": "UNLOCALIZED: Small Ochrum Brick Stairs", "block.create.small_ochrum_brick_stairs": "赭金砂小砖块楼梯",
"block.create.small_ochrum_brick_wall": "UNLOCALIZED: Small Ochrum Brick Wall", "block.create.small_ochrum_brick_wall": "赭金砂小砖块墙",
"block.create.small_ochrum_bricks": "UNLOCALIZED: Small Ochrum Bricks", "block.create.small_ochrum_bricks": "赭金砂小砖块",
"block.create.small_scorchia_brick_slab": "UNLOCALIZED: Small Scorchia Brick Slab", "block.create.small_scorchia_brick_slab": "焦黑熔渣小砖块台阶",
"block.create.small_scorchia_brick_stairs": "UNLOCALIZED: Small Scorchia Brick Stairs", "block.create.small_scorchia_brick_stairs": "焦黑熔渣小砖块楼梯",
"block.create.small_scorchia_brick_wall": "UNLOCALIZED: Small Scorchia Brick Wall", "block.create.small_scorchia_brick_wall": "焦黑熔渣小砖块墙",
"block.create.small_scorchia_bricks": "UNLOCALIZED: Small Scorchia Bricks", "block.create.small_scorchia_bricks": "焦黑熔渣小砖块",
"block.create.small_scoria_brick_slab": "UNLOCALIZED: Small Scoria Brick Slab", "block.create.small_scoria_brick_slab": "熔渣小砖块台阶",
"block.create.small_scoria_brick_stairs": "UNLOCALIZED: Small Scoria Brick Stairs", "block.create.small_scoria_brick_stairs": "熔渣小砖块楼梯",
"block.create.small_scoria_brick_wall": "UNLOCALIZED: Small Scoria Brick Wall", "block.create.small_scoria_brick_wall": "熔渣小砖块墙",
"block.create.small_scoria_bricks": "UNLOCALIZED: Small Scoria Bricks", "block.create.small_scoria_bricks": "熔渣小砖块",
"block.create.small_tuff_brick_slab": "UNLOCALIZED: Small Tuff Brick Slab", "block.create.small_tuff_brick_slab": "凝灰岩小砖块台阶",
"block.create.small_tuff_brick_stairs": "UNLOCALIZED: Small Tuff Brick Stairs", "block.create.small_tuff_brick_stairs": "凝灰岩小砖块楼梯",
"block.create.small_tuff_brick_wall": "UNLOCALIZED: Small Tuff Brick Wall", "block.create.small_tuff_brick_wall": "凝灰岩小砖块墙",
"block.create.small_tuff_bricks": "UNLOCALIZED: Small Tuff Bricks", "block.create.small_tuff_bricks": "凝灰岩小砖块",
"block.create.small_veridium_brick_slab": "UNLOCALIZED: Small Veridium Brick Slab", "block.create.small_veridium_brick_slab": "辉绿矿小砖块台阶",
"block.create.small_veridium_brick_stairs": "UNLOCALIZED: Small Veridium Brick Stairs", "block.create.small_veridium_brick_stairs": "辉绿矿小砖块楼梯",
"block.create.small_veridium_brick_wall": "UNLOCALIZED: Small Veridium Brick Wall", "block.create.small_veridium_brick_wall": "辉绿矿小砖块墙",
"block.create.small_veridium_bricks": "UNLOCALIZED: Small Veridium Bricks", "block.create.small_veridium_bricks": "辉绿矿小砖块",
"block.create.smart_chute": "智能溜槽", "block.create.smart_chute": "智能溜槽",
"block.create.smart_fluid_pipe": "智能流体管道", "block.create.smart_fluid_pipe": "智能流体管道",
"block.create.speedometer": "速度表", "block.create.speedometer": "速度表",
@ -481,45 +481,45 @@
"block.create.stressometer": "应力表", "block.create.stressometer": "应力表",
"block.create.tiled_glass": "十字玻璃窗", "block.create.tiled_glass": "十字玻璃窗",
"block.create.tiled_glass_pane": "十字玻璃窗户板", "block.create.tiled_glass_pane": "十字玻璃窗户板",
"block.create.tuff_pillar": "UNLOCALIZED: Tuff Pillar", "block.create.tuff_pillar": "凝灰岩柱",
"block.create.turntable": "转盘", "block.create.turntable": "转盘",
"block.create.veridium": "UNLOCALIZED: Veridium", "block.create.veridium": "辉绿矿",
"block.create.veridium_pillar": "UNLOCALIZED: Veridium Pillar", "block.create.veridium_pillar": "辉绿矿柱",
"block.create.vertical_framed_glass": "竖直边框玻璃", "block.create.vertical_framed_glass": "竖直边框玻璃",
"block.create.vertical_framed_glass_pane": "竖直边框玻璃板", "block.create.vertical_framed_glass_pane": "竖直边框玻璃板",
"block.create.warped_window": "诡异木窗户", "block.create.warped_window": "诡异木窗户",
"block.create.warped_window_pane": "诡异木窗户板", "block.create.warped_window_pane": "诡异木窗户板",
"block.create.water_wheel": "水车", "block.create.water_wheel": "水车",
"block.create.waxed_copper_shingle_slab": "UNLOCALIZED: Waxed Copper Shingle Slab", "block.create.waxed_copper_shingle_slab": "涂蜡铜砖块台阶",
"block.create.waxed_copper_shingle_stairs": "UNLOCALIZED: Waxed Copper Shingle Stairs", "block.create.waxed_copper_shingle_stairs": "涂蜡铜砖块楼梯",
"block.create.waxed_copper_shingles": "UNLOCALIZED: Waxed Copper Shingles", "block.create.waxed_copper_shingles": "涂蜡铜砖块",
"block.create.waxed_copper_tile_slab": "UNLOCALIZED: Waxed Copper Tile Slab", "block.create.waxed_copper_tile_slab": "涂蜡铜瓦块台阶",
"block.create.waxed_copper_tile_stairs": "UNLOCALIZED: Waxed Copper Tile Stairs", "block.create.waxed_copper_tile_stairs": "涂蜡铜瓦块楼梯",
"block.create.waxed_copper_tiles": "UNLOCALIZED: Waxed Copper Tiles", "block.create.waxed_copper_tiles": "涂蜡铜瓦块",
"block.create.waxed_exposed_copper_shingle_slab": "UNLOCALIZED: Waxed Exposed Copper Shingle Slab", "block.create.waxed_exposed_copper_shingle_slab": "斑驳的涂蜡铜砖块台阶",
"block.create.waxed_exposed_copper_shingle_stairs": "UNLOCALIZED: Waxed Exposed Copper Shingle Stairs", "block.create.waxed_exposed_copper_shingle_stairs": "斑驳的涂蜡铜砖块楼梯",
"block.create.waxed_exposed_copper_shingles": "UNLOCALIZED: Waxed Exposed Copper Shingles", "block.create.waxed_exposed_copper_shingles": "斑驳的涂蜡铜砖块",
"block.create.waxed_exposed_copper_tile_slab": "UNLOCALIZED: Waxed Exposed Copper Tile Slab", "block.create.waxed_exposed_copper_tile_slab": "斑驳的涂蜡铜瓦块台阶",
"block.create.waxed_exposed_copper_tile_stairs": "UNLOCALIZED: Waxed Exposed Copper Tile Stairs", "block.create.waxed_exposed_copper_tile_stairs": "斑驳的涂蜡铜瓦块楼梯",
"block.create.waxed_exposed_copper_tiles": "UNLOCALIZED: Waxed Exposed Copper Tiles", "block.create.waxed_exposed_copper_tiles": "斑驳的涂蜡铜瓦块",
"block.create.waxed_oxidized_copper_shingle_slab": "UNLOCALIZED: Waxed Oxidized Copper Shingle Slab", "block.create.waxed_oxidized_copper_shingle_slab": "氧化的涂蜡铜砖块台阶",
"block.create.waxed_oxidized_copper_shingle_stairs": "UNLOCALIZED: Waxed Oxidized Copper Shingle Stairs", "block.create.waxed_oxidized_copper_shingle_stairs": "氧化的涂蜡铜砖块楼梯",
"block.create.waxed_oxidized_copper_shingles": "UNLOCALIZED: Waxed Oxidized Copper Shingles", "block.create.waxed_oxidized_copper_shingles": "氧化的涂蜡铜砖块",
"block.create.waxed_oxidized_copper_tile_slab": "UNLOCALIZED: Waxed Oxidized Copper Tile Slab", "block.create.waxed_oxidized_copper_tile_slab": "氧化的涂蜡铜瓦块台阶",
"block.create.waxed_oxidized_copper_tile_stairs": "UNLOCALIZED: Waxed Oxidized Copper Tile Stairs", "block.create.waxed_oxidized_copper_tile_stairs": "氧化的涂蜡铜瓦块楼梯",
"block.create.waxed_oxidized_copper_tiles": "UNLOCALIZED: Waxed Oxidized Copper Tiles", "block.create.waxed_oxidized_copper_tiles": "氧化的涂蜡铜瓦块",
"block.create.waxed_weathered_copper_shingle_slab": "UNLOCALIZED: Waxed Weathered Copper Shingle Slab", "block.create.waxed_weathered_copper_shingle_slab": "锈蚀的涂蜡铜砖块台阶",
"block.create.waxed_weathered_copper_shingle_stairs": "UNLOCALIZED: Waxed Weathered Copper Shingle Stairs", "block.create.waxed_weathered_copper_shingle_stairs": "锈蚀的涂蜡铜砖块楼梯",
"block.create.waxed_weathered_copper_shingles": "UNLOCALIZED: Waxed Weathered Copper Shingles", "block.create.waxed_weathered_copper_shingles": "锈蚀的涂蜡铜砖块",
"block.create.waxed_weathered_copper_tile_slab": "UNLOCALIZED: Waxed Weathered Copper Tile Slab", "block.create.waxed_weathered_copper_tile_slab": "锈蚀的涂蜡铜瓦块台阶",
"block.create.waxed_weathered_copper_tile_stairs": "UNLOCALIZED: Waxed Weathered Copper Tile Stairs", "block.create.waxed_weathered_copper_tile_stairs": "锈蚀的涂蜡铜瓦块楼梯",
"block.create.waxed_weathered_copper_tiles": "UNLOCALIZED: Waxed Weathered Copper Tiles", "block.create.waxed_weathered_copper_tiles": "锈蚀的涂蜡铜瓦块",
"block.create.weathered_copper_shingle_slab": "UNLOCALIZED: Weathered Copper Shingle Slab", "block.create.weathered_copper_shingle_slab": "锈蚀的铜砖块台阶",
"block.create.weathered_copper_shingle_stairs": "UNLOCALIZED: Weathered Copper Shingle Stairs", "block.create.weathered_copper_shingle_stairs": "锈蚀的铜砖块楼梯",
"block.create.weathered_copper_shingles": "UNLOCALIZED: Weathered Copper Shingles", "block.create.weathered_copper_shingles": "锈蚀的铜砖块",
"block.create.weathered_copper_tile_slab": "UNLOCALIZED: Weathered Copper Tile Slab", "block.create.weathered_copper_tile_slab": "锈蚀的铜瓦块台阶",
"block.create.weathered_copper_tile_stairs": "UNLOCALIZED: Weathered Copper Tile Stairs", "block.create.weathered_copper_tile_stairs": "锈蚀的铜瓦块楼梯",
"block.create.weathered_copper_tiles": "UNLOCALIZED: Weathered Copper Tiles", "block.create.weathered_copper_tiles": "锈蚀的铜瓦块",
"block.create.weighted_ejector": "弹射置物台", "block.create.weighted_ejector": "弹射置物台",
"block.create.white_nixie_tube": "白色辉光管", "block.create.white_nixie_tube": "白色辉光管",
"block.create.white_sail": "白色风帆", "block.create.white_sail": "白色风帆",
@ -591,7 +591,7 @@
"item.create.electron_tube": "电子管", "item.create.electron_tube": "电子管",
"item.create.empty_blaze_burner": "空的烈焰人燃烧室", "item.create.empty_blaze_burner": "空的烈焰人燃烧室",
"item.create.empty_schematic": "空白蓝图", "item.create.empty_schematic": "空白蓝图",
"item.create.experience_nugget": "UNLOCALIZED: Nugget of Experience", "item.create.experience_nugget": "经验颗粒",
"item.create.extendo_grip": "伸缩机械手", "item.create.extendo_grip": "伸缩机械手",
"item.create.filter": "过滤器", "item.create.filter": "过滤器",
"item.create.furnace_minecart_contraption": "装配过的动力矿车", "item.create.furnace_minecart_contraption": "装配过的动力矿车",
@ -613,7 +613,7 @@
"item.create.powdered_obsidian": "黑曜石粉末", "item.create.powdered_obsidian": "黑曜石粉末",
"item.create.precision_mechanism": "精密构件", "item.create.precision_mechanism": "精密构件",
"item.create.propeller": "扇叶", "item.create.propeller": "扇叶",
"item.create.raw_zinc": "UNLOCALIZED: Raw Zinc", "item.create.raw_zinc": "粗锌",
"item.create.red_sand_paper": "红沙砂纸", "item.create.red_sand_paper": "红沙砂纸",
"item.create.refined_radiance": "光辉石", "item.create.refined_radiance": "光辉石",
"item.create.rose_quartz": "玫瑰石英", "item.create.rose_quartz": "玫瑰石英",
@ -986,10 +986,10 @@
"create.gui.assembly.exception": "无法组装该装置:", "create.gui.assembly.exception": "无法组装该装置:",
"create.gui.assembly.exception.unmovableBlock": "无法移动的方块:(%4$s位于 [%1$s%2$s%3$s]", "create.gui.assembly.exception.unmovableBlock": "无法移动的方块:(%4$s位于 [%1$s%2$s%3$s]",
"create.gui.assembly.exception.chunkNotLoaded": "位于 [%1$s%2$s%3$s] 的方块未处于加载区块", "create.gui.assembly.exception.chunkNotLoaded": "位于 [%1$s%2$s%3$s] 的方块未处于加载区块",
"create.gui.assembly.exception.structureTooLarge": "装置中的方块数量过多。", "create.gui.assembly.exception.structureTooLarge": "装置中的方块数量过多。\n配置的最大值为%1$s",
"create.gui.assembly.exception.tooManyPistonPoles": "活塞加装的活塞杆数量过多。", "create.gui.assembly.exception.tooManyPistonPoles": "活塞加装的活塞杆数量过多。\n配置的最大值为%1$s",
"create.gui.assembly.exception.noPistonPoles": "活塞缺失部分活塞杆", "create.gui.assembly.exception.noPistonPoles": "活塞缺失部分活塞杆",
"create.gui.assembly.exception.not_enough_sails": "相接的结构所包含的类风帆方块的数量不足。%1$s", "create.gui.assembly.exception.not_enough_sails": "相接的结构所包含的类风帆方块的数量不足%1$s。\n至少需要 %2$s",
"create.gui.gauge.info_header": "仪表信息:", "create.gui.gauge.info_header": "仪表信息:",
"create.gui.speedometer.title": "旋转速度", "create.gui.speedometer.title": "旋转速度",
"create.gui.stressometer.title": "网络应力", "create.gui.stressometer.title": "网络应力",
@ -1035,7 +1035,7 @@
"create.schematicAndQuill.fallbackName": "我的蓝图", "create.schematicAndQuill.fallbackName": "我的蓝图",
"create.schematicAndQuill.saved": "另存为%1$s", "create.schematicAndQuill.saved": "另存为%1$s",
"create.schematic.invalid": "[!] 无效的项目", "create.schematic.invalid": "[!] 无效的物品 - 使用蓝图桌来替换",
"create.schematic.position": "位置", "create.schematic.position": "位置",
"create.schematic.rotation": "旋转", "create.schematic.rotation": "旋转",
"create.schematic.rotation.none": "无", "create.schematic.rotation.none": "无",
@ -1078,7 +1078,7 @@
"create.schematic.tool.flip.description.3": "", "create.schematic.tool.flip.description.3": "",
"create.schematics.synchronizing": "正在同步..", "create.schematics.synchronizing": "正在同步..",
"create.schematics.uploadTooLarge": "你的蓝图太大", "create.schematics.uploadTooLarge": "你的蓝图超出了服务器指定的限制。",
"create.schematics.maxAllowedSize": "允许的最大蓝图文件大小为:", "create.schematics.maxAllowedSize": "允许的最大蓝图文件大小为:",
"create.gui.schematicTable.refresh": "刷新文件", "create.gui.schematicTable.refresh": "刷新文件",
@ -1104,7 +1104,7 @@
"create.gui.schematicannon.option.skipTileEntities": "保护存储方块", "create.gui.schematicannon.option.skipTileEntities": "保护存储方块",
"create.gui.schematicannon.slot.gunpowder": "向蓝图加农炮添加火药以提供动力", "create.gui.schematicannon.slot.gunpowder": "向蓝图加农炮添加火药以提供动力",
"create.gui.schematicannon.slot.listPrinter": "在此处放置书以打印蓝图所需的材料清单", "create.gui.schematicannon.slot.listPrinter": "在此处放置书以打印蓝图所需的材料清单",
"create.gui.schematicannon.slot.schematic": "在此处添加你的蓝图,务必确保其已经被部署在了特位置", "create.gui.schematicannon.slot.schematic": "在此处添加你的蓝图,务必确保其已经被部署在了特位置",
"create.gui.schematicannon.option.skipMissing.description": "如果缺失材料,蓝图加农炮将忽略当前缺失材料并且使用其他已有材料继续工作", "create.gui.schematicannon.option.skipMissing.description": "如果缺失材料,蓝图加农炮将忽略当前缺失材料并且使用其他已有材料继续工作",
"create.gui.schematicannon.option.skipTileEntities.description": "蓝图将避免更换存储方块,如箱子。", "create.gui.schematicannon.option.skipTileEntities.description": "蓝图将避免更换存储方块,如箱子。",
"create.gui.schematicannon.option.dontReplaceSolid.description": "蓝图加农炮将不会替换工作范围内的任何固体方块。", "create.gui.schematicannon.option.dontReplaceSolid.description": "蓝图加农炮将不会替换工作范围内的任何固体方块。",
@ -1131,7 +1131,7 @@
"create.schematicannon.status.schematicExpired": "蓝图文件已过期", "create.schematicannon.status.schematicExpired": "蓝图文件已过期",
"create.materialChecklist": "材料清单", "create.materialChecklist": "材料清单",
"create.materialChecklist.blocksNotLoaded": "*免责声明* ", "create.materialChecklist.blocksNotLoaded": "*免责声明*\n\n由于相关区块没有被加载材料列表可能不准确。",
"create.gui.filter.deny_list": "黑名单", "create.gui.filter.deny_list": "黑名单",
"create.gui.filter.deny_list.description": "只通过不在黑名单中的物品,如果黑名单为空,所有物品都可以通过", "create.gui.filter.deny_list.description": "只通过不在黑名单中的物品,如果黑名单为空,所有物品都可以通过",
@ -1338,7 +1338,7 @@
"create.subtitle.mechanical_press_activation_belt": "辊压机:撞击传送带", "create.subtitle.mechanical_press_activation_belt": "辊压机:撞击传送带",
"create.subtitle.fwoomp": "土豆加农炮:发射", "create.subtitle.fwoomp": "土豆加农炮:发射",
"create.subtitle.worldshaper_place": "环境塑型器:放置方块", "create.subtitle.worldshaper_place": "环境塑型器:放置方块",
"create.subtitle.sanding_long": "UNLOCALIZED: Sanding noises", "create.subtitle.sanding_long": "打磨噪音",
"create.subtitle.crushing_1": "磨碎声", "create.subtitle.crushing_1": "磨碎声",
"create.subtitle.depot_slide": "物品:滑入", "create.subtitle.depot_slide": "物品:滑入",
"create.subtitle.saw_activate_stone": "动力锯:切割", "create.subtitle.saw_activate_stone": "动力锯:切割",
@ -1351,7 +1351,7 @@
"create.subtitle.controller_put": "遥控器:放进讲台", "create.subtitle.controller_put": "遥控器:放进讲台",
"create.subtitle.cranking": "手摇曲柄:转动", "create.subtitle.cranking": "手摇曲柄:转动",
"create.subtitle.wrench_remove": "组件:被破坏", "create.subtitle.wrench_remove": "组件:被破坏",
"create.subtitle.sanding_short": "UNLOCALIZED: Sanding noises", "create.subtitle.sanding_short": "打磨噪音",
"create.subtitle.cogs": "齿轮:嘎吱作响", "create.subtitle.cogs": "齿轮:嘎吱作响",
"create.subtitle.slime_added": "粘液:挤碎声", "create.subtitle.slime_added": "粘液:挤碎声",
"create.subtitle.wrench_rotate": "扳手:拧动", "create.subtitle.wrench_rotate": "扳手:拧动",
@ -1602,10 +1602,10 @@
"item.create.minecart_coupling.tooltip.condition1": "作用与矿车时", "item.create.minecart_coupling.tooltip.condition1": "作用与矿车时",
"item.create.minecart_coupling.tooltip.behaviour1": "将两个矿车耦合在一起在移动时将它们保持_恒定的距离_。", "item.create.minecart_coupling.tooltip.behaviour1": "将两个矿车耦合在一起在移动时将它们保持_恒定的距离_。",
"item.create.experience_nugget.tooltip": "UNLOCALIZED: NUGGET OF EXPERIENCE", "item.create.experience_nugget.tooltip": "经验颗粒",
"item.create.experience_nugget.tooltip.summary": "UNLOCALIZED: _Ding!_ A speck of _inspiration_ from your fantastic inventions.", "item.create.experience_nugget.tooltip.summary": "_叮_从你的奇妙发明中汲取_灵感_",
"item.create.experience_nugget.tooltip.condition1": "UNLOCALIZED: When Used", "item.create.experience_nugget.tooltip.condition1": "当使用时",
"item.create.experience_nugget.tooltip.behaviour1": "UNLOCALIZED: _Redeems_ _Experience_ points contained within.", "item.create.experience_nugget.tooltip.behaviour1": "_吸收_其中包含的_经验值_。",
"block.create.peculiar_bell.tooltip": "奇异钟", "block.create.peculiar_bell.tooltip": "奇异钟",
"block.create.peculiar_bell.tooltip.summary": "装饰用的_黄铜质钟_。放在_灵魂火_的正上方可能会产生意料之外的后果......", "block.create.peculiar_bell.tooltip.summary": "装饰用的_黄铜质钟_。放在_灵魂火_的正上方可能会产生意料之外的后果......",
@ -1824,10 +1824,10 @@
"create.ponder.cogwheel.text_1": "齿轮会将动力传递至临近的齿轮", "create.ponder.cogwheel.text_1": "齿轮会将动力传递至临近的齿轮",
"create.ponder.cogwheel.text_2": "以此方式连接的齿轮,旋转方向相反", "create.ponder.cogwheel.text_2": "以此方式连接的齿轮,旋转方向相反",
"create.ponder.cogwheel_casing.header": "UNLOCALIZED: Encasing Cogwheels", "create.ponder.cogwheel_casing.header": "装壳齿轮",
"create.ponder.cogwheel_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Cogwheels", "create.ponder.cogwheel_casing.text_1": "黄铜机壳或安山机壳可用于装饰齿轮",
"create.ponder.cogwheel_casing.text_2": "UNLOCALIZED: Components added after encasing will not connect to the shaft outputs", "create.ponder.cogwheel_casing.text_2": "在装壳后添加的组件将不会与传动轴相连",
"create.ponder.cogwheel_casing.text_3": "UNLOCALIZED: The Wrench can be used to toggle connections", "create.ponder.cogwheel_casing.text_3": "扳手可用于切换连接",
"create.ponder.creative_fluid_tank.header": "创造流体储罐", "create.ponder.creative_fluid_tank.header": "创造流体储罐",
"create.ponder.creative_fluid_tank.text_1": "创造流体储罐可以提供无限量的流体", "create.ponder.creative_fluid_tank.text_1": "创造流体储罐可以提供无限量的流体",
@ -2049,16 +2049,16 @@
"create.ponder.item_drain.text_4": "...物品将会经过分液池顶部,并在此过程中将其包含的液体排入分液池内", "create.ponder.item_drain.text_4": "...物品将会经过分液池顶部,并在此过程中将其包含的液体排入分液池内",
"create.ponder.item_drain.text_5": "流体管道可以从分液池中抽取液体", "create.ponder.item_drain.text_5": "流体管道可以从分液池中抽取液体",
"create.ponder.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault", "create.ponder.item_vault_sizes.header": "物品保险库的尺寸",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity", "create.ponder.item_vault_sizes.text_1": "可以组合物品保险库以增加总容量",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...", "create.ponder.item_vault_sizes.text_2": "它们的直径最多可以有 3 个方块宽……",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter", "create.ponder.item_vault_sizes.text_3": "……长度最多为直径的 3 倍",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults", "create.ponder.item_vault_storage.header": "在保险库中存储物品",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items", "create.ponder.item_vault_storage.text_1": "物品保险库可用于存储大量物品",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually", "create.ponder.item_vault_storage.text_2": "但是,不能手动添加或获取物品",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...", "create.ponder.item_vault_storage.text_3": "任何用于物品传输的组件都可以用于添加……",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container", "create.ponder.item_vault_storage.text_4": "……和从该容器中取出物品",
"create.ponder.large_cogwheel.header": "使用大齿轮传递旋转力", "create.ponder.large_cogwheel.header": "使用大齿轮传递旋转力",
"create.ponder.large_cogwheel.text_1": "大齿轮可以以特定的角度相互连接", "create.ponder.large_cogwheel.text_1": "大齿轮可以以特定的角度相互连接",
@ -2263,17 +2263,17 @@
"create.ponder.powered_toggle_latch.text_3": "...开启或者是关闭", "create.ponder.powered_toggle_latch.text_3": "...开启或者是关闭",
"create.ponder.powered_toggle_latch.text_4": "你也可以手动切换其状态", "create.ponder.powered_toggle_latch.text_4": "你也可以手动切换其状态",
"create.ponder.pulse_extender.header": "UNLOCALIZED: Controlling signals using Pulse Extenders", "create.ponder.pulse_extender.header": "使用脉冲延长器控制信号",
"create.ponder.pulse_extender.text_1": "UNLOCALIZED: Pulse Extenders can lengthen a signal passing through", "create.ponder.pulse_extender.text_1": "脉冲延长器可以延长通过的信号",
"create.ponder.pulse_extender.text_2": "UNLOCALIZED: They activate after a short delay...", "create.ponder.pulse_extender.text_2": "它会在短暂延迟后激活……",
"create.ponder.pulse_extender.text_3": "UNLOCALIZED: ...and cool down for the configured duration", "create.ponder.pulse_extender.text_3": "……并在配置的持续时间后取消激活",
"create.ponder.pulse_extender.text_4": "UNLOCALIZED: Using the mouse wheel, the discharge time can be configured", "create.ponder.pulse_extender.text_4": "通过鼠标滚轮,可以配置持续时间",
"create.ponder.pulse_extender.text_5": "UNLOCALIZED: The configured duration can range up to 30 minutes", "create.ponder.pulse_extender.text_5": "配置的持续时间最长可达 30 分钟",
"create.ponder.pulse_repeater.header": "使用脉冲中继器控制信号", "create.ponder.pulse_repeater.header": "使用脉冲中继器控制信号",
"create.ponder.pulse_repeater.text_1": "脉冲中继器会将所有通入的红石信号缩减为一次脉冲", "create.ponder.pulse_repeater.text_1": "脉冲中继器会将所有通入的红石信号缩减为一次脉冲",
"create.ponder.pulse_repeater.text_2": "UNLOCALIZED: Using the mouse wheel, the charge time can be configured", "create.ponder.pulse_repeater.text_2": "通过鼠标滚轮,可以配置充能时间",
"create.ponder.pulse_repeater.text_3": "UNLOCALIZED: Configured delays can range up to 30 minutes", "create.ponder.pulse_repeater.text_3": "配置的延迟范围最长可达 30 分钟",
"create.ponder.radial_chassis.header": "使用旋转底盘黏着方块", "create.ponder.radial_chassis.header": "使用旋转底盘黏着方块",
"create.ponder.radial_chassis.text_1": "同一行上的旋转底盘会相互连接在一起", "create.ponder.radial_chassis.text_1": "同一行上的旋转底盘会相互连接在一起",

View file

@ -0,0 +1,12 @@
{
"replace": false,
"values": [
"create:asurine",
"create:crimsite",
"create:limestone",
"create:ochrum",
"create:scoria",
"create:scorchia",
"create:veridium"
]
}

View file

@ -0,0 +1,12 @@
{
"replace": false,
"values": [
"create:asurine",
"create:crimsite",
"create:limestone",
"create:ochrum",
"create:scoria",
"create:scorchia",
"create:veridium"
]
}

View file

@ -0,0 +1,12 @@
{
"replace": false,
"values": [
"create:asurine",
"create:crimsite",
"create:limestone",
"create:ochrum",
"create:scoria",
"create:scorchia",
"create:veridium"
]
}

View file

@ -0,0 +1,12 @@
{
"replace": false,
"values": [
"create:asurine",
"create:crimsite",
"create:limestone",
"create:ochrum",
"create:scoria",
"create:scorchia",
"create:veridium"
]
}

View file

@ -294,20 +294,20 @@ public class AllBlocks {
public static final BlockEntry<EncasedShaftBlock> ANDESITE_ENCASED_SHAFT = public static final BlockEntry<EncasedShaftBlock> ANDESITE_ENCASED_SHAFT =
REGISTRATE.block("andesite_encased_shaft", EncasedShaftBlock::andesite) REGISTRATE.block("andesite_encased_shaft", EncasedShaftBlock::andesite)
.transform(BuilderTransformers.encasedShaft("andesite", AllSpriteShifts.ANDESITE_CASING)) .transform(BuilderTransformers.encasedShaft("andesite", () -> AllSpriteShifts.ANDESITE_CASING))
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.register(); .register();
public static final BlockEntry<EncasedShaftBlock> BRASS_ENCASED_SHAFT = public static final BlockEntry<EncasedShaftBlock> BRASS_ENCASED_SHAFT =
REGISTRATE.block("brass_encased_shaft", EncasedShaftBlock::brass) REGISTRATE.block("brass_encased_shaft", EncasedShaftBlock::brass)
.transform(BuilderTransformers.encasedShaft("brass", AllSpriteShifts.BRASS_CASING)) .transform(BuilderTransformers.encasedShaft("brass", () -> AllSpriteShifts.BRASS_CASING))
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.register(); .register();
public static final BlockEntry<EncasedCogwheelBlock> ANDESITE_ENCASED_COGWHEEL = public static final BlockEntry<EncasedCogwheelBlock> ANDESITE_ENCASED_COGWHEEL =
REGISTRATE.block("andesite_encased_cogwheel", p -> EncasedCogwheelBlock.andesite(false, p)) REGISTRATE.block("andesite_encased_cogwheel", p -> EncasedCogwheelBlock.andesite(false, p))
.transform(BuilderTransformers.encasedCogwheel("andesite", AllSpriteShifts.ANDESITE_CASING)) .transform(BuilderTransformers.encasedCogwheel("andesite", () -> AllSpriteShifts.ANDESITE_CASING))
.onRegister(CreateRegistrate.connectedTextures(new EncasedCogCTBehaviour(AllSpriteShifts.ANDESITE_CASING, .onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCogCTBehaviour(AllSpriteShifts.ANDESITE_CASING,
Couple.create(AllSpriteShifts.ANDESITE_ENCASED_COGWHEEL_SIDE, Couple.create(AllSpriteShifts.ANDESITE_ENCASED_COGWHEEL_SIDE,
AllSpriteShifts.ANDESITE_ENCASED_COGWHEEL_OTHERSIDE)))) AllSpriteShifts.ANDESITE_ENCASED_COGWHEEL_OTHERSIDE))))
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
@ -315,8 +315,8 @@ public class AllBlocks {
public static final BlockEntry<EncasedCogwheelBlock> BRASS_ENCASED_COGWHEEL = public static final BlockEntry<EncasedCogwheelBlock> BRASS_ENCASED_COGWHEEL =
REGISTRATE.block("brass_encased_cogwheel", p -> EncasedCogwheelBlock.brass(false, p)) REGISTRATE.block("brass_encased_cogwheel", p -> EncasedCogwheelBlock.brass(false, p))
.transform(BuilderTransformers.encasedCogwheel("brass", AllSpriteShifts.BRASS_CASING)) .transform(BuilderTransformers.encasedCogwheel("brass", () -> AllSpriteShifts.BRASS_CASING))
.onRegister(CreateRegistrate.connectedTextures(new EncasedCogCTBehaviour(AllSpriteShifts.BRASS_CASING, .onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCogCTBehaviour(AllSpriteShifts.BRASS_CASING,
Couple.create(AllSpriteShifts.BRASS_ENCASED_COGWHEEL_SIDE, Couple.create(AllSpriteShifts.BRASS_ENCASED_COGWHEEL_SIDE,
AllSpriteShifts.BRASS_ENCASED_COGWHEEL_OTHERSIDE)))) AllSpriteShifts.BRASS_ENCASED_COGWHEEL_OTHERSIDE))))
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
@ -324,13 +324,13 @@ public class AllBlocks {
public static final BlockEntry<EncasedCogwheelBlock> ANDESITE_ENCASED_LARGE_COGWHEEL = public static final BlockEntry<EncasedCogwheelBlock> ANDESITE_ENCASED_LARGE_COGWHEEL =
REGISTRATE.block("andesite_encased_large_cogwheel", p -> EncasedCogwheelBlock.andesite(true, p)) REGISTRATE.block("andesite_encased_large_cogwheel", p -> EncasedCogwheelBlock.andesite(true, p))
.transform(BuilderTransformers.encasedLargeCogwheel("andesite", AllSpriteShifts.ANDESITE_CASING)) .transform(BuilderTransformers.encasedLargeCogwheel("andesite", () -> AllSpriteShifts.ANDESITE_CASING))
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.register(); .register();
public static final BlockEntry<EncasedCogwheelBlock> BRASS_ENCASED_LARGE_COGWHEEL = public static final BlockEntry<EncasedCogwheelBlock> BRASS_ENCASED_LARGE_COGWHEEL =
REGISTRATE.block("brass_encased_large_cogwheel", p -> EncasedCogwheelBlock.brass(true, p)) REGISTRATE.block("brass_encased_large_cogwheel", p -> EncasedCogwheelBlock.brass(true, p))
.transform(BuilderTransformers.encasedLargeCogwheel("brass", AllSpriteShifts.BRASS_CASING)) .transform(BuilderTransformers.encasedLargeCogwheel("brass", () -> AllSpriteShifts.BRASS_CASING))
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.register(); .register();
@ -339,7 +339,7 @@ public class AllBlocks {
.properties(BlockBehaviour.Properties::noOcclusion) .properties(BlockBehaviour.Properties::noOcclusion)
.transform(BlockStressDefaults.setNoImpact()) .transform(BlockStressDefaults.setNoImpact())
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.onRegister(CreateRegistrate.connectedTextures(new EncasedCTBehaviour(AllSpriteShifts.ANDESITE_CASING))) .onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(AllSpriteShifts.ANDESITE_CASING)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.ANDESITE_CASING, .onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.ANDESITE_CASING,
(s, f) -> f.getAxis() == s.getValue(GearboxBlock.AXIS)))) (s, f) -> f.getAxis() == s.getValue(GearboxBlock.AXIS))))
.blockstate((c, p) -> axisBlock(c, p, $ -> AssetLookup.partialBaseModel(c, p), true)) .blockstate((c, p) -> axisBlock(c, p, $ -> AssetLookup.partialBaseModel(c, p), true))
@ -668,7 +668,7 @@ public class AllBlocks {
.properties(BlockBehaviour.Properties::noOcclusion) .properties(BlockBehaviour.Properties::noOcclusion)
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.blockstate(BlockStateGen.encasedPipe()) .blockstate(BlockStateGen.encasedPipe())
.onRegister(CreateRegistrate.connectedTextures(new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING))) .onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING, .onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING,
(s, f) -> !s.getValue(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(f))))) (s, f) -> !s.getValue(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(f)))))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
@ -962,7 +962,7 @@ public class AllBlocks {
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.tag(AllBlockTags.SAFE_NBT.tag) .tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(BlockStateGen.linearChassis()) .blockstate(BlockStateGen.linearChassis())
.onRegister(connectedTextures(new ChassisCTBehaviour())) .onRegister(connectedTextures(ChassisCTBehaviour::new))
.lang("Linear Chassis") .lang("Linear Chassis")
.simpleItem() .simpleItem()
.register(); .register();
@ -973,7 +973,7 @@ public class AllBlocks {
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.tag(AllBlockTags.SAFE_NBT.tag) .tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(BlockStateGen.linearChassis()) .blockstate(BlockStateGen.linearChassis())
.onRegister(connectedTextures(new ChassisCTBehaviour())) .onRegister(connectedTextures(ChassisCTBehaviour::new))
.simpleItem() .simpleItem()
.register(); .register();
@ -1146,27 +1146,27 @@ public class AllBlocks {
}); });
public static final BlockEntry<CasingBlock> ANDESITE_CASING = REGISTRATE.block("andesite_casing", CasingBlock::new) public static final BlockEntry<CasingBlock> ANDESITE_CASING = REGISTRATE.block("andesite_casing", CasingBlock::new)
.transform(BuilderTransformers.casing(AllSpriteShifts.ANDESITE_CASING)) .transform(BuilderTransformers.casing(() -> AllSpriteShifts.ANDESITE_CASING))
.register(); .register();
public static final BlockEntry<CasingBlock> BRASS_CASING = REGISTRATE.block("brass_casing", CasingBlock::new) public static final BlockEntry<CasingBlock> BRASS_CASING = REGISTRATE.block("brass_casing", CasingBlock::new)
.transform(BuilderTransformers.casing(AllSpriteShifts.BRASS_CASING)) .transform(BuilderTransformers.casing(() -> AllSpriteShifts.BRASS_CASING))
.register(); .register();
public static final BlockEntry<CasingBlock> COPPER_CASING = REGISTRATE.block("copper_casing", CasingBlock::new) public static final BlockEntry<CasingBlock> COPPER_CASING = REGISTRATE.block("copper_casing", CasingBlock::new)
.transform(BuilderTransformers.casing(AllSpriteShifts.COPPER_CASING)) .transform(BuilderTransformers.casing(() -> AllSpriteShifts.COPPER_CASING))
.properties(p -> p.sound(SoundType.COPPER)) .properties(p -> p.sound(SoundType.COPPER))
.register(); .register();
public static final BlockEntry<CasingBlock> SHADOW_STEEL_CASING = public static final BlockEntry<CasingBlock> SHADOW_STEEL_CASING =
REGISTRATE.block("shadow_steel_casing", CasingBlock::deprecated) REGISTRATE.block("shadow_steel_casing", CasingBlock::deprecated)
.transform(BuilderTransformers.casing(AllSpriteShifts.SHADOW_STEEL_CASING)) .transform(BuilderTransformers.casing(() -> AllSpriteShifts.SHADOW_STEEL_CASING))
.lang("Shadow Casing") .lang("Shadow Casing")
.register(); .register();
public static final BlockEntry<CasingBlock> REFINED_RADIANCE_CASING = public static final BlockEntry<CasingBlock> REFINED_RADIANCE_CASING =
REGISTRATE.block("refined_radiance_casing", CasingBlock::deprecated) REGISTRATE.block("refined_radiance_casing", CasingBlock::deprecated)
.transform(BuilderTransformers.casing(AllSpriteShifts.REFINED_RADIANCE_CASING)) .transform(BuilderTransformers.casing(() -> AllSpriteShifts.REFINED_RADIANCE_CASING))
.properties(p -> p.lightLevel($ -> 12)) .properties(p -> p.lightLevel($ -> 12))
.lang("Radiant Casing") .lang("Radiant Casing")
.register(); .register();
@ -1178,7 +1178,7 @@ public class AllBlocks {
.transform(axeOrPickaxe()) .transform(axeOrPickaxe())
.blockstate(BlockStateGen.horizontalBlockProvider(true)) .blockstate(BlockStateGen.horizontalBlockProvider(true))
.transform(BlockStressDefaults.setImpact(2.0)) .transform(BlockStressDefaults.setImpact(2.0))
.onRegister(CreateRegistrate.connectedTextures(new CrafterCTBehaviour())) .onRegister(CreateRegistrate.connectedTextures(CrafterCTBehaviour::new))
.addLayer(() -> RenderType::cutoutMipped) .addLayer(() -> RenderType::cutoutMipped)
.item() .item()
.transform(customItemModel()) .transform(customItemModel())
@ -1257,7 +1257,7 @@ public class AllBlocks {
.modelFile(AssetLookup.standardModel(c, p)) .modelFile(AssetLookup.standardModel(c, p))
.rotationY(s.getValue(ItemVaultBlock.HORIZONTAL_AXIS) == Axis.X ? 90 : 0) .rotationY(s.getValue(ItemVaultBlock.HORIZONTAL_AXIS) == Axis.X ? 90 : 0)
.build())) .build()))
.onRegister(connectedTextures(new ItemVaultCTBehaviour())) .onRegister(connectedTextures(ItemVaultCTBehaviour::new))
.item(ItemVaultItem::new) .item(ItemVaultItem::new)
.build() .build()
.register(); .register();
@ -1312,7 +1312,7 @@ public class AllBlocks {
public static final BlockEntry<BrassTunnelBlock> BRASS_TUNNEL = public static final BlockEntry<BrassTunnelBlock> BRASS_TUNNEL =
REGISTRATE.block("brass_tunnel", BrassTunnelBlock::new) REGISTRATE.block("brass_tunnel", BrassTunnelBlock::new)
.transform(BuilderTransformers.beltTunnel("brass", Create.asResource("block/brass_block"))) .transform(BuilderTransformers.beltTunnel("brass", Create.asResource("block/brass_block")))
.onRegister(connectedTextures(new BrassTunnelCTBehaviour())) .onRegister(connectedTextures(BrassTunnelCTBehaviour::new))
.register(); .register();
public static final BlockEntry<ContentObserverBlock> CONTENT_OBSERVER = public static final BlockEntry<ContentObserverBlock> CONTENT_OBSERVER =

View file

@ -40,7 +40,7 @@ public class AllEntityTypes {
public static final EntityEntry<SuperGlueEntity> SUPER_GLUE = public static final EntityEntry<SuperGlueEntity> SUPER_GLUE =
register("super_glue", SuperGlueEntity::new, () -> SuperGlueRenderer::new, MobCategory.MISC, 10, register("super_glue", SuperGlueEntity::new, () -> SuperGlueRenderer::new, MobCategory.MISC, 10,
Integer.MAX_VALUE, false, true, SuperGlueEntity::build).instance(() -> GlueInstance::new) Integer.MAX_VALUE, false, true, SuperGlueEntity::build).instance(() -> GlueInstance::new, false)
.register(); .register();
public static final EntityEntry<BlueprintEntity> CRAFTING_BLUEPRINT = public static final EntityEntry<BlueprintEntity> CRAFTING_BLUEPRINT =

View file

@ -10,7 +10,6 @@ import java.util.IdentityHashMap;
import java.util.Map; import java.util.Map;
import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry;
import com.simibubi.create.foundation.block.connected.CTSpriteShifter;
import com.simibubi.create.foundation.block.connected.CTSpriteShifter.CTType; import com.simibubi.create.foundation.block.connected.CTSpriteShifter.CTType;
import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
import com.simibubi.create.foundation.block.render.SpriteShifter; import com.simibubi.create.foundation.block.render.SpriteShifter;
@ -21,7 +20,7 @@ import net.minecraft.world.level.block.state.properties.WoodType;
public class AllSpriteShifts { public class AllSpriteShifts {
static final Map<WoodType, CTSpriteShiftEntry> WOODEN_WINDOWS = new IdentityHashMap<>(); private static final Map<WoodType, CTSpriteShiftEntry> WOODEN_WINDOWS = new IdentityHashMap<>();
public static final Map<DyeColor, SpriteShiftEntry> DYED_BELTS = new IdentityHashMap<>(), public static final Map<DyeColor, SpriteShiftEntry> DYED_BELTS = new IdentityHashMap<>(),
DYED_OFFSET_BELTS = new IdentityHashMap<>(), DYED_DIAGONAL_BELTS = new IdentityHashMap<>(); DYED_OFFSET_BELTS = new IdentityHashMap<>(), DYED_DIAGONAL_BELTS = new IdentityHashMap<>();
@ -33,22 +32,22 @@ public class AllSpriteShifts {
ORNATE_IRON_WINDOW = vertical("palettes/ornate_iron_window"); ORNATE_IRON_WINDOW = vertical("palettes/ornate_iron_window");
public static final CTSpriteShiftEntry CRAFTER_FRONT = getCT(CTType.OMNIDIRECTIONAL, "crafter_top", "brass_casing"), public static final CTSpriteShiftEntry CRAFTER_FRONT = getCT(CTType.OMNIDIRECTIONAL, "crafter_top", "brass_casing"),
CRAFTER_SIDE = getCT(CTType.VERTICAL, "crafter_side"), CRAFTER_SIDE = vertical("crafter_side"),
CRAFTER_OTHERSIDE = getCT(CTType.HORIZONTAL, "crafter_side"), CRAFTER_OTHERSIDE = horizontal("crafter_side"),
ANDESITE_ENCASED_COGWHEEL_SIDE = getCT(CTType.VERTICAL, "andesite_encased_cogwheel_side"), ANDESITE_ENCASED_COGWHEEL_SIDE = vertical("andesite_encased_cogwheel_side"),
ANDESITE_ENCASED_COGWHEEL_OTHERSIDE = getCT(CTType.HORIZONTAL, "andesite_encased_cogwheel_side"), ANDESITE_ENCASED_COGWHEEL_OTHERSIDE = horizontal("andesite_encased_cogwheel_side"),
BRASS_ENCASED_COGWHEEL_SIDE = getCT(CTType.VERTICAL, "brass_encased_cogwheel_side"), BRASS_ENCASED_COGWHEEL_SIDE = vertical("brass_encased_cogwheel_side"),
BRASS_ENCASED_COGWHEEL_OTHERSIDE = getCT(CTType.HORIZONTAL, "brass_encased_cogwheel_side"); BRASS_ENCASED_COGWHEEL_OTHERSIDE = horizontal("brass_encased_cogwheel_side");
public static final CTSpriteShiftEntry ANDESITE_CASING = omni("andesite_casing"), public static final CTSpriteShiftEntry ANDESITE_CASING = omni("andesite_casing"),
BRASS_CASING = omni("brass_casing"), COPPER_CASING = omni("copper_casing"), BRASS_CASING = omni("brass_casing"), COPPER_CASING = omni("copper_casing"),
SHADOW_STEEL_CASING = omni("shadow_steel_casing"), REFINED_RADIANCE_CASING = omni("refined_radiance_casing"), SHADOW_STEEL_CASING = omni("shadow_steel_casing"), REFINED_RADIANCE_CASING = omni("refined_radiance_casing"),
CREATIVE_CASING = getCT(CTType.CROSS, "creative_casing"); CREATIVE_CASING = getCT(CTType.CROSS, "creative_casing");
public static final CTSpriteShiftEntry CHASSIS_SIDE = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_side"), public static final CTSpriteShiftEntry CHASSIS_SIDE = omni("linear_chassis_side"),
SECONDARY_CHASSIS_SIDE = getCT(CTType.OMNIDIRECTIONAL, "secondary_linear_chassis_side"), SECONDARY_CHASSIS_SIDE = omni("secondary_linear_chassis_side"),
CHASSIS = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_end"), CHASSIS = omni("linear_chassis_end"),
CHASSIS_STICKY = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_end_sticky"); CHASSIS_STICKY = omni("linear_chassis_end_sticky");
public static final CTSpriteShiftEntry BRASS_TUNNEL_TOP = vertical("brass_tunnel_top"), public static final CTSpriteShiftEntry BRASS_TUNNEL_TOP = vertical("brass_tunnel_top"),
FLUID_TANK = getCT(CTType.CROSS, "fluid_tank"), FLUID_TANK = getCT(CTType.CROSS, "fluid_tank"),
@ -67,14 +66,6 @@ public class AllSpriteShifts {
populateMaps(); populateMaps();
} }
//
public static CTSpriteShiftEntry getWoodenWindow(WoodType woodType) {
return WOODEN_WINDOWS.get(woodType);
}
//
private static void populateMaps() { private static void populateMaps() {
WoodType[] supportedWoodTypes = new WoodType[] { WoodType.OAK, WoodType.SPRUCE, WoodType.BIRCH, WoodType.ACACIA, WoodType[] supportedWoodTypes = new WoodType[] { WoodType.OAK, WoodType.SPRUCE, WoodType.BIRCH, WoodType.ACACIA,
WoodType.JUNGLE, WoodType.DARK_OAK, WoodType.CRIMSON, WoodType.WARPED }; WoodType.JUNGLE, WoodType.DARK_OAK, WoodType.CRIMSON, WoodType.WARPED };
@ -90,24 +81,30 @@ public class AllSpriteShifts {
} }
} }
static Couple<CTSpriteShiftEntry> vault(String name) { private static Couple<CTSpriteShiftEntry> vault(String name) {
final String prefixed = "vault_" + name; final String prefixed = "vault_" + name;
return Couple return Couple
.createWithContext(b -> getCT(CTSpriteShifter.CTType.CROSS, prefixed, b ? prefixed : prefixed + "_large")); .createWithContext(b -> getCT(CTType.CROSS, prefixed, b ? prefixed : prefixed + "_large"));
} }
// //
static CTSpriteShiftEntry omni(String name) { private static CTSpriteShiftEntry omni(String name) {
return getCT(OMNIDIRECTIONAL, name); return getCT(OMNIDIRECTIONAL, name);
} }
static CTSpriteShiftEntry vertical(String name) { private static CTSpriteShiftEntry horizontal(String name) {
return getCT(VERTICAL, name);
}
static CTSpriteShiftEntry horizontal(String name) {
return getCT(HORIZONTAL, name); return getCT(HORIZONTAL, name);
} }
private static CTSpriteShiftEntry vertical(String name) {
return getCT(VERTICAL, name);
}
//
public static CTSpriteShiftEntry getWoodenWindow(WoodType woodType) {
return WOODEN_WINDOWS.get(woodType);
}
} }

View file

@ -11,6 +11,7 @@ import com.simibubi.create.content.contraptions.components.actors.DrillRenderer;
import com.simibubi.create.content.contraptions.components.actors.DrillTileEntity; import com.simibubi.create.content.contraptions.components.actors.DrillTileEntity;
import com.simibubi.create.content.contraptions.components.actors.HarvesterRenderer; import com.simibubi.create.content.contraptions.components.actors.HarvesterRenderer;
import com.simibubi.create.content.contraptions.components.actors.HarvesterTileEntity; import com.simibubi.create.content.contraptions.components.actors.HarvesterTileEntity;
import com.simibubi.create.content.contraptions.components.actors.PSIInstance;
import com.simibubi.create.content.contraptions.components.actors.PortableFluidInterfaceTileEntity; import com.simibubi.create.content.contraptions.components.actors.PortableFluidInterfaceTileEntity;
import com.simibubi.create.content.contraptions.components.actors.PortableItemInterfaceTileEntity; import com.simibubi.create.content.contraptions.components.actors.PortableItemInterfaceTileEntity;
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceRenderer; import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceRenderer;
@ -191,56 +192,56 @@ public class AllTileEntities {
// Kinetics // Kinetics
public static final BlockEntityEntry<BracketedKineticTileEntity> BRACKETED_KINETIC = Create.registrate() public static final BlockEntityEntry<BracketedKineticTileEntity> BRACKETED_KINETIC = Create.registrate()
.tileEntity("simple_kinetic", BracketedKineticTileEntity::new) .tileEntity("simple_kinetic", BracketedKineticTileEntity::new)
.instance(() -> BracketedKineticTileInstance::new) .instance(() -> BracketedKineticTileInstance::new, false)
.validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL) .validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL)
.renderer(() -> BracketedKineticTileRenderer::new) .renderer(() -> BracketedKineticTileRenderer::new)
.register(); .register();
public static final BlockEntityEntry<CreativeMotorTileEntity> MOTOR = Create.registrate() public static final BlockEntityEntry<CreativeMotorTileEntity> MOTOR = Create.registrate()
.tileEntity("motor", CreativeMotorTileEntity::new) .tileEntity("motor", CreativeMotorTileEntity::new)
.instance(() -> HalfShaftInstance::new) .instance(() -> HalfShaftInstance::new, false)
.validBlocks(AllBlocks.CREATIVE_MOTOR) .validBlocks(AllBlocks.CREATIVE_MOTOR)
.renderer(() -> CreativeMotorRenderer::new) .renderer(() -> CreativeMotorRenderer::new)
.register(); .register();
public static final BlockEntityEntry<GearboxTileEntity> GEARBOX = Create.registrate() public static final BlockEntityEntry<GearboxTileEntity> GEARBOX = Create.registrate()
.tileEntity("gearbox", GearboxTileEntity::new) .tileEntity("gearbox", GearboxTileEntity::new)
.instance(() -> GearboxInstance::new) .instance(() -> GearboxInstance::new, false)
.validBlocks(AllBlocks.GEARBOX) .validBlocks(AllBlocks.GEARBOX)
.renderer(() -> GearboxRenderer::new) .renderer(() -> GearboxRenderer::new)
.register(); .register();
public static final BlockEntityEntry<KineticTileEntity> ENCASED_SHAFT = Create.registrate() public static final BlockEntityEntry<KineticTileEntity> ENCASED_SHAFT = Create.registrate()
.tileEntity("encased_shaft", KineticTileEntity::new) .tileEntity("encased_shaft", KineticTileEntity::new)
.instance(() -> ShaftInstance::new) .instance(() -> ShaftInstance::new, false)
.validBlocks(AllBlocks.ANDESITE_ENCASED_SHAFT, AllBlocks.BRASS_ENCASED_SHAFT, AllBlocks.ENCASED_CHAIN_DRIVE) .validBlocks(AllBlocks.ANDESITE_ENCASED_SHAFT, AllBlocks.BRASS_ENCASED_SHAFT, AllBlocks.ENCASED_CHAIN_DRIVE)
.renderer(() -> ShaftRenderer::new) .renderer(() -> ShaftRenderer::new)
.register(); .register();
public static final BlockEntityEntry<SimpleKineticTileEntity> ENCASED_COGWHEEL = Create.registrate() public static final BlockEntityEntry<SimpleKineticTileEntity> ENCASED_COGWHEEL = Create.registrate()
.tileEntity("encased_cogwheel", SimpleKineticTileEntity::new) .tileEntity("encased_cogwheel", SimpleKineticTileEntity::new)
.instance(() -> EncasedCogInstance::small) .instance(() -> EncasedCogInstance::small, false)
.validBlocks(AllBlocks.ANDESITE_ENCASED_COGWHEEL, AllBlocks.BRASS_ENCASED_COGWHEEL) .validBlocks(AllBlocks.ANDESITE_ENCASED_COGWHEEL, AllBlocks.BRASS_ENCASED_COGWHEEL)
.renderer(() -> EncasedCogRenderer::small) .renderer(() -> EncasedCogRenderer::small)
.register(); .register();
public static final BlockEntityEntry<SimpleKineticTileEntity> ENCASED_LARGE_COGWHEEL = Create.registrate() public static final BlockEntityEntry<SimpleKineticTileEntity> ENCASED_LARGE_COGWHEEL = Create.registrate()
.tileEntity("encased_large_cogwheel", SimpleKineticTileEntity::new) .tileEntity("encased_large_cogwheel", SimpleKineticTileEntity::new)
.instance(() -> EncasedCogInstance::large) .instance(() -> EncasedCogInstance::large, false)
.validBlocks(AllBlocks.ANDESITE_ENCASED_LARGE_COGWHEEL, AllBlocks.BRASS_ENCASED_LARGE_COGWHEEL) .validBlocks(AllBlocks.ANDESITE_ENCASED_LARGE_COGWHEEL, AllBlocks.BRASS_ENCASED_LARGE_COGWHEEL)
.renderer(() -> EncasedCogRenderer::large) .renderer(() -> EncasedCogRenderer::large)
.register(); .register();
public static final BlockEntityEntry<AdjustablePulleyTileEntity> ADJUSTABLE_PULLEY = Create.registrate() public static final BlockEntityEntry<AdjustablePulleyTileEntity> ADJUSTABLE_PULLEY = Create.registrate()
.tileEntity("adjustable_pulley", AdjustablePulleyTileEntity::new) .tileEntity("adjustable_pulley", AdjustablePulleyTileEntity::new)
.instance(() -> ShaftInstance::new) .instance(() -> ShaftInstance::new, false)
.validBlocks(AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT) .validBlocks(AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT)
.renderer(() -> ShaftRenderer::new) .renderer(() -> ShaftRenderer::new)
.register(); .register();
public static final BlockEntityEntry<EncasedFanTileEntity> ENCASED_FAN = Create.registrate() public static final BlockEntityEntry<EncasedFanTileEntity> ENCASED_FAN = Create.registrate()
.tileEntity("encased_fan", EncasedFanTileEntity::new) .tileEntity("encased_fan", EncasedFanTileEntity::new)
.instance(() -> FanInstance::new) .instance(() -> FanInstance::new, false)
.validBlocks(AllBlocks.ENCASED_FAN) .validBlocks(AllBlocks.ENCASED_FAN)
.renderer(() -> EncasedFanRenderer::new) .renderer(() -> EncasedFanRenderer::new)
.register(); .register();
@ -253,21 +254,21 @@ public class AllTileEntities {
public static final BlockEntityEntry<ClutchTileEntity> CLUTCH = Create.registrate() public static final BlockEntityEntry<ClutchTileEntity> CLUTCH = Create.registrate()
.tileEntity("clutch", ClutchTileEntity::new) .tileEntity("clutch", ClutchTileEntity::new)
.instance(() -> SplitShaftInstance::new) .instance(() -> SplitShaftInstance::new, false)
.validBlocks(AllBlocks.CLUTCH) .validBlocks(AllBlocks.CLUTCH)
.renderer(() -> SplitShaftRenderer::new) .renderer(() -> SplitShaftRenderer::new)
.register(); .register();
public static final BlockEntityEntry<GearshiftTileEntity> GEARSHIFT = Create.registrate() public static final BlockEntityEntry<GearshiftTileEntity> GEARSHIFT = Create.registrate()
.tileEntity("gearshift", GearshiftTileEntity::new) .tileEntity("gearshift", GearshiftTileEntity::new)
.instance(() -> SplitShaftInstance::new) .instance(() -> SplitShaftInstance::new, false)
.validBlocks(AllBlocks.GEARSHIFT) .validBlocks(AllBlocks.GEARSHIFT)
.renderer(() -> SplitShaftRenderer::new) .renderer(() -> SplitShaftRenderer::new)
.register(); .register();
public static final BlockEntityEntry<TurntableTileEntity> TURNTABLE = Create.registrate() public static final BlockEntityEntry<TurntableTileEntity> TURNTABLE = Create.registrate()
.tileEntity("turntable", TurntableTileEntity::new) .tileEntity("turntable", TurntableTileEntity::new)
.instance(() -> SingleRotatingInstance::new) .instance(() -> SingleRotatingInstance::new, false)
.validBlocks(AllBlocks.TURNTABLE) .validBlocks(AllBlocks.TURNTABLE)
.renderer(() -> KineticTileEntityRenderer::new) .renderer(() -> KineticTileEntityRenderer::new)
.register(); .register();
@ -289,7 +290,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<GantryShaftTileEntity> GANTRY_SHAFT = Create.registrate() public static final BlockEntityEntry<GantryShaftTileEntity> GANTRY_SHAFT = Create.registrate()
.tileEntity("gantry_shaft", GantryShaftTileEntity::new) .tileEntity("gantry_shaft", GantryShaftTileEntity::new)
.instance(() -> SingleRotatingInstance::new) .instance(() -> SingleRotatingInstance::new, false)
.validBlocks(AllBlocks.GANTRY_SHAFT) .validBlocks(AllBlocks.GANTRY_SHAFT)
.renderer(() -> KineticTileEntityRenderer::new) .renderer(() -> KineticTileEntityRenderer::new)
.register(); .register();
@ -370,7 +371,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<BeltTileEntity> BELT = Create.registrate() public static final BlockEntityEntry<BeltTileEntity> BELT = Create.registrate()
.tileEntity("belt", BeltTileEntity::new) .tileEntity("belt", BeltTileEntity::new)
.instance(() -> BeltInstance::new) .instance(() -> BeltInstance::new, BeltTileEntity::shouldRenderNormally)
.validBlocks(AllBlocks.BELT) .validBlocks(AllBlocks.BELT)
.renderer(() -> BeltRenderer::new) .renderer(() -> BeltRenderer::new)
.register(); .register();
@ -415,7 +416,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<MechanicalPistonTileEntity> MECHANICAL_PISTON = Create.registrate() public static final BlockEntityEntry<MechanicalPistonTileEntity> MECHANICAL_PISTON = Create.registrate()
.tileEntity("mechanical_piston", MechanicalPistonTileEntity::new) .tileEntity("mechanical_piston", MechanicalPistonTileEntity::new)
.instance(() -> ShaftInstance::new) .instance(() -> ShaftInstance::new, false)
.validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON) .validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON)
.renderer(() -> MechanicalPistonRenderer::new) .renderer(() -> MechanicalPistonRenderer::new)
.register(); .register();
@ -443,7 +444,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<PulleyTileEntity> ROPE_PULLEY = Create.registrate() public static final BlockEntityEntry<PulleyTileEntity> ROPE_PULLEY = Create.registrate()
.tileEntity("rope_pulley", PulleyTileEntity::new) .tileEntity("rope_pulley", PulleyTileEntity::new)
.instance(() -> RopePulleyInstance::new) .instance(() -> RopePulleyInstance::new, false)
.validBlocks(AllBlocks.ROPE_PULLEY) .validBlocks(AllBlocks.ROPE_PULLEY)
.renderer(() -> PulleyRenderer::new) .renderer(() -> PulleyRenderer::new)
.register(); .register();
@ -456,14 +457,14 @@ public class AllTileEntities {
public static final BlockEntityEntry<StickerTileEntity> STICKER = Create.registrate() public static final BlockEntityEntry<StickerTileEntity> STICKER = Create.registrate()
.tileEntity("sticker", StickerTileEntity::new) .tileEntity("sticker", StickerTileEntity::new)
.instance(() -> StickerInstance::new) .instance(() -> StickerInstance::new, false)
.validBlocks(AllBlocks.STICKER) .validBlocks(AllBlocks.STICKER)
.renderer(() -> StickerRenderer::new) .renderer(() -> StickerRenderer::new)
.register(); .register();
public static final BlockEntityEntry<DrillTileEntity> DRILL = Create.registrate() public static final BlockEntityEntry<DrillTileEntity> DRILL = Create.registrate()
.tileEntity("drill", DrillTileEntity::new) .tileEntity("drill", DrillTileEntity::new)
.instance(() -> DrillInstance::new) .instance(() -> DrillInstance::new, false)
.validBlocks(AllBlocks.MECHANICAL_DRILL) .validBlocks(AllBlocks.MECHANICAL_DRILL)
.renderer(() -> DrillRenderer::new) .renderer(() -> DrillRenderer::new)
.register(); .register();
@ -484,40 +485,42 @@ public class AllTileEntities {
public static final BlockEntityEntry<PortableItemInterfaceTileEntity> PORTABLE_STORAGE_INTERFACE = public static final BlockEntityEntry<PortableItemInterfaceTileEntity> PORTABLE_STORAGE_INTERFACE =
Create.registrate() Create.registrate()
.tileEntity("portable_storage_interface", PortableItemInterfaceTileEntity::new) .tileEntity("portable_storage_interface", PortableItemInterfaceTileEntity::new)
.instance(() -> PSIInstance::new)
.validBlocks(AllBlocks.PORTABLE_STORAGE_INTERFACE) .validBlocks(AllBlocks.PORTABLE_STORAGE_INTERFACE)
.renderer(() -> PortableStorageInterfaceRenderer::new) .renderer(() -> PortableStorageInterfaceRenderer::new)
.register(); .register();
public static final BlockEntityEntry<PortableFluidInterfaceTileEntity> PORTABLE_FLUID_INTERFACE = Create.registrate() public static final BlockEntityEntry<PortableFluidInterfaceTileEntity> PORTABLE_FLUID_INTERFACE = Create.registrate()
.tileEntity("portable_fluid_interface", PortableFluidInterfaceTileEntity::new) .tileEntity("portable_fluid_interface", PortableFluidInterfaceTileEntity::new)
.instance(() -> PSIInstance::new)
.validBlocks(AllBlocks.PORTABLE_FLUID_INTERFACE) .validBlocks(AllBlocks.PORTABLE_FLUID_INTERFACE)
.renderer(() -> PortableStorageInterfaceRenderer::new) .renderer(() -> PortableStorageInterfaceRenderer::new)
.register(); .register();
public static final BlockEntityEntry<FlywheelTileEntity> FLYWHEEL = Create.registrate() public static final BlockEntityEntry<FlywheelTileEntity> FLYWHEEL = Create.registrate()
.tileEntity("flywheel", FlywheelTileEntity::new) .tileEntity("flywheel", FlywheelTileEntity::new)
.instance(() -> FlyWheelInstance::new) .instance(() -> FlyWheelInstance::new, false)
.validBlocks(AllBlocks.FLYWHEEL) .validBlocks(AllBlocks.FLYWHEEL)
.renderer(() -> FlywheelRenderer::new) .renderer(() -> FlywheelRenderer::new)
.register(); .register();
public static final BlockEntityEntry<FurnaceEngineTileEntity> FURNACE_ENGINE = Create.registrate() public static final BlockEntityEntry<FurnaceEngineTileEntity> FURNACE_ENGINE = Create.registrate()
.tileEntity("furnace_engine", FurnaceEngineTileEntity::new) .tileEntity("furnace_engine", FurnaceEngineTileEntity::new)
.instance(() -> EngineInstance::new) .instance(() -> EngineInstance::new, false)
.validBlocks(AllBlocks.FURNACE_ENGINE) .validBlocks(AllBlocks.FURNACE_ENGINE)
.renderer(() -> EngineRenderer::new) .renderer(() -> EngineRenderer::new)
.register(); .register();
public static final BlockEntityEntry<MillstoneTileEntity> MILLSTONE = Create.registrate() public static final BlockEntityEntry<MillstoneTileEntity> MILLSTONE = Create.registrate()
.tileEntity("millstone", MillstoneTileEntity::new) .tileEntity("millstone", MillstoneTileEntity::new)
.instance(() -> MillStoneCogInstance::new) .instance(() -> MillStoneCogInstance::new, false)
.validBlocks(AllBlocks.MILLSTONE) .validBlocks(AllBlocks.MILLSTONE)
.renderer(() -> MillstoneRenderer::new) .renderer(() -> MillstoneRenderer::new)
.register(); .register();
public static final BlockEntityEntry<CrushingWheelTileEntity> CRUSHING_WHEEL = Create.registrate() public static final BlockEntityEntry<CrushingWheelTileEntity> CRUSHING_WHEEL = Create.registrate()
.tileEntity("crushing_wheel", CrushingWheelTileEntity::new) .tileEntity("crushing_wheel", CrushingWheelTileEntity::new)
.instance(() -> CutoutRotatingInstance::new) .instance(() -> CutoutRotatingInstance::new, false)
.validBlocks(AllBlocks.CRUSHING_WHEEL) .validBlocks(AllBlocks.CRUSHING_WHEEL)
.renderer(() -> KineticTileEntityRenderer::new) .renderer(() -> KineticTileEntityRenderer::new)
.register(); .register();
@ -531,7 +534,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<WaterWheelTileEntity> WATER_WHEEL = Create.registrate() public static final BlockEntityEntry<WaterWheelTileEntity> WATER_WHEEL = Create.registrate()
.tileEntity("water_wheel", WaterWheelTileEntity::new) .tileEntity("water_wheel", WaterWheelTileEntity::new)
.instance(() -> CutoutRotatingInstance::new) .instance(() -> CutoutRotatingInstance::new, false)
.validBlocks(AllBlocks.WATER_WHEEL) .validBlocks(AllBlocks.WATER_WHEEL)
.renderer(() -> KineticTileEntityRenderer::new) .renderer(() -> KineticTileEntityRenderer::new)
.register(); .register();
@ -578,7 +581,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<SequencedGearshiftTileEntity> SEQUENCED_GEARSHIFT = Create.registrate() public static final BlockEntityEntry<SequencedGearshiftTileEntity> SEQUENCED_GEARSHIFT = Create.registrate()
.tileEntity("sequenced_gearshift", SequencedGearshiftTileEntity::new) .tileEntity("sequenced_gearshift", SequencedGearshiftTileEntity::new)
.instance(() -> SplitShaftInstance::new) .instance(() -> SplitShaftInstance::new, false)
.validBlocks(AllBlocks.SEQUENCED_GEARSHIFT) .validBlocks(AllBlocks.SEQUENCED_GEARSHIFT)
.renderer(() -> SplitShaftRenderer::new) .renderer(() -> SplitShaftRenderer::new)
.register(); .register();
@ -606,7 +609,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<AnalogLeverTileEntity> ANALOG_LEVER = Create.registrate() public static final BlockEntityEntry<AnalogLeverTileEntity> ANALOG_LEVER = Create.registrate()
.tileEntity("analog_lever", AnalogLeverTileEntity::new) .tileEntity("analog_lever", AnalogLeverTileEntity::new)
.instance(() -> AnalogLeverInstance::new) .instance(() -> AnalogLeverInstance::new, false)
.validBlocks(AllBlocks.ANALOG_LEVER) .validBlocks(AllBlocks.ANALOG_LEVER)
.renderer(() -> AnalogLeverRenderer::new) .renderer(() -> AnalogLeverRenderer::new)
.register(); .register();
@ -672,7 +675,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<PulseExtenderTileEntity> PULSE_EXTENDER = Create.registrate() public static final BlockEntityEntry<PulseExtenderTileEntity> PULSE_EXTENDER = Create.registrate()
.tileEntity("pulse_extender", PulseExtenderTileEntity::new) .tileEntity("pulse_extender", PulseExtenderTileEntity::new)
.instance(() -> BrassDiodeInstance::new) .instance(() -> BrassDiodeInstance::new, false)
.validBlocks(AllBlocks.PULSE_EXTENDER) .validBlocks(AllBlocks.PULSE_EXTENDER)
.renderer(() -> BrassDiodeRenderer::new) .renderer(() -> BrassDiodeRenderer::new)
.register(); .register();
@ -680,7 +683,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<PulseRepeaterTileEntity> PULSE_REPEATER = public static final BlockEntityEntry<PulseRepeaterTileEntity> PULSE_REPEATER =
Create.registrate() Create.registrate()
.tileEntity("pulse_repeater", PulseRepeaterTileEntity::new) .tileEntity("pulse_repeater", PulseRepeaterTileEntity::new)
.instance(() -> BrassDiodeInstance::new) .instance(() -> BrassDiodeInstance::new, false)
.validBlocks(AllBlocks.PULSE_REPEATER) .validBlocks(AllBlocks.PULSE_REPEATER)
.renderer(() -> BrassDiodeRenderer::new) .renderer(() -> BrassDiodeRenderer::new)
.register(); .register();
@ -714,7 +717,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<ToolboxTileEntity> TOOLBOX = Create.registrate() public static final BlockEntityEntry<ToolboxTileEntity> TOOLBOX = Create.registrate()
.tileEntity("toolbox", ToolboxTileEntity::new) .tileEntity("toolbox", ToolboxTileEntity::new)
.instance(() -> ToolBoxInstance::new) .instance(() -> ToolBoxInstance::new, false)
.validBlocks(AllBlocks.TOOLBOXES.toArray()) .validBlocks(AllBlocks.TOOLBOXES.toArray())
.renderer(() -> ToolboxRenderer::new) .renderer(() -> ToolboxRenderer::new)
.register(); .register();

View file

@ -30,7 +30,6 @@ import com.simibubi.create.foundation.data.recipe.ProcessingRecipeGen;
import com.simibubi.create.foundation.data.recipe.SequencedAssemblyRecipeGen; import com.simibubi.create.foundation.data.recipe.SequencedAssemblyRecipeGen;
import com.simibubi.create.foundation.data.recipe.StandardRecipeGen; import com.simibubi.create.foundation.data.recipe.StandardRecipeGen;
import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.utility.ShippedResourcePacks;
import com.simibubi.create.foundation.worldgen.AllWorldFeatures; import com.simibubi.create.foundation.worldgen.AllWorldFeatures;
import com.tterrag.registrate.util.NonNullLazyValue; import com.tterrag.registrate.util.NonNullLazyValue;
@ -58,7 +57,7 @@ public class Create {
public static final String ID = "create"; public static final String ID = "create";
public static final String NAME = "Create"; public static final String NAME = "Create";
public static final String VERSION = "0.4a"; public static final String VERSION = "0.4b";
public static final Logger LOGGER = LogManager.getLogger(); public static final Logger LOGGER = LogManager.getLogger();
@ -125,8 +124,6 @@ public class Create {
SchematicInstances.register(); SchematicInstances.register();
BuiltinPotatoProjectileTypes.register(); BuiltinPotatoProjectileTypes.register();
ShippedResourcePacks.extractFiles("Copper Legacy Pack");
event.enqueueWork(() -> { event.enqueueWork(() -> {
AllTriggers.register(); AllTriggers.register();
SchematicProcessor.register(); SchematicProcessor.register();

View file

@ -25,6 +25,7 @@ import com.simibubi.create.foundation.render.CachedBufferer;
import com.simibubi.create.foundation.render.CreateContexts; import com.simibubi.create.foundation.render.CreateContexts;
import com.simibubi.create.foundation.render.SuperByteBufferCache; import com.simibubi.create.foundation.render.SuperByteBufferCache;
import com.simibubi.create.foundation.utility.ModelSwapper; import com.simibubi.create.foundation.utility.ModelSwapper;
import com.simibubi.create.foundation.utility.ShippedResourcePacks;
import com.simibubi.create.foundation.utility.ghost.GhostBlocks; import com.simibubi.create.foundation.utility.ghost.GhostBlocks;
import com.simibubi.create.foundation.utility.outliner.Outliner; import com.simibubi.create.foundation.utility.outliner.Outliner;
@ -81,6 +82,8 @@ public class CreateClient {
BUFFER_CACHE.registerCompartment(SBBContraptionManager.CONTRAPTION, 20); BUFFER_CACHE.registerCompartment(SBBContraptionManager.CONTRAPTION, 20);
BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20); BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20);
ShippedResourcePacks.extractFiles("Copper Legacy Pack");
AllKeys.register(); AllKeys.register();
// AllFluids.assignRenderLayers(); // AllFluids.assignRenderLayers();
AllBlockPartials.init(); AllBlockPartials.init();

View file

@ -38,4 +38,14 @@ public enum Mods {
return Optional.of(toRun.get().get()); return Optional.of(toRun.get().get());
return Optional.empty(); return Optional.empty();
} }
/**
* Simple hook to execute code if a mod is installed
* @param toExecute will be executed only if the mod is loaded
*/
public void executeIfInstalled(Supplier<Runnable> toExecute) {
if (isLoaded()) {
toExecute.get().run();
}
}
} }

View file

@ -341,11 +341,13 @@ public class CreateJEI implements IModPlugin {
} }
public static List<Recipe<?>> findRecipes(Predicate<Recipe<?>> predicate) { public static List<Recipe<?>> findRecipes(Predicate<Recipe<?>> predicate) {
return Minecraft.getInstance().level.getRecipeManager() return Minecraft.getInstance()
.getRecipes() .getConnection()
.stream() .getRecipeManager()
.filter(predicate) .getRecipes()
.collect(Collectors.toList()); .stream()
.filter(predicate)
.collect(Collectors.toList());
} }
public static List<Recipe<?>> findRecipesByType(RecipeType<?> type) { public static List<Recipe<?>> findRecipesByType(RecipeType<?> type) {

View file

@ -12,6 +12,6 @@ public class BackHalfShaftInstance extends HalfShaftInstance {
@Override @Override
protected Direction getShaftDirection() { protected Direction getShaftDirection() {
return tile.getBlockState().getValue(BlockStateProperties.FACING).getOpposite(); return blockEntity.getBlockState().getValue(BlockStateProperties.FACING).getOpposite();
} }
} }

View file

@ -7,7 +7,6 @@ import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.jozufozu.flywheel.api.FlywheelRendered;
import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher; import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher;
import com.simibubi.create.Create; import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.KineticNetwork; import com.simibubi.create.content.contraptions.KineticNetwork;
@ -49,7 +48,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.DistExecutor;
public class KineticTileEntity extends SmartTileEntity public class KineticTileEntity extends SmartTileEntity
implements IHaveGoggleInformation, IHaveHoveringInformation, FlywheelRendered { implements IHaveGoggleInformation, IHaveHoveringInformation {
public @Nullable Long network; public @Nullable Long network;
public @Nullable BlockPos source; public @Nullable BlockPos source;
@ -151,6 +150,7 @@ public class KineticTileEntity extends SmartTileEntity
this.stress = currentStress; this.stress = currentStress;
this.networkSize = networkSize; this.networkSize = networkSize;
boolean overStressed = maxStress < currentStress && StressImpact.isEnabled(); boolean overStressed = maxStress < currentStress && StressImpact.isEnabled();
setChanged();
if (overStressed != this.overStressed) { if (overStressed != this.overStressed) {
float prevSpeed = getSpeed(); float prevSpeed = getSpeed();
@ -181,6 +181,7 @@ public class KineticTileEntity extends SmartTileEntity
boolean directionSwap = !fromOrToZero && Math.signum(previousSpeed) != Math.signum(getSpeed()); boolean directionSwap = !fromOrToZero && Math.signum(previousSpeed) != Math.signum(getSpeed());
if (fromOrToZero || directionSwap) if (fromOrToZero || directionSwap)
flickerTally = getFlickerScore() + 5; flickerTally = getFlickerScore() + 5;
setChanged();
} }
@Override @Override
@ -324,6 +325,7 @@ public class KineticTileEntity extends SmartTileEntity
getOrCreateNetwork().remove(this); getOrCreateNetwork().remove(this);
network = networkIn; network = networkIn;
setChanged();
if (networkIn == null) if (networkIn == null)
return; return;

View file

@ -42,7 +42,7 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
@Override @Override
protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer, protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) { int light, int overlay) {
if (Backend.getInstance().canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(te.getLevel())) return;
BlockState state = getRenderedBlockState(te); BlockState state = getRenderedBlockState(te);
RenderType type = getRenderType(te, state); RenderType type = getRenderType(te, state);
@ -117,7 +117,7 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
float offset = ICogWheel.isLargeCog(te.getBlockState()) ? 11.25f : 0; float offset = ICogWheel.isLargeCog(te.getBlockState()) ? 11.25f : 0;
double d = (((axis == Axis.X) ? 0 : pos.getX()) + ((axis == Axis.Y) ? 0 : pos.getY()) double d = (((axis == Axis.X) ? 0 : pos.getX()) + ((axis == Axis.Y) ? 0 : pos.getY())
+ ((axis == Axis.Z) ? 0 : pos.getZ())) % 2; + ((axis == Axis.Z) ? 0 : pos.getZ())) % 2;
if (d == 0) if (d == 0)
offset = 22.5f; offset = 22.5f;
return offset; return offset;
} }

View file

@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.base;
import com.jozufozu.flywheel.api.Material; import com.jozufozu.flywheel.api.Material;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.base.flwdata.RotatingData; import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel; import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel;
@ -12,7 +12,7 @@ import com.simibubi.create.foundation.render.AllMaterialSpecs;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
public abstract class KineticTileInstance<T extends KineticTileEntity> extends TileEntityInstance<T> { public abstract class KineticTileInstance<T extends KineticTileEntity> extends BlockEntityInstance<T> {
protected final Direction.Axis axis; protected final Direction.Axis axis;
@ -38,7 +38,7 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends T
instance.setRotationAxis(axis) instance.setRotationAxis(axis)
.setRotationOffset(getRotationOffset(axis)) .setRotationOffset(getRotationOffset(axis))
.setRotationalSpeed(speed) .setRotationalSpeed(speed)
.setColor(tile); .setColor(blockEntity);
} }
protected final RotatingData setup(RotatingData key) { protected final RotatingData setup(RotatingData key) {
@ -57,7 +57,7 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends T
key.setRotationAxis(axis) key.setRotationAxis(axis)
.setRotationalSpeed(speed) .setRotationalSpeed(speed)
.setRotationOffset(getRotationOffset(axis)) .setRotationOffset(getRotationOffset(axis))
.setColor(tile) .setColor(blockEntity)
.setPosition(getInstancePosition()); .setPosition(getInstancePosition());
return key; return key;
@ -78,7 +78,7 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends T
} }
protected float getTileSpeed() { protected float getTileSpeed() {
return tile.getSpeed(); return blockEntity.getSpeed();
} }
protected BlockState shaft() { protected BlockState shaft() {

View file

@ -1,14 +1,17 @@
package com.simibubi.create.content.contraptions.base.flwdata; package com.simibubi.create.content.contraptions.base.flwdata;
import com.jozufozu.flywheel.api.struct.Batched; import com.jozufozu.flywheel.api.struct.Batched;
import com.jozufozu.flywheel.api.struct.BatchingTransformer;
import com.jozufozu.flywheel.api.struct.Instanced; import com.jozufozu.flywheel.api.struct.Instanced;
import com.jozufozu.flywheel.api.struct.StructWriter; import com.jozufozu.flywheel.api.struct.StructWriter;
import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat;
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
import com.jozufozu.flywheel.core.model.Model; import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.core.model.ModelTransformer;
import com.jozufozu.flywheel.util.RenderMath;
import com.mojang.math.Quaternion;
import com.simibubi.create.content.contraptions.KineticDebugger;
import com.simibubi.create.foundation.render.AllInstanceFormats; import com.simibubi.create.foundation.render.AllInstanceFormats;
import com.simibubi.create.foundation.render.AllProgramSpecs; import com.simibubi.create.foundation.render.AllProgramSpecs;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -19,13 +22,13 @@ public class BeltType implements Instanced<BeltData>, Batched<BeltData> {
} }
@Override @Override
public VertexFormat format() { public BufferLayout getLayout() {
return AllInstanceFormats.BELT; return AllInstanceFormats.BELT;
} }
@Override @Override
public StructWriter<BeltData> getWriter(VecBuffer backing) { public StructWriter<BeltData> getWriter(VecBuffer backing) {
return new UnsafeBeltWriter(backing, this); return new BeltWriterUnsafe(backing, this);
} }
@Override @Override
@ -34,7 +37,26 @@ public class BeltType implements Instanced<BeltData>, Batched<BeltData> {
} }
@Override @Override
public BatchingTransformer<BeltData> getTransformer(Model model) { public void transform(BeltData d, ModelTransformer.Params b) {
return null; float spriteHeight = d.maxV - d.minV;
double scroll = d.rotationalSpeed * AnimationTickHolder.getRenderTime() / (31.5 * 16) + d.rotationOffset;
scroll = scroll - Math.floor(scroll);
scroll = scroll * spriteHeight * RenderMath.f(d.scrollMult);
float finalScroll = (float) scroll;
b.shiftUV((builder, u, v) -> {
float targetU = u - d.sourceU + d.minU;
float targetV = v - d.sourceV + d.minV
+ finalScroll;
builder.uv(targetU, targetV);
});
b.translate(d.x + 0.5, d.y + 0.5, d.z + 0.5)
.multiply(new Quaternion(d.qX, d.qY, d.qZ, d.qW))
.unCentre()
.light(d.getPackedLight());
if (KineticDebugger.isActive()) {
b.color(d.r, d.g, d.b, d.a);
}
} }
} }

View file

@ -4,27 +4,16 @@ import org.lwjgl.system.MemoryUtil;
import com.jozufozu.flywheel.api.struct.StructType; import com.jozufozu.flywheel.api.struct.StructType;
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
import com.jozufozu.flywheel.backend.struct.UnsafeBufferWriter;
public class UnsafeBeltWriter extends UnsafeBufferWriter<BeltData> { public class BeltWriterUnsafe extends KineticWriterUnsafe<BeltData> {
public UnsafeBeltWriter(VecBuffer backingBuffer, StructType<BeltData> vertexType) { public BeltWriterUnsafe(VecBuffer backingBuffer, StructType<BeltData> vertexType) {
super(backingBuffer, vertexType); super(backingBuffer, vertexType);
} }
@Override @Override
public void write(BeltData d) { protected void writeInternal(BeltData d) {
super.writeInternal(d);
long addr = writePointer; long addr = writePointer;
MemoryUtil.memPutByte(addr, d.blockLight);
MemoryUtil.memPutByte(addr + 1, d.skyLight);
MemoryUtil.memPutByte(addr + 2, d.r);
MemoryUtil.memPutByte(addr + 3, d.g);
MemoryUtil.memPutByte(addr + 4, d.b);
MemoryUtil.memPutByte(addr + 5, d.a);
MemoryUtil.memPutFloat(addr + 6, d.x);
MemoryUtil.memPutFloat(addr + 10, d.y);
MemoryUtil.memPutFloat(addr + 14, d.z);
MemoryUtil.memPutFloat(addr + 18, d.rotationalSpeed);
MemoryUtil.memPutFloat(addr + 22, d.rotationOffset);
MemoryUtil.memPutFloat(addr + 26, d.qX); MemoryUtil.memPutFloat(addr + 26, d.qX);
MemoryUtil.memPutFloat(addr + 30, d.qY); MemoryUtil.memPutFloat(addr + 30, d.qY);
MemoryUtil.memPutFloat(addr + 34, d.qZ); MemoryUtil.memPutFloat(addr + 34, d.qZ);
@ -36,7 +25,5 @@ public class UnsafeBeltWriter extends UnsafeBufferWriter<BeltData> {
MemoryUtil.memPutFloat(addr + 58, d.maxU); MemoryUtil.memPutFloat(addr + 58, d.maxU);
MemoryUtil.memPutFloat(addr + 62, d.maxV); MemoryUtil.memPutFloat(addr + 62, d.maxV);
MemoryUtil.memPutByte(addr + 66, d.scrollMult); MemoryUtil.memPutByte(addr + 66, d.scrollMult);
advance();
} }
} }

View file

@ -0,0 +1,24 @@
package com.simibubi.create.content.contraptions.base.flwdata;
import org.lwjgl.system.MemoryUtil;
import com.jozufozu.flywheel.api.struct.StructType;
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
import com.jozufozu.flywheel.core.materials.BasicWriterUnsafe;
public abstract class KineticWriterUnsafe<D extends KineticData> extends BasicWriterUnsafe<D> {
public KineticWriterUnsafe(VecBuffer backingBuffer, StructType<D> vertexType) {
super(backingBuffer, vertexType);
}
@Override
protected void writeInternal(D d) {
super.writeInternal(d);
long addr = writePointer;
MemoryUtil.memPutFloat(addr + 6, d.x);
MemoryUtil.memPutFloat(addr + 10, d.y);
MemoryUtil.memPutFloat(addr + 14, d.z);
MemoryUtil.memPutFloat(addr + 18, d.rotationalSpeed);
MemoryUtil.memPutFloat(addr + 22, d.rotationOffset);
}
}

View file

@ -1,14 +1,17 @@
package com.simibubi.create.content.contraptions.base.flwdata; package com.simibubi.create.content.contraptions.base.flwdata;
import com.jozufozu.flywheel.api.struct.Batched; import com.jozufozu.flywheel.api.struct.Batched;
import com.jozufozu.flywheel.api.struct.BatchingTransformer;
import com.jozufozu.flywheel.api.struct.Instanced; import com.jozufozu.flywheel.api.struct.Instanced;
import com.jozufozu.flywheel.api.struct.StructWriter; import com.jozufozu.flywheel.api.struct.StructWriter;
import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat;
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
import com.jozufozu.flywheel.core.model.Model; import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.core.model.ModelTransformer;
import com.jozufozu.flywheel.util.RenderMath;
import com.mojang.math.Vector3f;
import com.simibubi.create.content.contraptions.KineticDebugger;
import com.simibubi.create.foundation.render.AllInstanceFormats; import com.simibubi.create.foundation.render.AllInstanceFormats;
import com.simibubi.create.foundation.render.AllProgramSpecs; import com.simibubi.create.foundation.render.AllProgramSpecs;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -19,13 +22,13 @@ public class RotatingType implements Instanced<RotatingData>, Batched<RotatingDa
} }
@Override @Override
public VertexFormat format() { public BufferLayout getLayout() {
return AllInstanceFormats.ROTATING; return AllInstanceFormats.ROTATING;
} }
@Override @Override
public StructWriter<RotatingData> getWriter(VecBuffer backing) { public StructWriter<RotatingData> getWriter(VecBuffer backing) {
return new UnsafeRotatingWriter(backing, this); return new RotatingWriterUnsafe(backing, this);
} }
@Override @Override
@ -34,7 +37,17 @@ public class RotatingType implements Instanced<RotatingData>, Batched<RotatingDa
} }
@Override @Override
public BatchingTransformer<RotatingData> getTransformer(Model model) { public void transform(RotatingData d, ModelTransformer.Params b) {
return null; float angle = ((AnimationTickHolder.getRenderTime() * d.rotationalSpeed * 3f / 10 + d.rotationOffset) % 360);
Vector3f axis = new Vector3f(RenderMath.f(d.rotationAxisX), RenderMath.f(d.rotationAxisY), RenderMath.f(d.rotationAxisZ));
b.light(d.getPackedLight())
.translate(d.x + 0.5, d.y + 0.5, d.z + 0.5)
.multiply(axis.rotationDegrees(angle))
.unCentre();
if (KineticDebugger.isActive()) {
b.color(d.r, d.g, d.b, d.a);
}
} }
} }

View file

@ -0,0 +1,21 @@
package com.simibubi.create.content.contraptions.base.flwdata;
import org.lwjgl.system.MemoryUtil;
import com.jozufozu.flywheel.api.struct.StructType;
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
public class RotatingWriterUnsafe extends KineticWriterUnsafe<RotatingData> {
public RotatingWriterUnsafe(VecBuffer backingBuffer, StructType<RotatingData> vertexType) {
super(backingBuffer, vertexType);
}
@Override
protected void writeInternal(RotatingData d) {
super.writeInternal(d);
long addr = writePointer;
MemoryUtil.memPutByte(addr + 26, d.rotationAxisX);
MemoryUtil.memPutByte(addr + 27, d.rotationAxisY);
MemoryUtil.memPutByte(addr + 28, d.rotationAxisZ);
}
}

View file

@ -1,34 +0,0 @@
package com.simibubi.create.content.contraptions.base.flwdata;
import org.lwjgl.system.MemoryUtil;
import com.jozufozu.flywheel.api.struct.StructType;
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
import com.jozufozu.flywheel.backend.struct.UnsafeBufferWriter;
public class UnsafeRotatingWriter extends UnsafeBufferWriter<RotatingData> {
public UnsafeRotatingWriter(VecBuffer backingBuffer, StructType<RotatingData> vertexType) {
super(backingBuffer, vertexType);
}
@Override
public void write(RotatingData d) {
long addr = writePointer;
MemoryUtil.memPutByte(addr, d.blockLight);
MemoryUtil.memPutByte(addr + 1, d.skyLight);
MemoryUtil.memPutByte(addr + 2, d.r);
MemoryUtil.memPutByte(addr + 3, d.g);
MemoryUtil.memPutByte(addr + 4, d.b);
MemoryUtil.memPutByte(addr + 5, d.a);
MemoryUtil.memPutFloat(addr + 6, d.x);
MemoryUtil.memPutFloat(addr + 10, d.y);
MemoryUtil.memPutFloat(addr + 14, d.z);
MemoryUtil.memPutFloat(addr + 18, d.rotationalSpeed);
MemoryUtil.memPutFloat(addr + 22, d.rotationOffset);
MemoryUtil.memPutByte(addr + 26, d.rotationAxisX);
MemoryUtil.memPutByte(addr + 27, d.rotationAxisY);
MemoryUtil.memPutByte(addr + 28, d.rotationAxisZ);
advance();
}
}

View file

@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.components.actors;
import com.jozufozu.flywheel.api.Material; import com.jozufozu.flywheel.api.Material;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.math.Quaternion; import com.mojang.math.Quaternion;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.components.actors.flwdata.ActorData; import com.simibubi.create.content.contraptions.components.actors.flwdata.ActorData;
@ -10,7 +11,6 @@ import com.simibubi.create.content.contraptions.components.structureMovement.ren
import com.simibubi.create.foundation.render.AllMaterialSpecs; import com.simibubi.create.foundation.render.AllMaterialSpecs;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@ -20,7 +20,7 @@ public class DrillActorInstance extends ActorInstance {
ActorData drillHead; ActorData drillHead;
private final Direction facing; private final Direction facing;
public DrillActorInstance(MaterialManager materialManager, PlacementSimulationWorld contraption, MovementContext context) { public DrillActorInstance(MaterialManager materialManager, VirtualRenderWorld contraption, MovementContext context) {
super(materialManager, contraption, context); super(materialManager, contraption, context);
Material<ActorData> material = materialManager.defaultSolid() Material<ActorData> material = materialManager.defaultSolid()

View file

@ -19,7 +19,7 @@ public class DrillInstance extends SingleRotatingInstance {
@Override @Override
protected Instancer<RotatingData> getModel() { protected Instancer<RotatingData> getModel() {
BlockState referenceState = tile.getBlockState(); BlockState referenceState = blockEntity.getBlockState();
Direction facing = referenceState.getValue(BlockStateProperties.FACING); Direction facing = referenceState.getValue(BlockStateProperties.FACING);
return getRotatingMaterial().getModel(AllBlockPartials.DRILL_HEAD, referenceState, facing); return getRotatingMaterial().getModel(AllBlockPartials.DRILL_HEAD, referenceState, facing);
} }

View file

@ -4,11 +4,11 @@ import javax.annotation.Nullable;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.backend.Backend;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -35,9 +35,9 @@ public class DrillMovementBehaviour extends BlockBreakingMovementBehaviour {
@Override @Override
@OnlyIn(value = Dist.CLIENT) @OnlyIn(value = Dist.CLIENT)
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) { ContraptionMatrices matrices, MultiBufferSource buffer) {
if (!Backend.getInstance().canUseInstancing()) if (!Backend.isOn())
DrillRenderer.renderInContraption(context, renderWorld, matrices, buffer); DrillRenderer.renderInContraption(context, renderWorld, matrices, buffer);
} }
@ -48,7 +48,7 @@ public class DrillMovementBehaviour extends BlockBreakingMovementBehaviour {
@Nullable @Nullable
@Override @Override
public ActorInstance createInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) { public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
return new DrillActorInstance(materialManager, simulationWorld, context); return new DrillActorInstance(materialManager, simulationWorld, context);
} }

View file

@ -1,5 +1,6 @@
package com.simibubi.create.content.contraptions.components.actors; package com.simibubi.create.content.contraptions.components.actors;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
@ -11,7 +12,6 @@ import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@ -30,7 +30,7 @@ public class DrillRenderer extends KineticTileEntityRenderer {
return CachedBufferer.partialFacing(AllBlockPartials.DRILL_HEAD, state); return CachedBufferer.partialFacing(AllBlockPartials.DRILL_HEAD, state);
} }
public static void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public static void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) { ContraptionMatrices matrices, MultiBufferSource buffer) {
BlockState state = context.state; BlockState state = context.state;
SuperByteBuffer superBuffer = CachedBufferer.partial(AllBlockPartials.DRILL_HEAD, state); SuperByteBuffer superBuffer = CachedBufferer.partial(AllBlockPartials.DRILL_HEAD, state);

View file

@ -4,13 +4,13 @@ import com.jozufozu.flywheel.api.Material;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.Materials;
import com.jozufozu.flywheel.core.materials.model.ModelData; import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@ -31,7 +31,7 @@ public class HarvesterActorInstance extends ActorInstance {
private double rotation; private double rotation;
private double previousRotation; private double previousRotation;
public HarvesterActorInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) { public HarvesterActorInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
super(materialManager, simulationWorld, context); super(materialManager, simulationWorld, context);
Material<ModelData> material = materialManager.defaultCutout() Material<ModelData> material = materialManager.defaultCutout()

View file

@ -6,6 +6,7 @@ import org.apache.commons.lang3.mutable.MutableBoolean;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.backend.Backend;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
@ -13,7 +14,6 @@ import com.simibubi.create.content.contraptions.components.structureMovement.ren
import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.BlockHelper;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -50,16 +50,15 @@ public class HarvesterMovementBehaviour extends MovementBehaviour {
@Nullable @Nullable
@Override @Override
public ActorInstance createInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld,
MovementContext context) { MovementContext context) {
return new HarvesterActorInstance(materialManager, simulationWorld, context); return new HarvesterActorInstance(materialManager, simulationWorld, context);
} }
@Override @Override
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffers) { ContraptionMatrices matrices, MultiBufferSource buffers) {
if (!Backend.getInstance() if (!Backend.isOn())
.canUseInstancing())
HarvesterRenderer.renderInContraption(context, renderWorld, matrices, buffers); HarvesterRenderer.renderInContraption(context, renderWorld, matrices, buffers);
} }
@ -108,7 +107,7 @@ public class HarvesterMovementBehaviour extends MovementBehaviour {
world.setBlockAndUpdate(pos, cutCrop(world, pos, stateVisited)); world.setBlockAndUpdate(pos, cutCrop(world, pos, stateVisited));
} }
private boolean isValidCrop(Level world, BlockPos pos, BlockState state) { public boolean isValidCrop(Level world, BlockPos pos, BlockState state) {
boolean harvestPartial = AllConfigs.SERVER.kinetics.harvestPartiallyGrown.get(); boolean harvestPartial = AllConfigs.SERVER.kinetics.harvestPartiallyGrown.get();
boolean replant = AllConfigs.SERVER.kinetics.harvesterReplants.get(); boolean replant = AllConfigs.SERVER.kinetics.harvesterReplants.get();
@ -142,7 +141,7 @@ public class HarvesterMovementBehaviour extends MovementBehaviour {
return false; return false;
} }
private boolean isValidOther(Level world, BlockPos pos, BlockState state) { public boolean isValidOther(Level world, BlockPos pos, BlockState state) {
if (state.getBlock() instanceof CropBlock) if (state.getBlock() instanceof CropBlock)
return false; return false;
if (state.getBlock() instanceof SugarCaneBlock) if (state.getBlock() instanceof SugarCaneBlock)

View file

@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.components.actors;
import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
@ -13,7 +14,6 @@ import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@ -40,7 +40,7 @@ public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntit
.renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped())); .renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped()));
} }
public static void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public static void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffers) { ContraptionMatrices matrices, MultiBufferSource buffers) {
BlockState blockState = context.state; BlockState blockState = context.state;
Direction facing = blockState.getValue(HORIZONTAL_FACING); Direction facing = blockState.getValue(HORIZONTAL_FACING);

View file

@ -0,0 +1,78 @@
package com.simibubi.create.content.contraptions.components.actors;
import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.core.Materials;
import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.simibubi.create.foundation.utility.AngleHelper;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState;
public class PIInstance {
private final MaterialManager materialManager;
private final BlockState blockState;
private final BlockPos instancePos;
private final float angleX;
private final float angleY;
private boolean lit;
ModelData middle;
ModelData top;
public PIInstance(MaterialManager materialManager, BlockState blockState, BlockPos instancePos) {
this.materialManager = materialManager;
this.blockState = blockState;
this.instancePos = instancePos;
Direction facing = blockState.getValue(PortableStorageInterfaceBlock.FACING);
angleX = facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90;
angleY = AngleHelper.horizontalAngle(facing);
}
public void init(boolean lit) {
this.lit = lit;
middle = materialManager.defaultSolid()
.material(Materials.TRANSFORMED)
.getModel(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit), blockState)
.createInstance();
top = materialManager.defaultSolid()
.material(Materials.TRANSFORMED)
.getModel(PortableStorageInterfaceRenderer.getTopForState(blockState), blockState)
.createInstance();
}
public void beginFrame(float progress) {
middle.loadIdentity()
.translate(instancePos)
.centre()
.rotateY(angleY)
.rotateX(angleX)
.unCentre();
top.loadIdentity()
.translate(instancePos)
.centre()
.rotateY(angleY)
.rotateX(angleX)
.unCentre();
middle.translate(0, progress * 0.5f + 0.375f, 0);
top.translate(0, progress, 0);
}
public void tick(boolean lit) {
if (this.lit != lit) {
this.lit = lit;
materialManager.defaultSolid()
.material(Materials.TRANSFORMED)
.getModel(PortableStorageInterfaceRenderer.getMiddleForState(blockState, lit), blockState)
.stealInstance(middle);
}
}
public void remove() {
middle.delete();
top.delete();
}
}

View file

@ -0,0 +1,30 @@
package com.simibubi.create.content.contraptions.components.actors;
import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
public class PSIActorInstance extends ActorInstance {
private final PIInstance instance;
public PSIActorInstance(MaterialManager materialManager, VirtualRenderWorld world, MovementContext context) {
super(materialManager, world, context);
instance = new PIInstance(materialManager, context.state, context.localPos);
instance.init(false);
instance.middle.setBlockLight(localBlockLight());
instance.top.setBlockLight(localBlockLight());
}
@Override
public void beginFrame() {
PortableStorageInterfaceTileEntity psi = PortableStorageInterfaceRenderer.getTargetPSI(context);
instance.tick(psi != null && psi.isConnected());
instance.beginFrame(psi == null ? 0f : psi.getExtensionDistance(AnimationTickHolder.getPartialTicks()));
}
}

View file

@ -0,0 +1,48 @@
package com.simibubi.create.content.contraptions.components.actors;
import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.api.instance.TickableInstance;
import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
public class PSIInstance extends BlockEntityInstance<PortableStorageInterfaceTileEntity> implements DynamicInstance, TickableInstance {
private final PIInstance instance;
public PSIInstance(MaterialManager materialManager, PortableStorageInterfaceTileEntity tile) {
super(materialManager, tile);
instance = new PIInstance(materialManager, blockState, getInstancePosition());
}
@Override
public void init() {
instance.init(isLit());
}
@Override
public void tick() {
instance.tick(isLit());
}
@Override
public void beginFrame() {
instance.beginFrame(blockEntity.getExtensionDistance(AnimationTickHolder.getPartialTicks()));
}
@Override
public void updateLight() {
relight(pos, instance.middle, instance.top);
}
@Override
public void remove() {
instance.remove();
}
private boolean isLit() {
return blockEntity.isConnected();
}
}

View file

@ -2,11 +2,16 @@ package com.simibubi.create.content.contraptions.components.actors;
import java.util.Optional; import java.util.Optional;
import org.jetbrains.annotations.Nullable;
import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.backend.Backend;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -30,11 +35,23 @@ public class PortableStorageInterfaceMovement extends MovementBehaviour {
.getNormal()).scale(1.85f); .getNormal()).scale(1.85f);
} }
@Override
public boolean hasSpecialInstancedRendering() {
return true;
}
@Nullable
@Override
public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
return new PSIActorInstance(materialManager, simulationWorld, context);
}
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) { ContraptionMatrices matrices, MultiBufferSource buffer) {
PortableStorageInterfaceRenderer.renderInContraption(context, renderWorld, matrices, buffer); if (!Backend.isOn())
PortableStorageInterfaceRenderer.renderInContraption(context, renderWorld, matrices, buffer);
} }
@Override @Override

View file

@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.components.actors;
import java.util.function.Consumer; import java.util.function.Consumer;
import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
@ -15,7 +16,6 @@ import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@ -41,7 +41,7 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer<Por
.renderInto(ms, vb)); .renderInto(ms, vb));
} }
public static void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public static void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) { ContraptionMatrices matrices, MultiBufferSource buffer) {
BlockState blockState = context.state; BlockState blockState = context.state;
PortableStorageInterfaceTileEntity te = getTargetPSI(context); PortableStorageInterfaceTileEntity te = getTargetPSI(context);
@ -86,17 +86,16 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer<Por
.unCentre(); .unCentre();
} }
protected static PortableStorageInterfaceTileEntity getTargetPSI(MovementContext context) { static PortableStorageInterfaceTileEntity getTargetPSI(MovementContext context) {
String _workingPos_ = PortableStorageInterfaceMovement._workingPos_; String _workingPos_ = PortableStorageInterfaceMovement._workingPos_;
if (!context.contraption.stalled || !context.data.contains(_workingPos_)) if (!context.contraption.stalled || !context.data.contains(_workingPos_))
return null; return null;
BlockPos pos = NbtUtils.readBlockPos(context.data.getCompound(_workingPos_)); BlockPos pos = NbtUtils.readBlockPos(context.data.getCompound(_workingPos_));
BlockEntity tileEntity = context.world.getBlockEntity(pos); BlockEntity tileEntity = context.world.getBlockEntity(pos);
if (!(tileEntity instanceof PortableStorageInterfaceTileEntity)) if (!(tileEntity instanceof PortableStorageInterfaceTileEntity psi))
return null; return null;
PortableStorageInterfaceTileEntity psi = (PortableStorageInterfaceTileEntity) tileEntity;
if (!psi.isTransferring()) if (!psi.isTransferring())
return null; return null;
return psi; return psi;

View file

@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.components.actors;
import java.util.Optional; import java.util.Optional;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.content.contraptions.components.saw.SawBlock; import com.simibubi.create.content.contraptions.components.saw.SawBlock;
import com.simibubi.create.content.contraptions.components.saw.SawRenderer; import com.simibubi.create.content.contraptions.components.saw.SawRenderer;
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity; import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
@ -10,7 +11,6 @@ import com.simibubi.create.content.contraptions.components.structureMovement.ren
import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue; import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue;
import com.simibubi.create.foundation.utility.TreeCutter; import com.simibubi.create.foundation.utility.TreeCutter;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -86,7 +86,7 @@ public class SawMovementBehaviour extends BlockBreakingMovementBehaviour {
@Override @Override
@OnlyIn(value = Dist.CLIENT) @OnlyIn(value = Dist.CLIENT)
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) { ContraptionMatrices matrices, MultiBufferSource buffer) {
SawRenderer.renderInContraption(context, renderWorld, matrices, buffer); SawRenderer.renderInContraption(context, renderWorld, matrices, buffer);
} }

View file

@ -1,12 +1,11 @@
package com.simibubi.create.content.contraptions.components.actors.flwdata; package com.simibubi.create.content.contraptions.components.actors.flwdata;
import com.jozufozu.flywheel.api.struct.Batched; import com.jozufozu.flywheel.api.struct.Batched;
import com.jozufozu.flywheel.api.struct.BatchingTransformer;
import com.jozufozu.flywheel.api.struct.Instanced; import com.jozufozu.flywheel.api.struct.Instanced;
import com.jozufozu.flywheel.api.struct.StructWriter; import com.jozufozu.flywheel.api.struct.StructWriter;
import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat;
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
import com.jozufozu.flywheel.core.model.Model; import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.core.model.ModelTransformer;
import com.simibubi.create.foundation.render.AllInstanceFormats; import com.simibubi.create.foundation.render.AllInstanceFormats;
import com.simibubi.create.foundation.render.AllProgramSpecs; import com.simibubi.create.foundation.render.AllProgramSpecs;
@ -19,7 +18,7 @@ public class ActorType implements Instanced<ActorData>, Batched<ActorData> {
} }
@Override @Override
public VertexFormat format() { public BufferLayout getLayout() {
return AllInstanceFormats.ACTOR; return AllInstanceFormats.ACTOR;
} }
@ -34,7 +33,7 @@ public class ActorType implements Instanced<ActorData>, Batched<ActorData> {
} }
@Override @Override
public BatchingTransformer<ActorData> getTransformer(Model model) { public void transform(ActorData d, ModelTransformer.Params b) {
return null;
} }
} }

View file

@ -12,7 +12,7 @@ public class UnsafeActorWriter extends UnsafeBufferWriter<ActorData> {
} }
@Override @Override
public void write(ActorData d) { protected void writeInternal(ActorData d) {
long addr = writePointer; long addr = writePointer;
MemoryUtil.memPutFloat(addr, d.x); MemoryUtil.memPutFloat(addr, d.x);
MemoryUtil.memPutFloat(addr + 4, d.y); MemoryUtil.memPutFloat(addr + 4, d.y);
@ -31,6 +31,5 @@ public class UnsafeActorWriter extends UnsafeBufferWriter<ActorData> {
MemoryUtil.memPutByte(addr + 38, d.rotationCenterY); MemoryUtil.memPutByte(addr + 38, d.rotationCenterY);
MemoryUtil.memPutByte(addr + 39, d.rotationCenterZ); MemoryUtil.memPutByte(addr + 39, d.rotationCenterZ);
MemoryUtil.memPutFloat(addr + 40, d.speed); MemoryUtil.memPutFloat(addr + 40, d.speed);
advance();
} }
} }

View file

@ -187,9 +187,4 @@ public class CuckooClockTileEntity extends KineticTileEntity {
Vec3 vec = VecHelper.getCenterOf(worldPosition); Vec3 vec = VecHelper.getCenterOf(worldPosition);
level.playLocalSound(vec.x, vec.y, vec.z, sound, SoundSource.BLOCKS, volume, pitch, false); level.playLocalSound(vec.x, vec.y, vec.z, sound, SoundSource.BLOCKS, volume, pitch, false);
} }
@Override
public boolean shouldRenderNormally() {
return true;
}
} }

View file

@ -169,8 +169,7 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer<Mechanical
BlockState blockState = te.getBlockState(); BlockState blockState = te.getBlockState();
VertexConsumer vb = buffer.getBuffer(RenderType.solid()); VertexConsumer vb = buffer.getBuffer(RenderType.solid());
if (!Backend.getInstance() if (!Backend.canUseInstancing(te.getLevel())) {
.canUseInstancing(te.getLevel())) {
SuperByteBuffer superBuffer = CachedBufferer.partial(AllBlockPartials.SHAFTLESS_COGWHEEL, blockState); SuperByteBuffer superBuffer = CachedBufferer.partial(AllBlockPartials.SHAFTLESS_COGWHEEL, blockState);
standardKineticRotationTransform(superBuffer, te, light); standardKineticRotationTransform(superBuffer, te, light);
superBuffer.rotateCentered(Direction.UP, (float) (blockState.getValue(HORIZONTAL_FACING) superBuffer.rotateCentered(Direction.UP, (float) (blockState.getValue(HORIZONTAL_FACING)

View file

@ -523,11 +523,6 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
return inventory; return inventory;
} }
@Override
public boolean shouldRenderNormally() {
return true;
}
public void setScriptedResult(ItemStack scriptedResult) { public void setScriptedResult(ItemStack scriptedResult) {
this.scriptedResult = scriptedResult; this.scriptedResult = scriptedResult;
} }

View file

@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.components.crank;
import com.jozufozu.flywheel.api.Instancer; import com.jozufozu.flywheel.api.Instancer;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.IDynamicInstance; import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.materials.model.ModelData; import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance; import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
@ -12,7 +12,7 @@ import net.minecraft.core.Direction;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
public class HandCrankInstance extends SingleRotatingInstance implements IDynamicInstance { public class HandCrankInstance extends SingleRotatingInstance implements DynamicInstance {
private final HandCrankTileEntity tile; private final HandCrankTileEntity tile;
private ModelData crank; private ModelData crank;

View file

@ -28,7 +28,7 @@ public class HandCrankRenderer extends KineticTileEntityRenderer {
int light, int overlay) { int light, int overlay) {
super.renderSafe(te, partialTicks, ms, buffer, light, overlay); super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
if (Backend.getInstance().canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(te.getLevel())) return;
BlockState state = te.getBlockState(); BlockState state = te.getBlockState();
Block block = state.getBlock(); Block block = state.getBlock();

View file

@ -79,11 +79,6 @@ public class HandCrankTileEntity extends GeneratingKineticTileEntity {
return AllBlocks.HAND_CRANK.get(); return AllBlocks.HAND_CRANK.get();
} }
@Override
public boolean shouldRenderNormally() {
return true;
}
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void tickAudio() { public void tickAudio() {

View file

@ -8,6 +8,7 @@ import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.Materials;
import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.materials.model.ModelData; import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.jozufozu.flywheel.util.transform.MatrixTransformStack;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.IRotate; import com.simibubi.create.content.contraptions.base.IRotate;
@ -20,7 +21,6 @@ import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.NBTHelper;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -42,7 +42,7 @@ public class DeployerActorInstance extends ActorInstance {
ModelData hand; ModelData hand;
RotatingData shaft; RotatingData shaft;
public DeployerActorInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) { public DeployerActorInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
super(materialManager, simulationWorld, context); super(materialManager, simulationWorld, context);
Material<ModelData> mat = materialManager.defaultSolid() Material<ModelData> mat = materialManager.defaultSolid()

View file

@ -78,7 +78,7 @@ public class DeployerHandler {
boolean rayMode = false; boolean rayMode = false;
private ItemUseWorld(Level world, Direction face, BlockPos pos) { private ItemUseWorld(Level world, Direction face, BlockPos pos) {
super(world, world.getChunkSource()); super(world);
this.face = face; this.face = face;
this.pos = pos; this.pos = pos;
} }

View file

@ -4,8 +4,8 @@ import static com.simibubi.create.content.contraptions.base.DirectionalAxisKinet
import static com.simibubi.create.content.contraptions.base.DirectionalKineticBlock.FACING; import static com.simibubi.create.content.contraptions.base.DirectionalKineticBlock.FACING;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.IDynamicInstance; import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.api.instance.ITickableInstance; import com.jozufozu.flywheel.api.instance.TickableInstance;
import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.materials.oriented.OrientedData; import com.jozufozu.flywheel.core.materials.oriented.OrientedData;
import com.mojang.math.Quaternion; import com.mojang.math.Quaternion;
@ -20,7 +20,7 @@ import net.minecraft.core.Direction;
import net.minecraft.core.Vec3i; import net.minecraft.core.Vec3i;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
public class DeployerInstance extends ShaftInstance implements IDynamicInstance, ITickableInstance { public class DeployerInstance extends ShaftInstance implements DynamicInstance, TickableInstance {
final DeployerTileEntity tile; final DeployerTileEntity tile;
final Direction facing; final Direction facing;
@ -34,12 +34,11 @@ public class DeployerInstance extends ShaftInstance implements IDynamicInstance,
PartialModel currentHand; PartialModel currentHand;
float progress; float progress;
private boolean newHand = false;
public DeployerInstance(MaterialManager dispatcher, KineticTileEntity tile) { public DeployerInstance(MaterialManager dispatcher, KineticTileEntity tile) {
super(dispatcher, tile); super(dispatcher, tile);
this.tile = (DeployerTileEntity) super.tile; this.tile = (DeployerTileEntity) super.blockEntity;
facing = blockState.getValue(FACING); facing = blockState.getValue(FACING);
boolean rotatePole = blockState.getValue(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Direction.Axis.Z; boolean rotatePole = blockState.getValue(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Direction.Axis.Z;
@ -50,28 +49,34 @@ public class DeployerInstance extends ShaftInstance implements IDynamicInstance,
pole = getOrientedMaterial().getModel(AllBlockPartials.DEPLOYER_POLE, blockState).createInstance(); pole = getOrientedMaterial().getModel(AllBlockPartials.DEPLOYER_POLE, blockState).createInstance();
updateHandPose(); currentHand = this.tile.getHandPose();
relight(pos, pole);
progress = getProgress(AnimationTickHolder.getPartialTicks()); hand = getOrientedMaterial().getModel(currentHand, blockState).createInstance();
progress = getProgress(AnimationTickHolder.getPartialTicks());
updateRotation(pole, hand, yRot, xRot, zRot); updateRotation(pole, hand, yRot, xRot, zRot);
updatePosition(); updatePosition();
} }
@Override @Override
public void tick() { public void tick() {
newHand = updateHandPose(); PartialModel handPose = tile.getHandPose();
}
if (currentHand != handPose) {
currentHand = handPose;
getOrientedMaterial().getModel(currentHand, blockState)
.stealInstance(hand);
}
}
@Override @Override
public void beginFrame() { public void beginFrame() {
float newProgress = getProgress(AnimationTickHolder.getPartialTicks()); float newProgress = getProgress(AnimationTickHolder.getPartialTicks());
if (!newHand && Mth.equal(newProgress, progress)) return; if (Mth.equal(newProgress, progress)) return;
progress = newProgress; progress = newProgress;
newHand = false;
updatePosition(); updatePosition();
} }
@ -89,24 +94,7 @@ public class DeployerInstance extends ShaftInstance implements IDynamicInstance,
pole.delete(); pole.delete();
} }
private boolean updateHandPose() { private float getProgress(float partialTicks) {
PartialModel handPose = tile.getHandPose();
if (currentHand == handPose) return false;
currentHand = handPose;
if (hand != null) hand.delete();
hand = getOrientedMaterial().getModel(currentHand, blockState).createInstance();
relight(pos, hand);
updateRotation(pole, hand, yRot, xRot, zRot);
updatePosition();
return true;
}
private float getProgress(float partialTicks) {
if (tile.state == DeployerTileEntity.State.EXPANDING) if (tile.state == DeployerTileEntity.State.EXPANDING)
return 1 - (tile.timer - partialTicks * tile.getTimerSpeed()) / 1000f; return 1 - (tile.timer - partialTicks * tile.getTimerSpeed()) / 1000f;
if (tile.state == DeployerTileEntity.State.RETRACTING) if (tile.state == DeployerTileEntity.State.RETRACTING)

View file

@ -9,6 +9,7 @@ import org.apache.commons.lang3.tuple.Pair;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.backend.Backend;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.AllTags.AllBlockTags;
@ -27,7 +28,6 @@ import com.simibubi.create.foundation.item.ItemHelper.ExtractionCountMode;
import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.BlockHelper;
import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.NBTHelper;
import com.simibubi.create.foundation.utility.NBTProcessors; import com.simibubi.create.foundation.utility.NBTProcessors;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -255,9 +255,9 @@ public class DeployerMovementBehaviour extends MovementBehaviour {
} }
@Override @Override
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffers) { ContraptionMatrices matrices, MultiBufferSource buffers) {
if (!Backend.getInstance().canUseInstancing()) if (!Backend.isOn())
DeployerRenderer.renderInContraption(context, renderWorld, matrices, buffers); DeployerRenderer.renderInContraption(context, renderWorld, matrices, buffers);
} }
@ -268,7 +268,7 @@ public class DeployerMovementBehaviour extends MovementBehaviour {
@Nullable @Nullable
@Override @Override
public ActorInstance createInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) { public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
return new DeployerActorInstance(materialManager, simulationWorld, context); return new DeployerActorInstance(materialManager, simulationWorld, context);
} }
} }

View file

@ -5,6 +5,7 @@ import static com.simibubi.create.content.contraptions.base.DirectionalKineticBl
import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.backend.Backend;
import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.jozufozu.flywheel.util.transform.MatrixTransformStack;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
@ -26,7 +27,6 @@ import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.NBTHelper;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
@ -54,7 +54,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
renderItem(te, partialTicks, ms, buffer, light, overlay); renderItem(te, partialTicks, ms, buffer, light, overlay);
FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay); FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay);
if (Backend.getInstance().canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(te.getLevel())) return;
renderComponents(te, partialTicks, ms, buffer, light, overlay); renderComponents(te, partialTicks, ms, buffer, light, overlay);
} }
@ -113,7 +113,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
protected void renderComponents(DeployerTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer, protected void renderComponents(DeployerTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) { int light, int overlay) {
VertexConsumer vb = buffer.getBuffer(RenderType.solid()); VertexConsumer vb = buffer.getBuffer(RenderType.solid());
if (!Backend.getInstance().canUseInstancing(te.getLevel())) { if (!Backend.canUseInstancing(te.getLevel())) {
KineticTileEntityRenderer.renderRotatingKineticBlock(te, getRenderedBlockState(te), ms, vb, light); KineticTileEntityRenderer.renderRotatingKineticBlock(te, getRenderedBlockState(te), ms, vb, light);
} }
@ -155,7 +155,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
return buffer; return buffer;
} }
public static void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public static void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) { ContraptionMatrices matrices, MultiBufferSource buffer) {
VertexConsumer builder = buffer.getBuffer(RenderType.solid()); VertexConsumer builder = buffer.getBuffer(RenderType.solid());
BlockState blockState = context.state; BlockState blockState = context.state;
@ -193,10 +193,10 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
IRotate def = (IRotate) context.state.getBlock(); IRotate def = (IRotate) context.state.getBlock();
axis = def.getRotationAxis(context.state); axis = def.getRotationAxis(context.state);
} }
float time = AnimationTickHolder.getRenderTime(context.world) / 20; float time = AnimationTickHolder.getRenderTime(context.world) / 20;
float angle = (time * speed) % 360; float angle = (time * speed) % 360;
new MatrixTransformStack(m) new MatrixTransformStack(m)
.centre() .centre()
.rotateY(axis == Axis.Z ? 90 : 0) .rotateY(axis == Axis.Z ? 90 : 0)

View file

@ -424,11 +424,6 @@ public class DeployerTileEntity extends KineticTileEntity {
return true; return true;
} }
@Override
public boolean shouldRenderNormally() {
return true;
}
public float getHandOffset(float partialTicks) { public float getHandOffset(float partialTicks) {
if (isVirtual()) if (isVirtual())
return animatedOffset.getValue(partialTicks); return animatedOffset.getValue(partialTicks);

View file

@ -28,7 +28,7 @@ public class EncasedFanRenderer extends KineticTileEntityRenderer {
@Override @Override
protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer, protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) { int light, int overlay) {
if (Backend.getInstance().canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(te.getLevel())) return;
Direction direction = te.getBlockState() Direction direction = te.getBlockState()
.getValue(FACING); .getValue(FACING);

View file

@ -36,7 +36,7 @@ public class FanInstance extends KineticTileInstance<EncasedFanTileEntity> {
} }
private float getFanSpeed() { private float getFanSpeed() {
float speed = tile.getSpeed() * 5; float speed = blockEntity.getSpeed() * 5;
if (speed > 0) if (speed > 0)
speed = Mth.clamp(speed, 80, 64 * 20); speed = Mth.clamp(speed, 80, 64 * 20);
if (speed < 0) if (speed < 0)

View file

@ -10,7 +10,7 @@ import com.jozufozu.flywheel.api.InstanceData;
import com.jozufozu.flywheel.api.Instancer; import com.jozufozu.flywheel.api.Instancer;
import com.jozufozu.flywheel.api.Material; import com.jozufozu.flywheel.api.Material;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.IDynamicInstance; import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.core.materials.model.ModelData; import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.jozufozu.flywheel.util.transform.TransformStack; import com.jozufozu.flywheel.util.transform.TransformStack;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
@ -25,7 +25,7 @@ import net.minecraft.util.Mth;
import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.Rotation;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> implements IDynamicInstance { public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> implements DynamicInstance {
protected final Direction facing; protected final Direction facing;
protected final Direction connection; protected final Direction connection;
@ -90,8 +90,8 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
float partialTicks = AnimationTickHolder.getPartialTicks(); float partialTicks = AnimationTickHolder.getPartialTicks();
float speed = tile.visualSpeed.get(partialTicks) * 3 / 10f; float speed = blockEntity.visualSpeed.get(partialTicks) * 3 / 10f;
float angle = tile.angle + speed * partialTicks; float angle = blockEntity.angle + speed * partialTicks;
if (Math.abs(angle - lastAngle) < 0.001) if (Math.abs(angle - lastAngle) < 0.001)
return; return;

View file

@ -36,7 +36,7 @@ public class FlywheelRenderer extends KineticTileEntityRenderer {
int light, int overlay) { int light, int overlay) {
super.renderSafe(te, partialTicks, ms, buffer, light, overlay); super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
if (Backend.getInstance().canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(te.getLevel())) return;
BlockState blockState = te.getBlockState(); BlockState blockState = te.getBlockState();
FlywheelTileEntity wte = (FlywheelTileEntity) te; FlywheelTileEntity wte = (FlywheelTileEntity) te;

View file

@ -1,7 +1,7 @@
package com.simibubi.create.content.contraptions.components.flywheel.engine; package com.simibubi.create.content.contraptions.components.flywheel.engine;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance;
import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.materials.model.ModelData; import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
@ -10,7 +10,7 @@ import net.minecraft.core.Direction;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
public class EngineInstance extends TileEntityInstance<EngineTileEntity> { public class EngineInstance extends BlockEntityInstance<EngineTileEntity> {
protected ModelData frame; protected ModelData frame;

View file

@ -22,7 +22,7 @@ public class EngineRenderer<T extends EngineTileEntity> extends SafeTileEntityRe
protected void renderSafe(T te, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, protected void renderSafe(T te, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light,
int overlay) { int overlay) {
if (Backend.getInstance().canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(te.getLevel())) return;
Block block = te.getBlockState() Block block = te.getBlockState()
.getBlock(); .getBlock();

View file

@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.components.flywheel.engine;
import java.util.List; import java.util.List;
import com.jozufozu.flywheel.api.FlywheelRendered;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelBlock; import com.simibubi.create.content.contraptions.components.flywheel.FlywheelBlock;
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelTileEntity; import com.simibubi.create.content.contraptions.components.flywheel.FlywheelTileEntity;
@ -18,7 +17,7 @@ import net.minecraft.world.phys.AABB;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
public class EngineTileEntity extends SmartTileEntity implements FlywheelRendered { public class EngineTileEntity extends SmartTileEntity {
public float appliedCapacity; public float appliedCapacity;
public float appliedSpeed; public float appliedSpeed;

View file

@ -33,7 +33,7 @@ public class FurnaceEngineBlock extends EngineBlock implements ITE<FurnaceEngine
@Override @Override
protected boolean isValidBaseBlock(BlockState baseBlock, BlockGetter world, BlockPos pos) { protected boolean isValidBaseBlock(BlockState baseBlock, BlockGetter world, BlockPos pos) {
return baseBlock.getBlock() instanceof AbstractFurnaceBlock; return FurnaceEngineModifiers.get().getEngineState(baseBlock).isEngine();
} }
@Override @Override

View file

@ -2,7 +2,9 @@ package com.simibubi.create.content.contraptions.components.flywheel.engine;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.function.Function;
import net.minecraft.world.level.block.AbstractFurnaceBlock;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@ -10,23 +12,73 @@ import net.minecraftforge.registries.IRegistryDelegate;
public class FurnaceEngineModifiers { public class FurnaceEngineModifiers {
public final static FurnaceEngineModifiers INSTANCE = new FurnaceEngineModifiers(); private final static FurnaceEngineModifiers INSTANCE = new FurnaceEngineModifiers();
protected FurnaceEngineModifiers() {
blockModifiers = new HashMap<>();
blockActivators = new HashMap<>();
}
protected Map<IRegistryDelegate<Block>, Float> blockModifiers = new HashMap<>(); private final Map<IRegistryDelegate<Block>, Float> blockModifiers;
private final Map<IRegistryDelegate<Block>, Function<BlockState, EngineState>> blockActivators;
public void register(IRegistryDelegate<Block> block, float modifier) { public void register(IRegistryDelegate<Block> block, float modifier) {
this.blockModifiers.put(block, modifier); this.blockModifiers.put(block, modifier);
} }
public void register(IRegistryDelegate<Block> block, float modifier, Function<BlockState, EngineState> engineState) {
this.blockModifiers.put(block, modifier);
this.blockActivators.put(block, engineState);
}
public float getModifierOrDefault(BlockState state, float defaultValue) { private float getModifierOrDefault(BlockState state, float defaultValue) {
return blockModifiers.getOrDefault(state.getBlock().delegate, defaultValue); return blockModifiers.getOrDefault(state.getBlock().delegate, defaultValue);
} }
private Function<BlockState, EngineState> getEngineStateOrDefault(BlockState state, Function<BlockState, EngineState> engineState) {
return blockActivators.getOrDefault(state.getBlock().delegate, engineState);
}
public float getModifier(BlockState state) { public float getModifier(BlockState state) {
return getModifierOrDefault(state, 1f); return getModifierOrDefault(state, 1f);
} }
public EngineState getEngineState(BlockState state) {
return getEngineStateOrDefault(state,
s -> s.getBlock() instanceof AbstractFurnaceBlock && s.hasProperty(AbstractFurnaceBlock.LIT) ?
(s.getValue(AbstractFurnaceBlock.LIT) ? EngineState.ACTIVE : EngineState.VALID) : EngineState.EMPTY).apply(state);
}
public static void register() { public static void register() {
INSTANCE.register(Blocks.BLAST_FURNACE.delegate, 2f); get().register(Blocks.BLAST_FURNACE.delegate, 2f);
/*
Example:
get().register(Blocks.REDSTONE_LAMP.delegate, 1f,
s -> s.getBlock() instanceof RedstoneLampBlock && s.hasProperty(RedstoneLampBlock.LIT) ?
(s.getValue(RedstoneLampBlock.LIT) ? EngineState.ACTIVE : EngineState.VALID) : EngineState.EMPTY);
*/
}
public static FurnaceEngineModifiers get() {
return INSTANCE;
}
public enum EngineState {
EMPTY,
VALID,
ACTIVE;
public boolean isEngine() {
return this != EMPTY;
}
public boolean isActive() {
return this == ACTIVE;
}
public boolean isEmpty() {
return this == EMPTY;
}
} }
} }

View file

@ -1,10 +1,10 @@
package com.simibubi.create.content.contraptions.components.flywheel.engine; package com.simibubi.create.content.contraptions.components.flywheel.engine;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineModifiers.EngineState;
import com.simibubi.create.foundation.block.BlockStressValues; import com.simibubi.create.foundation.block.BlockStressValues;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.AbstractFurnaceBlock;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@ -22,11 +22,12 @@ public class FurnaceEngineTileEntity extends EngineTileEntity {
public void updateFurnace() { public void updateFurnace() {
BlockState state = level.getBlockState(EngineBlock.getBaseBlockPos(getBlockState(), worldPosition)); BlockState state = level.getBlockState(EngineBlock.getBaseBlockPos(getBlockState(), worldPosition));
if (!(state.getBlock() instanceof AbstractFurnaceBlock)) EngineState engineState = FurnaceEngineModifiers.get().getEngineState(state);
if (engineState.isEmpty())
return; return;
float modifier = FurnaceEngineModifiers.INSTANCE.getModifier(state); float modifier = FurnaceEngineModifiers.get().getModifier(state);
boolean active = state.hasProperty(AbstractFurnaceBlock.LIT) && state.getValue(AbstractFurnaceBlock.LIT); boolean active = engineState.isActive();
float speed = active ? 16 * modifier : 0; float speed = active ? 16 * modifier : 0;
float capacity = float capacity =
(float) (active ? BlockStressValues.getCapacity(AllBlocks.FURNACE_ENGINE.get()) (float) (active ? BlockStressValues.getCapacity(AllBlocks.FURNACE_ENGINE.get())

View file

@ -15,6 +15,6 @@ public class MillStoneCogInstance extends SingleRotatingInstance {
@Override @Override
protected Instancer<RotatingData> getModel() { protected Instancer<RotatingData> getModel() {
return getRotatingMaterial().getModel(AllBlockPartials.MILLSTONE_COG, tile.getBlockState()); return getRotatingMaterial().getModel(AllBlockPartials.MILLSTONE_COG, blockEntity.getBlockState());
} }
} }

View file

@ -31,7 +31,7 @@ public class MechanicalMixerRenderer extends KineticTileEntityRenderer {
protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer, protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) { int light, int overlay) {
if (Backend.getInstance().canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(te.getLevel())) return;
BlockState blockState = te.getBlockState(); BlockState blockState = te.getBlockState();
MechanicalMixerTileEntity mixer = (MechanicalMixerTileEntity) te; MechanicalMixerTileEntity mixer = (MechanicalMixerTileEntity) te;

View file

@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.components.mixer;
import com.jozufozu.flywheel.api.Instancer; import com.jozufozu.flywheel.api.Instancer;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.IDynamicInstance; import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.core.materials.oriented.OrientedData; import com.jozufozu.flywheel.core.materials.oriented.OrientedData;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.flwdata.RotatingData; import com.simibubi.create.content.contraptions.base.flwdata.RotatingData;
@ -12,7 +12,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
public class MixerInstance extends EncasedCogInstance implements IDynamicInstance { public class MixerInstance extends EncasedCogInstance implements DynamicInstance {
private final RotatingData mixerHead; private final RotatingData mixerHead;
private final OrientedData mixerPole; private final OrientedData mixerPole;
@ -42,7 +42,7 @@ public class MixerInstance extends EncasedCogInstance implements IDynamicInstanc
protected Instancer<RotatingData> getCogModel() { protected Instancer<RotatingData> getCogModel() {
return materialManager.defaultSolid() return materialManager.defaultSolid()
.material(AllMaterialSpecs.ROTATING) .material(AllMaterialSpecs.ROTATING)
.getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, tile.getBlockState()); .getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, blockEntity.getBlockState());
} }
@Override @Override

View file

@ -31,7 +31,7 @@ public class MechanicalPressRenderer extends KineticTileEntityRenderer {
int light, int overlay) { int light, int overlay) {
super.renderSafe(te, partialTicks, ms, buffer, light, overlay); super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
if (Backend.getInstance().canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(te.getLevel())) return;
BlockState blockState = te.getBlockState(); BlockState blockState = te.getBlockState();
float renderedHeadOffset = ((MechanicalPressTileEntity) te).getRenderedHeadOffset(partialTicks); float renderedHeadOffset = ((MechanicalPressTileEntity) te).getRenderedHeadOffset(partialTicks);

View file

@ -1,7 +1,7 @@
package com.simibubi.create.content.contraptions.components.press; package com.simibubi.create.content.contraptions.components.press;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.IDynamicInstance; import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.Materials;
import com.jozufozu.flywheel.core.materials.oriented.OrientedData; import com.jozufozu.flywheel.core.materials.oriented.OrientedData;
import com.mojang.math.Quaternion; import com.mojang.math.Quaternion;
@ -11,7 +11,7 @@ import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
public class PressInstance extends ShaftInstance implements IDynamicInstance { public class PressInstance extends ShaftInstance implements DynamicInstance {
private final OrientedData pressHead; private final OrientedData pressHead;
private final MechanicalPressTileEntity press; private final MechanicalPressTileEntity press;

View file

@ -23,7 +23,7 @@ public class SawInstance extends SingleRotatingInstance {
if (blockState.getValue(BlockStateProperties.FACING) if (blockState.getValue(BlockStateProperties.FACING)
.getAxis() .getAxis()
.isHorizontal()) { .isHorizontal()) {
BlockState referenceState = blockState.rotate(tile.getLevel(), tile.getBlockPos(), Rotation.CLOCKWISE_180); BlockState referenceState = blockState.rotate(blockEntity.getLevel(), blockEntity.getBlockPos(), Rotation.CLOCKWISE_180);
Direction facing = referenceState.getValue(BlockStateProperties.FACING); Direction facing = referenceState.getValue(BlockStateProperties.FACING);
return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, referenceState, facing); return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, referenceState, facing);
} else { } else {

View file

@ -4,6 +4,7 @@ import static net.minecraft.world.level.block.state.properties.BlockStatePropert
import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.backend.Backend;
import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
@ -18,7 +19,6 @@ import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRe
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
@ -46,8 +46,7 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
renderItems(te, partialTicks, ms, buffer, light, overlay); renderItems(te, partialTicks, ms, buffer, light, overlay);
FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay); FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay);
if (Backend.getInstance() if (Backend.canUseInstancing(te.getLevel()))
.canUseInstancing(te.getLevel()))
return; return;
renderShaft(te, ms, buffer, light, overlay); renderShaft(te, ms, buffer, light, overlay);
@ -158,7 +157,7 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
return KineticTileEntityRenderer.shaft(KineticTileEntityRenderer.getRotationAxisOf(te)); return KineticTileEntityRenderer.shaft(KineticTileEntityRenderer.getRotationAxisOf(te));
} }
public static void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public static void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) { ContraptionMatrices matrices, MultiBufferSource buffer) {
BlockState state = context.state; BlockState state = context.state;
Direction facing = state.getValue(SawBlock.FACING); Direction facing = state.getValue(SawBlock.FACING);

View file

@ -499,9 +499,4 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
return false; return false;
} }
@Override
public boolean shouldRenderNormally() {
return true;
}
} }

View file

@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.components.structureMovement;
import java.io.IOException; import java.io.IOException;
import java.util.IdentityHashMap; import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;

View file

@ -8,6 +8,7 @@ import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.Create; import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.components.actors.AttachedActorBlock; import com.simibubi.create.content.contraptions.components.actors.AttachedActorBlock;
import com.simibubi.create.content.contraptions.components.actors.HarvesterBlock; import com.simibubi.create.content.contraptions.components.actors.HarvesterBlock;
import com.simibubi.create.content.contraptions.components.actors.PloughBlock;
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceBlock; import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceBlock;
import com.simibubi.create.content.contraptions.components.crank.HandCrankBlock; import com.simibubi.create.content.contraptions.components.crank.HandCrankBlock;
import com.simibubi.create.content.contraptions.components.fan.NozzleBlock; import com.simibubi.create.content.contraptions.components.fan.NozzleBlock;
@ -347,6 +348,11 @@ public class BlockMovementChecks {
return state.getValue(BlockStateProperties.FACING) == facing; return state.getValue(BlockStateProperties.FACING) == facing;
if (AllBlocks.MECHANICAL_BEARING.has(state)) if (AllBlocks.MECHANICAL_BEARING.has(state))
return state.getValue(BlockStateProperties.FACING) == facing; return state.getValue(BlockStateProperties.FACING) == facing;
if (AllBlocks.MECHANICAL_HARVESTER.has(state))
return state.getValue(HarvesterBlock.FACING) == facing;
if (AllBlocks.MECHANICAL_PLOUGH.has(state))
return state.getValue(PloughBlock.FACING) == facing;
if (AllBlocks.CART_ASSEMBLER.has(state)) if (AllBlocks.CART_ASSEMBLER.has(state))
return Direction.DOWN == facing; return Direction.DOWN == facing;
if (AllBlocks.MECHANICAL_SAW.has(state)) if (AllBlocks.MECHANICAL_SAW.has(state))

View file

@ -25,8 +25,6 @@ import javax.annotation.Nullable;
import org.apache.commons.lang3.tuple.MutablePair; import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import com.jozufozu.flywheel.light.GridAlignedBB;
import com.jozufozu.flywheel.light.ImmutableBox;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllInteractionBehaviours; import com.simibubi.create.AllInteractionBehaviours;
import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.AllMovementBehaviours;
@ -874,9 +872,9 @@ public abstract class Contraption {
} }
ListTag paletteNBT = new ListTag(); ListTag paletteNBT = new ListTag();
for(int i = 0; i < palette.getSize(); ++i) for(int i = 0; i < palette.getSize(); ++i)
paletteNBT.add(NbtUtils.writeBlockState(palette.values.byId(i))); paletteNBT.add(NbtUtils.writeBlockState(palette.values.byId(i)));
compound.put("Palette", paletteNBT); compound.put("Palette", paletteNBT);
compound.put("BlockList", blockList); compound.put("BlockList", blockList);
@ -891,7 +889,7 @@ public abstract class Contraption {
palette = new HashMapPalette<>(GameData.getBlockStateIDMap(), 16, (i, s) -> { palette = new HashMapPalette<>(GameData.getBlockStateIDMap(), 16, (i, s) -> {
throw new IllegalStateException("Palette Map index exceeded maximum"); throw new IllegalStateException("Palette Map index exceeded maximum");
}); });
ListTag list = c.getList("Palette", 10); ListTag list = c.getList("Palette", 10);
palette.values.clear(); palette.values.clear();
for (int i = 0; i < list.size(); ++i) for (int i = 0; i < list.size(); ++i)
@ -1178,21 +1176,25 @@ public abstract class Contraption {
int radius = (int) (Math.ceil(Math.sqrt(getRadius(blocks, axis)))); int radius = (int) (Math.ceil(Math.sqrt(getRadius(blocks, axis))));
GridAlignedBB betterBounds = GridAlignedBB.ofRadius(radius); int maxX = radius + 2;
int maxY = radius + 2;
int maxZ = radius + 2;
int minX = -radius - 1;
int minY = -radius - 1;
int minZ = -radius - 1;
ImmutableBox contraptionBounds = GridAlignedBB.from(bounds);
if (axis == Direction.Axis.X) { if (axis == Direction.Axis.X) {
betterBounds.setMaxX(contraptionBounds.getMaxX()); maxX = (int) bounds.maxX;
betterBounds.setMinX(contraptionBounds.getMinX()); minX = (int) bounds.minX;
} else if (axis == Direction.Axis.Y) { } else if (axis == Direction.Axis.Y) {
betterBounds.setMaxY(contraptionBounds.getMaxY()); maxY = (int) bounds.maxY;
betterBounds.setMinY(contraptionBounds.getMinY()); minY = (int) bounds.minY;
} else if (axis == Direction.Axis.Z) { } else if (axis == Direction.Axis.Z) {
betterBounds.setMaxZ(contraptionBounds.getMaxZ()); maxZ = (int) bounds.maxZ;
betterBounds.setMinZ(contraptionBounds.getMinZ()); minZ = (int) bounds.minZ;
} }
bounds = betterBounds.toAABB(); bounds = new AABB(minX, minY, minZ, maxX, maxY, maxZ);
} }
public void addExtraInventories(Entity entity) {} public void addExtraInventories(Entity entity) {}

View file

@ -14,6 +14,7 @@ import com.google.common.base.Predicates;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.AllMovementBehaviours;
import com.simibubi.create.content.contraptions.components.actors.BlockBreakingMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.BlockBreakingMovementBehaviour;
import com.simibubi.create.content.contraptions.components.actors.HarvesterMovementBehaviour;
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity.ContraptionRotationState; import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity.ContraptionRotationState;
import com.simibubi.create.content.contraptions.components.structureMovement.sync.ClientMotionPacket; import com.simibubi.create.content.contraptions.components.structureMovement.sync.ClientMotionPacket;
import com.simibubi.create.foundation.collision.ContinuousOBBCollider.ContinuousSeparationManifold; import com.simibubi.create.foundation.collision.ContinuousOBBCollider.ContinuousSeparationManifold;
@ -242,10 +243,10 @@ public class ContraptionCollider {
boolean hasNormal = !collisionNormal.equals(Vec3.ZERO); boolean hasNormal = !collisionNormal.equals(Vec3.ZERO);
boolean anyCollision = hardCollision || temporalCollision; boolean anyCollision = hardCollision || temporalCollision;
if (bounce > 0 && hasNormal && anyCollision && bounceEntity(entity, collisionNormal, contraptionEntity, bounce)) { if (bounce > 0 && hasNormal && anyCollision
entity.level.playSound(playerType == PlayerType.CLIENT ? (Player) entity : null, && bounceEntity(entity, collisionNormal, contraptionEntity, bounce)) {
entity.getX(), entity.getY(), entity.getZ(), SoundEvents.SLIME_BLOCK_FALL, entity.level.playSound(playerType == PlayerType.CLIENT ? (Player) entity : null, entity.getX(),
SoundSource.BLOCKS, .5f, 1); entity.getY(), entity.getZ(), SoundEvents.SLIME_BLOCK_FALL, SoundSource.BLOCKS, .5f, 1);
continue; continue;
} }
@ -339,25 +340,30 @@ public class ContraptionCollider {
return false; return false;
Vec3 contactPointMotion = contraption.getContactPointMotion(entity.position()); Vec3 contactPointMotion = contraption.getContactPointMotion(entity.position());
Vec3 motion = entity.getDeltaMovement().subtract(contactPointMotion); Vec3 motion = entity.getDeltaMovement()
Vec3 deltav = normal.scale(factor*2*motion.dot(normal)); .subtract(contactPointMotion);
Vec3 deltav = normal.scale(factor * 2 * motion.dot(normal));
if (deltav.dot(deltav) < 0.1f) if (deltav.dot(deltav) < 0.1f)
return false; return false;
entity.setDeltaMovement(entity.getDeltaMovement().subtract(deltav)); entity.setDeltaMovement(entity.getDeltaMovement()
.subtract(deltav));
return true; return true;
} }
public static Vec3 getWorldToLocalTranslation(Entity entity, AbstractContraptionEntity contraptionEntity) { public static Vec3 getWorldToLocalTranslation(Entity entity, AbstractContraptionEntity contraptionEntity) {
return getWorldToLocalTranslation(entity, contraptionEntity.getAnchorVec(), contraptionEntity.getRotationState()); return getWorldToLocalTranslation(entity, contraptionEntity.getAnchorVec(),
contraptionEntity.getRotationState());
} }
public static Vec3 getWorldToLocalTranslation(Entity entity, Vec3 anchorVec, ContraptionRotationState rotation) { public static Vec3 getWorldToLocalTranslation(Entity entity, Vec3 anchorVec, ContraptionRotationState rotation) {
return getWorldToLocalTranslation(entity, anchorVec, rotation.asMatrix(), rotation.getYawOffset()); return getWorldToLocalTranslation(entity, anchorVec, rotation.asMatrix(), rotation.getYawOffset());
} }
public static Vec3 getWorldToLocalTranslation(Entity entity, Vec3 anchorVec, Matrix3d rotationMatrix, float yawOffset) { public static Vec3 getWorldToLocalTranslation(Entity entity, Vec3 anchorVec, Matrix3d rotationMatrix,
float yawOffset) {
Vec3 entityPosition = entity.position(); Vec3 entityPosition = entity.position();
Vec3 centerY = new Vec3(0, entity.getBoundingBox().getYsize() / 2, 0); Vec3 centerY = new Vec3(0, entity.getBoundingBox()
.getYsize() / 2, 0);
Vec3 position = entityPosition; Vec3 position = entityPosition;
position = position.add(centerY); position = position.add(centerY);
position = position.subtract(VecHelper.CENTER_OF_ORIGIN); position = position.subtract(VecHelper.CENTER_OF_ORIGIN);
@ -371,14 +377,16 @@ public class ContraptionCollider {
} }
public static Vec3 getWorldToLocalTranslation(Vec3 entity, AbstractContraptionEntity contraptionEntity) { public static Vec3 getWorldToLocalTranslation(Vec3 entity, AbstractContraptionEntity contraptionEntity) {
return getWorldToLocalTranslation(entity, contraptionEntity.getAnchorVec(), contraptionEntity.getRotationState()); return getWorldToLocalTranslation(entity, contraptionEntity.getAnchorVec(),
contraptionEntity.getRotationState());
} }
public static Vec3 getWorldToLocalTranslation(Vec3 inPos, Vec3 anchorVec, ContraptionRotationState rotation) { public static Vec3 getWorldToLocalTranslation(Vec3 inPos, Vec3 anchorVec, ContraptionRotationState rotation) {
return getWorldToLocalTranslation(inPos, anchorVec, rotation.asMatrix(), rotation.getYawOffset()); return getWorldToLocalTranslation(inPos, anchorVec, rotation.asMatrix(), rotation.getYawOffset());
} }
public static Vec3 getWorldToLocalTranslation(Vec3 inPos, Vec3 anchorVec, Matrix3d rotationMatrix, float yawOffset) { public static Vec3 getWorldToLocalTranslation(Vec3 inPos, Vec3 anchorVec, Matrix3d rotationMatrix,
float yawOffset) {
Vec3 position = inPos; Vec3 position = inPos;
position = position.subtract(VecHelper.CENTER_OF_ORIGIN); position = position.subtract(VecHelper.CENTER_OF_ORIGIN);
position = position.subtract(anchorVec); position = position.subtract(anchorVec);
@ -436,8 +444,7 @@ public class ContraptionCollider {
return entity instanceof LocalPlayer; return entity instanceof LocalPlayer;
} }
private static List<VoxelShape> getPotentiallyCollidedShapes(Level world, Contraption contraption, private static List<VoxelShape> getPotentiallyCollidedShapes(Level world, Contraption contraption, AABB localBB) {
AABB localBB) {
double height = localBB.getYsize(); double height = localBB.getYsize();
double width = localBB.getXsize(); double width = localBB.getXsize();
@ -536,16 +543,24 @@ public class ContraptionCollider {
BlockState collidedState = world.getBlockState(colliderPos); BlockState collidedState = world.getBlockState(colliderPos);
StructureBlockInfo blockInfo = contraption.getBlocks() StructureBlockInfo blockInfo = contraption.getBlocks()
.get(pos); .get(pos);
boolean emptyCollider = collidedState.getCollisionShape(world, pos)
.isEmpty();
if (AllMovementBehaviours.contains(blockInfo.state.getBlock())) { if (AllMovementBehaviours.contains(blockInfo.state.getBlock())) {
MovementBehaviour movementBehaviour = AllMovementBehaviours.of(blockInfo.state.getBlock()); MovementBehaviour movementBehaviour = AllMovementBehaviours.of(blockInfo.state.getBlock());
if (movementBehaviour instanceof BlockBreakingMovementBehaviour) { if (movementBehaviour instanceof BlockBreakingMovementBehaviour) {
BlockBreakingMovementBehaviour behaviour = (BlockBreakingMovementBehaviour) movementBehaviour; BlockBreakingMovementBehaviour behaviour = (BlockBreakingMovementBehaviour) movementBehaviour;
if (!behaviour.canBreak(world, colliderPos, collidedState) if (!behaviour.canBreak(world, colliderPos, collidedState) && !emptyCollider)
&& !collidedState.getCollisionShape(world, pos) return true;
.isEmpty()) { continue;
}
if (movementBehaviour instanceof HarvesterMovementBehaviour) {
HarvesterMovementBehaviour harvesterMovementBehaviour =
(HarvesterMovementBehaviour) movementBehaviour;
if (!harvesterMovementBehaviour.isValidCrop(world, colliderPos, collidedState)
&& !harvesterMovementBehaviour.isValidOther(world, colliderPos, collidedState)
&& !emptyCollider)
return true; return true;
}
continue; continue;
} }
} }
@ -556,9 +571,7 @@ public class ContraptionCollider {
if (collidedState.getBlock() instanceof CocoaBlock) if (collidedState.getBlock() instanceof CocoaBlock)
continue; continue;
if (!collidedState.getMaterial() if (!collidedState.getMaterial()
.isReplaceable() .isReplaceable() && !emptyCollider) {
&& !collidedState.getCollisionShape(world, colliderPos)
.isEmpty()) {
return true; return true;
} }

View file

@ -1,12 +1,12 @@
package com.simibubi.create.content.contraptions.components.structureMovement; package com.simibubi.create.content.contraptions.components.structureMovement;
import com.jozufozu.flywheel.light.GPULightVolume; import com.jozufozu.flywheel.light.GPULightVolume;
import com.jozufozu.flywheel.light.GridAlignedBB;
import com.jozufozu.flywheel.light.ImmutableBox;
import com.jozufozu.flywheel.light.LightListener; import com.jozufozu.flywheel.light.LightListener;
import com.jozufozu.flywheel.light.LightProvider; import com.jozufozu.flywheel.light.LightProvider;
import com.jozufozu.flywheel.light.LightUpdater; import com.jozufozu.flywheel.light.LightUpdater;
import com.jozufozu.flywheel.light.ListenerStatus; import com.jozufozu.flywheel.light.ListenerStatus;
import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.jozufozu.flywheel.util.box.ImmutableBox;
import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.LightLayer;

View file

@ -5,6 +5,7 @@ import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource; import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
@ -14,15 +15,24 @@ import net.minecraft.world.phys.Vec3;
public class ContraptionWorld extends WrappedWorld { public class ContraptionWorld extends WrappedWorld {
final Contraption contraption; final Contraption contraption;
private final int minY;
private final int height;
public ContraptionWorld(Level world, Contraption contraption) { public ContraptionWorld(Level world, Contraption contraption) {
super(world); super(world);
this.contraption = contraption; this.contraption = contraption;
}
minY = nextMultipleOf16(contraption.bounds.minY);
height = nextMultipleOf16(contraption.bounds.maxY) - minY;
}
@Override // https://math.stackexchange.com/questions/291468
private static int nextMultipleOf16(double a) {
return (((Math.abs((int) a) - 1) | 15) + 1) * Mth.sign(a);
}
@Override
public BlockState getBlockState(BlockPos pos) { public BlockState getBlockState(BlockPos pos) {
StructureTemplate.StructureBlockInfo blockInfo = contraption.getBlocks().get(pos); StructureTemplate.StructureBlockInfo blockInfo = contraption.getBlocks().get(pos);
@ -46,4 +56,17 @@ public class ContraptionWorld extends WrappedWorld {
public void playLocalSound(double x, double y, double z, SoundEvent p_184134_7_, SoundSource p_184134_8_, float p_184134_9_, float p_184134_10_, boolean p_184134_11_) { public void playLocalSound(double x, double y, double z, SoundEvent p_184134_7_, SoundSource p_184134_8_, float p_184134_9_, float p_184134_10_, boolean p_184134_11_) {
world.playLocalSound(x, y, z, p_184134_7_, p_184134_8_, p_184134_9_, p_184134_10_, p_184134_11_); world.playLocalSound(x, y, z, p_184134_7_, p_184134_8_, p_184134_9_, p_184134_10_, p_184134_11_);
} }
// Ensure that we provide accurate information about ContraptionWorld height to mods (such as Starlight) which
// expect Levels to only have blocks located in chunks within their height range.
@Override
public int getHeight() {
return height;
}
@Override
public int getMinBuildHeight() {
return minY;
}
} }

View file

@ -3,10 +3,10 @@ package com.simibubi.create.content.contraptions.components.structureMovement;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices;
import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -66,12 +66,12 @@ public abstract class MovementBehaviour {
} }
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) {} ContraptionMatrices matrices, MultiBufferSource buffer) {}
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
@Nullable @Nullable
public ActorInstance createInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) { public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
return null; return null;
} }

View file

@ -1,9 +1,9 @@
package com.simibubi.create.content.contraptions.components.structureMovement; package com.simibubi.create.content.contraptions.components.structureMovement;
import com.jozufozu.flywheel.light.GridAlignedBB;
import com.jozufozu.flywheel.light.ImmutableBox;
import com.jozufozu.flywheel.light.LightProvider; import com.jozufozu.flywheel.light.LightProvider;
import com.jozufozu.flywheel.light.MovingListener; import com.jozufozu.flywheel.light.MovingListener;
import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.jozufozu.flywheel.util.box.ImmutableBox;
import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.AllConfigs;
public class NonStationaryLighter<C extends Contraption> extends ContraptionLighter<C> implements MovingListener { public class NonStationaryLighter<C extends Contraption> extends ContraptionLighter<C> implements MovingListener {

View file

@ -1,6 +1,6 @@
package com.simibubi.create.content.contraptions.components.structureMovement.bearing; package com.simibubi.create.content.contraptions.components.structureMovement.bearing;
import com.jozufozu.flywheel.light.GridAlignedBB; import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption; import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionLighter; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionLighter;

View file

@ -1,7 +1,7 @@
package com.simibubi.create.content.contraptions.components.structureMovement.bearing; package com.simibubi.create.content.contraptions.components.structureMovement.bearing;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.IDynamicInstance; import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.materials.oriented.OrientedData; import com.jozufozu.flywheel.core.materials.oriented.OrientedData;
import com.mojang.math.Quaternion; import com.mojang.math.Quaternion;
@ -15,7 +15,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
public class BearingInstance<B extends KineticTileEntity & IBearingTileEntity> extends BackHalfShaftInstance implements IDynamicInstance { public class BearingInstance<B extends KineticTileEntity & IBearingTileEntity> extends BackHalfShaftInstance implements DynamicInstance {
final B bearing; final B bearing;
final OrientedData topInstance; final OrientedData topInstance;

View file

@ -27,7 +27,7 @@ public class BearingRenderer extends KineticTileEntityRenderer {
protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer, protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) { int light, int overlay) {
if (Backend.getInstance().canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(te.getLevel())) return;
super.renderSafe(te, partialTicks, ms, buffer, light, overlay); super.renderSafe(te, partialTicks, ms, buffer, light, overlay);

View file

@ -420,11 +420,6 @@ public class ClockworkBearingTileEntity extends KineticTileEntity
return worldPosition; return worldPosition;
} }
@Override
public boolean shouldRenderNormally() {
return true;
}
public void setAngle(float forcedAngle) { public void setAngle(float forcedAngle) {
hourAngle = forcedAngle; hourAngle = forcedAngle;
} }

View file

@ -321,11 +321,6 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity
return true; return true;
} }
@Override
public boolean shouldRenderNormally() {
return true;
}
public void setAngle(float forcedAngle) { public void setAngle(float forcedAngle) {
angle = forcedAngle; angle = forcedAngle;
} }

View file

@ -3,13 +3,13 @@ package com.simibubi.create.content.contraptions.components.structureMovement.be
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.Materials;
import com.jozufozu.flywheel.core.materials.oriented.OrientedData; import com.jozufozu.flywheel.core.materials.oriented.OrientedData;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.math.Quaternion; import com.mojang.math.Quaternion;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@ -23,7 +23,7 @@ public class StabilizedBearingInstance extends ActorInstance {
final Vector3f rotationAxis; final Vector3f rotationAxis;
final Quaternion blockOrientation; final Quaternion blockOrientation;
public StabilizedBearingInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) { public StabilizedBearingInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
super(materialManager, simulationWorld, context); super(materialManager, simulationWorld, context);
BlockState blockState = context.state; BlockState blockState = context.state;

View file

@ -5,6 +5,7 @@ import javax.annotation.Nullable;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.backend.Backend;
import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.math.Quaternion; import com.mojang.math.Quaternion;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
@ -18,7 +19,6 @@ import com.simibubi.create.content.contraptions.components.structureMovement.ren
import com.simibubi.create.foundation.render.CachedBufferer; import com.simibubi.create.foundation.render.CachedBufferer;
import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBuffer;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@ -32,9 +32,9 @@ public class StabilizedBearingMovementBehaviour extends MovementBehaviour {
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) { ContraptionMatrices matrices, MultiBufferSource buffer) {
if (Backend.getInstance().canUseInstancing()) return; if (Backend.isOn()) return;
Direction facing = context.state.getValue(BlockStateProperties.FACING); Direction facing = context.state.getValue(BlockStateProperties.FACING);
PartialModel top = AllBlockPartials.BEARING_TOP; PartialModel top = AllBlockPartials.BEARING_TOP;
@ -70,7 +70,7 @@ public class StabilizedBearingMovementBehaviour extends MovementBehaviour {
@Nullable @Nullable
@Override @Override
public ActorInstance createInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) { public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
return new StabilizedBearingInstance(materialManager, simulationWorld, context); return new StabilizedBearingInstance(materialManager, simulationWorld, context);
} }

View file

@ -1,8 +1,8 @@
package com.simibubi.create.content.contraptions.components.structureMovement.chassis; package com.simibubi.create.content.contraptions.components.structureMovement.chassis;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.IDynamicInstance; import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance;
import com.jozufozu.flywheel.core.materials.model.ModelData; import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
@ -12,7 +12,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
public class StickerInstance extends TileEntityInstance<StickerTileEntity> implements IDynamicInstance { public class StickerInstance extends BlockEntityInstance<StickerTileEntity> implements DynamicInstance {
float lastOffset = Float.NaN; float lastOffset = Float.NaN;
final Direction facing; final Direction facing;
@ -35,7 +35,7 @@ public class StickerInstance extends TileEntityInstance<StickerTileEntity> imple
@Override @Override
public void beginFrame() { public void beginFrame() {
float offset = tile.piston.getValue(AnimationTickHolder.getPartialTicks()); float offset = blockEntity.piston.getValue(AnimationTickHolder.getPartialTicks());
if (fakeWorld) if (fakeWorld)
offset = this.offset; offset = this.offset;
@ -51,7 +51,7 @@ public class StickerInstance extends TileEntityInstance<StickerTileEntity> imple
private void animateHead(float offset) { private void animateHead(float offset) {
head.loadIdentity() head.loadIdentity()
.translate(getInstancePosition()) .translate(getInstancePosition())
.nudge(tile.hashCode()) .nudge(blockEntity.hashCode())
.centre() .centre()
.rotateY(AngleHelper.horizontalAngle(facing)) .rotateY(AngleHelper.horizontalAngle(facing))
.rotateX(AngleHelper.verticalAngle(facing) + 90) .rotateX(AngleHelper.verticalAngle(facing) + 90)

View file

@ -25,7 +25,7 @@ public class StickerRenderer extends SafeTileEntityRenderer<StickerTileEntity> {
protected void renderSafe(StickerTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer, protected void renderSafe(StickerTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) { int light, int overlay) {
if (Backend.getInstance().canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(te.getLevel())) return;
BlockState state = te.getBlockState(); BlockState state = te.getBlockState();
SuperByteBuffer head = CachedBufferer.partial(AllBlockPartials.STICKER_HEAD, state); SuperByteBuffer head = CachedBufferer.partial(AllBlockPartials.STICKER_HEAD, state);

View file

@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.components.structureMovement.ch
import java.util.List; import java.util.List;
import com.jozufozu.flywheel.api.FlywheelRendered;
import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher; import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllSoundEvents; import com.simibubi.create.AllSoundEvents;
@ -23,7 +22,7 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.DistExecutor;
public class StickerTileEntity extends SmartTileEntity implements FlywheelRendered { public class StickerTileEntity extends SmartTileEntity {
LerpedFloat piston; LerpedFloat piston;
boolean update; boolean update;

View file

@ -1,7 +1,7 @@
package com.simibubi.create.content.contraptions.components.structureMovement.gantry; package com.simibubi.create.content.contraptions.components.structureMovement.gantry;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.IDynamicInstance; import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.core.materials.model.ModelData; import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
@ -14,7 +14,7 @@ import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
public class GantryCarriageInstance extends ShaftInstance implements IDynamicInstance { public class GantryCarriageInstance extends ShaftInstance implements DynamicInstance {
private final ModelData gantryCogs; private final ModelData gantryCogs;
@ -56,7 +56,7 @@ public class GantryCarriageInstance extends ShaftInstance implements IDynamicIns
} }
private float getCogAngle() { private float getCogAngle() {
return GantryCarriageRenderer.getAngleForTe(tile, visualPos, rotationAxis) * rotationMult; return GantryCarriageRenderer.getAngleForTe(blockEntity, visualPos, rotationAxis) * rotationMult;
} }
private void animateCogs(float cogAngle) { private void animateCogs(float cogAngle) {

View file

@ -31,7 +31,7 @@ public class GantryCarriageRenderer extends KineticTileEntityRenderer {
int light, int overlay) { int light, int overlay) {
super.renderSafe(te, partialTicks, ms, buffer, light, overlay); super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
if (Backend.getInstance().canUseInstancing(te.getLevel())) return; if (Backend.canUseInstancing(te.getLevel())) return;
BlockState state = te.getBlockState(); BlockState state = te.getBlockState();
Direction facing = state.getValue(GantryCarriageBlock.FACING); Direction facing = state.getValue(GantryCarriageBlock.FACING);

View file

@ -171,9 +171,4 @@ public class GantryCarriageTileEntity extends KineticTileEntity implements IDisp
BlockEntity te = level.getBlockEntity(worldPosition.relative(facing)); BlockEntity te = level.getBlockEntity(worldPosition.relative(facing));
return te instanceof GantryShaftTileEntity && ((GantryShaftTileEntity) te).canAssembleOn(); return te instanceof GantryShaftTileEntity && ((GantryShaftTileEntity) te).canAssembleOn();
} }
@Override
public boolean shouldRenderNormally() {
return true;
}
} }

View file

@ -3,35 +3,26 @@ package com.simibubi.create.content.contraptions.components.structureMovement.gl
import com.jozufozu.flywheel.api.Instancer; import com.jozufozu.flywheel.api.Instancer;
import com.jozufozu.flywheel.api.MaterialGroup; import com.jozufozu.flywheel.api.MaterialGroup;
import com.jozufozu.flywheel.api.MaterialManager; import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.ITickableInstance; import com.jozufozu.flywheel.api.instance.TickableInstance;
import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat;
import com.jozufozu.flywheel.backend.instancing.entity.EntityInstance; import com.jozufozu.flywheel.backend.instancing.entity.EntityInstance;
import com.jozufozu.flywheel.core.Formats;
import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.Materials;
import com.jozufozu.flywheel.core.instancing.ConditionalInstance; import com.jozufozu.flywheel.core.instancing.ConditionalInstance;
import com.jozufozu.flywheel.core.materials.oriented.OrientedData; import com.jozufozu.flywheel.core.materials.oriented.OrientedData;
import com.jozufozu.flywheel.core.model.Model;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Quaternion; import com.mojang.math.Quaternion;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
import com.simibubi.create.AllStitchedTextures;
import com.simibubi.create.Create; import com.simibubi.create.Create;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.LightLayer;
import net.minecraft.world.phys.Vec3;
public class GlueInstance extends EntityInstance<SuperGlueEntity> implements ITickableInstance { public class GlueInstance extends EntityInstance<SuperGlueEntity> implements TickableInstance {
private static final boolean USE_ATLAS = false;
private static final ResourceLocation TEXTURE = Create.asResource("textures/entity/super_glue/slime.png"); private static final ResourceLocation TEXTURE = Create.asResource("textures/entity/super_glue/slime.png");
private final Quaternion rotation; private final Quaternion rotation;
@ -52,9 +43,9 @@ public class GlueInstance extends EntityInstance<SuperGlueEntity> implements ITi
} }
private Instancer<OrientedData> getInstancer(MaterialManager materialManager, SuperGlueEntity entity) { private Instancer<OrientedData> getInstancer(MaterialManager materialManager, SuperGlueEntity entity) {
MaterialGroup group = USE_ATLAS ? materialManager.defaultCutout() : materialManager.cutout(RenderType.entityCutout(TEXTURE)); MaterialGroup group = GlueModel.USE_ATLAS ? materialManager.defaultCutout() : materialManager.cutout(RenderType.entityCutout(TEXTURE));
return group.material(Materials.ORIENTED).model(entity.getType(), GlueModel::new); return group.material(Materials.ORIENTED).model(entity.getType(), GlueModel::get);
} }
@Override @Override
@ -95,75 +86,4 @@ public class GlueInstance extends EntityInstance<SuperGlueEntity> implements ITi
|| AllItems.SUPER_GLUE.isIn(player.getOffhandItem()); || AllItems.SUPER_GLUE.isIn(player.getOffhandItem());
} }
public static class GlueModel implements Model {
@Override
public String name() {
return "glue";
}
@Override
public void buffer(VertexConsumer buffer) {
Vec3 diff = Vec3.atLowerCornerOf(Direction.SOUTH.getNormal());
Vec3 extension = diff.normalize()
.scale(1 / 32f - 1 / 128f);
Vec3 plane = VecHelper.axisAlingedPlaneOf(diff);
Direction.Axis axis = Direction.getNearest(diff.x, diff.y, diff.z)
.getAxis();
Vec3 start = Vec3.ZERO.subtract(extension);
Vec3 end = Vec3.ZERO.add(extension);
plane = plane.scale(1 / 2f);
Vec3 a1 = plane.add(start);
Vec3 b1 = plane.add(end);
plane = VecHelper.rotate(plane, -90, axis);
Vec3 a2 = plane.add(start);
Vec3 b2 = plane.add(end);
plane = VecHelper.rotate(plane, -90, axis);
Vec3 a3 = plane.add(start);
Vec3 b3 = plane.add(end);
plane = VecHelper.rotate(plane, -90, axis);
Vec3 a4 = plane.add(start);
Vec3 b4 = plane.add(end);
float minU;
float maxU;
float minV;
float maxV;
if (USE_ATLAS) {
TextureAtlasSprite sprite = AllStitchedTextures.SUPER_GLUE.get();
minU = sprite.getU0();
maxU = sprite.getU1();
minV = sprite.getV0();
maxV = sprite.getV1();
} else {
minU = minV = 0;
maxU = maxV = 1;
}
// inside quad
buffer.vertex(a1.x, a1.y, a1.z).normal(0, 0, -1f).uv(maxU, minV).endVertex();
buffer.vertex(a2.x, a2.y, a2.z).normal(0, 0, -1f).uv(maxU, maxV).endVertex();
buffer.vertex(a3.x, a3.y, a3.z).normal(0, 0, -1f).uv(minU, maxV).endVertex();
buffer.vertex(a4.x, a4.y, a4.z).normal(0, 0, -1f).uv(minU, minV).endVertex();
// outside quad
buffer.vertex(b4.x, b4.y, b4.z).normal(0, 0, 1f).uv(minU, minV).endVertex();
buffer.vertex(b3.x, b3.y, b3.z).normal(0, 0, 1f).uv(minU, maxV).endVertex();
buffer.vertex(b2.x, b2.y, b2.z).normal(0, 0, 1f).uv(maxU, maxV).endVertex();
buffer.vertex(b1.x, b1.y, b1.z).normal(0, 0, 1f).uv(maxU, minV).endVertex();
}
@Override
public int vertexCount() {
return 8;
}
@Override
public VertexFormat format() {
return Formats.UNLIT_MODEL;
}
}
} }

View file

@ -0,0 +1,99 @@
package com.simibubi.create.content.contraptions.components.structureMovement.glue;
import com.jozufozu.flywheel.api.vertex.VertexList;
import com.jozufozu.flywheel.core.Formats;
import com.jozufozu.flywheel.core.model.Model;
import com.jozufozu.flywheel.core.vertex.PosTexNormalWriterUnsafe;
import com.mojang.blaze3d.platform.MemoryTracker;
import com.simibubi.create.AllStitchedTextures;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.core.Direction;
import net.minecraft.world.phys.Vec3;
public class GlueModel implements Model {
public static final GlueModel INSTANCE = new GlueModel();
static final boolean USE_ATLAS = false;
public static GlueModel get() {
return INSTANCE;
}
private final VertexList reader;
private GlueModel() {
PosTexNormalWriterUnsafe writer = Formats.POS_TEX_NORMAL.createWriter(MemoryTracker.create(size()));
createGlueModel(writer);
reader = writer.intoReader();
}
@Override
public String name() {
return "glue";
}
@Override
public int vertexCount() {
return 8;
}
@Override
public VertexList getReader() {
return reader;
}
public static void createGlueModel(PosTexNormalWriterUnsafe buffer) {
Vec3 diff = Vec3.atLowerCornerOf(Direction.SOUTH.getNormal());
Vec3 extension = diff.normalize()
.scale(1 / 32f - 1 / 128f);
Vec3 plane = VecHelper.axisAlingedPlaneOf(diff);
Direction.Axis axis = Direction.getNearest(diff.x, diff.y, diff.z)
.getAxis();
Vec3 start = Vec3.ZERO.subtract(extension);
Vec3 end = Vec3.ZERO.add(extension);
plane = plane.scale(1 / 2f);
Vec3 a1 = plane.add(start);
Vec3 b1 = plane.add(end);
plane = VecHelper.rotate(plane, -90, axis);
Vec3 a2 = plane.add(start);
Vec3 b2 = plane.add(end);
plane = VecHelper.rotate(plane, -90, axis);
Vec3 a3 = plane.add(start);
Vec3 b3 = plane.add(end);
plane = VecHelper.rotate(plane, -90, axis);
Vec3 a4 = plane.add(start);
Vec3 b4 = plane.add(end);
float minU;
float maxU;
float minV;
float maxV;
if (USE_ATLAS) {
TextureAtlasSprite sprite = AllStitchedTextures.SUPER_GLUE.get();
minU = sprite.getU0();
maxU = sprite.getU1();
minV = sprite.getV0();
maxV = sprite.getV1();
} else {
minU = minV = 0;
maxU = maxV = 1;
}
// inside quad
buffer.putVertex((float) a1.x, (float) a1.y, (float) a1.z, 0, 0, -1, maxU, minV);
buffer.putVertex((float) a2.x, (float) a2.y, (float) a2.z, 0, 0, -1, maxU, maxV);
buffer.putVertex((float) a3.x, (float) a3.y, (float) a3.z, 0, 0, -1, minU, maxV);
buffer.putVertex((float) a4.x, (float) a4.y, (float) a4.z, 0, 0, -1, minU, minV);
// outside quad
buffer.putVertex((float) b4.x, (float) b4.y, (float) b4.z, 0, 0, 1f, minU, minV);
buffer.putVertex((float) b3.x, (float) b3.y, (float) b3.z, 0, 0, 1f, minU, maxV);
buffer.putVertex((float) b2.x, (float) b2.y, (float) b2.z, 0, 0, 1f, maxU, maxV);
buffer.putVertex((float) b1.x, (float) b1.y, (float) b1.z, 0, 0, 1f, maxU, minV);
}
}

View file

@ -4,7 +4,6 @@ import javax.annotation.Nullable;
import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.Validate;
import com.jozufozu.flywheel.api.FlywheelRendered;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllEntityTypes; import com.simibubi.create.AllEntityTypes;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
@ -68,7 +67,7 @@ import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PacketDistributor;
public class SuperGlueEntity extends Entity public class SuperGlueEntity extends Entity
implements IEntityAdditionalSpawnData, ISpecialEntityItemRequirement, FlywheelRendered { implements IEntityAdditionalSpawnData, ISpecialEntityItemRequirement {
private int validationTimer; private int validationTimer;
protected BlockPos hangingPosition; protected BlockPos hangingPosition;

View file

@ -1,6 +1,6 @@
package com.simibubi.create.content.contraptions.components.structureMovement.piston; package com.simibubi.create.content.contraptions.components.structureMovement.piston;
import com.jozufozu.flywheel.light.GridAlignedBB; import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionLighter; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionLighter;
import net.minecraft.core.Vec3i; import net.minecraft.core.Vec3i;

Some files were not shown because too many files have changed in this diff Show more