Port recent changes

This commit is contained in:
grimmauld 2021-02-20 17:27:51 +01:00
commit 31e3c5b0bd
81 changed files with 4811 additions and 537 deletions

View file

@ -106,6 +106,9 @@ repositories {
name = "tterrag maven" name = "tterrag maven"
url = "https://maven.tterrag.com/" url = "https://maven.tterrag.com/"
} }
maven {
url = "https://www.cursemaven.com"
}
} }
configurations { configurations {
@ -124,6 +127,8 @@ dependencies {
// at runtime, use the full JEI jar // at runtime, use the full JEI jar
runtimeOnly fg.deobf("mezz.jei:jei-1.16.4:${jei_version}") runtimeOnly fg.deobf("mezz.jei:jei-1.16.4:${jei_version}")
// implementation fg.deobf("curse.maven:druidcraft-340991:3101903")
// i'll leave this here commented for easier testing // i'll leave this here commented for easier testing
//runtimeOnly fg.deobf("vazkii.arl:AutoRegLib:1.4-35.69") //runtimeOnly fg.deobf("vazkii.arl:AutoRegLib:1.4-35.69")
//runtimeOnly fg.deobf("vazkii.quark:Quark:r2.0-212.984") //runtimeOnly fg.deobf("vazkii.quark:Quark:r2.0-212.984")

View file

@ -405,18 +405,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
374efe0548d096c895b0159c0a3895e5f66d50c9 assets/create/lang/en_ud.json 374efe0548d096c895b0159c0a3895e5f66d50c9 assets/create/lang/en_ud.json
d12a253f7b828645559de9240703048cc6205a8b assets/create/lang/en_us.json 3d5377d3e032225b8d2ac1cd465492f25c236dea assets/create/lang/en_us.json
7e08b3b4ea68459c27387deafd011e080e2fa0f0 assets/create/lang/unfinished/de_de.json ab9eec4d6a86d2c62e7fedfe7ff860827fa6957b assets/create/lang/unfinished/de_de.json
87612bc564ee9daa055bdc8c6e7256832570bccc assets/create/lang/unfinished/es_mx.json 4fcababee7ff5b9eb2efc31b4794d0b65abea420 assets/create/lang/unfinished/es_es.json
09c3469383b62aa6b0d9b04155ec800692a1f9c2 assets/create/lang/unfinished/fr_fr.json e5ae6de5f3516476c25d44398a9f20fc3230df57 assets/create/lang/unfinished/es_mx.json
007832c1a178891b72b932139d4fb41d287304df assets/create/lang/unfinished/it_it.json e135cee1220f5e579c9cedf7fdcb2cd00ad16d00 assets/create/lang/unfinished/fr_fr.json
e1c39fdb6dfeebb95cb10203b354c8388c39e950 assets/create/lang/unfinished/ja_jp.json 9c71c9e53a051c024dab2e85faf751e3693b1ff2 assets/create/lang/unfinished/it_it.json
7b2a218cda590a40c71500535df2ecb287a60a01 assets/create/lang/unfinished/ko_kr.json f853350b47f69ec56fc70f7d7f2f35da3904ee15 assets/create/lang/unfinished/ja_jp.json
1854826cd956a671655bda7d445ace733a9b24f5 assets/create/lang/unfinished/nl_nl.json d540b44a3528fb3167263ba4cedc39e2de088d19 assets/create/lang/unfinished/ko_kr.json
a624826a11d5cc0534499dd52ecbdc41d390e8b3 assets/create/lang/unfinished/pt_br.json 259d929e4cc0d3b8f1292e771541659303cd321f assets/create/lang/unfinished/nl_nl.json
97b47bc6ad8906b07f4058c7af377b229c2f2750 assets/create/lang/unfinished/ru_ru.json 0342519553ed670c13cfaf75b425ef8242f81024 assets/create/lang/unfinished/pt_br.json
3d2f594bd2043045b12f8944eac9913273186115 assets/create/lang/unfinished/zh_cn.json 3b48571a2e06670ba0fb7c92c52cd84ce258a07d assets/create/lang/unfinished/ru_ru.json
95e01c10891fa6d779c4a52adf9d5d5461435dbe assets/create/lang/unfinished/zh_tw.json cc982d4bb52797978f1274c7b5c3339b20c6b288 assets/create/lang/unfinished/zh_cn.json
2fe73383e29814153d532ddb3ef1f6add62c6a8c assets/create/lang/unfinished/zh_tw.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json
@ -1648,7 +1649,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
e76041b7ae829fdd7dc0524f6ca4d2f89fca51bb assets/create/sounds.json e76041b7ae829fdd7dc0524f6ca4d2f89fca51bb assets/create/sounds.json
f1127939c3757e0f2f7e5cd3cf2177dff43669a0 data/create/advancements/aesthetics.json 5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json
@ -1678,18 +1679,18 @@ e9e1789de5cd5577a801a09d489a13f2c98779dc data/create/advancements/cuckoo.json
eb8e7c13163923d2f88c999c6eb5afa4b7d2426e data/create/advancements/dual_extendo_grip.json eb8e7c13163923d2f88c999c6eb5afa4b7d2426e data/create/advancements/dual_extendo_grip.json
04eaf829696d735244c0e4798dd3bdeb26e13a32 data/create/advancements/electron_tube.json 04eaf829696d735244c0e4798dd3bdeb26e13a32 data/create/advancements/electron_tube.json
36622ff02345cdc2404230c48de9ed42b1b9bd1d data/create/advancements/extendo_grip.json 36622ff02345cdc2404230c48de9ed42b1b9bd1d data/create/advancements/extendo_grip.json
4ce8ca38185f4a417d0c04f1555f2960a7f81697 data/create/advancements/fan.json b1699baaadaac7ebce642c09428519d156e21594 data/create/advancements/fan.json
8102d6a679570beaccab792d1ea4e644dc216464 data/create/advancements/fan_lava.json 5aa76cba3b40a1c234ffa84a89ecca630990fc0f data/create/advancements/fan_lava.json
504f46d8388d8137a23f0fd13fd172b382fc7b2b data/create/advancements/fan_smoke.json 716a9816558300a3652ed8d8d568517017813f5c data/create/advancements/fan_smoke.json
594a70568ff6e26545a9861c6fa2dad586ef8128 data/create/advancements/fan_water.json a61eb63d02604e88836519f89f74b252a640d485 data/create/advancements/fan_water.json
7e639be7a98d1d99bc2f996d817477a426ca8b61 data/create/advancements/fist_bump.json 7e639be7a98d1d99bc2f996d817477a426ca8b61 data/create/advancements/fist_bump.json
bc65c06352607d2e2f2abb6a66bc761011e1e720 data/create/advancements/flywheel.json bc65c06352607d2e2f2abb6a66bc761011e1e720 data/create/advancements/flywheel.json
380087d7c540232bb0b4a47be339dd96c3d2725b data/create/advancements/glass_pipe.json 380087d7c540232bb0b4a47be339dd96c3d2725b data/create/advancements/glass_pipe.json
62f3610188f7dbd3900ab305edc2d06282705a38 data/create/advancements/goggles.json 62f3610188f7dbd3900ab305edc2d06282705a38 data/create/advancements/goggles.json
ea0f8acb7c3692b569269e62927725d968a65251 data/create/advancements/hose_pulley.json ea0f8acb7c3692b569269e62927725d968a65251 data/create/advancements/hose_pulley.json
b4087ab7c125786ef9c775a564c1b10bdcbf66f5 data/create/advancements/infinite_chocolate.json 9f642faf92b75a28c564e90be8448b9a4328af5e data/create/advancements/infinite_chocolate.json
3e90e1be54d8730fe0d1204e694b8af88b697148 data/create/advancements/infinite_lava.json a933fa5e7217e2ffe123ae035cfbc9210ba69fd5 data/create/advancements/infinite_lava.json
e85adb38ef5257ce5dc7674ed2071e3d37c0547a data/create/advancements/infinite_water.json a8ab0e4ffba358d23f9efaa9f51245b6d490a8be data/create/advancements/infinite_water.json
9beb622c79e9f5ce2397c22222cac0faf272f388 data/create/advancements/integrated_circuit.json 9beb622c79e9f5ce2397c22222cac0faf272f388 data/create/advancements/integrated_circuit.json
316bed3d8985d0a371200967d7edd2936f1b9f94 data/create/advancements/integrated_circuit_eob.json 316bed3d8985d0a371200967d7edd2936f1b9f94 data/create/advancements/integrated_circuit_eob.json
4d7cb129877d6cd68fda66159818e47ca44db078 data/create/advancements/item_drain.json 4d7cb129877d6cd68fda66159818e47ca44db078 data/create/advancements/item_drain.json
@ -1700,7 +1701,7 @@ b61d958815f1c2530c11c88c9081d5c794d7f807 data/create/advancements/its_alive.json
218568a4e416c5fa559c55a5c92aa4e93f88b837 data/create/advancements/mechanical_drill.json 218568a4e416c5fa559c55a5c92aa4e93f88b837 data/create/advancements/mechanical_drill.json
6dc84ad2f0512495fe3f01f99d3c547849351e33 data/create/advancements/mechanical_saw.json 6dc84ad2f0512495fe3f01f99d3c547849351e33 data/create/advancements/mechanical_saw.json
3bc549c06dc6d9568f92e1abc9654c9b4c33f035 data/create/advancements/millstone.json 3bc549c06dc6d9568f92e1abc9654c9b4c33f035 data/create/advancements/millstone.json
2ed7434ba3e3cf7f35bfbd1638da1bc7bcb6f5f8 data/create/advancements/mixer.json ee834796d3d05d097048338ca946c5509fada0be data/create/advancements/mixer.json
bee2c19d730936e34ee61fe04af13e2b031ecffa data/create/advancements/musical_arm.json bee2c19d730936e34ee61fe04af13e2b031ecffa data/create/advancements/musical_arm.json
c9c4060ed207226b69fada2d61e01a97d7077eae data/create/advancements/nixie_tube.json c9c4060ed207226b69fada2d61e01a97d7077eae data/create/advancements/nixie_tube.json
0b0a7f5b7f30ab75e4ca790c850b1eb50944a3aa data/create/advancements/overstress_flywheel.json 0b0a7f5b7f30ab75e4ca790c850b1eb50944a3aa data/create/advancements/overstress_flywheel.json

View file

@ -688,6 +688,7 @@
"create.recipe.mechanical_crafting": "Mechanical Crafting", "create.recipe.mechanical_crafting": "Mechanical Crafting",
"create.recipe.automatic_shaped": "Automated Shaped Crafting", "create.recipe.automatic_shaped": "Automated Shaped Crafting",
"create.recipe.block_cutting": "Block Cutting", "create.recipe.block_cutting": "Block Cutting",
"create.recipe.wood_cutting": "Wood Cutting",
"create.recipe.blockzapper_upgrade": "Handheld Blockzapper", "create.recipe.blockzapper_upgrade": "Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "Sandpaper Polishing", "create.recipe.sandpaper_polishing": "Sandpaper Polishing",
"create.recipe.mystery_conversion": "Mysterious Conversion", "create.recipe.mystery_conversion": "Mysterious Conversion",
@ -848,13 +849,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "Move to upper lane at %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "Move to upper lane at %1$s%%",
"create.gui.sequenced_gearshift.title": "Sequenced Gearshift", "create.gui.sequenced_gearshift.title": "Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "Instruction", "create.gui.sequenced_gearshift.instruction": "Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "Turn", "create.gui.sequenced_gearshift.instruction.turn_angle": "Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distance",
"create.gui.sequenced_gearshift.instruction.wait": "Wait", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "Duration", "create.gui.sequenced_gearshift.instruction.delay": "Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "End",
"create.gui.sequenced_gearshift.instruction.end": "End", "create.gui.sequenced_gearshift.instruction.end": "End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "Await",
"create.gui.sequenced_gearshift.speed": "Speed, Direction", "create.gui.sequenced_gearshift.speed": "Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "Input speed, Forwards", "create.gui.sequenced_gearshift.speed.forward": "Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "Double speed, Forwards", "create.gui.sequenced_gearshift.speed.forward_fast": "Double speed, Forwards",

View file

@ -1,10 +1,10 @@
{ {
"_": "Missing Localizations: 1105", "_": "Missing Localizations: 973",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Akazienfenster", "block.create.acacia_window": "Akazienholzfenster",
"block.create.acacia_window_pane": "Akazienfensterscheibe", "block.create.acacia_window_pane": "Akazienholzfensterscheibe",
"block.create.adjustable_chain_gearshift": "Verstellbares Kettengetriebe", "block.create.adjustable_chain_gearshift": "Verstellbares Kettengetriebe",
"block.create.adjustable_crate": "Verstellbare Kiste", "block.create.adjustable_crate": "Verstellbare Kiste",
"block.create.adjustable_pulse_repeater": "Verstellbarer Pulsverstärker", "block.create.adjustable_pulse_repeater": "Verstellbarer Pulsverstärker",
@ -26,8 +26,8 @@
"block.create.andesite_tunnel": "Andesittunnel", "block.create.andesite_tunnel": "Andesittunnel",
"block.create.basin": "Behälter", "block.create.basin": "Behälter",
"block.create.belt": "Mechanischer Riemen", "block.create.belt": "Mechanischer Riemen",
"block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window": "Birkenholzfenster",
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.birch_window_pane": "Birkenholzfensterscheibe",
"block.create.black_sail": "Schwarzes Segel", "block.create.black_sail": "Schwarzes Segel",
"block.create.black_seat": "Schwarzer Sitz", "block.create.black_seat": "Schwarzer Sitz",
"block.create.black_valve_handle": "Schwarzer Ventilgriff", "block.create.black_valve_handle": "Schwarzer Ventilgriff",
@ -56,7 +56,7 @@
"block.create.clockwork_bearing": "Uhrwerk-Lager", "block.create.clockwork_bearing": "Uhrwerk-Lager",
"block.create.clutch": "Kupplung", "block.create.clutch": "Kupplung",
"block.create.cogwheel": "Zahnrad", "block.create.cogwheel": "Zahnrad",
"block.create.content_observer": "Inhalts Beobachter", "block.create.content_observer": "Inhaltsbeobachter",
"block.create.controller_rail": "Steureungsschiene", "block.create.controller_rail": "Steureungsschiene",
"block.create.copper_block": "Kupfer Block", "block.create.copper_block": "Kupfer Block",
"block.create.copper_casing": "Kupferrahmen", "block.create.copper_casing": "Kupferrahmen",
@ -119,128 +119,128 @@
"block.create.fancy_dark_scoria_bricks_slab": "Schicke dunkle Schlackenziegelstufe", "block.create.fancy_dark_scoria_bricks_slab": "Schicke dunkle Schlackenziegelstufe",
"block.create.fancy_dark_scoria_bricks_stairs": "Schicke dunkle Schlackenziegeltreppe", "block.create.fancy_dark_scoria_bricks_stairs": "Schicke dunkle Schlackenziegeltreppe",
"block.create.fancy_dark_scoria_bricks_wall": "Schicke dunkle Schlackenziegelmauer", "block.create.fancy_dark_scoria_bricks_wall": "Schicke dunkle Schlackenziegelmauer",
"block.create.fancy_diorite_bricks": "UNLOCALIZED: Fancy Diorite Bricks", "block.create.fancy_diorite_bricks": "Schöne Dioritziegel",
"block.create.fancy_diorite_bricks_slab": "UNLOCALIZED: Fancy Diorite Bricks Slab", "block.create.fancy_diorite_bricks_slab": "Schöne Dioritziegelstufe",
"block.create.fancy_diorite_bricks_stairs": "UNLOCALIZED: Fancy Diorite Bricks Stairs", "block.create.fancy_diorite_bricks_stairs": "Schöne Dioritziegeltreppe",
"block.create.fancy_diorite_bricks_wall": "UNLOCALIZED: Fancy Diorite Bricks Wall", "block.create.fancy_diorite_bricks_wall": "Schöne Dioritziegelmauer",
"block.create.fancy_dolomite_bricks": "UNLOCALIZED: Fancy Dolomite Bricks", "block.create.fancy_dolomite_bricks": "Schöne Dolomitziegel",
"block.create.fancy_dolomite_bricks_slab": "UNLOCALIZED: Fancy Dolomite Bricks Slab", "block.create.fancy_dolomite_bricks_slab": "Schöne Dolomitziegelstufe",
"block.create.fancy_dolomite_bricks_stairs": "UNLOCALIZED: Fancy Dolomite Bricks Stairs", "block.create.fancy_dolomite_bricks_stairs": "Schöne Dolomitziegeltreppe",
"block.create.fancy_dolomite_bricks_wall": "UNLOCALIZED: Fancy Dolomite Bricks Wall", "block.create.fancy_dolomite_bricks_wall": "Schöne Dolomitziegelmauer",
"block.create.fancy_gabbro_bricks": "UNLOCALIZED: Fancy Gabbro Bricks", "block.create.fancy_gabbro_bricks": "Schöne Gabelsteinziegel",
"block.create.fancy_gabbro_bricks_slab": "UNLOCALIZED: Fancy Gabbro Bricks Slab", "block.create.fancy_gabbro_bricks_slab": "Schöne Gabelsteinziegelstufe",
"block.create.fancy_gabbro_bricks_stairs": "UNLOCALIZED: Fancy Gabbro Bricks Stairs", "block.create.fancy_gabbro_bricks_stairs": "Schöne Gabelsteinziegeltreppe",
"block.create.fancy_gabbro_bricks_wall": "UNLOCALIZED: Fancy Gabbro Bricks Wall", "block.create.fancy_gabbro_bricks_wall": "Schöne Gabelsteinziegelmauer",
"block.create.fancy_granite_bricks": "UNLOCALIZED: Fancy Granite Bricks", "block.create.fancy_granite_bricks": "Schöne Granitziegel",
"block.create.fancy_granite_bricks_slab": "UNLOCALIZED: Fancy Granite Bricks Slab", "block.create.fancy_granite_bricks_slab": "Schöne Granitziegelstufe",
"block.create.fancy_granite_bricks_stairs": "UNLOCALIZED: Fancy Granite Bricks Stairs", "block.create.fancy_granite_bricks_stairs": "Schöne Granitziegeltreppe",
"block.create.fancy_granite_bricks_wall": "UNLOCALIZED: Fancy Granite Bricks Wall", "block.create.fancy_granite_bricks_wall": "Schöne Granitziegelmauer",
"block.create.fancy_limestone_bricks": "UNLOCALIZED: Fancy Limestone Bricks", "block.create.fancy_limestone_bricks": "Schöne Kalksteinziegel",
"block.create.fancy_limestone_bricks_slab": "UNLOCALIZED: Fancy Limestone Bricks Slab", "block.create.fancy_limestone_bricks_slab": "Schöne Kalksteinziegelstufe",
"block.create.fancy_limestone_bricks_stairs": "UNLOCALIZED: Fancy Limestone Bricks Stairs", "block.create.fancy_limestone_bricks_stairs": "Schöne Kalksteinziegeltreppe",
"block.create.fancy_limestone_bricks_wall": "UNLOCALIZED: Fancy Limestone Bricks Wall", "block.create.fancy_limestone_bricks_wall": "Schöne Kalksteinziegelmauer",
"block.create.fancy_scoria_bricks": "UNLOCALIZED: Fancy Scoria Bricks", "block.create.fancy_scoria_bricks": "Schöne Schlackenziegel",
"block.create.fancy_scoria_bricks_slab": "UNLOCALIZED: Fancy Scoria Bricks Slab", "block.create.fancy_scoria_bricks_slab": "Schöne Schlackenziegelstufe",
"block.create.fancy_scoria_bricks_stairs": "UNLOCALIZED: Fancy Scoria Bricks Stairs", "block.create.fancy_scoria_bricks_stairs": "Schöne Schlackenziegeltreppe",
"block.create.fancy_scoria_bricks_wall": "UNLOCALIZED: Fancy Scoria Bricks Wall", "block.create.fancy_scoria_bricks_wall": "Schöne Schlackenziegelmauer",
"block.create.fancy_weathered_limestone_bricks": "UNLOCALIZED: Fancy Weathered Limestone Bricks", "block.create.fancy_weathered_limestone_bricks": "Schöne Verwitterte Kalksteinziegel",
"block.create.fancy_weathered_limestone_bricks_slab": "UNLOCALIZED: Fancy Weathered Limestone Bricks Slab", "block.create.fancy_weathered_limestone_bricks_slab": "Schöne Verwitterte Kalksteinziegelstufe",
"block.create.fancy_weathered_limestone_bricks_stairs": "UNLOCALIZED: Fancy Weathered Limestone Bricks Stairs", "block.create.fancy_weathered_limestone_bricks_stairs": "Schöne Verwitterte Kalksteinziegeltreppe",
"block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall", "block.create.fancy_weathered_limestone_bricks_wall": "Schöne Verwitterte Kalksteinziegelmauer",
"block.create.fluid_pipe": "Wasserrohr", "block.create.fluid_pipe": "Flüssigkeitsrohr",
"block.create.fluid_tank": "Wassertank", "block.create.fluid_tank": "Flüssigkeitstank",
"block.create.fluid_valve": "Flüssigkeitsventil", "block.create.fluid_valve": "Flüssigkeitsventil",
"block.create.flywheel": "Schwungrad", "block.create.flywheel": "Schwungrad",
"block.create.framed_glass": "Gerahmtes Glas", "block.create.framed_glass": "Gerahmtes Glas",
"block.create.framed_glass_pane": "Gerahmte Glasscheibe", "block.create.framed_glass_pane": "Gerahmte Glasscheibe",
"block.create.furnace_engine": "UNLOCALIZED: Furnace Engine", "block.create.furnace_engine": "Ofenmotor",
"block.create.gabbro": "Gabbro", "block.create.gabbro": "Gabelstein",
"block.create.gabbro_bricks": "Gabbroziegel", "block.create.gabbro_bricks": "Gabelsteinziegel",
"block.create.gabbro_bricks_slab": "Gabbroziegelstufe", "block.create.gabbro_bricks_slab": "Gabelsteinziegelstufe",
"block.create.gabbro_bricks_stairs": "Gabbroziegeltreppe", "block.create.gabbro_bricks_stairs": "Gabelsteinziegeltreppe",
"block.create.gabbro_bricks_wall": "Gabbroziegelmauer", "block.create.gabbro_bricks_wall": "Gabelsteinziegelmauer",
"block.create.gabbro_cobblestone": "UNLOCALIZED: Gabbro Cobblestone", "block.create.gabbro_cobblestone": "Gabelsteinbruchstein",
"block.create.gabbro_cobblestone_slab": "UNLOCALIZED: Gabbro Cobblestone Slab", "block.create.gabbro_cobblestone_slab": "Gabelsteinbruchstein",
"block.create.gabbro_cobblestone_stairs": "UNLOCALIZED: Gabbro Cobblestone Stairs", "block.create.gabbro_cobblestone_stairs": "Gabelsteinbruchstein",
"block.create.gabbro_cobblestone_wall": "UNLOCALIZED: Gabbro Cobblestone Wall", "block.create.gabbro_cobblestone_wall": "Gabelsteinbruchstein",
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar", "block.create.gabbro_pillar": "Gabelsteinsäule",
"block.create.gantry_pinion": "UNLOCALIZED: Gantry Pinion", "block.create.gantry_pinion": "UNLOCALIZED: Gantry Pinion",
"block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft", "block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft",
"block.create.gearbox": "Getriebe", "block.create.gearbox": "Getriebe",
"block.create.gearshift": "Gangschaltung", "block.create.gearshift": "Gangschaltung",
"block.create.glass_fluid_pipe": "Glaswasserrohr", "block.create.glass_fluid_pipe": "Glaswasserrohr",
"block.create.granite_bricks": "Granitziegel", "block.create.granite_bricks": "Granitziegel",
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab", "block.create.granite_bricks_slab": "Granitziegelstufe",
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs", "block.create.granite_bricks_stairs": "Granitziegeltreppe",
"block.create.granite_bricks_wall": "UNLOCALIZED: Granite Bricks Wall", "block.create.granite_bricks_wall": "Granitziegelmauer",
"block.create.granite_cobblestone": "UNLOCALIZED: Granite Cobblestone", "block.create.granite_cobblestone": "Granitbruchstein",
"block.create.granite_cobblestone_slab": "UNLOCALIZED: Granite Cobblestone Slab", "block.create.granite_cobblestone_slab": "Granitbruchsteinstufe",
"block.create.granite_cobblestone_stairs": "UNLOCALIZED: Granite Cobblestone Stairs", "block.create.granite_cobblestone_stairs": "Granitbruchtreppe",
"block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_cobblestone_wall": "Granitbruchsteinmauer",
"block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", "block.create.granite_pillar": "Granitsäule",
"block.create.gray_sail": "UNLOCALIZED: Gray Sail", "block.create.gray_sail": "Graues Segel",
"block.create.gray_seat": "UNLOCALIZED: Gray Seat", "block.create.gray_seat": "Grauer Sitz",
"block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.gray_valve_handle": "Grauer Ventilgriff",
"block.create.green_sail": "UNLOCALIZED: Green Sail", "block.create.green_sail": "Grünes Segel",
"block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_seat": "Grüner Sitz",
"block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.green_valve_handle": "Grüner Ventilgriff",
"block.create.hand_crank": "UNLOCALIZED: Hand Crank", "block.create.hand_crank": "Handkurbel",
"block.create.honey": "UNLOCALIZED: Honey", "block.create.honey": "Honig",
"block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass", "block.create.horizontal_framed_glass": "Horizontal Gerahmes Glas",
"block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", "block.create.horizontal_framed_glass_pane": "Horizontal Gerahmte Glasscheibe",
"block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", "block.create.hose_pulley": "Umlenkrolle",
"block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.item_drain": "Abfluss",
"block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window": "Tropenholzfenster",
"block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.jungle_window_pane": "Tropenholzfensterscheib",
"block.create.large_cogwheel": "Großes Zahnrad", "block.create.large_cogwheel": "Großes Zahnrad",
"block.create.layered_andesite": "UNLOCALIZED: Layered Andesite", "block.create.layered_andesite": "Geschichteter Andesit",
"block.create.layered_dark_scoria": "UNLOCALIZED: Layered Dark Scoria", "block.create.layered_dark_scoria": "Geschichtete Dunkle Schlacke",
"block.create.layered_diorite": "UNLOCALIZED: Layered Diorite", "block.create.layered_diorite": "Geschichteter Diorit",
"block.create.layered_dolomite": "UNLOCALIZED: Layered Dolomite", "block.create.layered_dolomite": "Geschichteter Dolomit",
"block.create.layered_gabbro": "UNLOCALIZED: Layered Gabbro", "block.create.layered_gabbro": "Geschichteter Gabelstein",
"block.create.layered_granite": "UNLOCALIZED: Layered Granite", "block.create.layered_granite": "Geschichteter Granit",
"block.create.layered_limestone": "UNLOCALIZED: Layered Limestone", "block.create.layered_limestone": "Geschichteter Kalkstein",
"block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_scoria": "Geschichtete Schlacke",
"block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.layered_weathered_limestone": "Geschichteter Verwitterter Kalkstein",
"block.create.light_blue_sail": "UNLOCALIZED: Light Blue Sail", "block.create.light_blue_sail": "Hellblaues Segel",
"block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", "block.create.light_blue_seat": "Hellblauer Sitz",
"block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_blue_valve_handle": "Hellblauer Ventilgriff",
"block.create.light_gray_sail": "UNLOCALIZED: Light Gray Sail", "block.create.light_gray_sail": "Hellgraues Segel",
"block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", "block.create.light_gray_seat": "Hellgrauer Sitz",
"block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.light_gray_valve_handle": "Hellgrauer Ventilgriff",
"block.create.lime_sail": "UNLOCALIZED: Lime Sail", "block.create.lime_sail": "Hellgrünes Segel",
"block.create.lime_seat": "UNLOCALIZED: Lime Seat", "block.create.lime_seat": "Hellgrüner Sitz",
"block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", "block.create.lime_valve_handle": "Hellgrüner Ventilgriff",
"block.create.limesand": "Kalksand", "block.create.limesand": "Kalksand",
"block.create.limestone": "Kalkstein", "block.create.limestone": "Kalkstein",
"block.create.limestone_bricks": "Kalksteinziegel", "block.create.limestone_bricks": "Kalksteinziegel",
"block.create.limestone_bricks_slab": "Kalksteinziegelstufe", "block.create.limestone_bricks_slab": "Kalksteinziegelstufe",
"block.create.limestone_bricks_stairs": "Kalksteinziegeltreppe", "block.create.limestone_bricks_stairs": "Kalksteinziegeltreppe",
"block.create.limestone_bricks_wall": "Kalksteinziegelmauer", "block.create.limestone_bricks_wall": "Kalksteinziegelmauer",
"block.create.limestone_cobblestone": "UNLOCALIZED: Limestone Cobblestone", "block.create.limestone_cobblestone": "Kalkbruchstein",
"block.create.limestone_cobblestone_slab": "UNLOCALIZED: Limestone Cobblestone Slab", "block.create.limestone_cobblestone_slab": "Kalkbruchsteinstufe",
"block.create.limestone_cobblestone_stairs": "UNLOCALIZED: Limestone Cobblestone Stairs", "block.create.limestone_cobblestone_stairs": "Kalkbruchsteintreppe",
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall", "block.create.limestone_cobblestone_wall": "Kalkbruchsteinmauer",
"block.create.limestone_pillar": "Kalksteinsäule", "block.create.limestone_pillar": "Kalksteinsäule",
"block.create.linear_chassis": "Schubgerüst", "block.create.linear_chassis": "Schubgerüst",
"block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner", "block.create.lit_blaze_burner": "Aktiver Lohenbrenner",
"block.create.magenta_sail": "UNLOCALIZED: Magenta Sail", "block.create.magenta_sail": "Magenta Segel",
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.magenta_seat": "Magenta Sitz",
"block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.magenta_valve_handle": "Magenta Ventilgriff",
"block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_arm": "Mechanischer Arm",
"block.create.mechanical_bearing": "Mechanisches Lager", "block.create.mechanical_bearing": "Mechanisches Lager",
"block.create.mechanical_crafter": "UNLOCALIZED: Mechanical Crafter", "block.create.mechanical_crafter": "Mechanische Handwerkseinheit",
"block.create.mechanical_drill": "Mechanischer Bohrer", "block.create.mechanical_drill": "Mechanischer Bohrer",
"block.create.mechanical_harvester": "Mechanische Erntemaschine", "block.create.mechanical_harvester": "Mechanische Erntemaschine",
"block.create.mechanical_mixer": "UNLOCALIZED: Mechanical Mixer", "block.create.mechanical_mixer": "Mechanischer Mixer",
"block.create.mechanical_piston": "Mechanischer Kolben", "block.create.mechanical_piston": "Mechanischer Kolben",
"block.create.mechanical_piston_head": "Mechanisches Kolbenende", "block.create.mechanical_piston_head": "Mechanisches Kolbenende",
"block.create.mechanical_plough": "UNLOCALIZED: Mechanical Plough", "block.create.mechanical_plough": "Mechanischer Pflug",
"block.create.mechanical_press": "Mechanische Presse", "block.create.mechanical_press": "Mechanische Presse",
"block.create.mechanical_pump": "UNLOCALIZED: Mechanical Pump", "block.create.mechanical_pump": "Mechanische Pumpe",
"block.create.mechanical_saw": "UNLOCALIZED: Mechanical Saw", "block.create.mechanical_saw": "Mechanische Säge",
"block.create.metal_bracket": "UNLOCALIZED: Metal Bracket", "block.create.metal_bracket": "Metallhalterung",
"block.create.millstone": "UNLOCALIZED: Millstone", "block.create.millstone": "Mahlstein",
"block.create.minecart_anchor": "UNLOCALIZED: Minecart Anchor", "block.create.minecart_anchor": "UNLOCALIZED: Minecart Anchor",
"block.create.mossy_andesite": "UNLOCALIZED: Mossy Andesite", "block.create.mossy_andesite": "UNLOCALIZED: Mossy Andesite",
"block.create.mossy_dark_scoria": "UNLOCALIZED: Mossy Dark Scoria", "block.create.mossy_dark_scoria": "UNLOCALIZED: Mossy Dark Scoria",
@ -307,9 +307,9 @@
"block.create.paved_weathered_limestone_slab": "UNLOCALIZED: Paved Weathered Limestone Slab", "block.create.paved_weathered_limestone_slab": "UNLOCALIZED: Paved Weathered Limestone Slab",
"block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs",
"block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall",
"block.create.pink_sail": "UNLOCALIZED: Pink Sail", "block.create.pink_sail": "Rosa Segel",
"block.create.pink_seat": "UNLOCALIZED: Pink Seat", "block.create.pink_seat": "Rosa Sitz",
"block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", "block.create.pink_valve_handle": "Rosa Ventilgriff",
"block.create.piston_extension_pole": "Kolben-Pleuelverlängerung", "block.create.piston_extension_pole": "Kolben-Pleuelverlängerung",
"block.create.polished_dark_scoria": "UNLOCALIZED: Polished Dark Scoria", "block.create.polished_dark_scoria": "UNLOCALIZED: Polished Dark Scoria",
"block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab", "block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab",
@ -319,7 +319,7 @@
"block.create.polished_dolomite_slab": "UNLOCALIZED: Polished Dolomite Slab", "block.create.polished_dolomite_slab": "UNLOCALIZED: Polished Dolomite Slab",
"block.create.polished_dolomite_stairs": "UNLOCALIZED: Polished Dolomite Stairs", "block.create.polished_dolomite_stairs": "UNLOCALIZED: Polished Dolomite Stairs",
"block.create.polished_dolomite_wall": "UNLOCALIZED: Polished Dolomite Wall", "block.create.polished_dolomite_wall": "UNLOCALIZED: Polished Dolomite Wall",
"block.create.polished_gabbro": "Polierter Gabbro", "block.create.polished_gabbro": "Polierter Gabelstein",
"block.create.polished_gabbro_slab": "UNLOCALIZED: Polished Gabbro Slab", "block.create.polished_gabbro_slab": "UNLOCALIZED: Polished Gabbro Slab",
"block.create.polished_gabbro_stairs": "UNLOCALIZED: Polished Gabbro Stairs", "block.create.polished_gabbro_stairs": "UNLOCALIZED: Polished Gabbro Stairs",
"block.create.polished_gabbro_wall": "UNLOCALIZED: Polished Gabbro Wall", "block.create.polished_gabbro_wall": "UNLOCALIZED: Polished Gabbro Wall",
@ -327,7 +327,7 @@
"block.create.polished_limestone_slab": "Polierte Kalksteinstufe", "block.create.polished_limestone_slab": "Polierte Kalksteinstufe",
"block.create.polished_limestone_stairs": "UNLOCALIZED: Polished Limestone Stairs", "block.create.polished_limestone_stairs": "UNLOCALIZED: Polished Limestone Stairs",
"block.create.polished_limestone_wall": "UNLOCALIZED: Polished Limestone Wall", "block.create.polished_limestone_wall": "UNLOCALIZED: Polished Limestone Wall",
"block.create.polished_scoria": "UNLOCALIZED: Polished Scoria", "block.create.polished_scoria": "Polierte Schlacke",
"block.create.polished_scoria_slab": "UNLOCALIZED: Polished Scoria Slab", "block.create.polished_scoria_slab": "UNLOCALIZED: Polished Scoria Slab",
"block.create.polished_scoria_stairs": "UNLOCALIZED: Polished Scoria Stairs", "block.create.polished_scoria_stairs": "UNLOCALIZED: Polished Scoria Stairs",
"block.create.polished_scoria_wall": "UNLOCALIZED: Polished Scoria Wall", "block.create.polished_scoria_wall": "UNLOCALIZED: Polished Scoria Wall",
@ -416,13 +416,13 @@
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption", "entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
"entity.create.super_glue": "UNLOCALIZED: Super Glue", "entity.create.super_glue": "UNLOCALIZED: Super Glue",
"fluid.create.milk": "UNLOCALIZED: Milk", "fluid.create.milk": "Milch",
"fluid.create.potion": "UNLOCALIZED: Potion", "fluid.create.potion": "Trank",
"fluid.create.tea": "UNLOCALIZED: Builder's Tea", "fluid.create.tea": "Bauherrentee",
"item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy", "item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy",
"item.create.attribute_filter": "UNLOCALIZED: Attribute Filter", "item.create.attribute_filter": "UNLOCALIZED: Attribute Filter",
"item.create.bar_of_chocolate": "UNLOCALIZED: Bar of Chocolate", "item.create.bar_of_chocolate": "Schokoladetafel",
"item.create.belt_connector": "Mechanischer Riemen", "item.create.belt_connector": "Mechanischer Riemen",
"item.create.blaze_cake": "UNLOCALIZED: Blaze Cake", "item.create.blaze_cake": "UNLOCALIZED: Blaze Cake",
"item.create.blaze_cake_base": "UNLOCALIZED: Blaze Cake Base", "item.create.blaze_cake_base": "UNLOCALIZED: Blaze Cake Base",
@ -453,7 +453,7 @@
"item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore", "item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore",
"item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore", "item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore",
"item.create.crushed_zinc_ore": "UNLOCALIZED: Crushed Zinc Ore", "item.create.crushed_zinc_ore": "UNLOCALIZED: Crushed Zinc Ore",
"item.create.deforester": "UNLOCALIZED: Deforester", "item.create.deforester": "Entforster",
"item.create.dough": "Teig", "item.create.dough": "Teig",
"item.create.electron_tube": "UNLOCALIZED: Electron Tube", "item.create.electron_tube": "UNLOCALIZED: Electron Tube",
"item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner",
@ -464,8 +464,8 @@
"item.create.goggles": "UNLOCALIZED: Engineer's Goggles", "item.create.goggles": "UNLOCALIZED: Engineer's Goggles",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet", "item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",
"item.create.handheld_blockzapper": "Blockpistole", "item.create.handheld_blockzapper": "Blockpistole",
"item.create.handheld_worldshaper": "UNLOCALIZED: Handheld Worldshaper", "item.create.handheld_worldshaper": "Geländeformer",
"item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.honey_bucket": "Honigeimer",
"item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit", "item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit",
"item.create.iron_sheet": "Eisenblech", "item.create.iron_sheet": "Eisenblech",
"item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet",
@ -474,18 +474,18 @@
"item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz", "item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz",
"item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian",
"item.create.propeller": "Propeller", "item.create.propeller": "Propeller",
"item.create.red_sand_paper": "UNLOCALIZED: Red Sand Paper", "item.create.red_sand_paper": "Rotes Schmirgelpapier",
"item.create.refined_radiance": "UNLOCALIZED: Refined Radiance", "item.create.refined_radiance": "UNLOCALIZED: Refined Radiance",
"item.create.rose_quartz": "Rosenquarz", "item.create.rose_quartz": "Rosenquarz",
"item.create.sand_paper": "UNLOCALIZED: Sand Paper", "item.create.sand_paper": "Schmirgelpapier",
"item.create.schematic": "Bauplan", "item.create.schematic": "Bauplan",
"item.create.schematic_and_quill": "Bauplan und Feder", "item.create.schematic_and_quill": "Bauplan und Feder",
"item.create.shadow_steel": "UNLOCALIZED: Shadow Steel", "item.create.shadow_steel": "UNLOCALIZED: Shadow Steel",
"item.create.super_glue": "UNLOCALIZED: Super Glue", "item.create.super_glue": "Superkleber",
"item.create.tree_fertilizer": "Baumdünger", "item.create.tree_fertilizer": "Baumdünger",
"item.create.vertical_gearbox": "UNLOCALIZED: Vertical Gearbox", "item.create.vertical_gearbox": "UNLOCALIZED: Vertical Gearbox",
"item.create.wand_of_symmetry": "Symmetriestab", "item.create.wand_of_symmetry": "Symmetriestab",
"item.create.wheat_flour": "UNLOCALIZED: Wheat Flour", "item.create.wheat_flour": "Weizenmehl",
"item.create.whisk": "UNLOCALIZED: Whisk", "item.create.whisk": "UNLOCALIZED: Whisk",
"item.create.wrench": "Schraubenschlüssel", "item.create.wrench": "Schraubenschlüssel",
"item.create.zinc_ingot": "Zinkbarren", "item.create.zinc_ingot": "Zinkbarren",
@ -658,21 +658,21 @@
"_": "->------------------------] UI & Messages [------------------------<-", "_": "->------------------------] UI & Messages [------------------------<-",
"itemGroup.create.base": "UNLOCALIZED: Create", "itemGroup.create.base": "Create",
"itemGroup.create.palettes": "UNLOCALIZED: Create Palettes", "itemGroup.create.palettes": "Create Paletten",
"death.attack.create.crush": "%1$s stolperte in ein Mahlwerk", "death.attack.create.crush": "%1$s stolperte in ein Mahlwerk",
"death.attack.create.fan_fire": "%1$s hat heiße Luft eingeatmet", "death.attack.create.fan_fire": "%1$s hat heiße Luft eingeatmet",
"death.attack.create.fan_lava": "%1$s wurde von Lava verweht", "death.attack.create.fan_lava": "%1$s wurde von Lava verweht",
"death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert", "death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert",
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw", "death.attack.create.mechanical_saw": "%1$s wurde zersägt",
"death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "death.attack.create.cuckoo_clock_explosion": "%1$s wurde durch eine falsche Kuckucksuhr gesprengt",
"create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", "create.block.deployer.damage_source_name": "einem Finger",
"create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block",
"create.recipe.crushing": "Mahlen", "create.recipe.crushing": "Mahlen (Mahlwerk)",
"create.recipe.milling": "UNLOCALIZED: Milling", "create.recipe.milling": "Mahlen (Mahlstein)",
"create.recipe.fan_washing": "UNLOCALIZED: Bulk Washing", "create.recipe.fan_washing": "UNLOCALIZED: Bulk Washing",
"create.recipe.fan_washing.fan": "UNLOCALIZED: Fan behind Flowing Water", "create.recipe.fan_washing.fan": "UNLOCALIZED: Fan behind Flowing Water",
"create.recipe.fan_smoking": "UNLOCALIZED: Bulk Smoking", "create.recipe.fan_smoking": "UNLOCALIZED: Bulk Smoking",
@ -680,24 +680,25 @@
"create.recipe.fan_blasting": "UNLOCALIZED: Bulk Blasting", "create.recipe.fan_blasting": "UNLOCALIZED: Bulk Blasting",
"create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava", "create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava",
"create.recipe.pressing": "Mechanische Presse", "create.recipe.pressing": "Mechanische Presse",
"create.recipe.mixing": "UNLOCALIZED: Mixing", "create.recipe.mixing": "Mixen",
"create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting", "create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting",
"create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing", "create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing",
"create.recipe.packing": "UNLOCALIZED: Compacting", "create.recipe.packing": "UNLOCALIZED: Compacting",
"create.recipe.automatic_packing": "UNLOCALIZED: Automated Packing", "create.recipe.automatic_packing": "UNLOCALIZED: Automated Packing",
"create.recipe.sawing": "UNLOCALIZED: Sawing", "create.recipe.sawing": "Sägen",
"create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting",
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "UNLOCALIZED: Block Cutting", "create.recipe.block_cutting": "UNLOCALIZED: Block Cutting",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Blockpistole", "create.recipe.blockzapper_upgrade": "Blockpistole",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing", "create.recipe.sandpaper_polishing": "Schleifen",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout", "create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
"create.recipe.draining": "UNLOCALIZED: Item Draining", "create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.processing.chance": "Chance: %1$s%%", "create.recipe.processing.chance": "Chance: %1$s%%",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", "create.recipe.heat_requirement.none": "Keine Hitze benötigt",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", "create.recipe.heat_requirement.heated": "Wenig Hitze benötigt",
"create.recipe.heat_requirement.superheated": "UNLOCALIZED: Super-Heated", "create.recipe.heat_requirement.superheated": "Viel Hitze benötigt",
"create.generic.range": "Reichweite", "create.generic.range": "Reichweite",
"create.generic.radius": "Radius", "create.generic.radius": "Radius",
@ -709,12 +710,12 @@
"create.generic.unit.ticks": "Ticks", "create.generic.unit.ticks": "Ticks",
"create.generic.unit.seconds": "Sekunden", "create.generic.unit.seconds": "Sekunden",
"create.generic.unit.minutes": "Minuten", "create.generic.unit.minutes": "Minuten",
"create.generic.unit.rpm": "UNLOCALIZED: RPM", "create.generic.unit.rpm": "RPM",
"create.generic.unit.stress": "UNLOCALIZED: su", "create.generic.unit.stress": "su",
"create.generic.unit.degrees": "UNLOCALIZED: °", "create.generic.unit.degrees": "°",
"create.generic.unit.millibuckets": "UNLOCALIZED: %1$smB", "create.generic.unit.millibuckets": "%1$smB",
"create.generic.clockwise": "UNLOCALIZED: Clockwise", "create.generic.clockwise": "Uhrzeigersinn",
"create.generic.counter_clockwise": "UNLOCALIZED: Counter-Clockwise", "create.generic.counter_clockwise": "Gegen-Uhrzeigersinn",
"create.action.scroll": "Wechseln", "create.action.scroll": "Wechseln",
"create.action.confirm": "Bestätigen", "create.action.confirm": "Bestätigen",
@ -786,7 +787,7 @@
"create.blockzapper.component.retriever": "Empfänger", "create.blockzapper.component.retriever": "Empfänger",
"create.blockzapper.component.scope": "Fernrohr", "create.blockzapper.component.scope": "Fernrohr",
"create.blockzapper.componentTier.none": "Nichts", "create.blockzapper.componentTier.none": "Nichts",
"create.blockzapper.componentTier.brass": "UNLOCALIZED: Brass", "create.blockzapper.componentTier.brass": "Messing",
"create.blockzapper.componentTier.chromatic": "UNLOCALIZED: Chromatic", "create.blockzapper.componentTier.chromatic": "UNLOCALIZED: Chromatic",
"create.blockzapper.leftClickToSet": "Linksklick auf einen Block zum Auswählen", "create.blockzapper.leftClickToSet": "Linksklick auf einen Block zum Auswählen",
"create.blockzapper.empty": "Keine Blöcke übrig!", "create.blockzapper.empty": "Keine Blöcke übrig!",
@ -815,8 +816,8 @@
"create.contraptions.clockwork.hour_first_24": "UNLOCALIZED: 24-Hour hand first", "create.contraptions.clockwork.hour_first_24": "UNLOCALIZED: 24-Hour hand first",
"create.logistics.filter": "Filter", "create.logistics.filter": "Filter",
"create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", "create.logistics.recipe_filter": "Rezeptfilter",
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter", "create.logistics.fluid_filter": "Flüssigkeitsfilter",
"create.logistics.firstFrequency": "Freq. #1", "create.logistics.firstFrequency": "Freq. #1",
"create.logistics.secondFrequency": "Freq. #2", "create.logistics.secondFrequency": "Freq. #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.", "create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
@ -841,7 +842,7 @@
"create.gui.stressometer.no_rotation": "UNLOCALIZED: No Rotation", "create.gui.stressometer.no_rotation": "UNLOCALIZED: No Rotation",
"create.gui.contraptions.not_fast_enough": "UNLOCALIZED: It appears that this %1$s is _not_ rotating with _enough_ _speed_.", "create.gui.contraptions.not_fast_enough": "UNLOCALIZED: It appears that this %1$s is _not_ rotating with _enough_ _speed_.",
"create.gui.contraptions.network_overstressed": "UNLOCALIZED: It appears that this contraption is _overstressed_. Add more sources or _slow_ _down_ the components with a high _stress_ _impact_.", "create.gui.contraptions.network_overstressed": "UNLOCALIZED: It appears that this contraption is _overstressed_. Add more sources or _slow_ _down_ the components with a high _stress_ _impact_.",
"create.gui.adjustable_crate.title": "adjustable_crate", "create.gui.adjustable_crate.title": "UNLOCALIZED: Adjustable Crate",
"create.gui.adjustable_crate.storageSpace": "Lagerraum", "create.gui.adjustable_crate.storageSpace": "Lagerraum",
"create.gui.stockpile_switch.title": "Vorratssensor", "create.gui.stockpile_switch.title": "Vorratssensor",
"create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal",
@ -849,13 +850,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%",
"create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance",
"create.gui.sequenced_gearshift.instruction.wait": "UNLOCALIZED: Wait", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "UNLOCALIZED: Duration", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End", "create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction", "create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards", "create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards", "create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards",
@ -867,7 +874,7 @@
"create.schematicAndQuill.secondPos": "Zweite Position festgelegt.", "create.schematicAndQuill.secondPos": "Zweite Position festgelegt.",
"create.schematicAndQuill.noTarget": "Halte [Strg] zur Auswahl von Luft.", "create.schematicAndQuill.noTarget": "Halte [Strg] zur Auswahl von Luft.",
"create.schematicAndQuill.abort": "Auswahl zurückgesetzt.", "create.schematicAndQuill.abort": "Auswahl zurückgesetzt.",
"create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", "create.schematicAndQuill.title": "Bauplanname:",
"create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately", "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "Mein Bauplan", "create.schematicAndQuill.fallbackName": "Mein Bauplan",
"create.schematicAndQuill.saved": "Gespeichert als %1$s", "create.schematicAndQuill.saved": "Gespeichert als %1$s",
@ -1785,8 +1792,8 @@
"item.create.crafter_slot_cover.tooltip": "UNLOCALIZED: SLOT COVER", "item.create.crafter_slot_cover.tooltip": "UNLOCALIZED: SLOT COVER",
"item.create.crafter_slot_cover.tooltip.summary": "UNLOCALIZED: Used to mark a _Mechanical Crafter_ as an empty slot in a recipe. Crafters do not necessarily have to form a full square grid. This is useful when there are recipes where _ingredients are diagonal_ to each other.", "item.create.crafter_slot_cover.tooltip.summary": "UNLOCALIZED: Used to mark a _Mechanical Crafter_ as an empty slot in a recipe. Crafters do not necessarily have to form a full square grid. This is useful when there are recipes where _ingredients are diagonal_ to each other.",
"create.tooltip.wip": "UNLOCALIZED: WIP", "create.tooltip.wip": "WIP",
"create.tooltip.workInProgress": "UNLOCALIZED: Work in progress!", "create.tooltip.workInProgress": "Work in progress!",
"create.tooltip.randomWipDescription0": "UNLOCALIZED: Please keep this item away from children.", "create.tooltip.randomWipDescription0": "UNLOCALIZED: Please keep this item away from children.",
"create.tooltip.randomWipDescription1": "UNLOCALIZED: A baby panda dies every time you use this item. Every. Time.", "create.tooltip.randomWipDescription1": "UNLOCALIZED: A baby panda dies every time you use this item. Every. Time.",
"create.tooltip.randomWipDescription2": "UNLOCALIZED: Use at your own risk.", "create.tooltip.randomWipDescription2": "UNLOCALIZED: Use at your own risk.",

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 892", "_": "Missing Localizations: 899",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -689,6 +689,7 @@
"create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting",
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "UNLOCALIZED: Block Cutting", "create.recipe.block_cutting": "UNLOCALIZED: Block Cutting",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "UNLOCALIZED: Handheld Blockzapper", "create.recipe.blockzapper_upgrade": "UNLOCALIZED: Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing", "create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
@ -849,13 +850,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%",
"create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance",
"create.gui.sequenced_gearshift.instruction.wait": "UNLOCALIZED: Wait", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "UNLOCALIZED: Duration", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End", "create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction", "create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards", "create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards", "create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 676", "_": "Missing Localizations: 685",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -689,6 +689,7 @@
"create.recipe.mechanical_crafting": "Fabrication mécanique", "create.recipe.mechanical_crafting": "Fabrication mécanique",
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "Coupe de bloc", "create.recipe.block_cutting": "Coupe de bloc",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Blockzappeur portable", "create.recipe.blockzapper_upgrade": "Blockzappeur portable",
"create.recipe.sandpaper_polishing": "Polissage au papier de verre", "create.recipe.sandpaper_polishing": "Polissage au papier de verre",
"create.recipe.mystery_conversion": "Métamorphose chromatique", "create.recipe.mystery_conversion": "Métamorphose chromatique",
@ -849,13 +850,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "Bouger sur la ligne de haut à %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "Bouger sur la ligne de haut à %1$s%%",
"create.gui.sequenced_gearshift.title": "Décaleur de rotation séquencé", "create.gui.sequenced_gearshift.title": "Décaleur de rotation séquencé",
"create.gui.sequenced_gearshift.instruction": "Instructions", "create.gui.sequenced_gearshift.instruction": "Instructions",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "Tourner", "create.gui.sequenced_gearshift.instruction.turn_angle": "Tourner",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distance",
"create.gui.sequenced_gearshift.instruction.wait": "Attente", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "Durée", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "Fin", "create.gui.sequenced_gearshift.instruction.end": "Fin",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "Vitesse, direction", "create.gui.sequenced_gearshift.speed": "Vitesse, direction",
"create.gui.sequenced_gearshift.speed.forward": "Vitesse d'entrée, normal", "create.gui.sequenced_gearshift.speed.forward": "Vitesse d'entrée, normal",
"create.gui.sequenced_gearshift.speed.forward_fast": "Vitesse double, normal", "create.gui.sequenced_gearshift.speed.forward_fast": "Vitesse double, normal",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 11", "_": "Missing Localizations: 20",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -689,6 +689,7 @@
"create.recipe.mechanical_crafting": "Costruzione meccanica", "create.recipe.mechanical_crafting": "Costruzione meccanica",
"create.recipe.automatic_shaped": "Costruzione con forma automatizzata", "create.recipe.automatic_shaped": "Costruzione con forma automatizzata",
"create.recipe.block_cutting": "Taglio di blocchi", "create.recipe.block_cutting": "Taglio di blocchi",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Zapper di blocchi portatile", "create.recipe.blockzapper_upgrade": "Zapper di blocchi portatile",
"create.recipe.sandpaper_polishing": "Levigamento da carta vetrata", "create.recipe.sandpaper_polishing": "Levigamento da carta vetrata",
"create.recipe.mystery_conversion": "Metamorfosi cromatica", "create.recipe.mystery_conversion": "Metamorfosi cromatica",
@ -849,13 +850,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "Muovi su al %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "Muovi su al %1$s%%",
"create.gui.sequenced_gearshift.title": "Cambio sequenziale", "create.gui.sequenced_gearshift.title": "Cambio sequenziale",
"create.gui.sequenced_gearshift.instruction": "Istruzione", "create.gui.sequenced_gearshift.instruction": "Istruzione",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "Gira", "create.gui.sequenced_gearshift.instruction.turn_angle": "Gira",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angolo", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angolo",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "Pistone", "create.gui.sequenced_gearshift.instruction.turn_distance": "Pistone",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distanza", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distanza",
"create.gui.sequenced_gearshift.instruction.wait": "Aspetta", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "Durata", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "Fine", "create.gui.sequenced_gearshift.instruction.end": "Fine",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "Velocità, direzione", "create.gui.sequenced_gearshift.speed": "Velocità, direzione",
"create.gui.sequenced_gearshift.speed.forward": "Velocità di ingresso, avanti", "create.gui.sequenced_gearshift.speed.forward": "Velocità di ingresso, avanti",
"create.gui.sequenced_gearshift.speed.forward_fast": "Doppia velocità, avanti", "create.gui.sequenced_gearshift.speed.forward_fast": "Doppia velocità, avanti",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 18", "_": "Missing Localizations: 27",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -689,6 +689,7 @@
"create.recipe.mechanical_crafting": "メカニカルクラフト", "create.recipe.mechanical_crafting": "メカニカルクラフト",
"create.recipe.automatic_shaped": "自動定形クラフト", "create.recipe.automatic_shaped": "自動定形クラフト",
"create.recipe.block_cutting": "自動石切", "create.recipe.block_cutting": "自動石切",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "携帯型ブロックザッパー", "create.recipe.blockzapper_upgrade": "携帯型ブロックザッパー",
"create.recipe.sandpaper_polishing": "紙やすりでの研磨", "create.recipe.sandpaper_polishing": "紙やすりでの研磨",
"create.recipe.mystery_conversion": "色彩変態", "create.recipe.mystery_conversion": "色彩変態",
@ -849,13 +850,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "動作の上限は%1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "動作の上限は%1$s%%",
"create.gui.sequenced_gearshift.title": "シーケンスギアシフト", "create.gui.sequenced_gearshift.title": "シーケンスギアシフト",
"create.gui.sequenced_gearshift.instruction": "命令", "create.gui.sequenced_gearshift.instruction": "命令",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "回転", "create.gui.sequenced_gearshift.instruction.turn_angle": "回転",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "ピストン", "create.gui.sequenced_gearshift.instruction.turn_distance": "ピストン",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距離", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距離",
"create.gui.sequenced_gearshift.instruction.wait": "待機", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "期間", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "終了", "create.gui.sequenced_gearshift.instruction.end": "終了",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "速度, 方向", "create.gui.sequenced_gearshift.speed": "速度, 方向",
"create.gui.sequenced_gearshift.speed.forward": "入力速度, 正転", "create.gui.sequenced_gearshift.speed.forward": "入力速度, 正転",
"create.gui.sequenced_gearshift.speed.forward_fast": "倍速, 正転", "create.gui.sequenced_gearshift.speed.forward_fast": "倍速, 正転",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 65", "_": "Missing Localizations: 74",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -689,6 +689,7 @@
"create.recipe.mechanical_crafting": "기계 조합", "create.recipe.mechanical_crafting": "기계 조합",
"create.recipe.automatic_shaped": "유형 자동 조합", "create.recipe.automatic_shaped": "유형 자동 조합",
"create.recipe.block_cutting": "블 절단", "create.recipe.block_cutting": "블 절단",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "휴대용 블록발사기 업그레이드", "create.recipe.blockzapper_upgrade": "휴대용 블록발사기 업그레이드",
"create.recipe.sandpaper_polishing": "사포질", "create.recipe.sandpaper_polishing": "사포질",
"create.recipe.mystery_conversion": "?", "create.recipe.mystery_conversion": "?",
@ -849,13 +850,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "최소 신호 유지 비율:%1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "최소 신호 유지 비율:%1$s%%",
"create.gui.sequenced_gearshift.title": "순서 기어쉬프트", "create.gui.sequenced_gearshift.title": "순서 기어쉬프트",
"create.gui.sequenced_gearshift.instruction": "설명", "create.gui.sequenced_gearshift.instruction": "설명",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "회전", "create.gui.sequenced_gearshift.instruction.turn_angle": "회전",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "각도", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "각도",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "피스톤", "create.gui.sequenced_gearshift.instruction.turn_distance": "피스톤",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "거리", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "거리",
"create.gui.sequenced_gearshift.instruction.wait": "정지", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "지속시간", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "마침", "create.gui.sequenced_gearshift.instruction.end": "마침",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "속도, 방향", "create.gui.sequenced_gearshift.speed": "속도, 방향",
"create.gui.sequenced_gearshift.speed.forward": "입력된 속도, 그대로 회전", "create.gui.sequenced_gearshift.speed.forward": "입력된 속도, 그대로 회전",
"create.gui.sequenced_gearshift.speed.forward_fast": "입력된 속도의 2배, 그대로 회전", "create.gui.sequenced_gearshift.speed.forward_fast": "입력된 속도의 2배, 그대로 회전",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1165", "_": "Missing Localizations: 1172",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -689,6 +689,7 @@
"create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting",
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "Blok Zagen", "create.recipe.block_cutting": "Blok Zagen",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Blokzapper", "create.recipe.blockzapper_upgrade": "Blokzapper",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing", "create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
@ -849,13 +850,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%",
"create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance",
"create.gui.sequenced_gearshift.instruction.wait": "UNLOCALIZED: Wait", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "UNLOCALIZED: Duration", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End", "create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction", "create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards", "create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards", "create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 1231", "_": "Missing Localizations: 1238",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -689,6 +689,7 @@
"create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting",
"create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting",
"create.recipe.block_cutting": "UNLOCALIZED: Block Cutting", "create.recipe.block_cutting": "UNLOCALIZED: Block Cutting",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Blockzapper Portátil", "create.recipe.blockzapper_upgrade": "Blockzapper Portátil",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing", "create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
@ -849,13 +850,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%",
"create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance",
"create.gui.sequenced_gearshift.instruction.wait": "UNLOCALIZED: Wait", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "UNLOCALIZED: Duration", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End", "create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction", "create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards", "create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards", "create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 11", "_": "Missing Localizations: 20",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -689,6 +689,7 @@
"create.recipe.mechanical_crafting": "Механическое создание", "create.recipe.mechanical_crafting": "Механическое создание",
"create.recipe.automatic_shaped": "Автоматическая форменная сборка", "create.recipe.automatic_shaped": "Автоматическая форменная сборка",
"create.recipe.block_cutting": "Резка блока", "create.recipe.block_cutting": "Резка блока",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "Ручная блоковая пушка", "create.recipe.blockzapper_upgrade": "Ручная блоковая пушка",
"create.recipe.sandpaper_polishing": "Полировка наждачной бумагой", "create.recipe.sandpaper_polishing": "Полировка наждачной бумагой",
"create.recipe.mystery_conversion": "Хроматический метаморфоз", "create.recipe.mystery_conversion": "Хроматический метаморфоз",
@ -849,13 +850,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "Двигаться к верхней линии при %1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "Двигаться к верхней линии при %1$s%%",
"create.gui.sequenced_gearshift.title": "Последовательное переключение передач", "create.gui.sequenced_gearshift.title": "Последовательное переключение передач",
"create.gui.sequenced_gearshift.instruction": "Инструкция", "create.gui.sequenced_gearshift.instruction": "Инструкция",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "Повернуть", "create.gui.sequenced_gearshift.instruction.turn_angle": "Повернуть",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Угол", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Угол",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "Поршень", "create.gui.sequenced_gearshift.instruction.turn_distance": "Поршень",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Расстояние", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Расстояние",
"create.gui.sequenced_gearshift.instruction.wait": "Перерыв", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "Продолжительность", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "Конец", "create.gui.sequenced_gearshift.instruction.end": "Конец",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "Скорость, Направление", "create.gui.sequenced_gearshift.speed": "Скорость, Направление",
"create.gui.sequenced_gearshift.speed.forward": "Скорость ввода, вперед", "create.gui.sequenced_gearshift.speed.forward": "Скорость ввода, вперед",
"create.gui.sequenced_gearshift.speed.forward_fast": "Двойная скорость, вперед", "create.gui.sequenced_gearshift.speed.forward_fast": "Двойная скорость, вперед",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 9", "_": "Missing Localizations: 18",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -689,6 +689,7 @@
"create.recipe.mechanical_crafting": "自动合成", "create.recipe.mechanical_crafting": "自动合成",
"create.recipe.automatic_shaped": "自动合成", "create.recipe.automatic_shaped": "自动合成",
"create.recipe.block_cutting": "方块切割", "create.recipe.block_cutting": "方块切割",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "手持式方块放置器", "create.recipe.blockzapper_upgrade": "手持式方块放置器",
"create.recipe.sandpaper_polishing": "砂纸打磨", "create.recipe.sandpaper_polishing": "砂纸打磨",
"create.recipe.mystery_conversion": "神秘转化", "create.recipe.mystery_conversion": "神秘转化",
@ -849,13 +850,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "移至上线%1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "移至上线%1$s%%",
"create.gui.sequenced_gearshift.title": "可编程齿轮箱", "create.gui.sequenced_gearshift.title": "可编程齿轮箱",
"create.gui.sequenced_gearshift.instruction": "指令", "create.gui.sequenced_gearshift.instruction": "指令",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "旋转", "create.gui.sequenced_gearshift.instruction.turn_angle": "旋转",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "驱动活塞", "create.gui.sequenced_gearshift.instruction.turn_distance": "驱动活塞",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距离", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距离",
"create.gui.sequenced_gearshift.instruction.wait": "等待", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "间隔", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "停止", "create.gui.sequenced_gearshift.instruction.end": "停止",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "速度,速度方向", "create.gui.sequenced_gearshift.speed": "速度,速度方向",
"create.gui.sequenced_gearshift.speed.forward": "一倍速,正向", "create.gui.sequenced_gearshift.speed.forward": "一倍速,正向",
"create.gui.sequenced_gearshift.speed.forward_fast": "两倍速,正向", "create.gui.sequenced_gearshift.speed.forward_fast": "两倍速,正向",

View file

@ -1,5 +1,5 @@
{ {
"_": "Missing Localizations: 14", "_": "Missing Localizations: 23",
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
@ -689,6 +689,7 @@
"create.recipe.mechanical_crafting": "自動合成", "create.recipe.mechanical_crafting": "自動合成",
"create.recipe.automatic_shaped": "自動合成", "create.recipe.automatic_shaped": "自動合成",
"create.recipe.block_cutting": "方塊切割", "create.recipe.block_cutting": "方塊切割",
"create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting",
"create.recipe.blockzapper_upgrade": "方塊放置器", "create.recipe.blockzapper_upgrade": "方塊放置器",
"create.recipe.sandpaper_polishing": "砂紙打磨", "create.recipe.sandpaper_polishing": "砂紙打磨",
"create.recipe.mystery_conversion": "神秘轉化", "create.recipe.mystery_conversion": "神秘轉化",
@ -849,13 +850,19 @@
"create.gui.stockpile_switch.move_to_upper_at": "移至上線%1$s%%", "create.gui.stockpile_switch.move_to_upper_at": "移至上線%1$s%%",
"create.gui.sequenced_gearshift.title": "可程式化齒輪箱", "create.gui.sequenced_gearshift.title": "可程式化齒輪箱",
"create.gui.sequenced_gearshift.instruction": "指令", "create.gui.sequenced_gearshift.instruction": "指令",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "旋轉", "create.gui.sequenced_gearshift.instruction.turn_angle": "旋轉",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "驅動活塞", "create.gui.sequenced_gearshift.instruction.turn_distance": "驅動活塞",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距離", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距離",
"create.gui.sequenced_gearshift.instruction.wait": "等待", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "間隔", "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "停止", "create.gui.sequenced_gearshift.instruction.end": "停止",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "速度,速度方向", "create.gui.sequenced_gearshift.speed": "速度,速度方向",
"create.gui.sequenced_gearshift.speed.forward": "一倍速,正向", "create.gui.sequenced_gearshift.speed.forward": "一倍速,正向",
"create.gui.sequenced_gearshift.speed.forward_fast": "兩倍速,正向", "create.gui.sequenced_gearshift.speed.forward_fast": "兩倍速,正向",

View file

@ -17,16 +17,29 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:bracket_shaft", "trigger": "create:bracket_apply",
"conditions": {} "conditions": {
"accepted_entries": [
"create:shaft"
]
}
}, },
"1": { "1": {
"trigger": "create:bracket_cog", "trigger": "create:bracket_apply",
"conditions": {} "conditions": {
"accepted_entries": [
"create:large_cogwheel",
"create:cogwheel"
]
}
}, },
"2": { "2": {
"trigger": "create:bracket_pipe", "trigger": "create:bracket_apply",
"conditions": {} "conditions": {
"accepted_entries": [
"create:fluid_pipe"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,8 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:fan", "trigger": "create:fan_processing",
"conditions": {} "conditions": {
"accepted_entries": [
"NONE"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,8 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:fan_lava", "trigger": "create:fan_processing",
"conditions": {} "conditions": {
"accepted_entries": [
"BLASTING"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,8 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:fan_smoke", "trigger": "create:fan_processing",
"conditions": {} "conditions": {
"accepted_entries": [
"SMOKING"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,8 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:fan_water", "trigger": "create:fan_processing",
"conditions": {} "conditions": {
"accepted_entries": [
"SPLASHING"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,8 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:infinite_chocolate", "trigger": "create:infinite_fluid",
"conditions": {} "conditions": {
"accepted_entries": [
"create:chocolate"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,8 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:infinite_lava", "trigger": "create:infinite_fluid",
"conditions": {} "conditions": {
"accepted_entries": [
"minecraft:lava"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -17,8 +17,12 @@
}, },
"criteria": { "criteria": {
"0": { "0": {
"trigger": "create:infinite_water", "trigger": "create:infinite_fluid",
"conditions": {} "conditions": {
"accepted_entries": [
"minecraft:water"
]
}
} }
}, },
"requirements": [ "requirements": [

View file

@ -23,10 +23,6 @@
} }
}, },
"1": { "1": {
"trigger": "create:kinetic_block",
"conditions": {}
},
"2": {
"trigger": "create:mixer", "trigger": "create:mixer",
"conditions": {} "conditions": {}
} }
@ -37,9 +33,6 @@
], ],
[ [
"1" "1"
],
[
"2"
] ]
] ]
} }

View file

@ -409,10 +409,10 @@ public class AllBlocks {
REGISTRATE.block("crushing_wheel_controller", CrushingWheelControllerBlock::new) REGISTRATE.block("crushing_wheel_controller", CrushingWheelControllerBlock::new)
.initialProperties(() -> Blocks.AIR) .initialProperties(() -> Blocks.AIR)
.blockstate((c, p) -> p.getVariantBuilder(c.get()) .blockstate((c, p) -> p.getVariantBuilder(c.get())
.forAllStates(state -> ConfiguredModel.builder() .forAllStatesExcept(state -> ConfiguredModel.builder()
.modelFile(p.models() .modelFile(p.models()
.getExistingFile(p.mcLoc("block/air"))) .getExistingFile(p.mcLoc("block/air")))
.build())) .build(), CrushingWheelControllerBlock.FACING))
.register(); .register();
public static final BlockEntry<MechanicalPressBlock> MECHANICAL_PRESS = public static final BlockEntry<MechanicalPressBlock> MECHANICAL_PRESS =

View file

@ -107,7 +107,10 @@ public class AllShapes {
.forHorizontal(Direction.SOUTH), .forHorizontal(Direction.SOUTH),
PUMP = shape(2, 0, 2, 14, 5, 14).add(4, 0, 4, 12, 16, 12) PUMP = shape(2, 0, 2, 14, 5, 14).add(4, 0, 4, 12, 16, 12)
.add(3, 12, 3, 13, 16, 13) .add(3, 12, 3, 13, 16, 13)
.forDirectional(Direction.UP) .forDirectional(Direction.UP),
CRUSHING_WHEEL_CONTROLLER_COLLISION = shape(0, 0, 0, 16, 13, 16)
.forDirectional(Direction.DOWN)
; ;
@ -145,7 +148,8 @@ public class AllShapes {
HEATER_BLOCK_SHAPE = shape(2, 0, 2, 14, 14, 14).add(0, 0, 0, 16, 4, 16) HEATER_BLOCK_SHAPE = shape(2, 0, 2, 14, 14, 14).add(0, 0, 0, 16, 4, 16)
.build(), .build(),
HEATER_BLOCK_SPECIAL_COLLISION_SHAPE = shape(0, 0, 0, 16, 4, 16).build(), HEATER_BLOCK_SPECIAL_COLLISION_SHAPE = shape(0, 0, 0, 16, 4, 16).build(),
CRUSHING_WHEEL_COLLISION_SHAPE = cuboid(0, 0, 0, 16, 22, 16), SEAT = cuboid(0, 0, 0, 16, 8, 16), CRUSHING_WHEEL_COLLISION_SHAPE = cuboid(0, 0, 0, 16, 16, 16),
SEAT = cuboid(0, 0, 0, 16, 8, 16),
SEAT_COLLISION = cuboid(0, 0, 0, 16, 6, 16), SEAT_COLLISION = cuboid(0, 0, 0, 16, 6, 16),
MECHANICAL_PROCESSOR_SHAPE = shape(VoxelShapes.fullCube()).erase(4, 0, 4, 12, 16, 12) MECHANICAL_PROCESSOR_SHAPE = shape(VoxelShapes.fullCube()).erase(4, 0, 4, 12, 16, 12)
.build(), .build(),

View file

@ -35,6 +35,7 @@ import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory;
import com.simibubi.create.compat.jei.category.SawingCategory; import com.simibubi.create.compat.jei.category.SawingCategory;
import com.simibubi.create.compat.jei.category.SpoutCategory; import com.simibubi.create.compat.jei.category.SpoutCategory;
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity; import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager; import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
import com.simibubi.create.content.contraptions.processing.BasinRecipe; import com.simibubi.create.content.contraptions.processing.BasinRecipe;
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateScreen; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateScreen;
@ -54,6 +55,7 @@ import mezz.jei.api.registration.ISubtypeRegistration;
import mezz.jei.api.runtime.IIngredientManager; import mezz.jei.api.runtime.IIngredientManager;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.crafting.ICraftingRecipe; import net.minecraft.item.crafting.ICraftingRecipe;
import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.item.crafting.IRecipeSerializer;
@ -61,8 +63,10 @@ import net.minecraft.item.crafting.IRecipeType;
import net.minecraft.item.crafting.ShapedRecipe; import net.minecraft.item.crafting.ShapedRecipe;
import net.minecraft.util.IItemProvider; import net.minecraft.util.IItemProvider;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.ModList;
@JeiPlugin @JeiPlugin
@SuppressWarnings("unused")
public class CreateJEI implements IModPlugin { public class CreateJEI implements IModPlugin {
private static final ResourceLocation ID = new ResourceLocation(Create.ID, "jei_plugin"); private static final ResourceLocation ID = new ResourceLocation(Create.ID, "jei_plugin");
@ -132,12 +136,18 @@ public class CreateJEI implements IModPlugin {
.catalyst(AllBlocks.MECHANICAL_SAW::get) .catalyst(AllBlocks.MECHANICAL_SAW::get)
.build(), .build(),
blockCutting = register("block_cutting", BlockCuttingCategory::new) blockCutting = register("block_cutting", () -> new BlockCuttingCategory(Items.STONE_BRICK_STAIRS))
.recipeList(() -> CondensedBlockCuttingRecipe.condenseRecipes(findRecipesByType(IRecipeType.STONECUTTING))) .recipeList(() -> CondensedBlockCuttingRecipe.condenseRecipes(findRecipesByType(IRecipeType.STONECUTTING)))
.catalyst(AllBlocks.MECHANICAL_SAW::get) .catalyst(AllBlocks.MECHANICAL_SAW::get)
.enableWhen(c -> c.allowStonecuttingOnSaw) .enableWhen(c -> c.allowStonecuttingOnSaw)
.build(), .build(),
woodCutting = register("wood_cutting", () -> new BlockCuttingCategory(Items.OAK_STAIRS))
.recipeList(() -> CondensedBlockCuttingRecipe.condenseRecipes(findRecipesByType(SawTileEntity.woodcuttingRecipeType.getValue())))
.catalyst(AllBlocks.MECHANICAL_SAW::get)
.enableWhenBool(c -> c.allowWoodcuttingOnSaw.get() && ModList.get().isLoaded("druidcraft"))
.build(),
packing = register("packing", PackingCategory::standard).recipes(AllRecipeTypes.COMPACTING) packing = register("packing", PackingCategory::standard).recipes(AllRecipeTypes.COMPACTING)
.catalyst(AllBlocks.MECHANICAL_PRESS::get) .catalyst(AllBlocks.MECHANICAL_PRESS::get)
.catalyst(AllBlocks.BASIN::get) .catalyst(AllBlocks.BASIN::get)
@ -293,8 +303,12 @@ public class CreateJEI implements IModPlugin {
CategoryBuilder<T> enableWhen(Function<CRecipes, ConfigBool> configValue) { CategoryBuilder<T> enableWhen(Function<CRecipes, ConfigBool> configValue) {
this.pred = c -> configValue.apply(c) this.pred = c -> configValue.apply(c)
.get() .get();
.booleanValue(); return this;
}
CategoryBuilder<T> enableWhenBool(Function<CRecipes, Boolean> configValue) {
this.pred = configValue::apply;
return this; return this;
} }

View file

@ -15,8 +15,8 @@ import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; import mezz.jei.api.gui.ingredient.IGuiItemStackGroup;
import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.Ingredient;
import net.minecraft.item.crafting.StonecuttingRecipe; import net.minecraft.item.crafting.StonecuttingRecipe;
@ -26,8 +26,8 @@ public class BlockCuttingCategory extends CreateRecipeCategory<CondensedBlockCut
private AnimatedSaw saw = new AnimatedSaw(); private AnimatedSaw saw = new AnimatedSaw();
public BlockCuttingCategory() { public BlockCuttingCategory(Item symbol) {
super(doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), Items.STONE_BRICK_STAIRS), emptyBackground(177, 70)); super(doubleItemIcon(AllBlocks.MECHANICAL_SAW.get(), symbol), emptyBackground(177, 70)); // Items.STONE_BRICK_STAIRS
} }
@Override @Override

View file

@ -175,10 +175,6 @@ public abstract class KineticTileEntity extends SmartTileEntity
boolean directionSwap = !fromOrToZero && Math.signum(previousSpeed) != Math.signum(getSpeed()); boolean directionSwap = !fromOrToZero && Math.signum(previousSpeed) != Math.signum(getSpeed());
if (fromOrToZero || directionSwap) if (fromOrToZero || directionSwap)
flickerTally = getFlickerScore() + 5; flickerTally = getFlickerScore() + 5;
if (fromOrToZero && previousSpeed == 0 && !world.isRemote)
AllTriggers.getPlayersInRange(world, pos, 4)
.forEach(p -> AllTriggers.KINETIC_BLOCK.trigger(p, getBlockState()));
} }
@Override @Override

View file

@ -37,6 +37,7 @@ public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTi
LazyOptional<IFluidHandler> oldcap = capability; LazyOptional<IFluidHandler> oldcap = capability;
capability = createEmptyHandler(); capability = createEmptyHandler();
oldcap.invalidate(); oldcap.invalidate();
super.stopTransferring();
} }
private LazyOptional<IFluidHandler> createEmptyHandler() { private LazyOptional<IFluidHandler> createEmptyHandler() {
@ -90,7 +91,7 @@ public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTi
@Override @Override
public FluidStack drain(FluidStack resource, FluidAction action) { public FluidStack drain(FluidStack resource, FluidAction action) {
if (!isConnected()) if (!canTransfer())
return FluidStack.EMPTY; return FluidStack.EMPTY;
FluidStack drain = wrapped.drain(resource, action); FluidStack drain = wrapped.drain(resource, action);
if (!drain.isEmpty() && action.execute()) if (!drain.isEmpty() && action.execute())
@ -100,7 +101,7 @@ public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTi
@Override @Override
public FluidStack drain(int maxDrain, FluidAction action) { public FluidStack drain(int maxDrain, FluidAction action) {
if (!isConnected()) if (!canTransfer())
return FluidStack.EMPTY; return FluidStack.EMPTY;
FluidStack drain = wrapped.drain(maxDrain, action); FluidStack drain = wrapped.drain(maxDrain, action);
if (!drain.isEmpty() && (action.execute() || drain.getAmount() == 1)) if (!drain.isEmpty() && (action.execute() || drain.getAmount() == 1))

View file

@ -33,6 +33,7 @@ public class PortableItemInterfaceTileEntity extends PortableStorageInterfaceTil
LazyOptional<IItemHandlerModifiable> oldCap = capability; LazyOptional<IItemHandlerModifiable> oldCap = capability;
capability = LazyOptional.of(() -> new InterfaceItemHandler(new ItemStackHandler(0))); capability = LazyOptional.of(() -> new InterfaceItemHandler(new ItemStackHandler(0)));
oldCap.invalidate(); oldCap.invalidate();
super.stopTransferring();
} }
@Override @Override
@ -55,7 +56,7 @@ public class PortableItemInterfaceTileEntity extends PortableStorageInterfaceTil
@Override @Override
public ItemStack extractItem(int slot, int amount, boolean simulate) { public ItemStack extractItem(int slot, int amount, boolean simulate) {
if (!isConnected()) if (!canTransfer())
return ItemStack.EMPTY; return ItemStack.EMPTY;
ItemStack extractItem = super.extractItem(slot, amount, simulate); ItemStack extractItem = super.extractItem(slot, amount, simulate);
if (!simulate && !extractItem.isEmpty()) if (!simulate && !extractItem.isEmpty())
@ -65,7 +66,7 @@ public class PortableItemInterfaceTileEntity extends PortableStorageInterfaceTil
@Override @Override
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
if (!isConnected()) if (!canTransfer())
return stack; return stack;
ItemStack insertItem = super.insertItem(slot, stack, simulate); ItemStack insertItem = super.insertItem(slot, stack, simulate);
if (!simulate && !insertItem.equals(stack, false)) if (!simulate && !insertItem.equals(stack, false))

View file

@ -9,6 +9,7 @@ import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.utility.LerpedFloat; import com.simibubi.create.foundation.utility.LerpedFloat;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
@ -22,6 +23,7 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
protected float distance; protected float distance;
protected LerpedFloat connectionAnimation; protected LerpedFloat connectionAnimation;
protected boolean powered; protected boolean powered;
protected Entity connectedEntity;
public PortableStorageInterfaceTileEntity(TileEntityType<?> tileEntityTypeIn) { public PortableStorageInterfaceTileEntity(TileEntityType<?> tileEntityTypeIn) {
super(tileEntityTypeIn); super(tileEntityTypeIn);
@ -33,11 +35,20 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
public void startTransferringTo(Contraption contraption, float distance) { public void startTransferringTo(Contraption contraption, float distance) {
this.distance = distance; this.distance = distance;
connectedEntity = contraption.entity;
startConnecting(); startConnecting();
notifyUpdate(); notifyUpdate();
} }
protected abstract void stopTransferring(); protected void stopTransferring() {
connectedEntity = null;
}
public boolean canTransfer() {
if (connectedEntity != null && !connectedEntity.isAlive())
stopTransferring();
return connectedEntity != null && isConnected();
}
protected abstract void invalidateCapability(); protected abstract void invalidateCapability();

View file

@ -1,6 +1,7 @@
package com.simibubi.create.content.contraptions.components.crusher; package com.simibubi.create.content.contraptions.components.crusher;
import static com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock.VALID; import static com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock.VALID;
import static com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock.FACING;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes; import com.simibubi.create.AllShapes;
@ -19,6 +20,7 @@ import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorldReader; import net.minecraft.world.IWorldReader;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -53,7 +55,7 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
@Override @Override
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
for (Direction d : Iterate.horizontalDirections) { for (Direction d : Iterate.directions) {
if (d.getAxis() == state.get(AXIS)) if (d.getAxis() == state.get(AXIS))
continue; continue;
if (AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(worldIn.getBlockState(pos.offset(d)))) if (AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(worldIn.getBlockState(pos.offset(d))))
@ -65,21 +67,26 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
} }
} }
public void updateControllers(BlockState state, World world, BlockPos pos, Direction facing) { public void updateControllers(BlockState state, World world, BlockPos pos, Direction side) {
if (facing.getAxis() == state.get(AXIS) || facing.getAxis() if (side.getAxis() == state.get(AXIS))
.isVertical())
return; return;
if (world == null) if (world == null)
return; return;
BlockPos controllerPos = pos.offset(facing); BlockPos controllerPos = pos.offset(side);
BlockPos otherWheelPos = pos.offset(facing, 2); BlockPos otherWheelPos = pos.offset(side, 2);
boolean controllerExists = AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(world.getBlockState(controllerPos)); boolean controllerExists = AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(world.getBlockState(controllerPos));
boolean controllerIsValid = controllerExists && world.getBlockState(controllerPos) boolean controllerIsValid = controllerExists && world.getBlockState(controllerPos)
.get(VALID); .get(VALID);
Direction controllerOldDirection = controllerExists
? world.getBlockState(controllerPos)
.get(FACING)
: null;
boolean controllerShouldExist = false; boolean controllerShouldExist = false;
boolean controllerShouldBeValid = false; boolean controllerShouldBeValid = false;
Direction controllerNewDirection = Direction.DOWN;
BlockState otherState = world.getBlockState(otherWheelPos); BlockState otherState = world.getBlockState(otherWheelPos);
if (AllBlocks.CRUSHING_WHEEL.has(otherState)) { if (AllBlocks.CRUSHING_WHEEL.has(otherState)) {
@ -90,10 +97,22 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
CrushingWheelTileEntity otherTe = getTileEntity(world, otherWheelPos); CrushingWheelTileEntity otherTe = getTileEntity(world, otherWheelPos);
if (te != null && otherTe != null && (te.getSpeed() > 0) != (otherTe.getSpeed() > 0) if (te != null && otherTe != null && (te.getSpeed() > 0) != (otherTe.getSpeed() > 0)
&& te.getSpeed() != 0) { && te.getSpeed() != 0) {
float signum = Math.signum(te.getSpeed()) * (state.get(AXIS) == Axis.X ? -1 : 1); Axis wheelAxis = state.get(AXIS);
controllerShouldBeValid = facing.getAxisDirection() Axis sideAxis = side.getAxis();
.getOffset() != signum; int controllerADO = Math.round(Math.signum(te.getSpeed())) * side.getAxisDirection().getOffset();
Vector3d controllerDirVec = new Vector3d(wheelAxis == Axis.X ? 1 : 0
, wheelAxis == Axis.Y ? 1 : 0
, wheelAxis == Axis.Z ? 1 : 0)
.crossProduct(new Vector3d(sideAxis == Axis.X ? 1 : 0
, sideAxis == Axis.Y ? 1 : 0
, sideAxis == Axis.Z ? 1 : 0));
controllerNewDirection = Direction.getFacingFromVector(controllerDirVec.x * controllerADO
, controllerDirVec.y * controllerADO
, controllerDirVec.z * controllerADO);
controllerShouldBeValid = true;
} }
if (otherState.get(AXIS) != state.get(AXIS)) if (otherState.get(AXIS) != state.get(AXIS))
controllerShouldExist = false; controllerShouldExist = false;
@ -111,18 +130,20 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE
if (!controllerExists) { if (!controllerExists) {
if (!world.getBlockState(controllerPos) if (!world.getBlockState(controllerPos)
.getMaterial() .getMaterial()
.isReplaceable()) .isReplaceable())
return; return;
world.setBlockState(controllerPos, AllBlocks.CRUSHING_WHEEL_CONTROLLER.getDefaultState() world.setBlockState(controllerPos, AllBlocks.CRUSHING_WHEEL_CONTROLLER.getDefaultState()
.with(VALID, controllerShouldBeValid)); .with(VALID, controllerShouldBeValid)
} else if (controllerIsValid != controllerShouldBeValid) { .with(FACING, controllerNewDirection));
} else if (controllerIsValid != controllerShouldBeValid || controllerOldDirection != controllerNewDirection) {
world.setBlockState(controllerPos, world.getBlockState(controllerPos) world.setBlockState(controllerPos, world.getBlockState(controllerPos)
.with(VALID, controllerShouldBeValid)); .with(VALID, controllerShouldBeValid)
.with(FACING, controllerNewDirection));
} }
((CrushingWheelControllerBlock) AllBlocks.CRUSHING_WHEEL_CONTROLLER.get()) ((CrushingWheelControllerBlock) AllBlocks.CRUSHING_WHEEL_CONTROLLER.get())
.updateSpeed(world.getBlockState(controllerPos), world, controllerPos); .updateSpeed(world.getBlockState(controllerPos), world, controllerPos);
} }

View file

@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.components.crusher;
import java.util.Random; import java.util.Random;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities; import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.block.ITE;
@ -11,6 +12,7 @@ import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.DirectionalBlock;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
@ -23,7 +25,7 @@ import net.minecraft.state.StateContainer.Builder;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShape;
@ -34,7 +36,7 @@ import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
import net.minecraft.world.World; import net.minecraft.world.World;
public class CrushingWheelControllerBlock extends Block public class CrushingWheelControllerBlock extends DirectionalBlock
implements ITE<CrushingWheelControllerTileEntity> { implements ITE<CrushingWheelControllerTileEntity> {
public CrushingWheelControllerBlock(Properties p_i48440_1_) { public CrushingWheelControllerBlock(Properties p_i48440_1_) {
@ -66,27 +68,40 @@ public class CrushingWheelControllerBlock extends Block
@Override @Override
protected void fillStateContainer(Builder<Block, BlockState> builder) { protected void fillStateContainer(Builder<Block, BlockState> builder) {
builder.add(VALID); builder.add(VALID);
builder.add(FACING);
super.fillStateContainer(builder); super.fillStateContainer(builder);
} }
public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) {
if (!state.get(VALID)) if (!state.get(VALID))
return; return;
Direction facing = state.get(FACING);
Axis axis = facing.getAxis();
checkEntityForProcessing(worldIn, pos, entityIn);
withTileEntityDo(worldIn, pos, te -> { withTileEntityDo(worldIn, pos, te -> {
if (te.processingEntity == entityIn) if (te.processingEntity == entityIn)
entityIn.setMotionMultiplier(state, new Vector3d(0.25D, (double) 0.05F, 0.25D));
entityIn.setMotionMultiplier(state, new Vector3d(axis == Axis.X ? (double) 0.05F : 0.25D
, axis == Axis.Y ? (double) 0.05F : 0.25D
, axis == Axis.Z ? (double) 0.05F : 0.25D));
}); });
} }
@Override public void checkEntityForProcessing(World worldIn, BlockPos pos, Entity entityIn){
public void onLanded(IBlockReader worldIn, Entity entityIn) {
super.onLanded(worldIn, entityIn);
try { try {
CrushingWheelControllerTileEntity te = getTileEntity(worldIn, entityIn.getBlockPos().down()); CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos);
if (te.crushingspeed == 0) if (te.crushingspeed == 0)
return; return;
if (entityIn instanceof ItemEntity) if (entityIn instanceof ItemEntity)
((ItemEntity) entityIn).setPickupDelay(10); ((ItemEntity) entityIn).setPickupDelay(10);
CompoundNBT data = entityIn.getPersistentData();
if (data.contains("BypassCrushingWheel")) {
if (pos.equals(NBTUtil.readBlockPos(data.getCompound("BypassCrushingWheel"))))
return;
}
if (te.isOccupied()) if (te.isOccupied())
return; return;
boolean isPlayer = entityIn instanceof PlayerEntity; boolean isPlayer = entityIn instanceof PlayerEntity;
@ -99,6 +114,12 @@ public class CrushingWheelControllerBlock extends Block
} catch (TileEntityException e) {} } catch (TileEntityException e) {}
} }
@Override
public void onLanded(IBlockReader worldIn, Entity entityIn) {
super.onLanded(worldIn, entityIn);
//Moved to onEntityCollision to allow for omnidirectional input
}
@Override @Override
public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) { public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) {
if (!stateIn.get(VALID)) if (!stateIn.get(VALID))
@ -128,7 +149,7 @@ public class CrushingWheelControllerBlock extends Block
return; return;
} }
for (Direction d : Iterate.horizontalDirections) { for (Direction d : Iterate.directions) {
BlockState neighbour = world.getBlockState(pos.offset(d)); BlockState neighbour = world.getBlockState(pos.offset(d));
if (!AllBlocks.CRUSHING_WHEEL.has(neighbour)) if (!AllBlocks.CRUSHING_WHEEL.has(neighbour))
continue; continue;
@ -144,22 +165,19 @@ public class CrushingWheelControllerBlock extends Block
@Override @Override
public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos,
ISelectionContext context) { ISelectionContext context) {
if (!state.get(VALID)) if (!state.get(VALID))
return VoxelShapes.fullCube(); return AllShapes.CRUSHING_WHEEL_CONTROLLER_COLLISION.get(state.get(FACING));
Entity entity = context.getEntity(); Entity entity = context.getEntity();
if (entity != null) { if (entity != null) {
if (entity != null) {
CompoundNBT data = entity.getPersistentData();
if (data.contains("BypassCrushingWheel")) {
if (pos.equals(NBTUtil.readBlockPos(data.getCompound("BypassCrushingWheel"))))
return VoxelShapes.empty();
}
}
if (new AxisAlignedBB(pos).contains(entity.getPositionVec())) CompoundNBT data = entity.getPersistentData();
return VoxelShapes.empty(); if (data.contains("BypassCrushingWheel")) {
if (pos.equals(NBTUtil.readBlockPos(data.getCompound("BypassCrushingWheel"))))
if (state.get(FACING) != Direction.UP) //Allow output items to land on top of the block rather than falling back through.
return VoxelShapes.empty();
}
try { try {
CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos); CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos);
@ -167,7 +185,7 @@ public class CrushingWheelControllerBlock extends Block
return VoxelShapes.empty(); return VoxelShapes.empty();
} catch (TileEntityException e) {} } catch (TileEntityException e) {}
} }
return VoxelShapes.fullCube(); return AllShapes.CRUSHING_WHEEL_CONTROLLER_COLLISION.get(state.get(FACING));
} }
@Override @Override

View file

@ -6,6 +6,8 @@ import java.util.Optional;
import java.util.Random; import java.util.Random;
import java.util.UUID; import java.util.UUID;
import static com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock.FACING;
import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.contraptions.processing.ProcessingInventory; import com.simibubi.create.content.contraptions.processing.ProcessingInventory;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
@ -30,7 +32,9 @@ import net.minecraft.particles.ItemParticleData;
import net.minecraft.particles.ParticleTypes; import net.minecraft.particles.ParticleTypes;
import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
@ -65,7 +69,15 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
@Override @Override
public void addBehaviours(List<TileEntityBehaviour> behaviours) { public void addBehaviours(List<TileEntityBehaviour> behaviours) {
behaviours.add(new DirectBeltInputBehaviour(this)); behaviours.add(new DirectBeltInputBehaviour(this).onlyInsertWhen(this::supportsDirectBeltInput));
}
private boolean supportsDirectBeltInput(Direction side) {
BlockState blockState = getBlockState();
if (blockState == null)
return false;
Direction direction = blockState.get(CrushingWheelControllerBlock.FACING);
return direction == Direction.DOWN || direction == side;
} }
@Override @Override
@ -74,26 +86,37 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
if (searchForEntity) { if (searchForEntity) {
searchForEntity = false; searchForEntity = false;
List<Entity> search = world.getEntitiesInAABBexcluding(null, new AxisAlignedBB(getPos()), List<Entity> search = world.getEntitiesInAABBexcluding(null, new AxisAlignedBB(getPos()),
e -> entityUUID.equals(e.getUniqueID())); e -> entityUUID.equals(e.getUniqueID()));
if (search.isEmpty()) if (search.isEmpty())
clear(); clear();
else else
processingEntity = search.get(0); processingEntity = search.get(0);
} }
if (!isOccupied()) if (!isOccupied())
return; return;
if (crushingspeed == 0) if (crushingspeed == 0)
return; return;
float speed = crushingspeed * 4; float speed = crushingspeed * 4;
Vector3d outPos = VecHelper.getCenterOf(pos);
Vector3d centerPos = VecHelper.getCenterOf(pos);
Direction facing = getBlockState().get(FACING);
int offset = facing.getAxisDirection().getOffset();
Vector3d outSpeed = new Vector3d((facing.getAxis() == Axis.X ? 0.25D : 0.0D) * offset
, offset == 1 ? (facing.getAxis() == Axis.Y ? 0.5D : 0.0D) : 0.0D //Increased upwards speed so upwards crushing wheels shoot out the item properly.
, (facing.getAxis() == Axis.Z ? 0.25D : 0.0D) * offset); //No downwards speed, so downwards crushing wheels drop the items as before.
Vector3d outPos = centerPos.add((facing.getAxis() == Axis.X ? .55f * offset : 0f)
, (facing.getAxis() == Axis.Y ? .55f * offset : 0f)
, (facing.getAxis() == Axis.Z ? .55f * offset : 0f));
if (!hasEntity()) { if (!hasEntity()) {
float processingSpeed = float processingSpeed =
MathHelper.clamp((speed) / (!inventory.appliedRecipe ? MathHelper.log2(inventory.getStackInSlot(0) MathHelper.clamp((speed) / (!inventory.appliedRecipe ? MathHelper.log2(inventory.getStackInSlot(0)
.getCount()) : 1), .25f, 20); .getCount()) : 1), .25f, 20);
inventory.remainingTime -= processingSpeed; inventory.remainingTime -= processingSpeed;
spawnParticles(inventory.getStackInSlot(0)); spawnParticles(inventory.getStackInSlot(0));
@ -107,27 +130,59 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
return; return;
} }
if (inventory.remainingTime <= 0) { if (inventory.remainingTime > 0) {
for (int slot = 0; slot < inventory.getSlots(); slot++) {
ItemStack stack = inventory.getStackInSlot(slot);
if (stack.isEmpty())
continue;
ItemEntity entityIn = new ItemEntity(world, outPos.x, outPos.y, outPos.z, stack);
entityIn.setMotion(Vector3d.ZERO);
entityIn.getPersistentData()
.put("BypassCrushingWheel", NBTUtil.writeBlockPos(pos));
world.addEntity(entityIn);
}
inventory.clear();
world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16);
return; return;
} }
inventory.remainingTime = 0;
//Output Items
if (facing.getAxis().isHorizontal() || facing == Direction.DOWN) {
BlockPos nextPos = pos.add(facing.getAxis() == Axis.X ? 1f * offset : 0f
, (-1f)
, facing.getAxis() == Axis.Z ? 1f * offset : 0f);
DirectBeltInputBehaviour behaviour = TileEntityBehaviour.get(world, nextPos, DirectBeltInputBehaviour.TYPE);
if (behaviour != null) {
boolean changed = false;
if (!behaviour.canInsertFromSide(facing))
return;
for (int slot = 0; slot < inventory.getSlots(); slot++) {
ItemStack stack = inventory.getStackInSlot(slot);
if (stack.isEmpty())
continue;
ItemStack remainder = behaviour.handleInsertion(stack, facing, false);
if (remainder.equals(stack, false))
continue;
inventory.setStackInSlot(slot, remainder);
changed = true;
}
if (changed) {
markDirty();
sendData();
}
return;
}
}
//Eject Items
for (int slot = 0; slot < inventory.getSlots(); slot++) {
ItemStack stack = inventory.getStackInSlot(slot);
if (stack.isEmpty())
continue;
ItemEntity entityIn = new ItemEntity(world, outPos.x, outPos.y, outPos.z, stack);
entityIn.setMotion(outSpeed);
entityIn.getPersistentData()
.put("BypassCrushingWheel", NBTUtil.writeBlockPos(pos));
world.addEntity(entityIn);
}
inventory.clear();
world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16);
return; return;
} }
if (!processingEntity.isAlive() || !processingEntity.getBoundingBox() if (!processingEntity.isAlive() || !processingEntity.getBoundingBox()
.intersects(new AxisAlignedBB(pos).grow(.5f))) { .intersects(new AxisAlignedBB(pos).grow(.5f))) {
clear(); clear();
return; return;
} }
@ -136,32 +191,49 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
double zMotion = ((pos.getZ() + .5f) - processingEntity.getZ()) / 2f; double zMotion = ((pos.getZ() + .5f) - processingEntity.getZ()) / 2f;
if (processingEntity.isSneaking()) if (processingEntity.isSneaking())
xMotion = zMotion = 0; xMotion = zMotion = 0;
double movement = Math.max(-speed / 4f, -.5f) * -offset;
processingEntity.setMotion(new Vector3d(xMotion, Math.max(-speed / 4f, -.5f), zMotion)); processingEntity.setMotion(new Vector3d(facing.getAxis() == Axis.X ? movement : xMotion
, facing.getAxis() == Axis.Y ? movement : 0f //Do not move entities upwards or downwards for horizontal crushers,
, facing.getAxis() == Axis.Z ? movement : zMotion)); //Or they'll only get their feet crushed.
if (world.isRemote) if (world.isRemote)
return; return;
if (!(processingEntity instanceof ItemEntity)) { if (!(processingEntity instanceof ItemEntity)) {
processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource, processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource,
AllConfigs.SERVER.kinetics.crushingDamage.get()); AllConfigs.SERVER.kinetics.crushingDamage.get());
if (!processingEntity.isAlive()) { if (!processingEntity.isAlive()) {
processingEntity.setPosition(outPos.x, outPos.y - .75f, outPos.z); processingEntity.setPosition(outPos.x + (facing.getAxis() == Axis.X ? .75f * offset : 0f) //This is supposed to move the mobs to the output location
, outPos.y + (facing.getAxis() == Axis.Y ? .75f * offset : 0f) //So the item drops end up on the other end
, outPos.z + (facing.getAxis() == Axis.Z ? .75f * offset : 0f)); //This, however, does not currently work consistently for non-downwards crushers.
} }
return; return;
} }
ItemEntity itemEntity = (ItemEntity) processingEntity; ItemEntity itemEntity = (ItemEntity) processingEntity;
itemEntity.setPickupDelay(20); itemEntity.setPickupDelay(20);
if (processingEntity.getY() < pos.getY() + .25f) { if (facing.getAxis() == Axis.Y) {
inventory.clear(); if (processingEntity.getY() * -offset < (centerPos.y - .25f) * -offset) {
inventory.setStackInSlot(0, itemEntity.getItem() intakeItem(itemEntity);
.copy()); }
itemInserted(inventory.getStackInSlot(0)); } else if (facing.getAxis() == Axis.Z) {
itemEntity.remove(); if (processingEntity.getZ() * -offset < (centerPos.z - .25f) * -offset) {
world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); intakeItem(itemEntity);
}
} else {
if (processingEntity.getX() * -offset < (centerPos.x - .25f) * -offset) {
intakeItem(itemEntity);
}
} }
}
private void intakeItem(ItemEntity itemEntity) {
inventory.clear();
inventory.setStackInSlot(0, itemEntity.getItem()
.copy());
itemInserted(inventory.getStackInSlot(0));
itemEntity.remove();
world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16);
} }
protected void spawnParticles(ItemStack stack) { protected void spawnParticles(ItemStack stack) {
@ -171,14 +243,14 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
IParticleData particleData = null; IParticleData particleData = null;
if (stack.getItem() instanceof BlockItem) if (stack.getItem() instanceof BlockItem)
particleData = new BlockParticleData(ParticleTypes.BLOCK, ((BlockItem) stack.getItem()).getBlock() particleData = new BlockParticleData(ParticleTypes.BLOCK, ((BlockItem) stack.getItem()).getBlock()
.getDefaultState()); .getDefaultState());
else else
particleData = new ItemParticleData(ParticleTypes.ITEM, stack); particleData = new ItemParticleData(ParticleTypes.ITEM, stack);
Random r = world.rand; Random r = world.rand;
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
world.addParticle(particleData, pos.getX() + r.nextFloat(), pos.getY() + r.nextFloat(), world.addParticle(particleData, pos.getX() + r.nextFloat(), pos.getY() + r.nextFloat(),
pos.getZ() + r.nextFloat(), 0, 0, 0); pos.getZ() + r.nextFloat(), 0, 0, 0);
} }
private void applyRecipe() { private void applyRecipe() {
@ -187,11 +259,11 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
List<ItemStack> list = new ArrayList<>(); List<ItemStack> list = new ArrayList<>();
if (recipe.isPresent()) { if (recipe.isPresent()) {
int rolls = inventory.getStackInSlot(0) int rolls = inventory.getStackInSlot(0)
.getCount(); .getCount();
inventory.clear(); inventory.clear();
for (int roll = 0; roll < rolls; roll++) { for (int roll = 0; roll < rolls; roll++) {
List<ItemStack> rolledResults = recipe.get() List<ItemStack> rolledResults = recipe.get()
.rollResults(); .rollResults();
for (int i = 0; i < rolledResults.size(); i++) { for (int i = 0; i < rolledResults.size(); i++) {
ItemStack stack = rolledResults.get(i); ItemStack stack = rolledResults.get(i);
ItemHelper.addToList(stack, list); ItemHelper.addToList(stack, list);
@ -240,7 +312,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
private void itemInserted(ItemStack stack) { private void itemInserted(ItemStack stack) {
Optional<ProcessingRecipe<RecipeWrapper>> recipe = findRecipe(); Optional<ProcessingRecipe<RecipeWrapper>> recipe = findRecipe();
inventory.remainingTime = recipe.isPresent() ? recipe.get() inventory.remainingTime = recipe.isPresent() ? recipe.get()
.getProcessingDuration() : 100; .getProcessingDuration() : 100;
inventory.appliedRecipe = false; inventory.appliedRecipe = false;
} }

View file

@ -114,10 +114,10 @@ public class AirCurrent {
entityDistance -= .5f; entityDistance -= .5f;
InWorldProcessing.Type processingType = getSegmentAt((float) entityDistance); InWorldProcessing.Type processingType = getSegmentAt((float) entityDistance);
if (entity instanceof ServerPlayerEntity)
AllTriggers.triggerFor(AllTriggers.FAN_PROCESSING.constructTriggerFor(processingType), (PlayerEntity) entity);
if (processingType == null) { if (processingType == null || processingType == Type.NONE) {
if (entity instanceof ServerPlayerEntity)
AllTriggers.triggerFor(AllTriggers.FAN, (PlayerEntity) entity);
continue; continue;
} }
@ -140,24 +140,18 @@ public class AirCurrent {
entity.setFire(10); entity.setFire(10);
entity.attackEntityFrom(damageSourceLava, 4); entity.attackEntityFrom(damageSourceLava, 4);
} }
if (entity instanceof ServerPlayerEntity)
AllTriggers.triggerFor(AllTriggers.FAN_LAVA, (PlayerEntity) entity);
break; break;
case SMOKING: case SMOKING:
if (!entity.isFireImmune()) { if (!entity.isFireImmune()) {
entity.setFire(2); entity.setFire(2);
entity.attackEntityFrom(damageSourceFire, 2); entity.attackEntityFrom(damageSourceFire, 2);
} }
if (entity instanceof ServerPlayerEntity)
AllTriggers.triggerFor(AllTriggers.FAN_SMOKE, (PlayerEntity) entity);
break; break;
case SPLASHING: case SPLASHING:
if (entity instanceof EndermanEntity || entity.getType() == EntityType.SNOW_GOLEM if (entity instanceof EndermanEntity || entity.getType() == EntityType.SNOW_GOLEM
|| entity.getType() == EntityType.BLAZE) { || entity.getType() == EntityType.BLAZE) {
entity.attackEntityFrom(DamageSource.DROWN, 2); entity.attackEntityFrom(DamageSource.DROWN, 2);
} }
if (entity instanceof ServerPlayerEntity)
AllTriggers.triggerFor(AllTriggers.FAN_WATER, (PlayerEntity) entity);
if (!entity.isBurning()) if (!entity.isBurning())
break; break;
entity.extinguish(); entity.extinguish();
@ -194,7 +188,7 @@ public class AirCurrent {
AirCurrentSegment currentSegment = new AirCurrentSegment(); AirCurrentSegment currentSegment = new AirCurrentSegment();
segments.clear(); segments.clear();
currentSegment.startOffset = 0; currentSegment.startOffset = 0;
InWorldProcessing.Type type = null; InWorldProcessing.Type type = Type.NONE;
int limit = (int) (maxDistance + .5f); int limit = (int) (maxDistance + .5f);
int searchStart = pushing ? 0 : limit; int searchStart = pushing ? 0 : limit;
@ -204,7 +198,7 @@ public class AirCurrent {
for (int i = searchStart; i * searchStep <= searchEnd * searchStep; i += searchStep) { for (int i = searchStart; i * searchStep <= searchEnd * searchStep; i += searchStep) {
BlockPos currentPos = start.offset(direction, i); BlockPos currentPos = start.offset(direction, i);
InWorldProcessing.Type newType = InWorldProcessing.Type.byBlock(world, currentPos); InWorldProcessing.Type newType = InWorldProcessing.Type.byBlock(world, currentPos);
if (newType != null) if (newType != Type.NONE)
type = newType; type = newType;
if (currentSegment.type != type || currentSegment.startOffset == 0) { if (currentSegment.type != type || currentSegment.startOffset == 0) {
currentSegment.endOffset = i; currentSegment.endOffset = i;
@ -342,7 +336,7 @@ public class AirCurrent {
continue; continue;
return airCurrentSegment.type; return airCurrentSegment.type;
} }
return null; return InWorldProcessing.Type.NONE;
} }
public static class AirCurrentSegment { public static class AirCurrentSegment {

View file

@ -4,9 +4,9 @@ import java.util.ArrayList;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.google.common.base.Predicate;
import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.AllTags; import com.simibubi.create.AllTags;
import com.simibubi.create.content.contraptions.components.actors.BlockBreakingKineticTileEntity; import com.simibubi.create.content.contraptions.components.actors.BlockBreakingKineticTileEntity;
@ -23,6 +23,7 @@ import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.recipe.RecipeConditions; import com.simibubi.create.foundation.utility.recipe.RecipeConditions;
import com.simibubi.create.foundation.utility.recipe.RecipeFinder; import com.simibubi.create.foundation.utility.recipe.RecipeFinder;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraft.block.BambooBlock; import net.minecraft.block.BambooBlock;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
@ -46,21 +47,30 @@ import net.minecraft.particles.ParticleTypes;
import net.minecraft.tags.BlockTags; import net.minecraft.tags.BlockTags;
import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.LazyValue;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.registry.Registry;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import javax.annotation.ParametersAreNonnullByDefault;
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class SawTileEntity extends BlockBreakingKineticTileEntity { public class SawTileEntity extends BlockBreakingKineticTileEntity {
private static final Object cuttingRecipesKey = new Object(); private static final Object cuttingRecipesKey = new Object();
public static final LazyValue<IRecipeType<?>> woodcuttingRecipeType = new LazyValue<>(() -> Registry.RECIPE_TYPE.getOrDefault(new ResourceLocation("druidcraft", "woodcutting")));
public ProcessingInventory inventory; public ProcessingInventory inventory;
private int recipeIndex; private int recipeIndex;
private LazyOptional<IItemHandler> invProvider = LazyOptional.empty(); private final LazyOptional<IItemHandler> invProvider;
private FilteringBehaviour filtering; private FilteringBehaviour filtering;
public SawTileEntity(TileEntityType<? extends SawTileEntity> type) { public SawTileEntity(TileEntityType<? extends SawTileEntity> type) {
@ -247,7 +257,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
List<ItemStack> results = new LinkedList<ItemStack>(); List<ItemStack> results = new LinkedList<ItemStack>();
if (recipe instanceof CuttingRecipe) if (recipe instanceof CuttingRecipe)
results = ((CuttingRecipe) recipe).rollResults(); results = ((CuttingRecipe) recipe).rollResults();
else if (recipe instanceof StonecuttingRecipe) else if (recipe instanceof StonecuttingRecipe || recipe.getType() == woodcuttingRecipeType.getValue())
results.add(recipe.getRecipeOutput() results.add(recipe.getRecipeOutput()
.copy()); .copy());
@ -262,10 +272,20 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
} }
private List<? extends IRecipe<?>> getRecipes() { private List<? extends IRecipe<?>> getRecipes() {
/*
Predicate<IRecipe<?>> types = AllConfigs.SERVER.recipes.allowStonecuttingOnSaw.get() Predicate<IRecipe<?>> types = AllConfigs.SERVER.recipes.allowStonecuttingOnSaw.get()
? RecipeConditions.isOfType(IRecipeType.STONECUTTING, AllRecipeTypes.CUTTING.getType()) ? RecipeConditions.isOfType(IRecipeType.STONECUTTING, AllRecipeTypes.CUTTING.getType())
: RecipeConditions.isOfType(AllRecipeTypes.CUTTING.getType()); : RecipeConditions.isOfType(AllRecipeTypes.CUTTING.getType());
List<IRecipe<?>> startedSearch = RecipeFinder.get(cuttingRecipesKey, world, types);
*/
Predicate<IRecipe<?>> types = RecipeConditions.isOfType(
AllRecipeTypes.CUTTING.getType(),
AllConfigs.SERVER.recipes.allowStonecuttingOnSaw.get() ? IRecipeType.STONECUTTING : null,
AllConfigs.SERVER.recipes.allowWoodcuttingOnSaw.get() ? woodcuttingRecipeType.getValue() : null
);
List<IRecipe<?>> startedSearch = RecipeFinder.get(cuttingRecipesKey, world, types);
return startedSearch.stream() return startedSearch.stream()
.filter(RecipeConditions.outputMatchesFilter(filtering)) .filter(RecipeConditions.outputMatchesFilter(filtering))
.filter(RecipeConditions.firstIngredientMatches(inventory.getStackInSlot(0))) .filter(RecipeConditions.firstIngredientMatches(inventory.getStackInSlot(0)))

View file

@ -59,6 +59,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
protected Contraption contraption; protected Contraption contraption;
protected boolean initialized; protected boolean initialized;
private boolean prevPosInvalid; private boolean prevPosInvalid;
private boolean ticking;
public AbstractContraptionEntity(EntityType<?> entityTypeIn, World worldIn) { public AbstractContraptionEntity(EntityType<?> entityTypeIn, World worldIn) {
super(entityTypeIn, worldIn); super(entityTypeIn, worldIn);
@ -246,6 +247,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
if (!world.isRemote) if (!world.isRemote)
contraption.stalled = false; contraption.stalled = false;
ticking = true;
for (MutablePair<BlockInfo, MovementContext> pair : contraption.getActors()) { for (MutablePair<BlockInfo, MovementContext> pair : contraption.getActors()) {
MovementContext context = pair.right; MovementContext context = pair.right;
BlockInfo blockInfo = pair.left; BlockInfo blockInfo = pair.left;
@ -265,13 +267,25 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
continue; continue;
if (newPosVisited && !context.stall) { if (newPosVisited && !context.stall) {
actor.visitNewPosition(context, gridPosition); actor.visitNewPosition(context, gridPosition);
if (!isAlive())
break;
context.firstMovement = false; context.firstMovement = false;
} }
if (!oldMotion.equals(context.motion)) if (!oldMotion.equals(context.motion)) {
actor.onSpeedChanged(context, oldMotion, context.motion); actor.onSpeedChanged(context, oldMotion, context.motion);
if (!isAlive())
break;
}
actor.tick(context); actor.tick(context);
if (!isAlive())
break;
contraption.stalled |= context.stall; contraption.stalled |= context.stall;
} }
if (!isAlive()) {
contraption.stop(world);
return;
}
ticking = false;
for (Entity entity : getPassengers()) { for (Entity entity : getPassengers()) {
if (!(entity instanceof OrientedContraptionEntity)) if (!(entity instanceof OrientedContraptionEntity))
@ -445,7 +459,8 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
@Override @Override
public void remove(boolean keepData) { public void remove(boolean keepData) {
if (!world.isRemote && !removed && contraption != null) { if (!world.isRemote && !removed && contraption != null) {
contraption.stop(world); if (!ticking)
contraption.stop(world);
} }
super.remove(keepData); super.remove(keepData);
} }

View file

@ -47,6 +47,8 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity {
if (!(world.getBlockState(pos) if (!(world.getBlockState(pos)
.getBlock() instanceof MechanicalPistonBlock)) .getBlock() instanceof MechanicalPistonBlock))
return; return;
if (getMovementSpeed() == 0)
return;
Direction direction = getBlockState().get(BlockStateProperties.FACING); Direction direction = getBlockState().get(BlockStateProperties.FACING);

View file

@ -8,7 +8,6 @@ import java.util.Set;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.simibubi.create.AllFluids;
import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.advancement.AllTriggers;
import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.fluid.FluidHelper;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
@ -133,12 +132,7 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour {
AllTriggers.triggerForNearbyPlayers(AllTriggers.HOSE_PULLEY, world, tileEntity.getPos(), 8); AllTriggers.triggerForNearbyPlayers(AllTriggers.HOSE_PULLEY, world, tileEntity.getPos(), 8);
if (infinite) { if (infinite) {
if (FluidHelper.isLava(fluid)) AllTriggers.triggerForNearbyPlayers(AllTriggers.INFINITE_FLUID.constructTriggerFor(FluidHelper.convertToStill(fluid)), world, tileEntity.getPos(), 8);
AllTriggers.triggerForNearbyPlayers(AllTriggers.INFINITE_LAVA, world, tileEntity.getPos(), 8);
if (FluidHelper.isWater(fluid))
AllTriggers.triggerForNearbyPlayers(AllTriggers.INFINITE_WATER, world, tileEntity.getPos(), 8);
if (fluid.isEquivalentTo(AllFluids.CHOCOLATE.get()))
AllTriggers.triggerForNearbyPlayers(AllTriggers.INFINITE_CHOCOLATE, world, tileEntity.getPos(), 8);
return true; return true;
} }

View file

@ -25,7 +25,7 @@ public class FluidPipeTileEntity extends SmartTileEntity {
public void addBehaviours(List<TileEntityBehaviour> behaviours) { public void addBehaviours(List<TileEntityBehaviour> behaviours) {
behaviours.add(new StandardPipeFluidTransportBehaviour(this)); behaviours.add(new StandardPipeFluidTransportBehaviour(this));
behaviours.add(new BracketedTileEntityBehaviour(this, this::canHaveBracket) behaviours.add(new BracketedTileEntityBehaviour(this, this::canHaveBracket)
.withTrigger(state -> AllTriggers.BRACKET_PIPE)); .withTrigger(state -> AllTriggers.BRACKET_APPLY_TRIGGER.constructTriggerFor(state.getBlock())));
} }
private boolean canHaveBracket(BlockState state) { private boolean canHaveBracket(BlockState state) {

View file

@ -38,9 +38,12 @@ public class Instruction {
case TURN_DISTANCE: case TURN_DISTANCE:
return (int) ((1 - initialProgress) * value / metersPerTick + offset); return (int) ((1 - initialProgress) * value / metersPerTick + offset);
case WAIT: case DELAY:
return (int) ((1 - initialProgress) * value + 1); return (int) ((1 - initialProgress) * value + 1);
case AWAIT:
return -1;
case END: case END:
default: default:
break; break;
@ -57,7 +60,8 @@ public class Instruction {
return speedModifier.value; return speedModifier.value;
case END: case END:
case WAIT: case DELAY:
case AWAIT:
default: default:
break; break;
@ -65,6 +69,10 @@ public class Instruction {
return 0; return 0;
} }
OnIsPoweredResult onRedstonePulse() {
return instruction == SequencerInstructions.AWAIT ? OnIsPoweredResult.CONTINUE : OnIsPoweredResult.NOTHING;
}
public static ListNBT serializeAll(Vector<Instruction> instructions) { public static ListNBT serializeAll(Vector<Instruction> instructions) {
ListNBT list = new ListNBT(); ListNBT list = new ListNBT();
instructions.forEach(i -> list.add(i.serialize())); instructions.forEach(i -> list.add(i.serialize()));
@ -95,8 +103,7 @@ public class Instruction {
} }
static Instruction deserialize(CompoundNBT tag) { static Instruction deserialize(CompoundNBT tag) {
Instruction instruction = Instruction instruction = new Instruction(NBTHelper.readEnum(tag, "Type", SequencerInstructions.class));
new Instruction(NBTHelper.readEnum(tag, "Type", SequencerInstructions.class));
instruction.speedModifier = NBTHelper.readEnum(tag, "Modifier", InstructionSpeedModifiers.class); instruction.speedModifier = NBTHelper.readEnum(tag, "Modifier", InstructionSpeedModifiers.class);
instruction.value = tag.getInt("Value"); instruction.value = tag.getInt("Value");
return instruction; return instruction;

View file

@ -0,0 +1,6 @@
package com.simibubi.create.content.contraptions.relays.advanced.sequencer;
public enum OnIsPoweredResult {
NOTHING,
CONTINUE
}

View file

@ -64,15 +64,15 @@ public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implemen
return; return;
boolean previouslyPowered = state.get(STATE) != 0; boolean previouslyPowered = state.get(STATE) != 0;
if (previouslyPowered != worldIn.isBlockPowered(pos)) boolean isPowered = worldIn.isBlockPowered(pos);
withTileEntityDo(worldIn, pos, SequencedGearshiftTileEntity::onRedstoneUpdate); withTileEntityDo(worldIn, pos, sgte -> sgte.onRedstoneUpdate(isPowered, previouslyPowered));
} }
@Override @Override
protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) { protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) {
return false; return false;
} }
@Override @Override
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
if (state.get(VERTICAL)) if (state.get(VERTICAL))
@ -146,15 +146,16 @@ public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implemen
public Class<SequencedGearshiftTileEntity> getTileEntityClass() { public Class<SequencedGearshiftTileEntity> getTileEntityClass() {
return SequencedGearshiftTileEntity.class; return SequencedGearshiftTileEntity.class;
} }
@Override @Override
public boolean hasComparatorInputOverride(BlockState p_149740_1_) { public boolean hasComparatorInputOverride(BlockState p_149740_1_) {
return true; return true;
} }
@Override @Override
public int getComparatorInputOverride(BlockState state, World world, BlockPos pos) { public int getComparatorInputOverride(BlockState state, World world, BlockPos pos) {
return state.get(STATE).intValue(); return state.get(STATE)
.intValue();
} }
} }

View file

@ -104,7 +104,7 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen {
.withShiftStep(def.shiftStep) .withShiftStep(def.shiftStep)
.setState(instruction.value) .setState(instruction.value)
.onChanged(); .onChanged();
if (def == SequencerInstructions.WAIT) { if (def == SequencerInstructions.DELAY) {
value.withStepFunction(context -> { value.withStepFunction(context -> {
int v = context.currentValue; int v = context.currentValue;
if (!context.forward) if (!context.forward)

View file

@ -16,6 +16,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
int currentInstruction; int currentInstruction;
int currentInstructionDuration; int currentInstructionDuration;
int timer; int timer;
boolean poweredPreviously;
public SequencedGearshiftTileEntity(TileEntityType<? extends SequencedGearshiftTileEntity> type) { public SequencedGearshiftTileEntity(TileEntityType<? extends SequencedGearshiftTileEntity> type) {
super(type); super(type);
@ -23,6 +24,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
currentInstruction = -1; currentInstruction = -1;
currentInstructionDuration = -1; currentInstructionDuration = -1;
timer = 0; timer = 0;
poweredPreviously = false;
} }
@Override @Override
@ -33,6 +35,8 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
return; return;
if (world.isRemote) if (world.isRemote)
return; return;
if (currentInstructionDuration < 0)
return;
if (timer < currentInstructionDuration) { if (timer < currentInstructionDuration) {
timer++; timer++;
return; return;
@ -64,9 +68,14 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
return currentInstruction == -1; return currentInstruction == -1;
} }
public void onRedstoneUpdate() { public void onRedstoneUpdate(boolean isPowered, boolean isRunning) {
if (!poweredPreviously && isPowered)
risingFlank();
poweredPreviously = isPowered;
if (!isIdle()) if (!isIdle())
return; return;
if (isPowered == isRunning)
return;
if (!world.isBlockPowered(pos)) { if (!world.isBlockPowered(pos)) {
world.setBlockState(pos, getBlockState().with(SequencedGearshiftBlock.STATE, 0), 3); world.setBlockState(pos, getBlockState().with(SequencedGearshiftBlock.STATE, 0), 3);
return; return;
@ -76,6 +85,23 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
run(0); run(0);
} }
public void risingFlank() {
Instruction instruction = getInstruction(currentInstruction);
if (instruction == null)
return;
if (poweredPreviously)
return;
poweredPreviously = true;
switch (instruction.onRedstonePulse()) {
case CONTINUE:
run(currentInstruction + 1);
break;
default:
break;
}
}
protected void run(int instructionIndex) { protected void run(int instructionIndex) {
Instruction instruction = getInstruction(instructionIndex); Instruction instruction = getInstruction(instructionIndex);
if (instruction == null || instruction.instruction == SequencerInstructions.END) { if (instruction == null || instruction.instruction == SequencerInstructions.END) {
@ -100,7 +126,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
public Instruction getInstruction(int instructionIndex) { public Instruction getInstruction(int instructionIndex) {
return instructionIndex >= 0 && instructionIndex < instructions.size() ? instructions.get(instructionIndex) return instructionIndex >= 0 && instructionIndex < instructions.size() ? instructions.get(instructionIndex)
: null; : null;
} }
@Override @Override
@ -108,6 +134,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
compound.putInt("InstructionIndex", currentInstruction); compound.putInt("InstructionIndex", currentInstruction);
compound.putInt("InstructionDuration", currentInstructionDuration); compound.putInt("InstructionDuration", currentInstructionDuration);
compound.putInt("Timer", timer); compound.putInt("Timer", timer);
compound.putBoolean("PrevPowered", poweredPreviously);
compound.put("Instructions", Instruction.serializeAll(instructions)); compound.put("Instructions", Instruction.serializeAll(instructions));
super.write(compound, clientPacket); super.write(compound, clientPacket);
} }
@ -116,6 +143,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) {
currentInstruction = compound.getInt("InstructionIndex"); currentInstruction = compound.getInt("InstructionIndex");
currentInstructionDuration = compound.getInt("InstructionDuration"); currentInstructionDuration = compound.getInt("InstructionDuration");
poweredPreviously = compound.getBoolean("PrevPowered");
timer = compound.getInt("Timer"); timer = compound.getInt("Timer");
instructions = Instruction.deserializeAll(compound.getList("Instructions", NBT.TAG_COMPOUND)); instructions = Instruction.deserializeAll(compound.getList("Instructions", NBT.TAG_COMPOUND));
super.fromTag(state, compound, clientPacket); super.fromTag(state, compound, clientPacket);
@ -129,7 +157,9 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
public int getModifier() { public int getModifier() {
if (currentInstruction >= instructions.size()) if (currentInstruction >= instructions.size())
return 0; return 0;
return isIdle() ? 0 : instructions.get(currentInstruction).getSpeedModifier(); return isIdle() ? 0
: instructions.get(currentInstruction)
.getSpeedModifier();
} }
} }

View file

@ -12,12 +12,14 @@ public enum SequencerInstructions {
TURN_ANGLE("angle", AllGuiTextures.SEQUENCER_INSTRUCTION, true, true, 360, 45, 90), TURN_ANGLE("angle", AllGuiTextures.SEQUENCER_INSTRUCTION, true, true, 360, 45, 90),
TURN_DISTANCE("distance", AllGuiTextures.SEQUENCER_INSTRUCTION, true, true, 128, 5, 5), TURN_DISTANCE("distance", AllGuiTextures.SEQUENCER_INSTRUCTION, true, true, 128, 5, 5),
WAIT("duration", AllGuiTextures.SEQUENCER_WAIT, true, false, 600, 20, 10), DELAY("duration", AllGuiTextures.SEQUENCER_DELAY, true, false, 600, 20, 10),
AWAIT("", AllGuiTextures.SEQUENCER_AWAIT),
END("", AllGuiTextures.SEQUENCER_END), END("", AllGuiTextures.SEQUENCER_END),
; ;
String translationKey; String translationKey;
String descriptiveTranslationKey;
String parameterKey; String parameterKey;
boolean hasValueParameter; boolean hasValueParameter;
boolean hasSpeedParameter; boolean hasSpeedParameter;
@ -39,13 +41,14 @@ public enum SequencerInstructions {
this.shiftStep = shiftStep; this.shiftStep = shiftStep;
this.defaultValue = defaultValue; this.defaultValue = defaultValue;
translationKey = "gui.sequenced_gearshift.instruction." + Lang.asId(name()); translationKey = "gui.sequenced_gearshift.instruction." + Lang.asId(name());
descriptiveTranslationKey = translationKey + ".descriptive";
parameterKey = translationKey + "." + parameterName; parameterKey = translationKey + "." + parameterName;
} }
static List<ITextComponent> getOptions() { static List<ITextComponent> getOptions() {
List<ITextComponent> options = new ArrayList<>(); List<ITextComponent> options = new ArrayList<>();
for (SequencerInstructions entry : values()) for (SequencerInstructions entry : values())
options.add(Lang.translate(entry.translationKey)); options.add(Lang.translate(entry.descriptiveTranslationKey));
return options; return options;
} }
@ -54,7 +57,7 @@ public enum SequencerInstructions {
return value + Lang.translate("generic.unit.degrees").getUnformattedComponentText(); // FIXME return value + Lang.translate("generic.unit.degrees").getUnformattedComponentText(); // FIXME
if (this == TURN_DISTANCE) if (this == TURN_DISTANCE)
return value + "m"; return value + "m";
if (this == WAIT) { if (this == DELAY) {
if (value >= 20) if (value >= 20)
return (value / 20) + "s"; return (value / 20) + "s";
return value + "t"; return value + "t";

View file

@ -0,0 +1,75 @@
package com.simibubi.create.content.contraptions.relays.belt.transport;
import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock;
import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerTileEntity;
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
import net.minecraft.block.BlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.items.ItemHandlerHelper;
public class BeltCrusherInteractionHandler {
public static boolean checkForCrushers(BeltInventory beltInventory, TransportedItemStack currentItem,
float nextOffset) {
boolean beltMovementPositive = beltInventory.beltMovementPositive;
int firstUpcomingSegment = (int) Math.floor(currentItem.beltPosition);
int step = beltMovementPositive ? 1 : -1;
firstUpcomingSegment = MathHelper.clamp(firstUpcomingSegment, 0, beltInventory.belt.beltLength - 1);
for (int segment = firstUpcomingSegment; beltMovementPositive ? segment <= nextOffset
: segment + 1 >= nextOffset; segment += step) {
BlockPos crusherPos = BeltHelper.getPositionForOffset(beltInventory.belt, segment)
.up();
World world = beltInventory.belt.getWorld();
BlockState crusherState = world.getBlockState(crusherPos);
if (!(crusherState.getBlock() instanceof CrushingWheelControllerBlock))
continue;
Direction crusherFacing = crusherState.get(CrushingWheelControllerBlock.FACING);
Direction movementFacing = beltInventory.belt.getMovementFacing();
if (crusherFacing != movementFacing)
continue;
float crusherEntry = segment + .5f;
crusherEntry += .399f * (beltMovementPositive ? -1 : 1);
float postCrusherEntry = crusherEntry + .799f * (!beltMovementPositive ? -1 : 1);
boolean hasCrossed = nextOffset > crusherEntry && nextOffset < postCrusherEntry && beltMovementPositive
|| nextOffset < crusherEntry && nextOffset > postCrusherEntry && !beltMovementPositive;
if (!hasCrossed)
return false;
currentItem.beltPosition = crusherEntry;
TileEntity te = world.getTileEntity(crusherPos);
if (!(te instanceof CrushingWheelControllerTileEntity))
return true;
CrushingWheelControllerTileEntity crusherTE = (CrushingWheelControllerTileEntity) te;
ItemStack toInsert = currentItem.stack.copy();
ItemStack remainder = ItemHandlerHelper.insertItemStacked(crusherTE.inventory, toInsert, false);
if (toInsert.equals(remainder, false))
return true;
int notFilled = currentItem.stack.getCount() - toInsert.getCount();
if (!remainder.isEmpty()) {
remainder.grow(notFilled);
} else if (notFilled > 0)
remainder = ItemHandlerHelper.copyStackWithSize(currentItem.stack, notFilled);
currentItem.stack = remainder;
beltInventory.belt.sendData();
return true;
}
return false;
}
}

View file

@ -151,6 +151,10 @@ public class BeltInventory {
if (BeltFunnelInteractionHandler.checkForFunnels(this, currentItem, nextOffset)) if (BeltFunnelInteractionHandler.checkForFunnels(this, currentItem, nextOffset))
continue; continue;
// Horizontal Crushing Wheels
if (BeltCrusherInteractionHandler.checkForCrushers(this, currentItem, nextOffset))
continue;
// Apply Movement // Apply Movement
currentItem.beltPosition += limitedMovement; currentItem.beltPosition += limitedMovement;
currentItem.sideOffset += currentItem.sideOffset +=

View file

@ -1,17 +1,11 @@
package com.simibubi.create.content.contraptions.relays.elementary; package com.simibubi.create.content.contraptions.relays.elementary;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Predicate;
import com.google.common.base.Predicates;
import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.advancement.AllTriggers;
import com.simibubi.create.foundation.advancement.SimpleTrigger; import com.simibubi.create.foundation.advancement.ITriggerable;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType;
import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.NBTHelper;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
@ -20,6 +14,10 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.NBTUtil; import net.minecraft.nbt.NBTUtil;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Predicate;
public class BracketedTileEntityBehaviour extends TileEntityBehaviour { public class BracketedTileEntityBehaviour extends TileEntityBehaviour {
public static BehaviourType<BracketedTileEntityBehaviour> TYPE = new BehaviourType<>(); public static BehaviourType<BracketedTileEntityBehaviour> TYPE = new BehaviourType<>();
@ -28,10 +26,10 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour {
private boolean reRender; private boolean reRender;
private Predicate<BlockState> pred; private Predicate<BlockState> pred;
private Function<BlockState, SimpleTrigger> trigger; private Function<BlockState, ITriggerable> trigger;
public BracketedTileEntityBehaviour(SmartTileEntity te) { public BracketedTileEntityBehaviour(SmartTileEntity te) {
this(te, Predicates.alwaysTrue()); this(te, state -> true);
} }
public BracketedTileEntityBehaviour(SmartTileEntity te, Predicate<BlockState> pred) { public BracketedTileEntityBehaviour(SmartTileEntity te, Predicate<BlockState> pred) {
@ -40,7 +38,7 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour {
bracket = Optional.empty(); bracket = Optional.empty();
} }
public BracketedTileEntityBehaviour withTrigger(Function<BlockState, SimpleTrigger> trigger) { public BracketedTileEntityBehaviour withTrigger(Function<BlockState, ITriggerable> trigger) {
this.trigger = trigger; this.trigger = trigger;
return this; return this;
} }

View file

@ -23,7 +23,7 @@ public class SimpleKineticTileEntity extends KineticTileEntity {
public void addBehaviours(List<TileEntityBehaviour> behaviours) { public void addBehaviours(List<TileEntityBehaviour> behaviours) {
behaviours.add( behaviours.add(
new BracketedTileEntityBehaviour(this, state -> state.getBlock() instanceof AbstractShaftBlock).withTrigger( new BracketedTileEntityBehaviour(this, state -> state.getBlock() instanceof AbstractShaftBlock).withTrigger(
state -> state.getBlock() instanceof ShaftBlock ? AllTriggers.BRACKET_SHAFT : AllTriggers.BRACKET_COG)); state -> AllTriggers.BRACKET_APPLY_TRIGGER.constructTriggerFor(state.getBlock())));
super.addBehaviours(behaviours); super.addBehaviours(behaviours);
} }

View file

@ -1,10 +1,8 @@
package com.simibubi.create.content.curiosities; package com.simibubi.create.content.curiosities;
import java.util.List;
import java.util.Random; import java.util.Random;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
import com.simibubi.create.foundation.advancement.AllTriggers;
import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.config.CRecipes; import com.simibubi.create.foundation.config.CRecipes;
import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.ColorHelper;
@ -13,7 +11,6 @@ import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
@ -21,7 +18,6 @@ import net.minecraft.particles.ParticleTypes;
import net.minecraft.tileentity.BeaconTileEntity; import net.minecraft.tileentity.BeaconTileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext; import net.minecraft.util.math.RayTraceContext;
@ -151,11 +147,6 @@ public class ChromaticCompoundItem extends Item {
newStack.setCount(stack.getCount()); newStack.setCount(stack.getCount());
data.putBoolean("FromLight", true); data.putBoolean("FromLight", true);
entity.setItem(newStack); entity.setItem(newStack);
List<ServerPlayerEntity> players =
world.getEntitiesWithinAABB(ServerPlayerEntity.class, new AxisAlignedBB(entity.getBlockPos()).grow(8));
players.forEach(AllTriggers.ABSORBED_LIGHT::trigger);
return false; return false;
} }

View file

@ -132,20 +132,20 @@ public class ExtendoGripItem extends Item {
.getValue(); .getValue();
if (!player.isCreative()) if (!player.isCreative())
d0 -= 0.5f; d0 -= 0.5f;
Vector3d vec3d = player.getEyePosition(AnimationTickHolder.getPartialTicks()); Vector3d Vector3d = player.getEyePosition(AnimationTickHolder.getPartialTicks());
Vector3d vec3d1 = player.getLook(1.0F); Vector3d Vector3d1 = player.getLook(1.0F);
Vector3d vec3d2 = vec3d.add(vec3d1.x * d0, vec3d1.y * d0, vec3d1.z * d0); Vector3d Vector3d2 = Vector3d.add(Vector3d1.x * d0, Vector3d1.y * d0, Vector3d1.z * d0);
AxisAlignedBB axisalignedbb = player.getBoundingBox() AxisAlignedBB axisalignedbb = player.getBoundingBox()
.expand(vec3d1.scale(d0)) .expand(Vector3d1.scale(d0))
.grow(1.0D, 1.0D, 1.0D); .grow(1.0D, 1.0D, 1.0D);
EntityRayTraceResult entityraytraceresult = EntityRayTraceResult entityraytraceresult =
ProjectileHelper.rayTraceEntities(player, vec3d, vec3d2, axisalignedbb, (e) -> { ProjectileHelper.rayTraceEntities(player, Vector3d, Vector3d2, axisalignedbb, (e) -> {
return !e.isSpectator() && e.canBeCollidedWith(); return !e.isSpectator() && e.canBeCollidedWith();
}, d0 * d0); }, d0 * d0);
if (entityraytraceresult != null) { if (entityraytraceresult != null) {
Entity entity1 = entityraytraceresult.getEntity(); Entity entity1 = entityraytraceresult.getEntity();
Vector3d Vector3d3 = entityraytraceresult.getHitVec(); Vector3d Vector3d3 = entityraytraceresult.getHitVec();
double d2 = vec3d.squareDistanceTo(Vector3d3); double d2 = Vector3d.squareDistanceTo(Vector3d3);
if (d2 < d0 * d0 || mc.objectMouseOver == null || mc.objectMouseOver.getType() == Type.MISS) { if (d2 < d0 * d0 || mc.objectMouseOver == null || mc.objectMouseOver.getType() == Type.MISS) {
mc.objectMouseOver = entityraytraceresult; mc.objectMouseOver = entityraytraceresult;
if (entity1 instanceof LivingEntity || entity1 instanceof ItemFrameEntity) if (entity1 instanceof LivingEntity || entity1 instanceof ItemFrameEntity)

View file

@ -77,6 +77,8 @@ public class SandPaperItem extends Item {
AxisAlignedBB bb = new AxisAlignedBB(hitVec, hitVec).grow(1f); AxisAlignedBB bb = new AxisAlignedBB(hitVec, hitVec).grow(1f);
ItemEntity pickUp = null; ItemEntity pickUp = null;
for (ItemEntity itemEntity : worldIn.getEntitiesWithinAABB(ItemEntity.class, bb)) { for (ItemEntity itemEntity : worldIn.getEntitiesWithinAABB(ItemEntity.class, bb)) {
if (!itemEntity.isAlive())
continue;
if (itemEntity.getPositionVec() if (itemEntity.getPositionVec()
.distanceTo(playerIn.getPositionVec()) > 3) .distanceTo(playerIn.getPositionVec()) > 3)
continue; continue;

View file

@ -109,7 +109,7 @@ public class BlockzapperItem extends ZapperItem {
continue; continue;
if (!selectedState.isValidPosition(world, placed)) if (!selectedState.isValidPosition(world, placed))
continue; continue;
if (!player.isCreative() && !canBreak(stack, world.getBlockState(placed), world, placed)) if (!player.isCreative() && !canBreak(stack, world.getBlockState(placed), world, placed,player))
continue; continue;
if (!player.isCreative() && BlockHelper.findAndRemoveInInventory(selectedState, player, 1) == 0) { if (!player.isCreative() && BlockHelper.findAndRemoveInInventory(selectedState, player, 1) == 0) {
player.getCooldownTracker() player.getCooldownTracker()
@ -278,10 +278,13 @@ public class BlockzapperItem extends ZapperItem {
return list; return list;
} }
public static boolean canBreak(ItemStack stack, BlockState state, World world, BlockPos pos) { public static boolean canBreak(ItemStack stack, BlockState state, World world, BlockPos pos,PlayerEntity player) {
ComponentTier tier = getTier(Components.Body, stack); ComponentTier tier = getTier(Components.Body, stack);
float blockHardness = state.getBlockHardness(world, pos); float blockHardness = state.getBlockHardness(world, pos);
//If we can't change the block (e.g chunk protection)
if (!isAllowedToPlace(world,pos,player)){
return false;
}
if (blockHardness == -1) if (blockHardness == -1)
return false; return false;
if (tier == ComponentTier.None) if (tier == ComponentTier.None)
@ -294,6 +297,14 @@ public class BlockzapperItem extends ZapperItem {
return false; return false;
} }
public static boolean isAllowedToPlace(World world, BlockPos pos,PlayerEntity player){
BlockSnapshot blocksnapshot = BlockSnapshot.create(world.getRegistryKey(), world, pos);
if (ForgeEventFactory.onBlockPlace(player, blocksnapshot, Direction.UP)) {
return false;
}
return true;
}
public static int getMaxAoe(ItemStack stack) { public static int getMaxAoe(ItemStack stack) {
ComponentTier tier = getTier(Components.Amplifier, stack); ComponentTier tier = getTier(Components.Amplifier, stack);
if (tier == ComponentTier.None) if (tier == ComponentTier.None)

View file

@ -58,7 +58,7 @@ public class InWorldProcessing {
public static SplashingInv splashingInv = new SplashingInv(); public static SplashingInv splashingInv = new SplashingInv();
public enum Type { public enum Type {
SMOKING, BLASTING, SPLASHING SMOKING, BLASTING, SPLASHING, NONE
; ;
@ -74,7 +74,7 @@ public class InWorldProcessing {
return Type.SMOKING; return Type.SMOKING;
if (block == Blocks.LAVA || getHeatLevelOf(blockState).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING)) if (block == Blocks.LAVA || getHeatLevelOf(blockState).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING))
return Type.BLASTING; return Type.BLASTING;
return null; return Type.NONE;
} }
} }

View file

@ -6,6 +6,10 @@ import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Supplier; import java.util.function.Supplier;
import com.simibubi.create.content.logistics.InWorldProcessing;
import net.minecraft.fluid.FlowingFluid;
import net.minecraft.fluid.Fluid;
import net.minecraft.fluid.Fluids;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@ -61,9 +65,9 @@ public class AllAdvancements implements IDataProvider {
Advancement aesthetics = Advancement aesthetics =
advancement("aesthetics", AllBlocks.WOODEN_BRACKET.get(), TaskType.NORMAL).withParent(andesite_alloy) advancement("aesthetics", AllBlocks.WOODEN_BRACKET.get(), TaskType.NORMAL).withParent(andesite_alloy)
.withCriterion("0", AllTriggers.BRACKET_SHAFT.instance()) .withCriterion("0", AllTriggers.BRACKET_APPLY_TRIGGER.forEntries(AllBlocks.SHAFT.get()))
.withCriterion("1", AllTriggers.BRACKET_COG.instance()) .withCriterion("1", AllTriggers.BRACKET_APPLY_TRIGGER.forEntries(AllBlocks.COGWHEEL.get(), AllBlocks.LARGE_COGWHEEL.get()))
.withCriterion("2", AllTriggers.BRACKET_PIPE.instance()) .withCriterion("2", AllTriggers.BRACKET_APPLY_TRIGGER.forEntries(AllBlocks.FLUID_PIPE.get()))
.register(t, id + ":aesthetics"); .register(t, id + ":aesthetics");
Advancement reinforced = Advancement reinforced =
@ -122,19 +126,19 @@ public class AllAdvancements implements IDataProvider {
.register(t, id + ":press"); .register(t, id + ":press");
Advancement fan = advancement("fan", AllBlocks.ENCASED_FAN.get(), TaskType.NORMAL).withParent(press) Advancement fan = advancement("fan", AllBlocks.ENCASED_FAN.get(), TaskType.NORMAL).withParent(press)
.withCriterion("0", AllTriggers.FAN.instance()) .withCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.NONE))
.register(t, id + ":fan"); .register(t, id + ":fan");
Advancement fan_lava = advancement("fan_lava", Items.LAVA_BUCKET, TaskType.NORMAL).withParent(fan) Advancement fan_lava = advancement("fan_lava", Items.LAVA_BUCKET, TaskType.NORMAL).withParent(fan)
.withCriterion("0", AllTriggers.FAN_LAVA.instance()) .withCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.BLASTING))
.register(t, id + ":fan_lava"); .register(t, id + ":fan_lava");
Advancement fan_smoke = advancement("fan_smoke", Items.CAMPFIRE, TaskType.NORMAL).withParent(fan) Advancement fan_smoke = advancement("fan_smoke", Items.CAMPFIRE, TaskType.NORMAL).withParent(fan)
.withCriterion("0", AllTriggers.FAN_SMOKE.instance()) .withCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.SMOKING))
.register(t, id + ":fan_smoke"); .register(t, id + ":fan_smoke");
Advancement fan_water = advancement("fan_water", Items.WATER_BUCKET, TaskType.NORMAL).withParent(fan) Advancement fan_water = advancement("fan_water", Items.WATER_BUCKET, TaskType.NORMAL).withParent(fan)
.withCriterion("0", AllTriggers.FAN_WATER.instance()) .withCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.SPLASHING))
.register(t, id + ":fan_water"); .register(t, id + ":fan_water");
Advancement rose_quartz = Advancement rose_quartz =
@ -157,8 +161,7 @@ public class AllAdvancements implements IDataProvider {
Advancement mixer = advancement("mixer", AllBlocks.MECHANICAL_MIXER.get(), TaskType.MILESTONE) Advancement mixer = advancement("mixer", AllBlocks.MECHANICAL_MIXER.get(), TaskType.MILESTONE)
.withCriterion("0", placeBlock(AllBlocks.MECHANICAL_MIXER.get())) .withCriterion("0", placeBlock(AllBlocks.MECHANICAL_MIXER.get()))
.withCriterion("1", isPowered(AllBlocks.MECHANICAL_MIXER.get())) .withCriterion("1", AllTriggers.MIXER_MIX.instance())
.withCriterion("2", AllTriggers.MIXER_MIX.instance())
.withParent(basin) .withParent(basin)
.register(t, id + ":mixer"); .register(t, id + ":mixer");
@ -293,17 +296,17 @@ public class AllAdvancements implements IDataProvider {
Advancement infinite_water = Advancement infinite_water =
advancement("infinite_water", Items.WATER_BUCKET, TaskType.NORMAL).withParent(hose_pulley) advancement("infinite_water", Items.WATER_BUCKET, TaskType.NORMAL).withParent(hose_pulley)
.withCriterion("0", AllTriggers.INFINITE_WATER.instance()) .withCriterion("0", isInfinite(Fluids.WATER))
.register(t, id + ":infinite_water"); .register(t, id + ":infinite_water");
Advancement infinite_lava = Advancement infinite_lava =
advancement("infinite_lava", Items.LAVA_BUCKET, TaskType.GOAL).withParent(hose_pulley) advancement("infinite_lava", Items.LAVA_BUCKET, TaskType.GOAL).withParent(hose_pulley)
.withCriterion("0", AllTriggers.INFINITE_LAVA.instance()) .withCriterion("0", isInfinite(Fluids.LAVA))
.register(t, id + ":infinite_lava"); .register(t, id + ":infinite_lava");
Advancement infinite_chocolate = advancement("infinite_chocolate", AllFluids.CHOCOLATE.get() Advancement infinite_chocolate = advancement("infinite_chocolate", AllFluids.CHOCOLATE.get()
.getFilledBucket(), TaskType.CHALLENGE).withParent(hose_pulley) .getFilledBucket(), TaskType.CHALLENGE).withParent(hose_pulley)
.withCriterion("0", AllTriggers.INFINITE_CHOCOLATE.instance()) .withCriterion("0", isInfinite(AllFluids.CHOCOLATE.get()))
.register(t, id + ":infinite_chocolate"); .register(t, id + ":infinite_chocolate");
} }
@ -493,8 +496,8 @@ public class AllAdvancements implements IDataProvider {
return PlacedBlockTrigger.Instance.placedBlock(block); return PlacedBlockTrigger.Instance.placedBlock(block);
} }
public KineticBlockTrigger.Instance isPowered(Block block) { public RegistryTrigger.Instance<Fluid> isInfinite(FlowingFluid fluid) {
return AllTriggers.KINETIC_BLOCK.forBlock(block); return AllTriggers.INFINITE_FLUID.forEntries(fluid.getStillFluid());
} }
public InventoryChangeTrigger.Instance itemGathered(IItemProvider itemprovider) { public InventoryChangeTrigger.Instance itemGathered(IItemProvider itemprovider) {

View file

@ -4,18 +4,23 @@ import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.function.Predicate; import java.util.function.Predicate;
import com.simibubi.create.content.logistics.InWorldProcessing;
import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.block.Block;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.fluid.Fluid;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
public class AllTriggers { public class AllTriggers {
private static List<CriterionTriggerBase<?>> triggers = new LinkedList<>(); private static final List<CriterionTriggerBase<?>> triggers = new LinkedList<>();
public static KineticBlockTrigger KINETIC_BLOCK = add(new KineticBlockTrigger("kinetic_block")); public static RegistryTrigger<Fluid> INFINITE_FLUID = add(new RegistryTrigger<>("infinite_fluid", Fluid.class));
public static RegistryTrigger<Block> BRACKET_APPLY_TRIGGER = add(new RegistryTrigger<>("bracket_apply", Block.class));
public static EnumTrigger<InWorldProcessing.Type> FAN_PROCESSING = add(new EnumTrigger<>("fan_processing", InWorldProcessing.Type.class));
public static SimpleTrigger public static SimpleTrigger
ROTATION = simple("rotation"), ROTATION = simple("rotation"),
@ -27,7 +32,6 @@ public class AllTriggers {
LAVA_WHEEL = simple("lava_wheel"), LAVA_WHEEL = simple("lava_wheel"),
CHOCOLATE_WHEEL = simple("chocolate_wheel"), CHOCOLATE_WHEEL = simple("chocolate_wheel"),
DEPLOYER_BOOP = simple("deployer"), DEPLOYER_BOOP = simple("deployer"),
ABSORBED_LIGHT = simple("light_absorbed"),
SPEED_READ = simple("speed_read"), SPEED_READ = simple("speed_read"),
BASIN_THROW = simple("basin"), BASIN_THROW = simple("basin"),
PRESS_COMPACT = simple("compact"), PRESS_COMPACT = simple("compact"),
@ -37,9 +41,6 @@ public class AllTriggers {
MECHANICAL_ARM = simple("mechanical_arm"), MECHANICAL_ARM = simple("mechanical_arm"),
MUSICAL_ARM = simple("musical_arm"), MUSICAL_ARM = simple("musical_arm"),
CUCKOO = simple("cuckoo"), CUCKOO = simple("cuckoo"),
BRACKET_SHAFT = simple("bracket_shaft"),
BRACKET_COG = simple("bracket_cog"),
BRACKET_PIPE = simple("bracket_pipe"),
CASING_SHAFT = simple("casing_shaft"), CASING_SHAFT = simple("casing_shaft"),
CASING_BELT = simple("casing_belt"), CASING_BELT = simple("casing_belt"),
CASING_PIPE = simple("casing_pipe"), CASING_PIPE = simple("casing_pipe"),
@ -48,10 +49,6 @@ public class AllTriggers {
PLACE_TUNNEL = simple("place_tunnel"), PLACE_TUNNEL = simple("place_tunnel"),
CONNECT_TUNNEL = simple("connect_tunnel"), CONNECT_TUNNEL = simple("connect_tunnel"),
UPWARD_CHUTE = simple("upward_chute"), UPWARD_CHUTE = simple("upward_chute"),
FAN = simple("fan"),
FAN_LAVA = simple("fan_lava"),
FAN_SMOKE = simple("fan_smoke"),
FAN_WATER = simple("fan_water"),
BELT_FUNNEL = simple("belt_funnel"), BELT_FUNNEL = simple("belt_funnel"),
BELT_FUNNEL_KISS = simple("belt_funnel_kiss"), BELT_FUNNEL_KISS = simple("belt_funnel_kiss"),
CLOCKWORK_BEARING = simple("clockwork_bearing"), CLOCKWORK_BEARING = simple("clockwork_bearing"),
@ -67,9 +64,6 @@ public class AllTriggers {
PIPE_COLLISION = simple("pipe_collision"), PIPE_COLLISION = simple("pipe_collision"),
PIPE_SPILL = simple("pipe_spill"), PIPE_SPILL = simple("pipe_spill"),
HOSE_PULLEY = simple("hose_pulley"), HOSE_PULLEY = simple("hose_pulley"),
INFINITE_WATER = simple("infinite_water"),
INFINITE_LAVA = simple("infinite_lava"),
INFINITE_CHOCOLATE = simple("infinite_chocolate"),
MIXER_MIX = simple("mixer"); MIXER_MIX = simple("mixer");
private static SimpleTrigger simple(String id) { private static SimpleTrigger simple(String id) {

View file

@ -10,6 +10,7 @@ import java.util.function.Supplier;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.simibubi.create.Create; import com.simibubi.create.Create;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraft.advancements.ICriterionTrigger; import net.minecraft.advancements.ICriterionTrigger;
import net.minecraft.advancements.PlayerAdvancements; import net.minecraft.advancements.PlayerAdvancements;
import net.minecraft.advancements.criterion.CriterionInstance; import net.minecraft.advancements.criterion.CriterionInstance;
@ -17,13 +18,18 @@ import net.minecraft.advancements.criterion.EntityPredicate;
import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public abstract class CriterionTriggerBase<T extends CriterionTriggerBase.Instance> implements ICriterionTrigger<T> { public abstract class CriterionTriggerBase<T extends CriterionTriggerBase.Instance> implements ICriterionTrigger<T> {
public CriterionTriggerBase(String id) { public CriterionTriggerBase(String id) {
this.ID = new ResourceLocation(Create.ID, id); this.ID = new ResourceLocation(Create.ID, id);
} }
private ResourceLocation ID; private final ResourceLocation ID;
protected final Map<PlayerAdvancements, Set<Listener<T>>> listeners = Maps.newHashMap(); protected final Map<PlayerAdvancements, Set<Listener<T>>> listeners = Maps.newHashMap();
@Override @Override
@ -54,7 +60,7 @@ public abstract class CriterionTriggerBase<T extends CriterionTriggerBase.Instan
return ID; return ID;
} }
protected void trigger(ServerPlayerEntity player, List<Supplier<Object>> suppliers){ protected void trigger(ServerPlayerEntity player, @Nullable List<Supplier<Object>> suppliers){
PlayerAdvancements playerAdvancements = player.getAdvancements(); PlayerAdvancements playerAdvancements = player.getAdvancements();
Set<Listener<T>> playerListeners = this.listeners.get(playerAdvancements); Set<Listener<T>> playerListeners = this.listeners.get(playerAdvancements);
if (playerListeners != null){ if (playerListeners != null){
@ -72,13 +78,13 @@ public abstract class CriterionTriggerBase<T extends CriterionTriggerBase.Instan
} }
} }
protected abstract static class Instance extends CriterionInstance { public abstract static class Instance extends CriterionInstance {
public Instance(ResourceLocation idIn, EntityPredicate.AndPredicate p_i231464_2_) { public Instance(ResourceLocation idIn, EntityPredicate.AndPredicate p_i231464_2_) {
super(idIn, p_i231464_2_); super(idIn, p_i231464_2_);
} }
protected abstract boolean test(List<Supplier<Object>> suppliers); protected abstract boolean test(@Nullable List<Supplier<Object>> suppliers);
} }

View file

@ -0,0 +1,35 @@
package com.simibubi.create.foundation.advancement;
import mcp.MethodsReturnNonnullByDefault;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class EnumTrigger<T extends Enum<T>> extends StringSerializableTrigger<T> {
private final Class<T> reference;
public EnumTrigger(String id, Class<T> reference) {
super(id);
this.reference = reference;
}
@Nullable
@Override
protected T getValue(String key) {
try {
return Enum.valueOf(reference, key);
} catch (IllegalArgumentException | NullPointerException e) {
return null;
}
}
@Nullable
@Override
protected String getKey(@Nullable T value) {
if (value == null)
return null;
return value.name();
}
}

View file

@ -1,77 +0,0 @@
package com.simibubi.create.foundation.advancement;
import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;
import com.google.gson.JsonObject;
import com.google.gson.JsonSyntaxException;
import com.simibubi.create.Create;
import net.minecraft.advancements.criterion.EntityPredicate;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.loot.ConditionArrayParser;
import net.minecraft.util.JSONUtils;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.Registry;
public class KineticBlockTrigger extends CriterionTriggerBase<KineticBlockTrigger.Instance> {
private static final ResourceLocation ID = new ResourceLocation(Create.ID, "kinetic_block");
public KineticBlockTrigger(String id) {
super(id);
}
public Instance forBlock(Block block) {
return new Instance(block);
}
@Override
@SuppressWarnings("deprecation")
public Instance conditionsFromJson(JsonObject json, ConditionArrayParser context) {
Block block = null;
if (json.has("block")) {
ResourceLocation resourcelocation = new ResourceLocation(JSONUtils.getString(json, "block"));
block = Registry.BLOCK.getOrEmpty(resourcelocation).orElseThrow(() -> {
return new JsonSyntaxException("Unknown block type '" + resourcelocation + "'");
});
}
return new Instance(block);
}
public void trigger(ServerPlayerEntity player, BlockState state) {
trigger(player, Arrays.asList(() -> state.getBlock()));
}
public static class Instance extends CriterionTriggerBase.Instance {
private final Block block;
public Instance(Block block) {
super(KineticBlockTrigger.ID, EntityPredicate.AndPredicate.EMPTY); // FIXME: Is this right?
this.block = block;
}
@Override
protected boolean test(List<Supplier<Object>> suppliers) {
if (suppliers.isEmpty())
return false;
return block == suppliers.get(0).get();
}
/* FIXME: Does this need serialization?
@Override
@SuppressWarnings("deprecation")
public JsonElement serialize() {
JsonObject jsonobject = new JsonObject();
if (this.block != null)
jsonobject.addProperty("block", Registry.BLOCK.getKey(this.block).toString());
return jsonobject;
}*/
}
}

View file

@ -0,0 +1,35 @@
package com.simibubi.create.foundation.advancement;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.IForgeRegistryEntry;
import net.minecraftforge.registries.RegistryManager;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class RegistryTrigger<T extends IForgeRegistryEntry<T>> extends StringSerializableTrigger<T> {
private final IForgeRegistry<T> registry;
public RegistryTrigger(String id, Class<T> registryType) {
super(id);
this.registry = RegistryManager.ACTIVE.getRegistry(registryType);
}
@Nullable
@Override
protected T getValue(String key) {
return registry.getValue(new ResourceLocation(key));
}
@Nullable
@Override
protected String getKey(T value) {
ResourceLocation key = registry.getKey(value);
return key == null ? null : key.toString();
}
}

View file

@ -6,10 +6,16 @@ import java.util.function.Supplier;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import net.minecraft.advancements.criterion.EntityPredicate; import net.minecraft.advancements.criterion.EntityPredicate;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.loot.ConditionArrayParser; import net.minecraft.loot.ConditionArrayParser;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
@MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault
public class SimpleTrigger extends CriterionTriggerBase<SimpleTrigger.Instance> implements ITriggerable { public class SimpleTrigger extends CriterionTriggerBase<SimpleTrigger.Instance> implements ITriggerable {
public SimpleTrigger(String id) { public SimpleTrigger(String id) {
@ -36,7 +42,7 @@ public class SimpleTrigger extends CriterionTriggerBase<SimpleTrigger.Instance>
} }
@Override @Override
protected boolean test(List<Supplier<Object>> suppliers) { protected boolean test(@Nullable List<Supplier<Object>> suppliers) {
return true; return true;
} }
} }

View file

@ -0,0 +1,109 @@
package com.simibubi.create.foundation.advancement;
import com.google.common.collect.Sets;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSyntaxException;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraft.advancements.criterion.EntityPredicate;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.loot.ConditionArrayParser;
import net.minecraft.loot.ConditionArraySerializer;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
@MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault
public abstract class StringSerializableTrigger<T> extends CriterionTriggerBase<StringSerializableTrigger.Instance<T>> {
public StringSerializableTrigger(String id) {
super(id);
}
@SafeVarargs
public final Instance<T> forEntries(@Nullable T... entries) {
return new Instance<>(this, entries == null ? null : Sets.newHashSet(entries));
}
public void trigger(ServerPlayerEntity player, @Nullable T registryEntry) {
trigger(player, Collections.singletonList(() -> registryEntry));
}
public ITriggerable constructTriggerFor(@Nullable T entry) {
BiConsumer<ServerPlayerEntity, T> trigger = this::trigger;
return player -> trigger.accept(player, entry);
}
@Override
public Instance<T> conditionsFromJson(JsonObject json, ConditionArrayParser context) {
if (json.has("accepted_entries")) {
JsonArray elements = json.getAsJsonArray("accepted_entries");
return new Instance<>(this,
StreamSupport.stream(elements.spliterator(), false).map(JsonElement::getAsString)
.map(rl -> {
T entry = getValue(rl);
if (entry == null)
throw new JsonSyntaxException("Unknown entry '" + rl + "'");
return entry;
}).collect(Collectors.toSet()));
}
return forEntries((T) null);
}
@Nullable
abstract protected T getValue(String key);
@Nullable
abstract protected String getKey(T value);
public static class Instance<T> extends CriterionTriggerBase.Instance {
@Nullable
private final Set<T> entries;
private final StringSerializableTrigger<T> trigger;
public Instance(StringSerializableTrigger<T> trigger, @Nullable Set<T> entries) {
super(trigger.getId(), EntityPredicate.AndPredicate.EMPTY);
this.trigger = trigger;
this.entries = entries;
}
@Override
protected boolean test(@Nullable List<Supplier<Object>> suppliers) {
if (entries == null || suppliers == null || suppliers.isEmpty())
return false;
return entries.contains(suppliers.get(0).get());
}
@Override
public JsonObject toJson(ConditionArraySerializer p_230240_1_) {
JsonObject jsonobject = super.toJson(p_230240_1_);
JsonArray elements = new JsonArray();
if (entries == null) {
jsonobject.add("accepted_entries", elements);
return jsonobject;
}
for (T entry : entries) {
if (entry == null)
continue;
String key = trigger.getKey(entry);
if (key != null)
elements.add(key);
}
jsonobject.add("accepted_entries", elements);
return jsonobject;
}
}
}

View file

@ -7,6 +7,7 @@ public class CRecipes extends ConfigBase {
public ConfigBool allowRegularCraftingInCrafter = public ConfigBool allowRegularCraftingInCrafter =
b(true, "allowRegularCraftingInCrafter", Comments.allowRegularCraftingInCrafter); b(true, "allowRegularCraftingInCrafter", Comments.allowRegularCraftingInCrafter);
public ConfigBool allowStonecuttingOnSaw = b(true, "allowStonecuttingOnSaw", Comments.allowStonecuttingOnSaw); public ConfigBool allowStonecuttingOnSaw = b(true, "allowStonecuttingOnSaw", Comments.allowStonecuttingOnSaw);
public ConfigBool allowWoodcuttingOnSaw = b(true, "allowWoodcuttingOnSaw", Comments.allowWoodcuttingOnSaw);
public ConfigInt lightSourceCountForRefinedRadiance = public ConfigInt lightSourceCountForRefinedRadiance =
i(10, 1, "lightSourceCountForRefinedRadiance", Comments.refinedRadiance); i(10, 1, "lightSourceCountForRefinedRadiance", Comments.refinedRadiance);
public ConfigBool enableRefinedRadianceRecipe = public ConfigBool enableRefinedRadianceRecipe =
@ -27,6 +28,8 @@ public class CRecipes extends ConfigBase {
"When true, allows any standard crafting recipes to be processed by Mechanical Crafters."; "When true, allows any standard crafting recipes to be processed by Mechanical Crafters.";
static String allowStonecuttingOnSaw = static String allowStonecuttingOnSaw =
"When true, allows any stonecutting recipes to be processed by a Mechanical Saw."; "When true, allows any stonecutting recipes to be processed by a Mechanical Saw.";
static String allowWoodcuttingOnSaw =
"When true, allows any Druidcraft woodcutter recipes to be processed by a Mechanical Saw.";
static String refinedRadiance = static String refinedRadiance =
"The amount of Light sources destroyed before Chromatic Compound turns into Refined Radiance."; "The amount of Light sources destroyed before Chromatic Compound turns into Refined Radiance.";
static String refinedRadianceRecipe = "Allow the standard in-world Refined Radiance recipes."; static String refinedRadianceRecipe = "Allow the standard in-world Refined Radiance recipes.";

View file

@ -52,9 +52,10 @@ public enum AllGuiTextures {
SEQUENCER("sequencer.png", 173, 159), SEQUENCER("sequencer.png", 173, 159),
SEQUENCER_INSTRUCTION("sequencer.png", 0, 14, 162, 22), SEQUENCER_INSTRUCTION("sequencer.png", 0, 14, 162, 22),
SEQUENCER_WAIT("sequencer.png", 0, 58, 162, 22), SEQUENCER_DELAY("sequencer.png", 0, 58, 162, 22),
SEQUENCER_END("sequencer.png", 0, 80, 162, 22), SEQUENCER_END("sequencer.png", 0, 80, 162, 22),
SEQUENCER_EMPTY("sequencer.png", 0, 102, 162, 22), SEQUENCER_EMPTY("sequencer.png", 0, 102, 162, 22),
SEQUENCER_AWAIT("sequencer.png", 0, 160, 162, 22),
// JEI // JEI
JEI_SLOT("jei/widgets.png", 18, 18), JEI_SLOT("jei/widgets.png", 18, 18),

View file

@ -174,7 +174,7 @@ public class ItemHelper {
if (!simulate && hasEnoughItems) if (!simulate && hasEnoughItems)
inv.extractItem(slot, stack.getCount(), false); inv.extractItem(slot, stack.getCount(), false);
if (extracting.getCount() >= maxExtractionCount) { if (extracting.getCount() >= maxExtractionCount || extracting.getCount() >= extracting.getMaxStackSize()) {
if (checkHasEnoughItems) { if (checkHasEnoughItems) {
hasEnoughItems = true; hasEnoughItems = true;
checkHasEnoughItems = false; checkHasEnoughItems = false;
@ -234,7 +234,7 @@ public class ItemHelper {
if (!simulate) if (!simulate)
inv.extractItem(slot, stack.getCount(), false); inv.extractItem(slot, stack.getCount(), false);
if (extracting.getCount() == maxExtractionCount) if (extracting.getCount() >= maxExtractionCount || extracting.getCount() >= extracting.getMaxStackSize())
break; break;
} }

View file

@ -18,7 +18,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Matrix4f; import net.minecraft.util.math.vector.Matrix4f;
public class KineticRenderer extends InstancedTileRenderer<BasicProgram> { public class KineticRenderer extends InstancedTileRenderer<BasicProgram> {
public static int MAX_ORIGIN_DISTANCE = 1000; public static int MAX_ORIGIN_DISTANCE = 100;
public BlockPos originCoordinate = BlockPos.ZERO; public BlockPos originCoordinate = BlockPos.ZERO;

View file

@ -73,12 +73,7 @@ public class FastRenderDispatcher {
layer.startDrawing(); layer.startDrawing();
// RenderSystem.enableDepthTest();
// RenderSystem.enableCull();
// GL11.glCullFace(GL11.GL_BACK);
CreateClient.kineticRenderer.render(layer, viewProjection, cameraX, cameraY, cameraZ); CreateClient.kineticRenderer.render(layer, viewProjection, cameraX, cameraY, cameraZ);
// RenderSystem.disableCull();
//RenderSystem.disableDepthTest();
layer.endDrawing(); layer.endDrawing();
} }

View file

@ -136,7 +136,7 @@ public abstract class InstancedTileRenderer<P extends BasicProgram> {
} }
public void clean() { public void clean() {
instances.keySet().stream().filter(TileEntity::isRemoved).forEach(instances::remove); instances.keySet().removeIf(TileEntity::isRemoved);
} }
public void invalidate() { public void invalidate() {

View file

@ -59,7 +59,7 @@ public final class NBTProcessors {
TileEntityType<?> type = tileEntity.getType(); TileEntityType<?> type = tileEntity.getType();
if (survival && survivalProcessors.containsKey(type)) if (survival && survivalProcessors.containsKey(type))
compound = survivalProcessors.get(type).apply(compound); compound = survivalProcessors.get(type).apply(compound);
if (processors.containsKey(type)) if (compound != null && processors.containsKey(type))
return processors.get(type).apply(compound); return processors.get(type).apply(compound);
if (tileEntity.onlyOpsCanSetNbt()) if (tileEntity.onlyOpsCanSetNbt())
return null; return null;

View file

@ -1,12 +1,13 @@
package com.simibubi.create.foundation.utility.recipe; package com.simibubi.create.foundation.utility.recipe;
import com.google.common.base.Predicate;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.IRecipeType; import net.minecraft.item.crafting.IRecipeType;
import java.util.function.Predicate;
/** /**
* Commonly used Predicates for searching through recipe collections. * Commonly used Predicates for searching through recipe collections.
* *
@ -15,11 +16,9 @@ import net.minecraft.item.crafting.IRecipeType;
*/ */
public class RecipeConditions { public class RecipeConditions {
public static Predicate<IRecipe<?>> isOfType(IRecipeType<?> type, IRecipeType<?>... otherTypes) { public static Predicate<IRecipe<?>> isOfType(IRecipeType<?>... otherTypes) {
return recipe -> { return recipe -> {
IRecipeType<?> recipeType = recipe.getType(); IRecipeType<?> recipeType = recipe.getType();
if (recipeType == type)
return true;
for (IRecipeType<?> other : otherTypes) for (IRecipeType<?> other : otherTypes)
if (recipeType == other) if (recipeType == other)
return true; return true;

View file

@ -1,8 +1,8 @@
{ {
"_": "->------------------------] Game Elements [------------------------<-", "_": "->------------------------] Game Elements [------------------------<-",
"block.create.acacia_window": "Akazienfenster", "block.create.acacia_window": "Akazienholzfenster",
"block.create.acacia_window_pane": "Akazienfensterscheibe", "block.create.acacia_window_pane": "Akazienholzfensterscheibe",
"block.create.adjustable_chain_gearshift": "Verstellbares Kettengetriebe", "block.create.adjustable_chain_gearshift": "Verstellbares Kettengetriebe",
"block.create.adjustable_crate": "Verstellbare Kiste", "block.create.adjustable_crate": "Verstellbare Kiste",
"block.create.adjustable_pulse_repeater": "Verstellbarer Pulsverstärker", "block.create.adjustable_pulse_repeater": "Verstellbarer Pulsverstärker",
@ -24,6 +24,8 @@
"block.create.andesite_tunnel": "Andesittunnel", "block.create.andesite_tunnel": "Andesittunnel",
"block.create.basin": "Behälter", "block.create.basin": "Behälter",
"block.create.belt": "Mechanischer Riemen", "block.create.belt": "Mechanischer Riemen",
"block.create.birch_window": "Birkenholzfenster",
"block.create.birch_window_pane": "Birkenholzfensterscheibe",
"block.create.black_sail": "Schwarzes Segel", "block.create.black_sail": "Schwarzes Segel",
"block.create.black_seat": "Schwarzer Sitz", "block.create.black_seat": "Schwarzer Sitz",
"block.create.black_valve_handle": "Schwarzer Ventilgriff", "block.create.black_valve_handle": "Schwarzer Ventilgriff",
@ -52,7 +54,7 @@
"block.create.clockwork_bearing": "Uhrwerk-Lager", "block.create.clockwork_bearing": "Uhrwerk-Lager",
"block.create.clutch": "Kupplung", "block.create.clutch": "Kupplung",
"block.create.cogwheel": "Zahnrad", "block.create.cogwheel": "Zahnrad",
"block.create.content_observer": "Inhalts Beobachter", "block.create.content_observer": "Inhaltsbeobachter",
"block.create.controller_rail": "Steureungsschiene", "block.create.controller_rail": "Steureungsschiene",
"block.create.copper_block": "Kupfer Block", "block.create.copper_block": "Kupfer Block",
"block.create.copper_casing": "Kupferrahmen", "block.create.copper_casing": "Kupferrahmen",
@ -113,43 +115,138 @@
"block.create.fancy_dark_scoria_bricks_slab": "Schicke dunkle Schlackenziegelstufe", "block.create.fancy_dark_scoria_bricks_slab": "Schicke dunkle Schlackenziegelstufe",
"block.create.fancy_dark_scoria_bricks_stairs": "Schicke dunkle Schlackenziegeltreppe", "block.create.fancy_dark_scoria_bricks_stairs": "Schicke dunkle Schlackenziegeltreppe",
"block.create.fancy_dark_scoria_bricks_wall": "Schicke dunkle Schlackenziegelmauer", "block.create.fancy_dark_scoria_bricks_wall": "Schicke dunkle Schlackenziegelmauer",
"block.create.fluid_pipe": "Wasserrohr", "block.create.fancy_diorite_bricks": "Schöne Dioritziegel",
"block.create.fluid_tank": "Wassertank", "block.create.fancy_diorite_bricks_slab": "Schöne Dioritziegelstufe",
"block.create.fancy_diorite_bricks_stairs": "Schöne Dioritziegeltreppe",
"block.create.fancy_diorite_bricks_wall": "Schöne Dioritziegelmauer",
"block.create.fancy_dolomite_bricks": "Schöne Dolomitziegel",
"block.create.fancy_dolomite_bricks_slab": "Schöne Dolomitziegelstufe",
"block.create.fancy_dolomite_bricks_stairs": "Schöne Dolomitziegeltreppe",
"block.create.fancy_dolomite_bricks_wall": "Schöne Dolomitziegelmauer",
"block.create.fancy_gabbro_bricks": "Schöne Gabelsteinziegel",
"block.create.fancy_gabbro_bricks_slab": "Schöne Gabelsteinziegelstufe",
"block.create.fancy_gabbro_bricks_stairs": "Schöne Gabelsteinziegeltreppe",
"block.create.fancy_gabbro_bricks_wall": "Schöne Gabelsteinziegelmauer",
"block.create.fancy_granite_bricks": "Schöne Granitziegel",
"block.create.fancy_granite_bricks_slab": "Schöne Granitziegelstufe",
"block.create.fancy_granite_bricks_stairs": "Schöne Granitziegeltreppe",
"block.create.fancy_granite_bricks_wall": "Schöne Granitziegelmauer",
"block.create.fancy_limestone_bricks": "Schöne Kalksteinziegel",
"block.create.fancy_limestone_bricks_slab": "Schöne Kalksteinziegelstufe",
"block.create.fancy_limestone_bricks_stairs": "Schöne Kalksteinziegeltreppe",
"block.create.fancy_limestone_bricks_wall": "Schöne Kalksteinziegelmauer",
"block.create.fancy_scoria_bricks": "Schöne Schlackenziegel",
"block.create.fancy_scoria_bricks_slab": "Schöne Schlackenziegelstufe",
"block.create.fancy_scoria_bricks_stairs": "Schöne Schlackenziegeltreppe",
"block.create.fancy_scoria_bricks_wall": "Schöne Schlackenziegelmauer",
"block.create.fancy_weathered_limestone_bricks": "Schöne Verwitterte Kalksteinziegel",
"block.create.fancy_weathered_limestone_bricks_slab": "Schöne Verwitterte Kalksteinziegelstufe",
"block.create.fancy_weathered_limestone_bricks_stairs": "Schöne Verwitterte Kalksteinziegeltreppe",
"block.create.fancy_weathered_limestone_bricks_wall": "Schöne Verwitterte Kalksteinziegelmauer",
"block.create.fluid_pipe": "Flüssigkeitsrohr",
"block.create.fluid_tank": "Flüssigkeitstank",
"block.create.fluid_valve": "Flüssigkeitsventil", "block.create.fluid_valve": "Flüssigkeitsventil",
"block.create.flywheel": "Schwungrad", "block.create.flywheel": "Schwungrad",
"block.create.framed_glass": "Gerahmtes Glas", "block.create.framed_glass": "Gerahmtes Glas",
"block.create.framed_glass_pane": "Gerahmte Glasscheibe", "block.create.framed_glass_pane": "Gerahmte Glasscheibe",
"block.create.gabbro": "Gabbro", "block.create.furnace_engine": "Ofenmotor",
"block.create.gabbro_bricks": "Gabbroziegel", "block.create.gabbro": "Gabelstein",
"block.create.gabbro_bricks_stairs": "Gabbroziegeltreppe", "block.create.gabbro_bricks": "Gabelsteinziegel",
"block.create.gabbro_bricks_wall": "Gabbroziegelmauer", "block.create.gabbro_bricks_slab": "Gabelsteinziegelstufe",
"block.create.gabbro_bricks_slab": "Gabbroziegelstufe", "block.create.gabbro_bricks_stairs": "Gabelsteinziegeltreppe",
"block.create.gabbro_bricks_wall": "Gabelsteinziegelmauer",
"block.create.gabbro_cobblestone": "Gabelsteinbruchstein",
"block.create.gabbro_cobblestone_slab": "Gabelsteinbruchstein",
"block.create.gabbro_cobblestone_stairs": "Gabelsteinbruchstein",
"block.create.gabbro_cobblestone_wall": "Gabelsteinbruchstein",
"block.create.gabbro_pillar": "Gabelsteinsäule",
"block.create.gearbox": "Getriebe", "block.create.gearbox": "Getriebe",
"block.create.gearshift": "Gangschaltung", "block.create.gearshift": "Gangschaltung",
"block.create.glass_fluid_pipe": "Glaswasserrohr", "block.create.glass_fluid_pipe": "Glaswasserrohr",
"block.create.granite_bricks": "Granitziegel", "block.create.granite_bricks": "Granitziegel",
"block.create.granite_bricks_slab": "Granitziegelstufe",
"block.create.granite_bricks_stairs": "Granitziegeltreppe",
"block.create.granite_bricks_wall": "Granitziegelmauer",
"block.create.granite_cobblestone": "Granitbruchstein",
"block.create.granite_cobblestone_slab": "Granitbruchsteinstufe",
"block.create.granite_cobblestone_stairs": "Granitbruchtreppe",
"block.create.granite_cobblestone_wall": "Granitbruchsteinmauer",
"block.create.granite_pillar": "Granitsäule",
"block.create.gray_sail": "Graues Segel",
"block.create.gray_seat": "Grauer Sitz",
"block.create.gray_valve_handle": "Grauer Ventilgriff",
"block.create.green_sail": "Grünes Segel",
"block.create.green_seat": "Grüner Sitz",
"block.create.green_valve_handle": "Grüner Ventilgriff",
"block.create.hand_crank": "Handkurbel",
"block.create.honey": "Honig",
"block.create.horizontal_framed_glass": "Horizontal Gerahmes Glas",
"block.create.horizontal_framed_glass_pane": "Horizontal Gerahmte Glasscheibe",
"block.create.hose_pulley": "Umlenkrolle",
"block.create.item_drain": "Abfluss",
"block.create.jungle_window": "Tropenholzfenster",
"block.create.jungle_window_pane": "Tropenholzfensterscheib",
"block.create.large_cogwheel": "Großes Zahnrad", "block.create.large_cogwheel": "Großes Zahnrad",
"block.create.layered_andesite": "Geschichteter Andesit",
"block.create.layered_dark_scoria": "Geschichtete Dunkle Schlacke",
"block.create.layered_diorite": "Geschichteter Diorit",
"block.create.layered_dolomite": "Geschichteter Dolomit",
"block.create.layered_gabbro": "Geschichteter Gabelstein",
"block.create.layered_granite": "Geschichteter Granit",
"block.create.layered_limestone": "Geschichteter Kalkstein",
"block.create.layered_scoria": "Geschichtete Schlacke",
"block.create.layered_weathered_limestone": "Geschichteter Verwitterter Kalkstein",
"block.create.light_blue_sail": "Hellblaues Segel",
"block.create.light_blue_seat": "Hellblauer Sitz",
"block.create.light_blue_valve_handle": "Hellblauer Ventilgriff",
"block.create.light_gray_sail": "Hellgraues Segel",
"block.create.light_gray_seat": "Hellgrauer Sitz",
"block.create.light_gray_valve_handle": "Hellgrauer Ventilgriff",
"block.create.lime_sail": "Hellgrünes Segel",
"block.create.lime_seat": "Hellgrüner Sitz",
"block.create.lime_valve_handle": "Hellgrüner Ventilgriff",
"block.create.limesand": "Kalksand", "block.create.limesand": "Kalksand",
"block.create.limestone": "Kalkstein", "block.create.limestone": "Kalkstein",
"block.create.limestone_bricks": "Kalksteinziegel", "block.create.limestone_bricks": "Kalksteinziegel",
"block.create.limestone_bricks_slab": "Kalksteinziegelstufe", "block.create.limestone_bricks_slab": "Kalksteinziegelstufe",
"block.create.limestone_bricks_stairs": "Kalksteinziegeltreppe", "block.create.limestone_bricks_stairs": "Kalksteinziegeltreppe",
"block.create.limestone_bricks_wall": "Kalksteinziegelmauer", "block.create.limestone_bricks_wall": "Kalksteinziegelmauer",
"block.create.limestone_cobblestone": "Kalkbruchstein",
"block.create.limestone_cobblestone_slab": "Kalkbruchsteinstufe",
"block.create.limestone_cobblestone_stairs": "Kalkbruchsteintreppe",
"block.create.limestone_cobblestone_wall": "Kalkbruchsteinmauer",
"block.create.limestone_pillar": "Kalksteinsäule", "block.create.limestone_pillar": "Kalksteinsäule",
"block.create.linear_chassis": "Schubgerüst", "block.create.linear_chassis": "Schubgerüst",
"block.create.lit_blaze_burner": "Aktiver Lohenbrenner",
"block.create.magenta_sail": "Magenta Segel",
"block.create.magenta_seat": "Magenta Sitz",
"block.create.magenta_valve_handle": "Magenta Ventilgriff",
"block.create.mechanical_arm": "Mechanischer Arm",
"block.create.mechanical_bearing": "Mechanisches Lager", "block.create.mechanical_bearing": "Mechanisches Lager",
"block.create.mechanical_crafter": "Mechanische Handwerkseinheit",
"block.create.mechanical_drill": "Mechanischer Bohrer", "block.create.mechanical_drill": "Mechanischer Bohrer",
"block.create.mechanical_harvester": "Mechanische Erntemaschine", "block.create.mechanical_harvester": "Mechanische Erntemaschine",
"block.create.mechanical_mixer": "Mechanischer Mixer",
"block.create.mechanical_piston": "Mechanischer Kolben", "block.create.mechanical_piston": "Mechanischer Kolben",
"block.create.mechanical_piston_head": "Mechanisches Kolbenende", "block.create.mechanical_piston_head": "Mechanisches Kolbenende",
"block.create.mechanical_plough": "Mechanischer Pflug",
"block.create.mechanical_press": "Mechanische Presse", "block.create.mechanical_press": "Mechanische Presse",
"block.create.mechanical_pump": "Mechanische Pumpe",
"block.create.mechanical_saw": "Mechanische Säge",
"block.create.metal_bracket": "Metallhalterung",
"block.create.millstone": "Mahlstein",
"block.create.pink_sail": "Rosa Segel",
"block.create.pink_seat": "Rosa Sitz",
"block.create.pink_valve_handle": "Rosa Ventilgriff",
"block.create.piston_extension_pole": "Kolben-Pleuelverlängerung", "block.create.piston_extension_pole": "Kolben-Pleuelverlängerung",
"block.create.polished_dolomite": "Polierter Dolomit", "block.create.polished_dolomite": "Polierter Dolomit",
"block.create.polished_gabbro": "Polierter Gabbro", "block.create.polished_gabbro": "Polierter Gabelstein",
"block.create.polished_limestone": "Polierter Kalkstein", "block.create.polished_limestone": "Polierter Kalkstein",
"block.create.polished_limestone_slab": "Polierte Kalksteinstufe", "block.create.polished_limestone_slab": "Polierte Kalksteinstufe",
"block.create.polished_scoria": "Polierte Schlacke",
"block.create.polished_weathered_limestone": "Polierter Verwitterter Kalkstein", "block.create.polished_weathered_limestone": "Polierter Verwitterter Kalkstein",
"block.create.polished_weathered_limestone_slab": "Polierte Verwitterte Kalksteinstufe", "block.create.polished_weathered_limestone_slab": "Polierte Verwitterte Kalksteinstufe",
"block.create.powered_latch": "UNLOCALIZED: Powered Latch",
"block.create.pulse_repeater": "Pulsierender Verstärker", "block.create.pulse_repeater": "Pulsierender Verstärker",
"block.create.radial_chassis": "Drehgerüst", "block.create.radial_chassis": "Drehgerüst",
"block.create.redstone_contact": "Redstone-Kontakt", "block.create.redstone_contact": "Redstone-Kontakt",
@ -170,19 +267,30 @@
"block.create.weathered_limestone_bricks_wall": "Verwitterte Kalksteinziegelmauer", "block.create.weathered_limestone_bricks_wall": "Verwitterte Kalksteinziegelmauer",
"block.create.weathered_limestone_pillar": "Verwitterte Kalksteinsäule", "block.create.weathered_limestone_pillar": "Verwitterte Kalksteinsäule",
"fluid.create.milk": "Milch",
"fluid.create.potion": "Trank",
"fluid.create.tea": "Bauherrentee",
"item.create.bar_of_chocolate": "Schokoladetafel",
"item.create.belt_connector": "Mechanischer Riemen", "item.create.belt_connector": "Mechanischer Riemen",
"item.create.deforester": "Entforster",
"item.create.dough": "Teig", "item.create.dough": "Teig",
"item.create.empty_schematic": "Leerer Bauplan", "item.create.empty_schematic": "Leerer Bauplan",
"item.create.filter": "Filter", "item.create.filter": "Filter",
"item.create.handheld_blockzapper": "Blockpistole", "item.create.handheld_blockzapper": "Blockpistole",
"item.create.handheld_worldshaper": "Geländeformer",
"item.create.honey_bucket": "Honigeimer",
"item.create.iron_sheet": "Eisenblech", "item.create.iron_sheet": "Eisenblech",
"item.create.propeller": "Propeller", "item.create.propeller": "Propeller",
"item.create.red_sand_paper": "Rotes Schmirgelpapier",
"item.create.rose_quartz": "Rosenquarz", "item.create.rose_quartz": "Rosenquarz",
"item.create.sand_paper": "Schmirgelpapier",
"item.create.schematic": "Bauplan", "item.create.schematic": "Bauplan",
"item.create.schematic_and_quill": "Bauplan und Feder", "item.create.schematic_and_quill": "Bauplan und Feder",
"item.create.super_glue": "Superkleber",
"item.create.tree_fertilizer": "Baumdünger", "item.create.tree_fertilizer": "Baumdünger",
"item.create.wand_of_symmetry": "Symmetriestab", "item.create.wand_of_symmetry": "Symmetriestab",
"item.create.wheat_flour": "Weizenmehl",
"item.create.wrench": "Schraubenschlüssel", "item.create.wrench": "Schraubenschlüssel",
"item.create.zinc_ingot": "Zinkbarren", "item.create.zinc_ingot": "Zinkbarren",
"item.create.zinc_nugget": "Zinkklumpen", "item.create.zinc_nugget": "Zinkklumpen",
@ -203,19 +311,32 @@
"advancement.create.belt": "Befördere es alles", "advancement.create.belt": "Befördere es alles",
"advancement.create.belt.desc": "Verbinde zwei Wllen mit einem Mechanischem Riemen", "advancement.create.belt.desc": "Verbinde zwei Wllen mit einem Mechanischem Riemen",
"_": "->------------------------] UI & Messages [------------------------<-", "_": "->------------------------] UI & Messages [------------------------<-",
"itemGroup.create.base": "Create",
"itemGroup.create.palettes": "Create Paletten",
"death.attack.create.crush": "%1$s stolperte in ein Mahlwerk", "death.attack.create.crush": "%1$s stolperte in ein Mahlwerk",
"death.attack.create.fan_fire": "%1$s hat heiße Luft eingeatmet", "death.attack.create.fan_fire": "%1$s hat heiße Luft eingeatmet",
"death.attack.create.fan_lava": "%1$s wurde von Lava verweht", "death.attack.create.fan_lava": "%1$s wurde von Lava verweht",
"death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert", "death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert",
"death.attack.create.mechanical_saw": "%1$s wurde zersägt",
"death.attack.create.cuckoo_clock_explosion": "%1$s wurde durch eine falsche Kuckucksuhr gesprengt",
"create.block.deployer.damage_source_name": "einem Finger",
"create.recipe.crushing": "Mahlen", "create.recipe.crushing": "Mahlen (Mahlwerk)",
"create.recipe.milling": "Mahlen (Mahlstein)",
"create.recipe.pressing": "Mechanische Presse", "create.recipe.pressing": "Mechanische Presse",
"create.recipe.mixing": "Mixen",
"create.recipe.sawing": "Sägen",
"create.recipe.blockzapper_upgrade": "Blockpistole", "create.recipe.blockzapper_upgrade": "Blockpistole",
"create.recipe.sandpaper_polishing": "Schleifen",
"create.recipe.processing.chance": "Chance: %1$s%%", "create.recipe.processing.chance": "Chance: %1$s%%",
"create.recipe.heat_requirement.none": "Keine Hitze benötigt",
"create.recipe.heat_requirement.heated": "Wenig Hitze benötigt",
"create.recipe.heat_requirement.superheated": "Viel Hitze benötigt",
"create.generic.range": "Reichweite", "create.generic.range": "Reichweite",
"create.generic.radius": "Radius", "create.generic.radius": "Radius",
@ -224,6 +345,12 @@
"create.generic.unit.ticks": "Ticks", "create.generic.unit.ticks": "Ticks",
"create.generic.unit.seconds": "Sekunden", "create.generic.unit.seconds": "Sekunden",
"create.generic.unit.minutes": "Minuten", "create.generic.unit.minutes": "Minuten",
"create.generic.unit.rpm": "RPM",
"create.generic.unit.stress": "su",
"create.generic.unit.degrees": "°",
"create.generic.unit.millibuckets": "%1$smB",
"create.generic.clockwise": "Uhrzeigersinn",
"create.generic.counter_clockwise": "Gegen-Uhrzeigersinn",
"create.action.scroll": "Wechseln", "create.action.scroll": "Wechseln",
"create.action.confirm": "Bestätigen", "create.action.confirm": "Bestätigen",
@ -266,7 +393,6 @@
"create.gui.blockzapper.pattern.chance50": "50%-Chance", "create.gui.blockzapper.pattern.chance50": "50%-Chance",
"create.gui.blockzapper.pattern.chance75": "75%-Chance", "create.gui.blockzapper.pattern.chance75": "75%-Chance",
"create.blockzapper.usingBlock": "Auswahl: %1$s", "create.blockzapper.usingBlock": "Auswahl: %1$s",
"create.blockzapper.componentUpgrades": "Bauteil-Upgrades:", "create.blockzapper.componentUpgrades": "Bauteil-Upgrades:",
"create.blockzapper.component.body": "Rumpf", "create.blockzapper.component.body": "Rumpf",
@ -275,16 +401,16 @@
"create.blockzapper.component.retriever": "Empfänger", "create.blockzapper.component.retriever": "Empfänger",
"create.blockzapper.component.scope": "Fernrohr", "create.blockzapper.component.scope": "Fernrohr",
"create.blockzapper.componentTier.none": "Nichts", "create.blockzapper.componentTier.none": "Nichts",
"create.blockzapper.componentTier.brass": "Messing",
"create.blockzapper.leftClickToSet": "Linksklick auf einen Block zum Auswählen", "create.blockzapper.leftClickToSet": "Linksklick auf einen Block zum Auswählen",
"create.blockzapper.empty": "Keine Blöcke übrig!", "create.blockzapper.empty": "Keine Blöcke übrig!",
"create.logistics.filter": "Filter", "create.logistics.filter": "Filter",
"create.logistics.recipe_filter": "Rezeptfilter",
"create.logistics.fluid_filter": "Flüssigkeitsfilter",
"create.logistics.firstFrequency": "Freq. #1", "create.logistics.firstFrequency": "Freq. #1",
"create.logistics.secondFrequency": "Freq. #2", "create.logistics.secondFrequency": "Freq. #2",
"create.gui.adjustable_crate.title": "adjustable_crate",
"create.gui.adjustable_crate.storageSpace": "Lagerraum", "create.gui.adjustable_crate.storageSpace": "Lagerraum",
"create.gui.stockpile_switch.title": "Vorratssensor", "create.gui.stockpile_switch.title": "Vorratssensor",
@ -293,6 +419,7 @@
"create.schematicAndQuill.secondPos": "Zweite Position festgelegt.", "create.schematicAndQuill.secondPos": "Zweite Position festgelegt.",
"create.schematicAndQuill.noTarget": "Halte [Strg] zur Auswahl von Luft.", "create.schematicAndQuill.noTarget": "Halte [Strg] zur Auswahl von Luft.",
"create.schematicAndQuill.abort": "Auswahl zurückgesetzt.", "create.schematicAndQuill.abort": "Auswahl zurückgesetzt.",
"create.schematicAndQuill.title": "Bauplanname:",
"create.schematicAndQuill.fallbackName": "Mein Bauplan", "create.schematicAndQuill.fallbackName": "Mein Bauplan",
"create.schematicAndQuill.saved": "Gespeichert als %1$s", "create.schematicAndQuill.saved": "Gespeichert als %1$s",
@ -421,12 +548,11 @@
"item.create.handheld_blockzapper.tooltip.action2": "_Platziert_ oder _Ersetzt_ den ausgewählten Block.", "item.create.handheld_blockzapper.tooltip.action2": "_Platziert_ oder _Ersetzt_ den ausgewählten Block.",
"item.create.handheld_blockzapper.tooltip.control3": "R-Klick beim Schleichen", "item.create.handheld_blockzapper.tooltip.control3": "R-Klick beim Schleichen",
"item.create.handheld_blockzapper.tooltip.action3": "Öffnet das _Konfigurationsmenü_", "item.create.handheld_blockzapper.tooltip.action3": "Öffnet das _Konfigurationsmenü_",
"item.create.tree_fertilizer.tooltip": "BAUMDÜNGER", "item.create.tree_fertilizer.tooltip": "BAUMDÜNGER",
"item.create.tree_fertilizer.tooltip.summary": "Eine Mischung aus Mineralien, die sich für weit verbreitete Baumarten eignet", "item.create.tree_fertilizer.tooltip.summary": "Eine Mischung aus Mineralien, die sich für weit verbreitete Baumarten eignet",
"item.create.tree_fertilizer.tooltip.condition1": "Wenn auf einen Setzling angewendet", "item.create.tree_fertilizer.tooltip.condition1": "Wenn auf einen Setzling angewendet",
"item.create.tree_fertilizer.tooltip.behaviour1": "Lässt Bäume unabhängig vom Platz um sie herum wachsen", "item.create.tree_fertilizer.tooltip.behaviour1": "Lässt Bäume unabhängig vom Platz um sie herum wachsen",
"item.create.empty_schematic.tooltip": "LEERER BAUPLAN", "item.create.empty_schematic.tooltip": "LEERER BAUPLAN",
"item.create.empty_schematic.tooltip.summary": "Wird für die Herstellung und das Schreiben auf dem _Bauplantisch_ verwendet", "item.create.empty_schematic.tooltip.summary": "Wird für die Herstellung und das Schreiben auf dem _Bauplantisch_ verwendet",
@ -518,6 +644,8 @@
"block.create.mechanical_press.tooltip.behaviour1": "_Fängt_ _an_, Gegenstände, die darunter liegen, zusammenzudrücken.", "block.create.mechanical_press.tooltip.behaviour1": "_Fängt_ _an_, Gegenstände, die darunter liegen, zusammenzudrücken.",
"block.create.mechanical_press.tooltip.condition2": "Wenn über einem Mechanischem Riemen", "block.create.mechanical_press.tooltip.condition2": "Wenn über einem Mechanischem Riemen",
"block.create.mechanical_press.tooltip.behaviour2": "Presst _automatisch_ alle auf dem Riemen vorbeigeführten Gegenstände zusammen.", "block.create.mechanical_press.tooltip.behaviour2": "Presst _automatisch_ alle auf dem Riemen vorbeigeführten Gegenstände zusammen.",
"block.create.mechanical_press.tooltip.condition3": "UNLOCALIZED: When above Basin",
"block.create.mechanical_press.tooltip.behaviour3": "UNLOCALIZED: Starts to _compact items_ in the basin whenever all necessary ingredients are present.",
"block.create.mechanical_piston.tooltip": "MECHANISCHER KOLBEN", "block.create.mechanical_piston.tooltip": "MECHANISCHER KOLBEN",
"block.create.mechanical_piston.tooltip.summary": "Eine fortgeschrittene Version des _Kolbens,_ welcher _Rotationsenergie_ benutzt, um verbundene Strukturen präzise zu bewegen. _Kolben-Pleuelverlängerungen_ auf der Hinterseite bestimmen die _Reichweite_ des Kolbens. Ohne Verlängerungen bewegt sich dieser nicht. Verwende ein _Schubgerüst,_ um mehr als nur eine Reihe von Blöcken zu bewegen.", "block.create.mechanical_piston.tooltip.summary": "Eine fortgeschrittene Version des _Kolbens,_ welcher _Rotationsenergie_ benutzt, um verbundene Strukturen präzise zu bewegen. _Kolben-Pleuelverlängerungen_ auf der Hinterseite bestimmen die _Reichweite_ des Kolbens. Ohne Verlängerungen bewegt sich dieser nicht. Verwende ein _Schubgerüst,_ um mehr als nur eine Reihe von Blöcken zu bewegen.",
@ -538,6 +666,8 @@
"block.create.linear_chassis.tooltip.summary": "Eine konfigurierbare Basis für Strukturen, die durch _Mechanische_ _Kolben_ bewegt werden sollen. Diese Blöcke müssen die erste Reihe von Blöcken vor dem Kloben bilden.", "block.create.linear_chassis.tooltip.summary": "Eine konfigurierbare Basis für Strukturen, die durch _Mechanische_ _Kolben_ bewegt werden sollen. Diese Blöcke müssen die erste Reihe von Blöcken vor dem Kloben bilden.",
"block.create.linear_chassis.tooltip.condition1": "Wenn durch einen Mechanischen Kolben bewegt", "block.create.linear_chassis.tooltip.condition1": "Wenn durch einen Mechanischen Kolben bewegt",
"block.create.linear_chassis.tooltip.behaviour1": "_Bewegt_ alle _verbundenen_ _Gerüste_ mit der gleichen Orientierung, und angebrachte Blöcke davor. Wenn der Kolben zurückgezogen wird, werden Blöcke nur zurückgezogen, wenn die Fläche des Gerüsts _klebrig_ ist (Siehe [Strg]).", "block.create.linear_chassis.tooltip.behaviour1": "_Bewegt_ alle _verbundenen_ _Gerüste_ mit der gleichen Orientierung, und angebrachte Blöcke davor. Wenn der Kolben zurückgezogen wird, werden Blöcke nur zurückgezogen, wenn die Fläche des Gerüsts _klebrig_ ist (Siehe [Strg]).",
"block.create.linear_chassis.tooltip.condition2": "UNLOCALIZED: With Wrench",
"block.create.linear_chassis.tooltip.behaviour2": "UNLOCALIZED: Configure the _range_ for this chassis block. Hold CTRL to modify the range of all attached chassis blocks as well.",
"block.create.linear_chassis.tooltip.control1": "Wenn mit einem Schleimball R-geklickt", "block.create.linear_chassis.tooltip.control1": "Wenn mit einem Schleimball R-geklickt",
"block.create.linear_chassis.tooltip.action1": "Lässt die Oberfläche _klebrig_ werden. Wenn der Kolben zurückgezogen wird, _zieht_ das Gerüst alle verbundenen Blöcke _zurück_ in seine Spalte und innerhalb der konfigurierten Reichweite.", "block.create.linear_chassis.tooltip.action1": "Lässt die Oberfläche _klebrig_ werden. Wenn der Kolben zurückgezogen wird, _zieht_ das Gerüst alle verbundenen Blöcke _zurück_ in seine Spalte und innerhalb der konfigurierten Reichweite.",
@ -545,6 +675,8 @@
"block.create.radial_chassis.tooltip.summary": "Wird für das Drehen von Strukturen mit dem _Mechanischem_ _Lager_ benutzt.", "block.create.radial_chassis.tooltip.summary": "Wird für das Drehen von Strukturen mit dem _Mechanischem_ _Lager_ benutzt.",
"block.create.radial_chassis.tooltip.condition1": "Wenn durch ein Lager gedreht", "block.create.radial_chassis.tooltip.condition1": "Wenn durch ein Lager gedreht",
"block.create.radial_chassis.tooltip.behaviour1": "_Dreht_ alle an _klebrigen_ Seiten angebrachten Blöcke (Siehe [Strg]) innerhalb der konfigurierten Reichweite um sich. _Überträgt_ die Rotation zu weiter angebrachten Rotationsgerüsten.", "block.create.radial_chassis.tooltip.behaviour1": "_Dreht_ alle an _klebrigen_ Seiten angebrachten Blöcke (Siehe [Strg]) innerhalb der konfigurierten Reichweite um sich. _Überträgt_ die Rotation zu weiter angebrachten Rotationsgerüsten.",
"block.create.radial_chassis.tooltip.condition2": "UNLOCALIZED: With Wrench",
"block.create.radial_chassis.tooltip.behaviour2": "UNLOCALIZED: Configure the _range_ for this chassis block. Hold CTRL to modify the range of all attached chassis blocks as well.",
"block.create.radial_chassis.tooltip.control1": "Wenn mit einem Schleimball R-geklickt", "block.create.radial_chassis.tooltip.control1": "Wenn mit einem Schleimball R-geklickt",
"block.create.radial_chassis.tooltip.action1": "Lässt die geklickte Fläche _klebrig_ werden. Wenn das Gerüst gedreht wird, werden alle verbundenen Blöcke an dieser Seite mit dem Gerüst mitgedreht.", "block.create.radial_chassis.tooltip.action1": "Lässt die geklickte Fläche _klebrig_ werden. Wenn das Gerüst gedreht wird, werden alle verbundenen Blöcke an dieser Seite mit dem Gerüst mitgedreht.",
@ -588,6 +720,8 @@
"block.create.creative_crate.tooltip": "BAUPLANKANONENMACHER", "block.create.creative_crate.tooltip": "BAUPLANKANONENMACHER",
"block.create.creative_crate.tooltip.summary": "Stellt einen unendlichen Vorrat an Blöcken für benachbarte _Bauplaenkanonen_ bereit.", "block.create.creative_crate.tooltip.summary": "Stellt einen unendlichen Vorrat an Blöcken für benachbarte _Bauplaenkanonen_ bereit.",
"block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot",
"block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._",
"block.create.pulse_repeater.tooltip": "PULSIERENDER VERSTÄRKER", "block.create.pulse_repeater.tooltip": "PULSIERENDER VERSTÄRKER",
"block.create.pulse_repeater.tooltip.summary": "Ein einfacher Schaltkreis, um durchgehende Redstone-Signale auf eine Länge von _1_ _tick_ zu reduzieren.", "block.create.pulse_repeater.tooltip.summary": "Ein einfacher Schaltkreis, um durchgehende Redstone-Signale auf eine Länge von _1_ _tick_ zu reduzieren.",
@ -595,6 +729,9 @@
"block.create.adjustable_repeater.tooltip": "VERZÖGERNDER VERSTÄRKER", "block.create.adjustable_repeater.tooltip": "VERZÖGERNDER VERSTÄRKER",
"block.create.adjustable_repeater.tooltip.summary": "Ein fortgeschrittener _Redstone-Verstärker_ mit einer _konfigurierbaren_ _Verzögerung_ von bis zu 30 Minuten.", "block.create.adjustable_repeater.tooltip.summary": "Ein fortgeschrittener _Redstone-Verstärker_ mit einer _konfigurierbaren_ _Verzögerung_ von bis zu 30 Minuten.",
"create.tooltip.wip": "WIP",
"create.tooltip.workInProgress": "Work in progress!",
"_": "Thank you for translating Create!" "_": "Thank you for translating Create!"
} }

View file

@ -30,6 +30,7 @@
"create.recipe.mechanical_crafting": "Mechanical Crafting", "create.recipe.mechanical_crafting": "Mechanical Crafting",
"create.recipe.automatic_shaped": "Automated Shaped Crafting", "create.recipe.automatic_shaped": "Automated Shaped Crafting",
"create.recipe.block_cutting": "Block Cutting", "create.recipe.block_cutting": "Block Cutting",
"create.recipe.wood_cutting": "Wood Cutting",
"create.recipe.blockzapper_upgrade": "Handheld Blockzapper", "create.recipe.blockzapper_upgrade": "Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "Sandpaper Polishing", "create.recipe.sandpaper_polishing": "Sandpaper Polishing",
"create.recipe.mystery_conversion": "Mysterious Conversion", "create.recipe.mystery_conversion": "Mysterious Conversion",
@ -199,13 +200,19 @@
"create.gui.sequenced_gearshift.title": "Sequenced Gearshift", "create.gui.sequenced_gearshift.title": "Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "Instruction", "create.gui.sequenced_gearshift.instruction": "Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "Turn", "create.gui.sequenced_gearshift.instruction.turn_angle": "Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angle", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "Piston", "create.gui.sequenced_gearshift.instruction.turn_distance": "Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distance", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distance",
"create.gui.sequenced_gearshift.instruction.wait": "Wait", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "Timed Delay",
"create.gui.sequenced_gearshift.instruction.wait.duration": "Duration", "create.gui.sequenced_gearshift.instruction.delay": "Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "End",
"create.gui.sequenced_gearshift.instruction.end": "End", "create.gui.sequenced_gearshift.instruction.end": "End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "Await",
"create.gui.sequenced_gearshift.speed": "Speed, Direction", "create.gui.sequenced_gearshift.speed": "Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "Input speed, Forwards", "create.gui.sequenced_gearshift.speed.forward": "Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "Double speed, Forwards", "create.gui.sequenced_gearshift.speed.forward_fast": "Double speed, Forwards",

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB