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
description: The version of the mod you were using when the bug occured
options:
- "0.4.0b"
- "0.4.0a"
- "0.4.0"
- "0.3.2g"

View file

@ -17,11 +17,10 @@ plugins {
id 'com.matthewprenger.cursegradle' version "${cursegradle_version}"
}
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: 'maven-publish'
apply plugin: 'org.spongepowered.mixin'
apply plugin: 'org.parchmentmc.librarian.forgegradle'
boolean dev = System.getenv('RELEASE') == null || System.getenv('RELEASE').equals('false');
// jozu: I use a gradle workspace with both projects.

View file

@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G
org.gradle.daemon = false
# mod version info
mod_version = 0.4a
mod_version = 0.4b
minecraft_version = 1.18.1
forge_version = 39.0.8
@ -19,7 +19,7 @@ parchment_version = 2021.12.19
# dependency versions
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_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
ce38f5577b7b96460025372563ee88cef2318e7c assets/create/lang/unfinished/fr_fr.json
2c85e6efd817348d94c55292e20fadf6b704209c assets/create/lang/unfinished/it_it.json
5f72b4b2cee27254765f63e309568bcec78959f4 assets/create/lang/unfinished/ja_jp.json
26880b09a44d9642be8764fbbae52e384fd5883b assets/create/lang/unfinished/ko_kr.json
f6ed2a6f0f241e73f1e6a88b8500043ef0668b1d assets/create/lang/unfinished/ja_jp.json
133188f5196da148f9dd8aa122d9b008daf36685 assets/create/lang/unfinished/ko_kr.json
983b53cab576e43b0e61f899590b6488d220cd36 assets/create/lang/unfinished/nl_nl.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
703c7a655bedc1f1a59ba6c6df5a3f7f56f28bee assets/create/lang/unfinished/zh_cn.json
ecc1c5d0b5434804db76a5b6d4a589b16fa490be assets/create/lang/unfinished/zh_cn.json
b316488ca9891c2444a6df03bc5ddfbcd1f84de0 assets/create/lang/unfinished/zh_tw.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.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
c9a9d6d28a7eac1210108d52840b60b26d58bcfe data/create/recipes/crushing/lapis_ore.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
6cd97c6f12687790943db810f85036b02586c753 data/create/recipes/crushing/nether_quartz_ore.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
ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/items/storage_blocks/brass.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
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/dripstone_replaceable_blocks.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
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
a08f67865337f62601c5e333b4011382d10020e4 data/minecraft/tags/blocks/needs_stone_tool.json
6bcabbc1c0479caa80a0ebc676bb34ce0052efb0 data/minecraft/tags/blocks/rails.json

View file

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

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1673",
"_": "Missing Localizations: 1556",
"_": "->------------------------] Game Elements [------------------------<-",
@ -9,8 +9,8 @@
"block.create.analog_lever": "Alavanca Analógica",
"block.create.andesite_belt_funnel": "Funil de Esteira de Andesito",
"block.create.andesite_casing": "Revestimento de Andesito",
"block.create.andesite_encased_cogwheel": "UNLOCALIZED: Andesite Encased Cogwheel",
"block.create.andesite_encased_large_cogwheel": "UNLOCALIZED: Andesite Encased Large Cogwheel",
"block.create.andesite_encased_cogwheel": "Roda dentada revestida com andesito",
"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_funnel": "Funil de Andesito",
"block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar",
@ -21,7 +21,7 @@
"block.create.belt": "Esteira Mecânica",
"block.create.birch_window": "UNLOCALIZED: Birch Window",
"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_seat": "Assento preto",
"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_block": "Bloco de Latão",
"block.create.brass_casing": "Revestimento de Latão",
"block.create.brass_encased_cogwheel": "UNLOCALIZED: Brass Encased Cogwheel",
"block.create.brass_encased_large_cogwheel": "UNLOCALIZED: Brass Encased Large Cogwheel",
"block.create.brass_encased_cogwheel": "Roda dentada revestida com latão",
"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_funnel": "Funil 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.crushing_wheel": "Roda de Moer",
"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_brick_slab": "UNLOCALIZED: Cut Andesite Brick Slab",
"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_pane": "UNLOCALIZED: Dark Oak Window Pane",
"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.depot": "Depósito",
"block.create.diorite_pillar": "UNLOCALIZED: Diorite Pillar",
@ -237,10 +237,10 @@
"block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane",
"block.create.hose_pulley": "Polia de Mangueira",
"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_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_asurine": "UNLOCALIZED: Layered Asurine",
"block.create.layered_calcite": "UNLOCALIZED: Layered Calcite",
@ -292,7 +292,7 @@
"block.create.mechanical_press": "Prensa Mecânica",
"block.create.mechanical_pump": "Bomba 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.minecart_anchor": "Ancóra de carrinho de Mina",
"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_stairs": "UNLOCALIZED: Polished Cut Veridium Stairs",
"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.powered_latch": "UNLOCALIZED: Powered Latch",
"block.create.powered_toggle_latch": "UNLOCALIZED: Powered Toggle Latch",
"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.purple_nixie_tube": "Tubo nixie roxo",
"block.create.purple_sail": "Vela roxo",
@ -390,7 +390,7 @@
"block.create.purple_toolbox": "Caixa de ferramentas roxa",
"block.create.purple_valve_handle": "válvula roxa",
"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_sail": "Vela vermelha",
"block.create.red_seat": "Assento vermelho",
@ -401,7 +401,7 @@
"block.create.refined_radiance_casing": "Revestimento Brilhante",
"block.create.rope": "Corda",
"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.schematic_table": "Mesa de Esquema",
"block.create.schematicannon": "Canhão de Esquema",
@ -472,7 +472,7 @@
"block.create.smart_chute": "calha Inteligente",
"block.create.smart_fluid_pipe": "Cano de Fluidos Inteligente",
"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_pane": "UNLOCALIZED: Spruce Window Pane",
"block.create.sticker": "Adesivo",
@ -520,14 +520,14 @@
"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_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_sail": "Vela branca",
"block.create.white_seat": "Assento branco",
"block.create.white_toolbox": "Caixa de ferramentas branca",
"block.create.white_valve_handle": "Válvula branca",
"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_sail": "Vela amarela",
"block.create.yellow_seat": "Assento amarelo",
@ -569,7 +569,7 @@
"item.create.copper_backtank": "Tanque Traseiro",
"item.create.copper_nugget": "Pepita 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.creative_blaze_cake": "Bolo de Blaze Criativo",
"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.empty_blaze_burner": "Queimador de Blaze 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.filter": "Filtro",
"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_coupling": "Acoplamento de Carrinho de Mina",
"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.precision_mechanism": "Mecanismo de Precisão",
"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.refined_radiance": "Luz Refinada",
"item.create.rose_quartz": "Quartzo Rosa",
@ -624,7 +624,7 @@
"item.create.super_glue": "Super Cola",
"item.create.sweet_roll": "Rolinho Doce",
"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.wheat_flour": "Farinha de trigo",
"item.create.whisk": "Batedeira",
@ -637,7 +637,7 @@
"advancement.create.root": "Bem vindo a Create",
"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.its_alive": "Esta vivo!",
"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.belt": "Correia de alga",
"advancement.create.belt.desc": "Conecte dois eixos com uma esteira mecanica.",
"advancement.create.tunnel": "UNLOCALIZED: Take cover!",
"advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your mechanical belt with a Tunnel.",
"advancement.create.tunnel": "Pegue cover!",
"advancement.create.tunnel.desc": "Embeleze suas esteiras mecânicas com um tunel.",
"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.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_kiss": "UNLOCALIZED: The Parrots and the Flaps",
"advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.",
"advancement.create.fan": "UNLOCALIZED: Mechanical Airbender",
"advancement.create.fan.desc": "UNLOCALIZED: Ride the stream of air provided by an Encased Fan.",
"advancement.create.fan_lava": "UNLOCALIZED: Geothermal Space Heater",
"advancement.create.fan_lava.desc": "UNLOCALIZED: Get caught in a stream of air that smelts things.",
"advancement.create.fan_water": "UNLOCALIZED: Wacky Washing",
"advancement.create.fan_water.desc": "UNLOCALIZED: Get caught in a stream of air that washes things.",
"advancement.create.fan_smoke": "UNLOCALIZED: Mechanical Bellows",
"advancement.create.fan_smoke.desc": "UNLOCALIZED: Get caught in a stream of air that smokes items.",
"advancement.create.wrench": "UNLOCALIZED: Configure Conveniently",
"advancement.create.wrench.desc": "UNLOCALIZED: Create a Wrench to aid you in building your contraptions.",
"advancement.create.goggles": "UNLOCALIZED: Stress-O-Vision",
"advancement.create.goggles.desc": "UNLOCALIZED: Create some Engineer's Goggles to aid you in getting more kinetic information from components.",
"advancement.create.speedometer": "UNLOCALIZED: But How Fast Exactly?",
"advancement.create.speedometer.desc": "UNLOCALIZED: Place and power a Speedometer. Look at it through your goggles to read its exact value.",
"advancement.create.stressometer": "UNLOCALIZED: But How Stressed Exactly?",
"advancement.create.stressometer.desc": "UNLOCALIZED: Place and power a Stressometer. Look at it through your goggles to read its exact value.",
"advancement.create.aesthetics": "UNLOCALIZED: Boom, Aesthetics!",
"advancement.create.aesthetics.desc": "UNLOCALIZED: Place brackets on a shaft, pipe and cogwheel.",
"advancement.create.reinforced": "UNLOCALIZED: Boom, Reinforced!",
"advancement.create.reinforced.desc": "UNLOCALIZED: Use fitting casing blocks on a shaft, pipe and mechanical belt.",
"advancement.create.water_wheel": "UNLOCALIZED: Harnessing Hydraulics",
"advancement.create.water_wheel.desc": "UNLOCALIZED: Place a Water Wheel and try getting it to spin!",
"advancement.create.chocolate_wheel": "UNLOCALIZED: Tasteful power",
"advancement.create.chocolate_wheel.desc": "UNLOCALIZED: Run a Water Wheel with molten Chocolate.",
"advancement.create.lava_wheel": "UNLOCALIZED: Magma Wheel",
"advancement.create.lava_wheel.desc": "UNLOCALIZED: This shouldn't have worked.",
"advancement.create.cuckoo": "UNLOCALIZED: Is it time?",
"advancement.create.cuckoo.desc": "UNLOCALIZED: Witness a cuckhoo clock announce bedtime.",
"advancement.create.millstone": "UNLOCALIZED: Pocket Crusher",
"advancement.create.millstone.desc": "UNLOCALIZED: Place and power a Millstone.",
"advancement.create.windmill": "UNLOCALIZED: A mild Breeze",
"advancement.create.windmill.desc": "UNLOCALIZED: Assemble a windmill.",
"advancement.create.maxed_windmill": "UNLOCALIZED: A strong breeze",
"advancement.create.maxed_windmill.desc": "UNLOCALIZED: Assemble a windmill of maximum strength.",
"advancement.create.fan": "Dobrador de ar mecânico",
"advancement.create.fan.desc": "Pegue uma carona no fluxo de ar provido pelo ventilador revestido.",
"advancement.create.fan_lava": "Aquecedor de espaço geotermal",
"advancement.create.fan_lava.desc": "Seja pego pelo fluxo de ar que fundi coisas.",
"advancement.create.fan_water": "Lavagem maluca",
"advancement.create.fan_water.desc": "Seja pego no fluxo de ar que lava coisas.",
"advancement.create.fan_smoke": "Fole mecânico",
"advancement.create.fan_smoke.desc": "Seja pego no fluxo de ar que defuma coisas.",
"advancement.create.wrench": "Configurado convenientemente",
"advancement.create.wrench.desc": "Crie a chave inglesa para ajuda-lo em construi suas engenhocas.",
"advancement.create.goggles": "Visão do stress",
"advancement.create.goggles.desc": "Crie o óculos de engenheiro para ajuda-lo a conseguir mais informações cineticas dos conponentes.",
"advancement.create.speedometer": "Mas quão rapido exatamente?",
"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": "Mas quão estressado exatamente?",
"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": "Boom, estética!",
"advancement.create.aesthetics.desc": "Coloque suportes em eixos, canos e rodas dentadas.",
"advancement.create.reinforced": "Boom, Reinforçado!",
"advancement.create.reinforced.desc": "Use um bloco de revestimento apropriado em um eixo, cano e esteira mecânica.",
"advancement.create.water_wheel": "aproveitamento hidráulico",
"advancement.create.water_wheel.desc": "Coloque uma roda de água e tente conseguir gira-la!",
"advancement.create.chocolate_wheel": "Poder delicioso",
"advancement.create.chocolate_wheel.desc": "Gire uma roda de água com chocolate derretido.",
"advancement.create.lava_wheel": "Roda de magma",
"advancement.create.lava_wheel.desc": "Isso não deveria ter funcionado.",
"advancement.create.cuckoo": "É a hora?",
"advancement.create.cuckoo.desc": "Veja um relógio cuckoo anunciar a hora de dormir.",
"advancement.create.millstone": "Moedor portátil",
"advancement.create.millstone.desc": "Coloque e energize uma pedra de moer",
"advancement.create.windmill": "Uma brisa moderada",
"advancement.create.windmill.desc": "Monte um moinho de vento",
"advancement.create.maxed_windmill": "Uma brisa forte",
"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.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.desc": "coloque e energize uma broca mecânica.",
"advancement.create.press": "UNLOCALIZED: Press Goes 'Bonk!'",
"advancement.create.press.desc": "UNLOCALIZED: Power a Mechanical Press and use it to create some Sheets.",
"advancement.create.press": "Prensa faz 'Bonk!'",
"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.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.desc": "Faça alguns tubos de elétron, uteis para fabricar maquinas menos primitivas.",
"advancement.create.mechanical_saw": "Cortadores estacionarios",
@ -718,71 +718,71 @@
"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.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.spout": "UNLOCALIZED: Sploosh",
"advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid item being filled using a spout.",
"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": "Sploosh",
"advancement.create.spout.desc": "Assista um item ser enchido usando uma bica.",
"advancement.create.spout_potion": "UNLOCALIZED: Global Brewery",
"advancement.create.spout_potion.desc": "UNLOCALIZED: Watch a spout fill a bottle with potion fluid.",
"advancement.create.chocolate": "UNLOCALIZED: A world of Imagination",
"advancement.create.chocolate.desc": "UNLOCALIZED: Obtain a bucket of Molten Chocolate.",
"advancement.create.item_drain": "UNLOCALIZED: Tumble Draining",
"advancement.create.item_drain.desc": "UNLOCALIZED: Watch a fluid item being emptied by an item drain.",
"advancement.create.chained_item_drain": "UNLOCALIZED: Let it roll!",
"advancement.create.chained_item_drain.desc": "UNLOCALIZED: Watch an item roll across several chained item drains.",
"advancement.create.glass_pipe": "UNLOCALIZED: Flow Spy",
"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.pipe_collision": "UNLOCALIZED: Never cross the Streams!",
"advancement.create.pipe_collision.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network.",
"advancement.create.pipe_spill": "UNLOCALIZED: There's a leak!",
"advancement.create.pipe_spill.desc": "UNLOCALIZED: Watch an open end of a pipe take or place fluids into the world.",
"advancement.create.hose_pulley": "UNLOCALIZED: Industrial Spillage",
"advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a hose pulley and watch it drain or fill a body of fluid.",
"advancement.create.infinite_water": "UNLOCALIZED: Draining the Ocean",
"advancement.create.infinite_water.desc": "UNLOCALIZED: Pump from a body of Water large enough to be considered Infinite.",
"advancement.create.infinite_lava": "UNLOCALIZED: Draining the Planets' Core",
"advancement.create.infinite_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered Infinite.",
"advancement.create.infinite_chocolate": "UNLOCALIZED: Drowning in Imagination",
"advancement.create.infinite_chocolate.desc": "UNLOCALIZED: Pump from a body of Molten Chocolate large enough to be considered Infinite.",
"advancement.create.crafter": "UNLOCALIZED: Automated Assembly",
"advancement.create.crafter.desc": "UNLOCALIZED: Place and power some Mechanical Crafters.",
"advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption o'clock",
"advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a Structure mounted on a Clockwork Bearing.",
"advancement.create.nixie_tube": "UNLOCALIZED: Signs of Style",
"advancement.create.nixie_tube.desc": "UNLOCALIZED: Obtain and place down a pair of Nixie Tubes.",
"advancement.create.deployer": "UNLOCALIZED: Poke, Place, and Attack",
"advancement.create.deployer.desc": "UNLOCALIZED: Place and power a Deployer, the perfect reflection of yourself.",
"advancement.create.speed_controller": "UNLOCALIZED: Engineers hate him!",
"advancement.create.speed_controller.desc": "UNLOCALIZED: Place a Rotation Speed Controller, the ultimate device for changing gear.",
"advancement.create.flywheel": "UNLOCALIZED: Heart of the Factory",
"advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an engine to the Flywheel.",
"advancement.create.overstress_flywheel": "UNLOCALIZED: High levels of Stress",
"advancement.create.overstress_flywheel.desc": "UNLOCALIZED: Overstress a Furnace Engine.",
"advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities",
"advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.",
"advancement.create.mechanical_arm": "UNLOCALIZED: Busy Hands!",
"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.musical_arm": "UNLOCALIZED: Play Me My Theme Tune!",
"advancement.create.musical_arm.desc": "UNLOCALIZED: Watch a Mechanical Arm operate your Jukebox.",
"advancement.create.arm_many_targets": "UNLOCALIZED: Organize-o-Tron",
"advancement.create.arm_many_targets.desc": "UNLOCALIZED: Program a Mechanical Arm with ten or more output locations.",
"advancement.create.arm_blaze_burner": "UNLOCALIZED: Combust-o-Tron",
"advancement.create.arm_blaze_burner.desc": "UNLOCALIZED: Instruct a Mechanical Arm to feed your Blaze Burner.",
"advancement.create.spout_potion.desc": "Assista uma bica encher uma garrafa com uma poção.",
"advancement.create.chocolate": "Um mundo de imaginação",
"advancement.create.chocolate.desc": "Obtenha um balde de chocolate.",
"advancement.create.item_drain": "Cambalhota de drenação",
"advancement.create.item_drain.desc": "assista um item de fluido ser esvaziado por um dreno de item.",
"advancement.create.chained_item_drain": "Deixe rolar!",
"advancement.create.chained_item_drain.desc": "assista um item rolar através de varios drenos consecutivos.",
"advancement.create.glass_pipe": "Espião de fluxo",
"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": "Nunca cruze o fluxo!",
"advancement.create.pipe_collision.desc": "Assista dois fluidos se encontrarem na sua rede de canos.",
"advancement.create.pipe_spill": "Tem um vazamento!",
"advancement.create.pipe_spill.desc": "Assista a extremidade aberta de um cano pegar ou colocar um fluido no mundo.",
"advancement.create.hose_pulley": "Vazamento industrial",
"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": "Drenando o oceano",
"advancement.create.infinite_water.desc": "Bombeie de um corpo de água grande o bastante para ser considerado infinito.",
"advancement.create.infinite_lava": "Drenando o nucleo do planeta",
"advancement.create.infinite_lava.desc": "Bombeie de um corpo de lava grande o bastante para ser considerado infinito.",
"advancement.create.infinite_chocolate": "Afogando em imaginação",
"advancement.create.infinite_chocolate.desc": "Bombeie de um corpo de chocolate grande o bastante para ser considerado infinito.",
"advancement.create.crafter": "Montagem automatica",
"advancement.create.crafter.desc": "Coloque e energize alguns fabricadores mecânicos.",
"advancement.create.clockwork_bearing": "Hora da engenhoca",
"advancement.create.clockwork_bearing.desc": "Ative uma estrutura conectada a um rolamento de rêlogio.",
"advancement.create.nixie_tube": "Placas estilosas",
"advancement.create.nixie_tube.desc": "Obtenha e coloque um par de tubos nixie.",
"advancement.create.deployer": "Cutuque, coloque e ataque",
"advancement.create.deployer.desc": "coloque e energize um implantador, o reflexo perfeito de voce mesmo.",
"advancement.create.speed_controller": "Engenheiros odiam ele!",
"advancement.create.speed_controller.desc": "Coloque um Controlador de velocidade rotacional, o dispositivo ultimato para mudança de marcha.",
"advancement.create.flywheel": "Coração da fabrica",
"advancement.create.flywheel.desc": "Sucessivamente conecte um motor de fornalha a um volante de inércia.",
"advancement.create.overstress_flywheel": "Altos niveis de stress",
"advancement.create.overstress_flywheel.desc": "Emperre um motor de fornalha.",
"advancement.create.precision_mechanism": "Curiosidades complexas",
"advancement.create.precision_mechanism.desc": "Monte um mecanismo de precisão.",
"advancement.create.mechanical_arm": "Mâos ocupadas!",
"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": "toque minha musica!",
"advancement.create.musical_arm.desc": "Assista um braço mecânico operar seu toca-discos.",
"advancement.create.arm_many_targets": "Organiza-tron",
"advancement.create.arm_many_targets.desc": "Programe um braço mecânico com dez ou mais locais de saida.",
"advancement.create.arm_blaze_burner": "Combuste-tron",
"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.desc": "UNLOCALIZED: Make two Deployers fist-bump.",
"advancement.create.crushing_wheel": "UNLOCALIZED: A Pair of Giants",
"advancement.create.crushing_wheel.desc": "UNLOCALIZED: Create some Crushing Wheels to break down more materials more effectively.",
"advancement.create.crushing_wheel": "Par de gigantes",
"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.desc": "UNLOCALIZED: Bake your blaze burner a special cake.",
"advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors",
"advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.",
"advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!",
"advancement.create.extendo_grip.desc": "UNLOCALIZED: Get hold of an Extendo Grip.",
"advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!",
"advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.",
"advancement.create.dual_extendo_grip": "UNLOCALIZED: Ultimate Boing-age",
"advancement.create.dual_extendo_grip.desc": "UNLOCALIZED: Dual wield Extendo Grips for super-human reach.",
"advancement.create.eob": "UNLOCALIZED: End of Beta",
"advancement.create.eob.desc": "UNLOCALIZED: Expect more content here in the future. <3",
"advancement.create.blaze_cake.desc": "Asse para o seu queimador de blaze um bolo especial.",
"advancement.create.wand_of_symmetry": "Espelhos radiantes",
"advancement.create.wand_of_symmetry.desc": "Fabrique uma varinha de simetria.",
"advancement.create.extendo_grip": "Boioioing!",
"advancement.create.extendo_grip.desc": "Apossar-se de uma extensão de pegador.",
"advancement.create.potato_cannon": "Fwoomp!",
"advancement.create.potato_cannon.desc": "Derrote um inimigo com o seu canhão de batata.",
"advancement.create.dual_extendo_grip": "A era ultimata do boing",
"advancement.create.dual_extendo_grip.desc": "Empunhe duas extensões de pegador para ter alcance super humano.",
"advancement.create.eob": "Fim do beta",
"advancement.create.eob.desc": "Espere mais conteudo aqui no futuro. <3",
"_": "->------------------------] UI & Messages [------------------------<-",

View file

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

View file

@ -40,7 +40,7 @@ public class AllEntityTypes {
public static final EntityEntry<SuperGlueEntity> SUPER_GLUE =
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();
public static final EntityEntry<BlueprintEntity> CRAFTING_BLUEPRINT =

View file

@ -10,7 +10,6 @@ import java.util.IdentityHashMap;
import java.util.Map;
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.render.SpriteShiftEntry;
import com.simibubi.create.foundation.block.render.SpriteShifter;
@ -21,7 +20,7 @@ import net.minecraft.world.level.block.state.properties.WoodType;
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<>(),
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");
public static final CTSpriteShiftEntry CRAFTER_FRONT = getCT(CTType.OMNIDIRECTIONAL, "crafter_top", "brass_casing"),
CRAFTER_SIDE = getCT(CTType.VERTICAL, "crafter_side"),
CRAFTER_OTHERSIDE = getCT(CTType.HORIZONTAL, "crafter_side"),
ANDESITE_ENCASED_COGWHEEL_SIDE = getCT(CTType.VERTICAL, "andesite_encased_cogwheel_side"),
ANDESITE_ENCASED_COGWHEEL_OTHERSIDE = getCT(CTType.HORIZONTAL, "andesite_encased_cogwheel_side"),
BRASS_ENCASED_COGWHEEL_SIDE = getCT(CTType.VERTICAL, "brass_encased_cogwheel_side"),
BRASS_ENCASED_COGWHEEL_OTHERSIDE = getCT(CTType.HORIZONTAL, "brass_encased_cogwheel_side");
CRAFTER_SIDE = vertical("crafter_side"),
CRAFTER_OTHERSIDE = horizontal("crafter_side"),
ANDESITE_ENCASED_COGWHEEL_SIDE = vertical("andesite_encased_cogwheel_side"),
ANDESITE_ENCASED_COGWHEEL_OTHERSIDE = horizontal("andesite_encased_cogwheel_side"),
BRASS_ENCASED_COGWHEEL_SIDE = vertical("brass_encased_cogwheel_side"),
BRASS_ENCASED_COGWHEEL_OTHERSIDE = horizontal("brass_encased_cogwheel_side");
public static final CTSpriteShiftEntry ANDESITE_CASING = omni("andesite_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"),
CREATIVE_CASING = getCT(CTType.CROSS, "creative_casing");
public static final CTSpriteShiftEntry CHASSIS_SIDE = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_side"),
SECONDARY_CHASSIS_SIDE = getCT(CTType.OMNIDIRECTIONAL, "secondary_linear_chassis_side"),
CHASSIS = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_end"),
CHASSIS_STICKY = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_end_sticky");
public static final CTSpriteShiftEntry CHASSIS_SIDE = omni("linear_chassis_side"),
SECONDARY_CHASSIS_SIDE = omni("secondary_linear_chassis_side"),
CHASSIS = omni("linear_chassis_end"),
CHASSIS_STICKY = omni("linear_chassis_end_sticky");
public static final CTSpriteShiftEntry BRASS_TUNNEL_TOP = vertical("brass_tunnel_top"),
FLUID_TANK = getCT(CTType.CROSS, "fluid_tank"),
@ -67,14 +66,6 @@ public class AllSpriteShifts {
populateMaps();
}
//
public static CTSpriteShiftEntry getWoodenWindow(WoodType woodType) {
return WOODEN_WINDOWS.get(woodType);
}
//
private static void populateMaps() {
WoodType[] supportedWoodTypes = new WoodType[] { WoodType.OAK, WoodType.SPRUCE, WoodType.BIRCH, WoodType.ACACIA,
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;
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);
}
static CTSpriteShiftEntry vertical(String name) {
return getCT(VERTICAL, name);
}
static CTSpriteShiftEntry horizontal(String name) {
private static CTSpriteShiftEntry horizontal(String 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.HarvesterRenderer;
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.PortableItemInterfaceTileEntity;
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceRenderer;
@ -191,56 +192,56 @@ public class AllTileEntities {
// Kinetics
public static final BlockEntityEntry<BracketedKineticTileEntity> BRACKETED_KINETIC = Create.registrate()
.tileEntity("simple_kinetic", BracketedKineticTileEntity::new)
.instance(() -> BracketedKineticTileInstance::new)
.instance(() -> BracketedKineticTileInstance::new, false)
.validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL)
.renderer(() -> BracketedKineticTileRenderer::new)
.register();
public static final BlockEntityEntry<CreativeMotorTileEntity> MOTOR = Create.registrate()
.tileEntity("motor", CreativeMotorTileEntity::new)
.instance(() -> HalfShaftInstance::new)
.instance(() -> HalfShaftInstance::new, false)
.validBlocks(AllBlocks.CREATIVE_MOTOR)
.renderer(() -> CreativeMotorRenderer::new)
.register();
public static final BlockEntityEntry<GearboxTileEntity> GEARBOX = Create.registrate()
.tileEntity("gearbox", GearboxTileEntity::new)
.instance(() -> GearboxInstance::new)
.instance(() -> GearboxInstance::new, false)
.validBlocks(AllBlocks.GEARBOX)
.renderer(() -> GearboxRenderer::new)
.register();
public static final BlockEntityEntry<KineticTileEntity> ENCASED_SHAFT = Create.registrate()
.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)
.renderer(() -> ShaftRenderer::new)
.register();
public static final BlockEntityEntry<SimpleKineticTileEntity> ENCASED_COGWHEEL = Create.registrate()
.tileEntity("encased_cogwheel", SimpleKineticTileEntity::new)
.instance(() -> EncasedCogInstance::small)
.instance(() -> EncasedCogInstance::small, false)
.validBlocks(AllBlocks.ANDESITE_ENCASED_COGWHEEL, AllBlocks.BRASS_ENCASED_COGWHEEL)
.renderer(() -> EncasedCogRenderer::small)
.register();
public static final BlockEntityEntry<SimpleKineticTileEntity> ENCASED_LARGE_COGWHEEL = Create.registrate()
.tileEntity("encased_large_cogwheel", SimpleKineticTileEntity::new)
.instance(() -> EncasedCogInstance::large)
.instance(() -> EncasedCogInstance::large, false)
.validBlocks(AllBlocks.ANDESITE_ENCASED_LARGE_COGWHEEL, AllBlocks.BRASS_ENCASED_LARGE_COGWHEEL)
.renderer(() -> EncasedCogRenderer::large)
.register();
public static final BlockEntityEntry<AdjustablePulleyTileEntity> ADJUSTABLE_PULLEY = Create.registrate()
.tileEntity("adjustable_pulley", AdjustablePulleyTileEntity::new)
.instance(() -> ShaftInstance::new)
.instance(() -> ShaftInstance::new, false)
.validBlocks(AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT)
.renderer(() -> ShaftRenderer::new)
.register();
public static final BlockEntityEntry<EncasedFanTileEntity> ENCASED_FAN = Create.registrate()
.tileEntity("encased_fan", EncasedFanTileEntity::new)
.instance(() -> FanInstance::new)
.instance(() -> FanInstance::new, false)
.validBlocks(AllBlocks.ENCASED_FAN)
.renderer(() -> EncasedFanRenderer::new)
.register();
@ -253,21 +254,21 @@ public class AllTileEntities {
public static final BlockEntityEntry<ClutchTileEntity> CLUTCH = Create.registrate()
.tileEntity("clutch", ClutchTileEntity::new)
.instance(() -> SplitShaftInstance::new)
.instance(() -> SplitShaftInstance::new, false)
.validBlocks(AllBlocks.CLUTCH)
.renderer(() -> SplitShaftRenderer::new)
.register();
public static final BlockEntityEntry<GearshiftTileEntity> GEARSHIFT = Create.registrate()
.tileEntity("gearshift", GearshiftTileEntity::new)
.instance(() -> SplitShaftInstance::new)
.instance(() -> SplitShaftInstance::new, false)
.validBlocks(AllBlocks.GEARSHIFT)
.renderer(() -> SplitShaftRenderer::new)
.register();
public static final BlockEntityEntry<TurntableTileEntity> TURNTABLE = Create.registrate()
.tileEntity("turntable", TurntableTileEntity::new)
.instance(() -> SingleRotatingInstance::new)
.instance(() -> SingleRotatingInstance::new, false)
.validBlocks(AllBlocks.TURNTABLE)
.renderer(() -> KineticTileEntityRenderer::new)
.register();
@ -289,7 +290,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<GantryShaftTileEntity> GANTRY_SHAFT = Create.registrate()
.tileEntity("gantry_shaft", GantryShaftTileEntity::new)
.instance(() -> SingleRotatingInstance::new)
.instance(() -> SingleRotatingInstance::new, false)
.validBlocks(AllBlocks.GANTRY_SHAFT)
.renderer(() -> KineticTileEntityRenderer::new)
.register();
@ -370,7 +371,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<BeltTileEntity> BELT = Create.registrate()
.tileEntity("belt", BeltTileEntity::new)
.instance(() -> BeltInstance::new)
.instance(() -> BeltInstance::new, BeltTileEntity::shouldRenderNormally)
.validBlocks(AllBlocks.BELT)
.renderer(() -> BeltRenderer::new)
.register();
@ -415,7 +416,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<MechanicalPistonTileEntity> MECHANICAL_PISTON = Create.registrate()
.tileEntity("mechanical_piston", MechanicalPistonTileEntity::new)
.instance(() -> ShaftInstance::new)
.instance(() -> ShaftInstance::new, false)
.validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON)
.renderer(() -> MechanicalPistonRenderer::new)
.register();
@ -443,7 +444,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<PulleyTileEntity> ROPE_PULLEY = Create.registrate()
.tileEntity("rope_pulley", PulleyTileEntity::new)
.instance(() -> RopePulleyInstance::new)
.instance(() -> RopePulleyInstance::new, false)
.validBlocks(AllBlocks.ROPE_PULLEY)
.renderer(() -> PulleyRenderer::new)
.register();
@ -456,14 +457,14 @@ public class AllTileEntities {
public static final BlockEntityEntry<StickerTileEntity> STICKER = Create.registrate()
.tileEntity("sticker", StickerTileEntity::new)
.instance(() -> StickerInstance::new)
.instance(() -> StickerInstance::new, false)
.validBlocks(AllBlocks.STICKER)
.renderer(() -> StickerRenderer::new)
.register();
public static final BlockEntityEntry<DrillTileEntity> DRILL = Create.registrate()
.tileEntity("drill", DrillTileEntity::new)
.instance(() -> DrillInstance::new)
.instance(() -> DrillInstance::new, false)
.validBlocks(AllBlocks.MECHANICAL_DRILL)
.renderer(() -> DrillRenderer::new)
.register();
@ -484,40 +485,42 @@ public class AllTileEntities {
public static final BlockEntityEntry<PortableItemInterfaceTileEntity> PORTABLE_STORAGE_INTERFACE =
Create.registrate()
.tileEntity("portable_storage_interface", PortableItemInterfaceTileEntity::new)
.instance(() -> PSIInstance::new)
.validBlocks(AllBlocks.PORTABLE_STORAGE_INTERFACE)
.renderer(() -> PortableStorageInterfaceRenderer::new)
.register();
public static final BlockEntityEntry<PortableFluidInterfaceTileEntity> PORTABLE_FLUID_INTERFACE = Create.registrate()
.tileEntity("portable_fluid_interface", PortableFluidInterfaceTileEntity::new)
.instance(() -> PSIInstance::new)
.validBlocks(AllBlocks.PORTABLE_FLUID_INTERFACE)
.renderer(() -> PortableStorageInterfaceRenderer::new)
.register();
public static final BlockEntityEntry<FlywheelTileEntity> FLYWHEEL = Create.registrate()
.tileEntity("flywheel", FlywheelTileEntity::new)
.instance(() -> FlyWheelInstance::new)
.instance(() -> FlyWheelInstance::new, false)
.validBlocks(AllBlocks.FLYWHEEL)
.renderer(() -> FlywheelRenderer::new)
.register();
public static final BlockEntityEntry<FurnaceEngineTileEntity> FURNACE_ENGINE = Create.registrate()
.tileEntity("furnace_engine", FurnaceEngineTileEntity::new)
.instance(() -> EngineInstance::new)
.instance(() -> EngineInstance::new, false)
.validBlocks(AllBlocks.FURNACE_ENGINE)
.renderer(() -> EngineRenderer::new)
.register();
public static final BlockEntityEntry<MillstoneTileEntity> MILLSTONE = Create.registrate()
.tileEntity("millstone", MillstoneTileEntity::new)
.instance(() -> MillStoneCogInstance::new)
.instance(() -> MillStoneCogInstance::new, false)
.validBlocks(AllBlocks.MILLSTONE)
.renderer(() -> MillstoneRenderer::new)
.register();
public static final BlockEntityEntry<CrushingWheelTileEntity> CRUSHING_WHEEL = Create.registrate()
.tileEntity("crushing_wheel", CrushingWheelTileEntity::new)
.instance(() -> CutoutRotatingInstance::new)
.instance(() -> CutoutRotatingInstance::new, false)
.validBlocks(AllBlocks.CRUSHING_WHEEL)
.renderer(() -> KineticTileEntityRenderer::new)
.register();
@ -531,7 +534,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<WaterWheelTileEntity> WATER_WHEEL = Create.registrate()
.tileEntity("water_wheel", WaterWheelTileEntity::new)
.instance(() -> CutoutRotatingInstance::new)
.instance(() -> CutoutRotatingInstance::new, false)
.validBlocks(AllBlocks.WATER_WHEEL)
.renderer(() -> KineticTileEntityRenderer::new)
.register();
@ -578,7 +581,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<SequencedGearshiftTileEntity> SEQUENCED_GEARSHIFT = Create.registrate()
.tileEntity("sequenced_gearshift", SequencedGearshiftTileEntity::new)
.instance(() -> SplitShaftInstance::new)
.instance(() -> SplitShaftInstance::new, false)
.validBlocks(AllBlocks.SEQUENCED_GEARSHIFT)
.renderer(() -> SplitShaftRenderer::new)
.register();
@ -606,7 +609,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<AnalogLeverTileEntity> ANALOG_LEVER = Create.registrate()
.tileEntity("analog_lever", AnalogLeverTileEntity::new)
.instance(() -> AnalogLeverInstance::new)
.instance(() -> AnalogLeverInstance::new, false)
.validBlocks(AllBlocks.ANALOG_LEVER)
.renderer(() -> AnalogLeverRenderer::new)
.register();
@ -672,7 +675,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<PulseExtenderTileEntity> PULSE_EXTENDER = Create.registrate()
.tileEntity("pulse_extender", PulseExtenderTileEntity::new)
.instance(() -> BrassDiodeInstance::new)
.instance(() -> BrassDiodeInstance::new, false)
.validBlocks(AllBlocks.PULSE_EXTENDER)
.renderer(() -> BrassDiodeRenderer::new)
.register();
@ -680,7 +683,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<PulseRepeaterTileEntity> PULSE_REPEATER =
Create.registrate()
.tileEntity("pulse_repeater", PulseRepeaterTileEntity::new)
.instance(() -> BrassDiodeInstance::new)
.instance(() -> BrassDiodeInstance::new, false)
.validBlocks(AllBlocks.PULSE_REPEATER)
.renderer(() -> BrassDiodeRenderer::new)
.register();
@ -714,7 +717,7 @@ public class AllTileEntities {
public static final BlockEntityEntry<ToolboxTileEntity> TOOLBOX = Create.registrate()
.tileEntity("toolbox", ToolboxTileEntity::new)
.instance(() -> ToolBoxInstance::new)
.instance(() -> ToolBoxInstance::new, false)
.validBlocks(AllBlocks.TOOLBOXES.toArray())
.renderer(() -> ToolboxRenderer::new)
.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.StandardRecipeGen;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.utility.ShippedResourcePacks;
import com.simibubi.create.foundation.worldgen.AllWorldFeatures;
import com.tterrag.registrate.util.NonNullLazyValue;
@ -58,7 +57,7 @@ public class Create {
public static final String ID = "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();
@ -125,8 +124,6 @@ public class Create {
SchematicInstances.register();
BuiltinPotatoProjectileTypes.register();
ShippedResourcePacks.extractFiles("Copper Legacy Pack");
event.enqueueWork(() -> {
AllTriggers.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.SuperByteBufferCache;
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.outliner.Outliner;
@ -81,6 +82,8 @@ public class CreateClient {
BUFFER_CACHE.registerCompartment(SBBContraptionManager.CONTRAPTION, 20);
BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20);
ShippedResourcePacks.extractFiles("Copper Legacy Pack");
AllKeys.register();
// AllFluids.assignRenderLayers();
AllBlockPartials.init();

View file

@ -38,4 +38,14 @@ public enum Mods {
return Optional.of(toRun.get().get());
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) {
return Minecraft.getInstance().level.getRecipeManager()
.getRecipes()
.stream()
.filter(predicate)
.collect(Collectors.toList());
return Minecraft.getInstance()
.getConnection()
.getRecipeManager()
.getRecipes()
.stream()
.filter(predicate)
.collect(Collectors.toList());
}
public static List<Recipe<?>> findRecipesByType(RecipeType<?> type) {

View file

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

View file

@ -42,7 +42,7 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
@Override
protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) {
if (Backend.getInstance().canUseInstancing(te.getLevel())) return;
if (Backend.canUseInstancing(te.getLevel())) return;
BlockState state = getRenderedBlockState(te);
RenderType type = getRenderType(te, state);
@ -117,7 +117,7 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
float offset = ICogWheel.isLargeCog(te.getBlockState()) ? 11.25f : 0;
double d = (((axis == Axis.X) ? 0 : pos.getX()) + ((axis == Axis.Y) ? 0 : pos.getY())
+ ((axis == Axis.Z) ? 0 : pos.getZ())) % 2;
if (d == 0)
if (d == 0)
offset = 22.5f;
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.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.content.contraptions.base.flwdata.RotatingData;
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.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;
@ -38,7 +38,7 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends T
instance.setRotationAxis(axis)
.setRotationOffset(getRotationOffset(axis))
.setRotationalSpeed(speed)
.setColor(tile);
.setColor(blockEntity);
}
protected final RotatingData setup(RotatingData key) {
@ -57,7 +57,7 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends T
key.setRotationAxis(axis)
.setRotationalSpeed(speed)
.setRotationOffset(getRotationOffset(axis))
.setColor(tile)
.setColor(blockEntity)
.setPosition(getInstancePosition());
return key;
@ -78,7 +78,7 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends T
}
protected float getTileSpeed() {
return tile.getSpeed();
return blockEntity.getSpeed();
}
protected BlockState shaft() {

View file

@ -1,14 +1,17 @@
package com.simibubi.create.content.contraptions.base.flwdata;
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.StructWriter;
import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat;
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.AllProgramSpecs;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.resources.ResourceLocation;
@ -19,13 +22,13 @@ public class BeltType implements Instanced<BeltData>, Batched<BeltData> {
}
@Override
public VertexFormat format() {
public BufferLayout getLayout() {
return AllInstanceFormats.BELT;
}
@Override
public StructWriter<BeltData> getWriter(VecBuffer backing) {
return new UnsafeBeltWriter(backing, this);
return new BeltWriterUnsafe(backing, this);
}
@Override
@ -34,7 +37,26 @@ public class BeltType implements Instanced<BeltData>, Batched<BeltData> {
}
@Override
public BatchingTransformer<BeltData> getTransformer(Model model) {
return null;
public void transform(BeltData d, ModelTransformer.Params b) {
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.backend.gl.buffer.VecBuffer;
import com.jozufozu.flywheel.backend.struct.UnsafeBufferWriter;
public class UnsafeBeltWriter extends UnsafeBufferWriter<BeltData> {
public UnsafeBeltWriter(VecBuffer backingBuffer, StructType<BeltData> vertexType) {
public class BeltWriterUnsafe extends KineticWriterUnsafe<BeltData> {
public BeltWriterUnsafe(VecBuffer backingBuffer, StructType<BeltData> vertexType) {
super(backingBuffer, vertexType);
}
@Override
public void write(BeltData d) {
protected void writeInternal(BeltData d) {
super.writeInternal(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.memPutFloat(addr + 26, d.qX);
MemoryUtil.memPutFloat(addr + 30, d.qY);
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 + 62, d.maxV);
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;
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.StructWriter;
import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat;
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.AllProgramSpecs;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.resources.ResourceLocation;
@ -19,13 +22,13 @@ public class RotatingType implements Instanced<RotatingData>, Batched<RotatingDa
}
@Override
public VertexFormat format() {
public BufferLayout getLayout() {
return AllInstanceFormats.ROTATING;
}
@Override
public StructWriter<RotatingData> getWriter(VecBuffer backing) {
return new UnsafeRotatingWriter(backing, this);
return new RotatingWriterUnsafe(backing, this);
}
@Override
@ -34,7 +37,17 @@ public class RotatingType implements Instanced<RotatingData>, Batched<RotatingDa
}
@Override
public BatchingTransformer<RotatingData> getTransformer(Model model) {
return null;
public void transform(RotatingData d, ModelTransformer.Params b) {
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.MaterialManager;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.math.Quaternion;
import com.simibubi.create.AllBlockPartials;
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.utility.AngleHelper;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState;
@ -20,7 +20,7 @@ public class DrillActorInstance extends ActorInstance {
ActorData drillHead;
private final Direction facing;
public DrillActorInstance(MaterialManager materialManager, PlacementSimulationWorld contraption, MovementContext context) {
public DrillActorInstance(MaterialManager materialManager, VirtualRenderWorld contraption, MovementContext context) {
super(materialManager, contraption, context);
Material<ActorData> material = materialManager.defaultSolid()

View file

@ -19,7 +19,7 @@ public class DrillInstance extends SingleRotatingInstance {
@Override
protected Instancer<RotatingData> getModel() {
BlockState referenceState = tile.getBlockState();
BlockState referenceState = blockEntity.getBlockState();
Direction facing = referenceState.getValue(BlockStateProperties.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.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.render.ActorInstance;
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos;
@ -35,9 +35,9 @@ public class DrillMovementBehaviour extends BlockBreakingMovementBehaviour {
@Override
@OnlyIn(value = Dist.CLIENT)
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld,
public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) {
if (!Backend.getInstance().canUseInstancing())
if (!Backend.isOn())
DrillRenderer.renderInContraption(context, renderWorld, matrices, buffer);
}
@ -48,7 +48,7 @@ public class DrillMovementBehaviour extends BlockBreakingMovementBehaviour {
@Nullable
@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);
}

View file

@ -1,5 +1,6 @@
package com.simibubi.create.content.contraptions.components.actors;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
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.AnimationTickHolder;
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.RenderType;
@ -30,7 +30,7 @@ public class DrillRenderer extends KineticTileEntityRenderer {
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) {
BlockState state = context.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.core.Materials;
import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.AllBlockPartials;
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.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState;
@ -31,7 +31,7 @@ public class HarvesterActorInstance extends ActorInstance {
private double rotation;
private double previousRotation;
public HarvesterActorInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) {
public HarvesterActorInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
super(materialManager, simulationWorld, context);
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.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.MovementContext;
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.utility.BlockHelper;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos;
@ -50,16 +50,15 @@ public class HarvesterMovementBehaviour extends MovementBehaviour {
@Nullable
@Override
public ActorInstance createInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld,
public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld,
MovementContext context) {
return new HarvesterActorInstance(materialManager, simulationWorld, context);
}
@Override
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld,
public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffers) {
if (!Backend.getInstance()
.canUseInstancing())
if (!Backend.isOn())
HarvesterRenderer.renderInContraption(context, renderWorld, matrices, buffers);
}
@ -108,7 +107,7 @@ public class HarvesterMovementBehaviour extends MovementBehaviour {
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 replant = AllConfigs.SERVER.kinetics.harvesterReplants.get();
@ -142,7 +141,7 @@ public class HarvesterMovementBehaviour extends MovementBehaviour {
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)
return false;
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 com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.AllBlockPartials;
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.AnimationTickHolder;
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.RenderType;
@ -40,7 +40,7 @@ public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntit
.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) {
BlockState blockState = context.state;
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 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.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.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos;
@ -30,11 +35,23 @@ public class PortableStorageInterfaceMovement extends MovementBehaviour {
.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
@OnlyIn(Dist.CLIENT)
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld,
public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) {
PortableStorageInterfaceRenderer.renderInContraption(context, renderWorld, matrices, buffer);
if (!Backend.isOn())
PortableStorageInterfaceRenderer.renderInContraption(context, renderWorld, matrices, buffer);
}
@Override

View file

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

View file

@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.components.actors;
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.SawRenderer;
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.TreeCutter;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos;
@ -86,7 +86,7 @@ public class SawMovementBehaviour extends BlockBreakingMovementBehaviour {
@Override
@OnlyIn(value = Dist.CLIENT)
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld,
public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) {
SawRenderer.renderInContraption(context, renderWorld, matrices, buffer);
}

View file

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

View file

@ -12,7 +12,7 @@ public class UnsafeActorWriter extends UnsafeBufferWriter<ActorData> {
}
@Override
public void write(ActorData d) {
protected void writeInternal(ActorData d) {
long addr = writePointer;
MemoryUtil.memPutFloat(addr, d.x);
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 + 39, d.rotationCenterZ);
MemoryUtil.memPutFloat(addr + 40, d.speed);
advance();
}
}

View file

@ -187,9 +187,4 @@ public class CuckooClockTileEntity extends KineticTileEntity {
Vec3 vec = VecHelper.getCenterOf(worldPosition);
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();
VertexConsumer vb = buffer.getBuffer(RenderType.solid());
if (!Backend.getInstance()
.canUseInstancing(te.getLevel())) {
if (!Backend.canUseInstancing(te.getLevel())) {
SuperByteBuffer superBuffer = CachedBufferer.partial(AllBlockPartials.SHAFTLESS_COGWHEEL, blockState);
standardKineticRotationTransform(superBuffer, te, light);
superBuffer.rotateCentered(Direction.UP, (float) (blockState.getValue(HORIZONTAL_FACING)

View file

@ -523,11 +523,6 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
return inventory;
}
@Override
public boolean shouldRenderNormally() {
return true;
}
public void setScriptedResult(ItemStack 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.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.materials.model.ModelData;
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.state.properties.BlockStateProperties;
public class HandCrankInstance extends SingleRotatingInstance implements IDynamicInstance {
public class HandCrankInstance extends SingleRotatingInstance implements DynamicInstance {
private final HandCrankTileEntity tile;
private ModelData crank;

View file

@ -28,7 +28,7 @@ public class HandCrankRenderer extends KineticTileEntityRenderer {
int light, int 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();
Block block = state.getBlock();

View file

@ -79,11 +79,6 @@ public class HandCrankTileEntity extends GeneratingKineticTileEntity {
return AllBlocks.HAND_CRANK.get();
}
@Override
public boolean shouldRenderNormally() {
return true;
}
@Override
@OnlyIn(Dist.CLIENT)
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.PartialModel;
import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.jozufozu.flywheel.util.transform.MatrixTransformStack;
import com.simibubi.create.AllBlockPartials;
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.NBTHelper;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@ -42,7 +42,7 @@ public class DeployerActorInstance extends ActorInstance {
ModelData hand;
RotatingData shaft;
public DeployerActorInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) {
public DeployerActorInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
super(materialManager, simulationWorld, context);
Material<ModelData> mat = materialManager.defaultSolid()

View file

@ -78,7 +78,7 @@ public class DeployerHandler {
boolean rayMode = false;
private ItemUseWorld(Level world, Direction face, BlockPos pos) {
super(world, world.getChunkSource());
super(world);
this.face = face;
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 com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.IDynamicInstance;
import com.jozufozu.flywheel.api.instance.ITickableInstance;
import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.api.instance.TickableInstance;
import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.materials.oriented.OrientedData;
import com.mojang.math.Quaternion;
@ -20,7 +20,7 @@ import net.minecraft.core.Direction;
import net.minecraft.core.Vec3i;
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 Direction facing;
@ -34,12 +34,11 @@ public class DeployerInstance extends ShaftInstance implements IDynamicInstance,
PartialModel currentHand;
float progress;
private boolean newHand = false;
public DeployerInstance(MaterialManager dispatcher, KineticTileEntity tile) {
super(dispatcher, tile);
this.tile = (DeployerTileEntity) super.tile;
this.tile = (DeployerTileEntity) super.blockEntity;
facing = blockState.getValue(FACING);
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();
updateHandPose();
relight(pos, pole);
currentHand = this.tile.getHandPose();
progress = getProgress(AnimationTickHolder.getPartialTicks());
hand = getOrientedMaterial().getModel(currentHand, blockState).createInstance();
progress = getProgress(AnimationTickHolder.getPartialTicks());
updateRotation(pole, hand, yRot, xRot, zRot);
updatePosition();
}
@Override
public void tick() {
newHand = updateHandPose();
}
PartialModel handPose = tile.getHandPose();
if (currentHand != handPose) {
currentHand = handPose;
getOrientedMaterial().getModel(currentHand, blockState)
.stealInstance(hand);
}
}
@Override
public void beginFrame() {
float newProgress = getProgress(AnimationTickHolder.getPartialTicks());
if (!newHand && Mth.equal(newProgress, progress)) return;
if (Mth.equal(newProgress, progress)) return;
progress = newProgress;
newHand = false;
updatePosition();
}
@ -89,24 +94,7 @@ public class DeployerInstance extends ShaftInstance implements IDynamicInstance,
pole.delete();
}
private boolean updateHandPose() {
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) {
private float getProgress(float partialTicks) {
if (tile.state == DeployerTileEntity.State.EXPANDING)
return 1 - (tile.timer - partialTicks * tile.getTimerSpeed()) / 1000f;
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.backend.Backend;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
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.NBTHelper;
import com.simibubi.create.foundation.utility.NBTProcessors;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos;
@ -255,9 +255,9 @@ public class DeployerMovementBehaviour extends MovementBehaviour {
}
@Override
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld,
public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffers) {
if (!Backend.getInstance().canUseInstancing())
if (!Backend.isOn())
DeployerRenderer.renderInContraption(context, renderWorld, matrices, buffers);
}
@ -268,7 +268,7 @@ public class DeployerMovementBehaviour extends MovementBehaviour {
@Nullable
@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);
}
}

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

View file

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

View file

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

View file

@ -36,7 +36,7 @@ public class FanInstance extends KineticTileInstance<EncasedFanTileEntity> {
}
private float getFanSpeed() {
float speed = tile.getSpeed() * 5;
float speed = blockEntity.getSpeed() * 5;
if (speed > 0)
speed = Mth.clamp(speed, 80, 64 * 20);
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.Material;
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.util.transform.TransformStack;
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.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 connection;
@ -90,8 +90,8 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
float partialTicks = AnimationTickHolder.getPartialTicks();
float speed = tile.visualSpeed.get(partialTicks) * 3 / 10f;
float angle = tile.angle + speed * partialTicks;
float speed = blockEntity.visualSpeed.get(partialTicks) * 3 / 10f;
float angle = blockEntity.angle + speed * partialTicks;
if (Math.abs(angle - lastAngle) < 0.001)
return;

View file

@ -36,7 +36,7 @@ public class FlywheelRenderer extends KineticTileEntityRenderer {
int light, int 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();
FlywheelTileEntity wte = (FlywheelTileEntity) te;

View file

@ -1,7 +1,7 @@
package com.simibubi.create.content.contraptions.components.flywheel.engine;
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.materials.model.ModelData;
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.state.properties.BlockStateProperties;
public class EngineInstance extends TileEntityInstance<EngineTileEntity> {
public class EngineInstance extends BlockEntityInstance<EngineTileEntity> {
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,
int overlay) {
if (Backend.getInstance().canUseInstancing(te.getLevel())) return;
if (Backend.canUseInstancing(te.getLevel())) return;
Block block = te.getBlockState()
.getBlock();

View file

@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.components.flywheel.engine;
import java.util.List;
import com.jozufozu.flywheel.api.FlywheelRendered;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelBlock;
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.OnlyIn;
public class EngineTileEntity extends SmartTileEntity implements FlywheelRendered {
public class EngineTileEntity extends SmartTileEntity {
public float appliedCapacity;
public float appliedSpeed;

View file

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

View file

@ -2,7 +2,9 @@ package com.simibubi.create.content.contraptions.components.flywheel.engine;
import java.util.HashMap;
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.Blocks;
import net.minecraft.world.level.block.state.BlockState;
@ -10,23 +12,73 @@ import net.minecraftforge.registries.IRegistryDelegate;
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) {
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);
}
private Function<BlockState, EngineState> getEngineStateOrDefault(BlockState state, Function<BlockState, EngineState> engineState) {
return blockActivators.getOrDefault(state.getBlock().delegate, engineState);
}
public float getModifier(BlockState state) {
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() {
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;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineModifiers.EngineState;
import com.simibubi.create.foundation.block.BlockStressValues;
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.state.BlockState;
@ -22,11 +22,12 @@ public class FurnaceEngineTileEntity extends EngineTileEntity {
public void updateFurnace() {
BlockState state = level.getBlockState(EngineBlock.getBaseBlockPos(getBlockState(), worldPosition));
if (!(state.getBlock() instanceof AbstractFurnaceBlock))
EngineState engineState = FurnaceEngineModifiers.get().getEngineState(state);
if (engineState.isEmpty())
return;
float modifier = FurnaceEngineModifiers.INSTANCE.getModifier(state);
boolean active = state.hasProperty(AbstractFurnaceBlock.LIT) && state.getValue(AbstractFurnaceBlock.LIT);
float modifier = FurnaceEngineModifiers.get().getModifier(state);
boolean active = engineState.isActive();
float speed = active ? 16 * modifier : 0;
float capacity =
(float) (active ? BlockStressValues.getCapacity(AllBlocks.FURNACE_ENGINE.get())

View file

@ -15,6 +15,6 @@ public class MillStoneCogInstance extends SingleRotatingInstance {
@Override
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,
int light, int overlay) {
if (Backend.getInstance().canUseInstancing(te.getLevel())) return;
if (Backend.canUseInstancing(te.getLevel())) return;
BlockState blockState = te.getBlockState();
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.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.simibubi.create.AllBlockPartials;
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;
public class MixerInstance extends EncasedCogInstance implements IDynamicInstance {
public class MixerInstance extends EncasedCogInstance implements DynamicInstance {
private final RotatingData mixerHead;
private final OrientedData mixerPole;
@ -42,7 +42,7 @@ public class MixerInstance extends EncasedCogInstance implements IDynamicInstanc
protected Instancer<RotatingData> getCogModel() {
return materialManager.defaultSolid()
.material(AllMaterialSpecs.ROTATING)
.getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, tile.getBlockState());
.getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, blockEntity.getBlockState());
}
@Override

View file

@ -31,7 +31,7 @@ public class MechanicalPressRenderer extends KineticTileEntityRenderer {
int light, int 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();
float renderedHeadOffset = ((MechanicalPressTileEntity) te).getRenderedHeadOffset(partialTicks);

View file

@ -1,7 +1,7 @@
package com.simibubi.create.content.contraptions.components.press;
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.oriented.OrientedData;
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.AnimationTickHolder;
public class PressInstance extends ShaftInstance implements IDynamicInstance {
public class PressInstance extends ShaftInstance implements DynamicInstance {
private final OrientedData pressHead;
private final MechanicalPressTileEntity press;

View file

@ -23,7 +23,7 @@ public class SawInstance extends SingleRotatingInstance {
if (blockState.getValue(BlockStateProperties.FACING)
.getAxis()
.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);
return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, referenceState, facing);
} 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.core.PartialModel;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f;
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.utility.AngleHelper;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
@ -46,8 +46,7 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
renderItems(te, partialTicks, ms, buffer, light, overlay);
FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay);
if (Backend.getInstance()
.canUseInstancing(te.getLevel()))
if (Backend.canUseInstancing(te.getLevel()))
return;
renderShaft(te, ms, buffer, light, overlay);
@ -158,7 +157,7 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
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) {
BlockState state = context.state;
Direction facing = state.getValue(SawBlock.FACING);

View file

@ -499,9 +499,4 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
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.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
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.content.contraptions.components.actors.AttachedActorBlock;
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.crank.HandCrankBlock;
import com.simibubi.create.content.contraptions.components.fan.NozzleBlock;
@ -347,6 +348,11 @@ public class BlockMovementChecks {
return state.getValue(BlockStateProperties.FACING) == facing;
if (AllBlocks.MECHANICAL_BEARING.has(state))
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))
return Direction.DOWN == facing;
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.Pair;
import com.jozufozu.flywheel.light.GridAlignedBB;
import com.jozufozu.flywheel.light.ImmutableBox;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllInteractionBehaviours;
import com.simibubi.create.AllMovementBehaviours;
@ -874,9 +872,9 @@ public abstract class Contraption {
}
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)));
compound.put("Palette", paletteNBT);
compound.put("BlockList", blockList);
@ -891,7 +889,7 @@ public abstract class Contraption {
palette = new HashMapPalette<>(GameData.getBlockStateIDMap(), 16, (i, s) -> {
throw new IllegalStateException("Palette Map index exceeded maximum");
});
ListTag list = c.getList("Palette", 10);
palette.values.clear();
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))));
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) {
betterBounds.setMaxX(contraptionBounds.getMaxX());
betterBounds.setMinX(contraptionBounds.getMinX());
maxX = (int) bounds.maxX;
minX = (int) bounds.minX;
} else if (axis == Direction.Axis.Y) {
betterBounds.setMaxY(contraptionBounds.getMaxY());
betterBounds.setMinY(contraptionBounds.getMinY());
maxY = (int) bounds.maxY;
minY = (int) bounds.minY;
} else if (axis == Direction.Axis.Z) {
betterBounds.setMaxZ(contraptionBounds.getMaxZ());
betterBounds.setMinZ(contraptionBounds.getMinZ());
maxZ = (int) bounds.maxZ;
minZ = (int) bounds.minZ;
}
bounds = betterBounds.toAABB();
bounds = new AABB(minX, minY, minZ, maxX, maxY, maxZ);
}
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.AllMovementBehaviours;
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.sync.ClientMotionPacket;
import com.simibubi.create.foundation.collision.ContinuousOBBCollider.ContinuousSeparationManifold;
@ -242,10 +243,10 @@ public class ContraptionCollider {
boolean hasNormal = !collisionNormal.equals(Vec3.ZERO);
boolean anyCollision = hardCollision || temporalCollision;
if (bounce > 0 && hasNormal && anyCollision && bounceEntity(entity, collisionNormal, contraptionEntity, bounce)) {
entity.level.playSound(playerType == PlayerType.CLIENT ? (Player) entity : null,
entity.getX(), entity.getY(), entity.getZ(), SoundEvents.SLIME_BLOCK_FALL,
SoundSource.BLOCKS, .5f, 1);
if (bounce > 0 && hasNormal && anyCollision
&& bounceEntity(entity, collisionNormal, contraptionEntity, bounce)) {
entity.level.playSound(playerType == PlayerType.CLIENT ? (Player) entity : null, entity.getX(),
entity.getY(), entity.getZ(), SoundEvents.SLIME_BLOCK_FALL, SoundSource.BLOCKS, .5f, 1);
continue;
}
@ -339,25 +340,30 @@ public class ContraptionCollider {
return false;
Vec3 contactPointMotion = contraption.getContactPointMotion(entity.position());
Vec3 motion = entity.getDeltaMovement().subtract(contactPointMotion);
Vec3 deltav = normal.scale(factor*2*motion.dot(normal));
Vec3 motion = entity.getDeltaMovement()
.subtract(contactPointMotion);
Vec3 deltav = normal.scale(factor * 2 * motion.dot(normal));
if (deltav.dot(deltav) < 0.1f)
return false;
entity.setDeltaMovement(entity.getDeltaMovement().subtract(deltav));
return false;
entity.setDeltaMovement(entity.getDeltaMovement()
.subtract(deltav));
return true;
}
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) {
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 centerY = new Vec3(0, entity.getBoundingBox().getYsize() / 2, 0);
Vec3 centerY = new Vec3(0, entity.getBoundingBox()
.getYsize() / 2, 0);
Vec3 position = entityPosition;
position = position.add(centerY);
position = position.subtract(VecHelper.CENTER_OF_ORIGIN);
@ -371,14 +377,16 @@ public class ContraptionCollider {
}
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) {
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;
position = position.subtract(VecHelper.CENTER_OF_ORIGIN);
position = position.subtract(anchorVec);
@ -436,8 +444,7 @@ public class ContraptionCollider {
return entity instanceof LocalPlayer;
}
private static List<VoxelShape> getPotentiallyCollidedShapes(Level world, Contraption contraption,
AABB localBB) {
private static List<VoxelShape> getPotentiallyCollidedShapes(Level world, Contraption contraption, AABB localBB) {
double height = localBB.getYsize();
double width = localBB.getXsize();
@ -536,16 +543,24 @@ public class ContraptionCollider {
BlockState collidedState = world.getBlockState(colliderPos);
StructureBlockInfo blockInfo = contraption.getBlocks()
.get(pos);
boolean emptyCollider = collidedState.getCollisionShape(world, pos)
.isEmpty();
if (AllMovementBehaviours.contains(blockInfo.state.getBlock())) {
MovementBehaviour movementBehaviour = AllMovementBehaviours.of(blockInfo.state.getBlock());
if (movementBehaviour instanceof BlockBreakingMovementBehaviour) {
BlockBreakingMovementBehaviour behaviour = (BlockBreakingMovementBehaviour) movementBehaviour;
if (!behaviour.canBreak(world, colliderPos, collidedState)
&& !collidedState.getCollisionShape(world, pos)
.isEmpty()) {
if (!behaviour.canBreak(world, colliderPos, collidedState) && !emptyCollider)
return true;
continue;
}
if (movementBehaviour instanceof HarvesterMovementBehaviour) {
HarvesterMovementBehaviour harvesterMovementBehaviour =
(HarvesterMovementBehaviour) movementBehaviour;
if (!harvesterMovementBehaviour.isValidCrop(world, colliderPos, collidedState)
&& !harvesterMovementBehaviour.isValidOther(world, colliderPos, collidedState)
&& !emptyCollider)
return true;
}
continue;
}
}
@ -556,9 +571,7 @@ public class ContraptionCollider {
if (collidedState.getBlock() instanceof CocoaBlock)
continue;
if (!collidedState.getMaterial()
.isReplaceable()
&& !collidedState.getCollisionShape(world, colliderPos)
.isEmpty()) {
.isReplaceable() && !emptyCollider) {
return true;
}

View file

@ -1,12 +1,12 @@
package com.simibubi.create.content.contraptions.components.structureMovement;
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.LightProvider;
import com.jozufozu.flywheel.light.LightUpdater;
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;

View file

@ -5,6 +5,7 @@ import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld;
import net.minecraft.core.BlockPos;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks;
@ -14,15 +15,24 @@ import net.minecraft.world.phys.Vec3;
public class ContraptionWorld extends WrappedWorld {
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);
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) {
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_) {
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 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.ContraptionMatrices;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos;
@ -66,12 +66,12 @@ public abstract class MovementBehaviour {
}
@OnlyIn(Dist.CLIENT)
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld,
public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) {}
@OnlyIn(Dist.CLIENT)
@Nullable
public ActorInstance createInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) {
public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
return null;
}

View file

@ -1,9 +1,9 @@
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.MovingListener;
import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.jozufozu.flywheel.util.box.ImmutableBox;
import com.simibubi.create.foundation.config.AllConfigs;
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;
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.ContraptionLighter;

View file

@ -1,7 +1,7 @@
package com.simibubi.create.content.contraptions.components.structureMovement.bearing;
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.materials.oriented.OrientedData;
import com.mojang.math.Quaternion;
@ -15,7 +15,7 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.core.Direction;
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 OrientedData topInstance;

View file

@ -27,7 +27,7 @@ public class BearingRenderer extends KineticTileEntityRenderer {
protected void renderSafe(KineticTileEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer,
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);

View file

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

View file

@ -321,11 +321,6 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity
return true;
}
@Override
public boolean shouldRenderNormally() {
return true;
}
public void setAngle(float 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.core.Materials;
import com.jozufozu.flywheel.core.materials.oriented.OrientedData;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.math.Quaternion;
import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlockPartials;
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;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState;
@ -23,7 +23,7 @@ public class StabilizedBearingInstance extends ActorInstance {
final Vector3f rotationAxis;
final Quaternion blockOrientation;
public StabilizedBearingInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) {
public StabilizedBearingInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld, MovementContext context) {
super(materialManager, simulationWorld, context);
BlockState blockState = context.state;

View file

@ -5,6 +5,7 @@ import javax.annotation.Nullable;
import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.backend.Backend;
import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.mojang.math.Quaternion;
import com.simibubi.create.AllBlockPartials;
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.SuperByteBuffer;
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.RenderType;
@ -32,9 +32,9 @@ public class StabilizedBearingMovementBehaviour extends MovementBehaviour {
@Override
@OnlyIn(Dist.CLIENT)
public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld,
public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
ContraptionMatrices matrices, MultiBufferSource buffer) {
if (Backend.getInstance().canUseInstancing()) return;
if (Backend.isOn()) return;
Direction facing = context.state.getValue(BlockStateProperties.FACING);
PartialModel top = AllBlockPartials.BEARING_TOP;
@ -70,7 +70,7 @@ public class StabilizedBearingMovementBehaviour extends MovementBehaviour {
@Nullable
@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);
}

View file

@ -1,8 +1,8 @@
package com.simibubi.create.content.contraptions.components.structureMovement.chassis;
import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.IDynamicInstance;
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance;
import com.jozufozu.flywheel.api.instance.DynamicInstance;
import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance;
import com.jozufozu.flywheel.core.materials.model.ModelData;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -12,7 +12,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.core.Direction;
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;
final Direction facing;
@ -35,7 +35,7 @@ public class StickerInstance extends TileEntityInstance<StickerTileEntity> imple
@Override
public void beginFrame() {
float offset = tile.piston.getValue(AnimationTickHolder.getPartialTicks());
float offset = blockEntity.piston.getValue(AnimationTickHolder.getPartialTicks());
if (fakeWorld)
offset = this.offset;
@ -51,7 +51,7 @@ public class StickerInstance extends TileEntityInstance<StickerTileEntity> imple
private void animateHead(float offset) {
head.loadIdentity()
.translate(getInstancePosition())
.nudge(tile.hashCode())
.nudge(blockEntity.hashCode())
.centre()
.rotateY(AngleHelper.horizontalAngle(facing))
.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,
int light, int overlay) {
if (Backend.getInstance().canUseInstancing(te.getLevel())) return;
if (Backend.canUseInstancing(te.getLevel())) return;
BlockState state = te.getBlockState();
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 com.jozufozu.flywheel.api.FlywheelRendered;
import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllSoundEvents;
@ -23,7 +22,7 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor;
public class StickerTileEntity extends SmartTileEntity implements FlywheelRendered {
public class StickerTileEntity extends SmartTileEntity {
LerpedFloat piston;
boolean update;

View file

@ -1,7 +1,7 @@
package com.simibubi.create.content.contraptions.components.structureMovement.gantry;
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.simibubi.create.AllBlockPartials;
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.util.Mth;
public class GantryCarriageInstance extends ShaftInstance implements IDynamicInstance {
public class GantryCarriageInstance extends ShaftInstance implements DynamicInstance {
private final ModelData gantryCogs;
@ -56,7 +56,7 @@ public class GantryCarriageInstance extends ShaftInstance implements IDynamicIns
}
private float getCogAngle() {
return GantryCarriageRenderer.getAngleForTe(tile, visualPos, rotationAxis) * rotationMult;
return GantryCarriageRenderer.getAngleForTe(blockEntity, visualPos, rotationAxis) * rotationMult;
}
private void animateCogs(float cogAngle) {

View file

@ -31,7 +31,7 @@ public class GantryCarriageRenderer extends KineticTileEntityRenderer {
int light, int 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();
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));
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.MaterialGroup;
import com.jozufozu.flywheel.api.MaterialManager;
import com.jozufozu.flywheel.api.instance.ITickableInstance;
import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat;
import com.jozufozu.flywheel.api.instance.TickableInstance;
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.instancing.ConditionalInstance;
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.simibubi.create.AllItems;
import com.simibubi.create.AllStitchedTextures;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
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 final Quaternion rotation;
@ -52,9 +43,9 @@ public class GlueInstance extends EntityInstance<SuperGlueEntity> implements ITi
}
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
@ -95,75 +86,4 @@ public class GlueInstance extends EntityInstance<SuperGlueEntity> implements ITi
|| 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 com.jozufozu.flywheel.api.FlywheelRendered;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllEntityTypes;
import com.simibubi.create.AllItems;
@ -68,7 +67,7 @@ import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.network.PacketDistributor;
public class SuperGlueEntity extends Entity
implements IEntityAdditionalSpawnData, ISpecialEntityItemRequirement, FlywheelRendered {
implements IEntityAdditionalSpawnData, ISpecialEntityItemRequirement {
private int validationTimer;
protected BlockPos hangingPosition;

View file

@ -1,6 +1,6 @@
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 net.minecraft.core.Vec3i;

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