diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 7aaffed16..e137f4151 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -409,21 +409,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -e6152504e06696dd5e67fc7711c8a35a0e89adc1 assets/create/lang/en_ud.json -4d7ec7006116a592c33b7b7af0993928c85d3943 assets/create/lang/en_us.json -584ba74d18b1bdd51f943c2ef90ceac25df60b4b assets/create/lang/unfinished/de_de.json -18a8e656082e0f34f313d551e32ed57a8f42f5ba assets/create/lang/unfinished/es_es.json -88da824ad125a1a6914b1e945d17485f97ea1543 assets/create/lang/unfinished/es_mx.json -790f6fafb21a2290adbe6da075c9894b4cd9ce9e assets/create/lang/unfinished/fr_fr.json -b3801b0e37c3a93014d0b209b3c20d0eb4982550 assets/create/lang/unfinished/it_it.json -190bf21a8e82f264db0e1aa32f0516e43725e725 assets/create/lang/unfinished/ja_jp.json -bb68c5668957aeb7feff85c64adb7ee1beecd076 assets/create/lang/unfinished/ko_kr.json -4857d98dd044d09780c1dfad653ba62cb1db7c1e assets/create/lang/unfinished/nl_nl.json -e96765630f6aa460142ac9d59c0ded91e2bb3264 assets/create/lang/unfinished/pl_pl.json -a758699740d59f90dab2858f767d8c170cb1b2c8 assets/create/lang/unfinished/pt_br.json -a13cf78eaae1cd494dd350b46753e833e5a85f50 assets/create/lang/unfinished/ru_ru.json -77bdd9d870abb3933eec633c454ff2b5b920802d assets/create/lang/unfinished/zh_cn.json -ea1f932652bd254a592af703801dd3501407277c assets/create/lang/unfinished/zh_tw.json +2626f0a81bf46ad7942d84d0a94ff38c38cae7ec assets/create/lang/en_ud.json +e2b7f06324073f1a6430698d12b759537839cb8a assets/create/lang/en_us.json +8ecb996989b291467854a8eb24a32f79e9bd52d4 assets/create/lang/unfinished/de_de.json +4d8bd237b0281fa91fc3618870374c41ea1a1a8d assets/create/lang/unfinished/es_es.json +c8215e68e7b41cf8855c3578db086575199f7204 assets/create/lang/unfinished/es_mx.json +38ab225118de9c3ede262e422d6a6975e7f7a21d assets/create/lang/unfinished/fr_fr.json +41c15915d496290757e9d35ef822f658b0eb0361 assets/create/lang/unfinished/it_it.json +45f277289f0dc7a36649fe2b6c58b8d8e1ee0f80 assets/create/lang/unfinished/ja_jp.json +446293adc386e71fa586307edaefde3748940be8 assets/create/lang/unfinished/ko_kr.json +50571ba0179b9651590a396b0dd16f96530d9831 assets/create/lang/unfinished/nl_nl.json +e7d28deed74d79691bbfbd6f3517945b94e90fc7 assets/create/lang/unfinished/pl_pl.json +dbe11c5ee7978249d2dbccb34a84713f991f3c95 assets/create/lang/unfinished/pt_br.json +dd9c142126fab8dd08d13a7076911a7c9822b8c1 assets/create/lang/unfinished/ru_ru.json +3c5d4c3d9bc15a77a7f2451b2b3647e295e94454 assets/create/lang/unfinished/zh_cn.json +acc2c8397c7da902634dc4c732c82a260eed46f5 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1260,6 +1260,7 @@ a47fbe5f2da79080d99ef0975bfa8da4d08f8be4 assets/create/models/item/chiseled_scor fe67c3f380d17735a9436a4579a8be1a02b8e4a0 assets/create/models/item/chute.json 6680a68526576ded5dac2aa3bc9fb9de3e744146 assets/create/models/item/cinder_flour.json c1da21be9f1af4f7a2ef4ec9cd92195d65ada316 assets/create/models/item/clockwork_bearing.json +f738744ce542e8f38eb043d609bc01bf0043837b assets/create/models/item/clockwork_element.json 0a2a0f0aafeab0088172f77afd40c1fa2cc1f2b8 assets/create/models/item/clutch.json dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json 7717e3b21cff39f497f07687c70c1fa40eaa756d assets/create/models/item/content_observer.json @@ -1422,12 +1423,11 @@ f0d5af58e23e2705b3ef675c30bdf85ed9567c57 assets/create/models/item/honey_bucket. 955e8accadb47f9b360e5fd48cd959c507b00f2d assets/create/models/item/horizontal_framed_glass.json f0e3b2b8a553b6e61746c922c27302dabfff71b6 assets/create/models/item/horizontal_framed_glass_pane.json ff92f6a9dfb73a6ee1eaaed3279c89390ff04a80 assets/create/models/item/hose_pulley.json -d9f222e963f8f8910ca9dbc3c31842ef149f7a1f assets/create/models/item/integrated_circuit.json +93bd17bd2beb5db7f750151bc2c21256d70de5a0 assets/create/models/item/incomplete_clockwork_element.json 9d605ce0da83a73b535bce45c107e604364e2b20 assets/create/models/item/iron_sheet.json 52e435014cb03e93411666c4799ebff206e55fc9 assets/create/models/item/item_drain.json 83fa8699318e51f838b483b40b3e897c34ed53d1 assets/create/models/item/jungle_window.json 766323f6026c3505a75db2dee2996d342370d9c2 assets/create/models/item/jungle_window_pane.json -fe89522b2bd9b4393b8afa2a97f6db4277a8a4b4 assets/create/models/item/lapis_sheet.json bcaaf60d9a853cce90169dabcb36d29a3ce19e18 assets/create/models/item/large_cogwheel.json 281e2b055c6eb6994ca306c8957fc80a98fb5473 assets/create/models/item/layered_andesite.json 7afeb6170b37cb464ea91be18928d21970d556d3 assets/create/models/item/layered_dark_scoria.json @@ -1700,8 +1700,8 @@ ea0f8acb7c3692b569269e62927725d968a65251 data/create/advancements/hose_pulley.js 9f642faf92b75a28c564e90be8448b9a4328af5e data/create/advancements/infinite_chocolate.json a933fa5e7217e2ffe123ae035cfbc9210ba69fd5 data/create/advancements/infinite_lava.json a8ab0e4ffba358d23f9efaa9f51245b6d490a8be data/create/advancements/infinite_water.json -9beb622c79e9f5ce2397c22222cac0faf272f388 data/create/advancements/integrated_circuit.json -316bed3d8985d0a371200967d7edd2936f1b9f94 data/create/advancements/integrated_circuit_eob.json +5937ff2cb0d480c15fe093304c8533afc9934378 data/create/advancements/integrated_circuit.json +acf44f38768c711ddd34067518e2b52104d4b97d data/create/advancements/integrated_circuit_eob.json 4d7cb129877d6cd68fda66159818e47ca44db078 data/create/advancements/item_drain.json b61d958815f1c2530c11c88c9081d5c794d7f807 data/create/advancements/its_alive.json 9d68fed495a37fc78184e43e432c3181da84d19c data/create/advancements/lava_wheel.json @@ -2982,7 +2982,7 @@ af84b939ced1c0254a27469f857f571afbadc4f6 data/create/recipes/crafting/kinetics/r 0827e86e4b5f9d7023ccc19922bcbbaefd5b42d8 data/create/recipes/crafting/kinetics/red_seat_from_other_seat.json 5a10019d23726940152e26af3239d55d16bc7880 data/create/recipes/crafting/kinetics/red_valve_handle_from_other_valve_handle.json af525e135eb927b64462120d201ecae7a7ec61ed data/create/recipes/crafting/kinetics/rope_pulley.json -e9f1597d40f62c2247b319303f375f0da271346f data/create/recipes/crafting/kinetics/rotation_speed_controller.json +cd7f75ef1162578432b49cfcf635f13a03ad3073 data/create/recipes/crafting/kinetics/rotation_speed_controller.json d0d7fb94621f6f02fa3137666f20e677022d9d5b data/create/recipes/crafting/kinetics/sail_frame.json 66922e18791c87fadb7629cdf32d3dd2f50ccd13 data/create/recipes/crafting/kinetics/secondary_linear_chassisfrom_conversion.json a17db27e61baa45f8a6ecb46a6d2a5a464704f8b data/create/recipes/crafting/kinetics/sequenced_gearshift.json @@ -3326,7 +3326,6 @@ c2e15ac0c9109bad3face6d13efc32d7116b4c25 data/create/recipes/limestone_pillar_fr 357cb3a50ebedcc347396c5cb26a04eb4bd96fea data/create/recipes/mechanical_crafting/extendo_grip.json de7fea84434753873dfa2b929d9b5f5f86ac6a5c data/create/recipes/mechanical_crafting/flywheel.json e491fd8a8873308270f9dc2a57ac8f2c70431dcc data/create/recipes/mechanical_crafting/furnace_engine.json -ce17f8ab6e051f45a12e55f1642ad1b8a0f8510f data/create/recipes/mechanical_crafting/integrated_circuit.json 98f877bf8f3f8a686fc6cf7479a0fba5744248ce data/create/recipes/milling/allium.json 8c7e1cbc87c7ca7df2bf949957e89422fef8ad94 data/create/recipes/milling/aluminum_ore.json bcff4d30ae09a0729bce8b2dbde4ddd6719a998b data/create/recipes/milling/andesite.json @@ -3529,7 +3528,6 @@ eae06580a0a5f486cde35426716d50fcb3ba5bb3 data/create/recipes/polished_weathered_ 4a51cb6066e87613c13bdc6d3427929080ef1def data/create/recipes/pressing/copper_ingot.json 0fa8386648398724f6fd373178b706c6b11ddefc data/create/recipes/pressing/gold_ingot.json a104ef6eb8872a40ea7b2ef67ae54cec943162f0 data/create/recipes/pressing/iron_ingot.json -7f9e72ec02a9926656744a95066f8aa304514565 data/create/recipes/pressing/lapis_block.json b472136cdc8e87fa65a812a359542bdc484f27ec data/create/recipes/pressing/path.json bd57ccc8eb4357b4a5af021db7b806b514cd2558 data/create/recipes/pressing/sugar_cane.json 141173778757d87e7f2e9466bdab6ff1263c8e98 data/create/recipes/sandpaper_polishing/rose_quartz.json @@ -3550,6 +3548,7 @@ f7b7ff190929ae525297fecb3c116f32fc05fd88 data/create/recipes/scoria_cobblestone_ a9096822db9d12b6014d6d34e52de5821305c03f data/create/recipes/scoria_cobblestone_wall_from_scoria_cobblestone_stonecutting.json a513468ce4d55fe3b3919bd76ba2bd5b6fac4d4e data/create/recipes/scoria_pillar.json 2e0ecbd3619f080d0fc6fe48307c5a5bcc2e91b4 data/create/recipes/scoria_pillar_from_scoria_stonecutting.json +cc2ef00aa42ad8fb2d5533b318e238e0c977a718 data/create/recipes/sequenced_assembly/test.json 4e817b521623966fa24186731a70f0e14c03168e data/create/recipes/smelting/aluminum_ingot_compat_silents_mechanisms.json ae90f50589bc06b44765ac8cbb9fbdc2b58fdb32 data/create/recipes/smelting/brass_ingot_from_crushed.json 64cbf425effba00ff2e31d95cffc2be2e0191932 data/create/recipes/smelting/bread.json @@ -3723,12 +3722,11 @@ cc82188fe8d986f4457301ed4f75ae833d263601 data/forge/tags/items/nuggets/brass.jso 4b700ee8aa748c2ec70c29ef1589844879c0deae data/forge/tags/items/ores.json 4a0b13a9835106de9a1dd0a71a02372abb48e7b6 data/forge/tags/items/ores/copper.json d5ea262a0f5fb210612d22521818e26cf08e591a data/forge/tags/items/ores/zinc.json -0ecf8a5392faf244b8cab3c7ddd45d5b34954050 data/forge/tags/items/plates.json +5d5ec04a61ff2b1ad19210e2859a9c96cc246ef8 data/forge/tags/items/plates.json 39f0d70ec10597e85df7c4783bbc5e0e4a5ffb80 data/forge/tags/items/plates/brass.json c3dab5fe379bc1b7b10d4a0ba7009eee1b75a27c data/forge/tags/items/plates/copper.json fb9bfb4c84ed9cf2da8c4b2fbc4cd4d9f37d3016 data/forge/tags/items/plates/gold.json 04d947ed7a5066f3cfe75a8dc564fe2dca8a9c93 data/forge/tags/items/plates/iron.json -4d598b23d07b6a0bfd89da11a30ce119a8660632 data/forge/tags/items/plates/lapis_lazuli.json 508730d3822c54d355329bf6a33d58071653afad data/forge/tags/items/storage_blocks.json ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/items/storage_blocks/brass.json f6c8f34ceb475546dba5cc6ff288863ea795d20b data/forge/tags/items/storage_blocks/copper.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index fe16edad0..06574d937 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -436,6 +436,7 @@ "item.create.chocolate_glazed_berries": "s\u01DD\u0131\u0279\u0279\u01DD\u15FA p\u01DDz\u0250\u05DF\u2141 \u01DD\u0287\u0250\u05DFo\u0254o\u0265\u0186", "item.create.chromatic_compound": "punod\u026Fo\u0186 \u0254\u0131\u0287\u0250\u026Fo\u0279\u0265\u0186", "item.create.cinder_flour": "\u0279no\u05DF\u2132 \u0279\u01DDpu\u0131\u0186", + "item.create.clockwork_element": "\u0287u\u01DD\u026F\u01DD\u05DF\u018E \u029E\u0279o\u028D\u029E\u0254o\u05DF\u0186", "item.create.copper_backtank": "\u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u0279\u01DDddo\u0186", "item.create.copper_ingot": "\u0287obuI \u0279\u01DDddo\u0186", "item.create.copper_nugget": "\u0287\u01DDbbnN \u0279\u01DDddo\u0186", @@ -470,9 +471,8 @@ "item.create.handheld_worldshaper": "\u0279\u01DDd\u0250\u0265sp\u05DF\u0279oM \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", "item.create.honey_bucket": "\u0287\u01DD\u029E\u0254n\u15FA \u028E\u01DDuoH", "item.create.honeyed_apple": "\u01DD\u05DFdd\u2C6F p\u01DD\u028E\u01DDuoH", - "item.create.integrated_circuit": "\u0287\u0131n\u0254\u0279\u0131\u0186 p\u01DD\u0287\u0250\u0279b\u01DD\u0287uI", + "item.create.incomplete_clockwork_element": "\u0287u\u01DD\u026F\u01DD\u05DF\u018E \u029E\u0279o\u028D\u029E\u0254o\u05DF\u0186 \u01DD\u0287\u01DD\u05DFd\u026Fo\u0254uI", "item.create.iron_sheet": "\u0287\u01DD\u01DD\u0265S uo\u0279I", - "item.create.lapis_sheet": "\u0287\u01DD\u01DD\u0265S s\u0131d\u0250\uA780", "item.create.linked_controller": "\u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186 p\u01DD\u029Eu\u0131\uA780", "item.create.minecart_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W", "item.create.minecart_coupling": "bu\u0131\u05DFdno\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 4360a2b90..1e89cf444 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -442,6 +442,7 @@ "item.create.chocolate_glazed_berries": "Chocolate Glazed Berries", "item.create.chromatic_compound": "Chromatic Compound", "item.create.cinder_flour": "Cinder Flour", + "item.create.clockwork_element": "Clockwork Element", "item.create.copper_backtank": "Copper Backtank", "item.create.copper_ingot": "Copper Ingot", "item.create.copper_nugget": "Copper Nugget", @@ -476,9 +477,8 @@ "item.create.handheld_worldshaper": "Creative Worldshaper", "item.create.honey_bucket": "Honey Bucket", "item.create.honeyed_apple": "Honeyed Apple", - "item.create.integrated_circuit": "Integrated Circuit", + "item.create.incomplete_clockwork_element": "Incomplete Clockwork Element", "item.create.iron_sheet": "Iron Sheet", - "item.create.lapis_sheet": "Lapis Sheet", "item.create.linked_controller": "Linked Controller", "item.create.minecart_contraption": "Minecart Contraption", "item.create.minecart_coupling": "Minecart Coupling", @@ -712,6 +712,12 @@ "create.recipe.mystery_conversion": "Mysterious Conversion", "create.recipe.spout_filling": "Filling by Spout", "create.recipe.draining": "Item Draining", + "create.recipe.sequenced_assembly": "Sequenced Assembly", + "create.recipe.assembly.next": "Next: %1$s", + "create.recipe.assembly.pressing": "Process in Press", + "create.recipe.assembly.spout_filling_fluid": "Spout %1$s", + "create.recipe.assembly.deploying_item": "Deploy %1$s", + "create.recipe.assembly.cutting": "Cut with Saw", "create.recipe.processing.chance": "%1$s%% Chance", "create.recipe.heat_requirement.none": "No Heating Required", "create.recipe.heat_requirement.heated": "Heated", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 7bec5cd38..1f553c230 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1073", + "_": "Missing Localizations: 1081", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "Schokoladenglasierte Beeren", "item.create.chromatic_compound": "Chromatische Verbindung", "item.create.cinder_flour": "Aschenmehl", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Kupferbarren", "item.create.copper_nugget": "Kupferklumpen", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "Geländeformer", "item.create.honey_bucket": "Honigeimer", "item.create.honeyed_apple": "Honigapfel", - "item.create.integrated_circuit": "Integrierter Schaltkreis", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "Eisenblech", - "item.create.lapis_sheet": "Lapislazuliblech", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Loren Vorrichtung", "item.create.minecart_coupling": "Lorenkupplung", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "Mysteriöse Konvertierung", "create.recipe.spout_filling": "Befüllung per Ausguss", "create.recipe.draining": "Gegenstandsablassung", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "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", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index 8983ea9da..c61954de2 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 834", + "_": "Missing Localizations: 842", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "Compuesto cromático", "item.create.cinder_flour": "Harina de ceniza", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Lingote de cobre", "item.create.copper_nugget": "Pepita de cobre", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "Worldshaper", "item.create.honey_bucket": "Cubo de miel", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.integrated_circuit": "Chip de circuito integrado", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "Lámina de hierro", - "item.create.lapis_sheet": "Lámina de lapislázuli", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Artilugio de vagoneta", "item.create.minecart_coupling": "Acoplamiento de vagoneta", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "Conversión misteriosa", "create.recipe.spout_filling": "Llenar por el pico", "create.recipe.draining": "Drenador de elementos", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "%1$s%% Chance", "create.recipe.heat_requirement.none": "No es necesario calentar", "create.recipe.heat_requirement.heated": "Calentado", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 705f47f8d..2ed359dce 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1440", + "_": "Missing Localizations: 1448", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "Compuesto Cromático", "item.create.cinder_flour": "Ceniza Molida", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Lingote de Cobre", "item.create.copper_nugget": "Pepita de Cobre", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "Pistola de Manipulación de Mundo", "item.create.honey_bucket": "Cubeta de Miel", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.integrated_circuit": "Circuito Integrado", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "Lámina de Hierro", - "item.create.lapis_sheet": "Lámina de Lapislázuli", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Artefacto de Vagón", "item.create.minecart_coupling": "Acoplamiento de Vagonetas", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", "create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout", "create.recipe.draining": "UNLOCALIZED: Item Draining", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "UNLOCALIZED: %1$s%% Chance", "create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", "create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index aeada7ee7..f11bf3391 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1325", + "_": "Missing Localizations: 1333", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "Composé chromatique", "item.create.cinder_flour": "Farine de braise", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Lingot de cuivre", "item.create.copper_nugget": "Pépite de cuivre", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "Térraformeur portable", "item.create.honey_bucket": "Seau de miel", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.integrated_circuit": "Circuit intégré", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "Plaque de Fer", - "item.create.lapis_sheet": "Feuille de lapis", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Engin de wagonnet", "item.create.minecart_coupling": "Lien pour wagonnet", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "Métamorphose chromatique", "create.recipe.spout_filling": "Remplissage par un bec verseur", "create.recipe.draining": "UNLOCALIZED: Item Draining", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "%1$s%% de chance", "create.recipe.heat_requirement.none": "Pas de chauffage requis", "create.recipe.heat_requirement.heated": "Chauffé", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 0664d2120..4fbc3bb25 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 851", + "_": "Missing Localizations: 859", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "Composto cromatico", "item.create.cinder_flour": "Cenere farinosa", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Lingotto di rame", "item.create.copper_nugget": "Pepita di rame", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "Plasmatore del mondo portatile", "item.create.honey_bucket": "Secchio di miele", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.integrated_circuit": "Circuito integrato", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "Lamiera di ferro", - "item.create.lapis_sheet": "Lamiera di lapislazzuli", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Contrazione per carrello da miniera", "item.create.minecart_coupling": "Aggancio per carrelli da miniera", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "Metamorfosi cromatica", "create.recipe.spout_filling": "Riempimento da spruzzo", "create.recipe.draining": "Drenaggio di oggetti", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "%1$s%% di probabilità", "create.recipe.heat_requirement.none": "Nessun riscaldamento", "create.recipe.heat_requirement.heated": "Riscaldamento", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 80f6217ea..9b153a8d3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 217", + "_": "Missing Localizations: 225", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "チョコレートグレーズドベリー", "item.create.chromatic_compound": "色彩の化合物", "item.create.cinder_flour": "ネザーラックの粉", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "銅インゴット", "item.create.copper_nugget": "銅塊", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "携帯型ワールドシェーパー", "item.create.honey_bucket": "ハチミツ入りバケツ", "item.create.honeyed_apple": "リンゴのハチミツかけ", - "item.create.integrated_circuit": "集積回路", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "鉄板", - "item.create.lapis_sheet": "ラピスラズリ板", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "からくり付きトロッコ", "item.create.minecart_coupling": "トロッコ連結器", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "神秘の変転", "create.recipe.spout_filling": "アイテム注液口による注入", "create.recipe.draining": "アイテムから排液", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "%1$s%%チャンス", "create.recipe.heat_requirement.none": "加熱不要", "create.recipe.heat_requirement.heated": "加熱が必要", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 5e3d46541..2180339de 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 904", + "_": "Missing Localizations: 912", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "색채 혼합물", "item.create.cinder_flour": "잿가루", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "구리 주괴", "item.create.copper_nugget": "구리 조각", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "휴대용 세계편집기", "item.create.honey_bucket": "꿀 양동이", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.integrated_circuit": "집적 회로", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "철 판", - "item.create.lapis_sheet": "청금석 판", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "광산 수레 장치", "item.create.minecart_coupling": "광산 수레 커플링", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "?", "create.recipe.spout_filling": "채우기", "create.recipe.draining": "배수", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "%1$s%% 확률", "create.recipe.heat_requirement.none": "열이 필요하지 않음", "create.recipe.heat_requirement.heated": "고온으로 가열됨", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 18dc46c7f..799bec105 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1708", + "_": "Missing Localizations: 1714", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Koperstaaf", "item.create.copper_nugget": "Koper klompje", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "UNLOCALIZED: Creative Worldshaper", "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "IJzeren Platen", - "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", "create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout", "create.recipe.draining": "UNLOCALIZED: Item Draining", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "%1$s%% Kans", "create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", "create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 8f52c7ed1..0d9483779 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 193", + "_": "Missing Localizations: 201", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "Jagody w czekoladzie", "item.create.chromatic_compound": "Związek chromatyczny", "item.create.cinder_flour": "Rozżarzona mąka", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "Miedziany zbiornik w plecaku", "item.create.copper_ingot": "Sztabka miedzi", "item.create.copper_nugget": "Bryłka miedzi", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "Ręczny kształter", "item.create.honey_bucket": "Wiadro miodu", "item.create.honeyed_apple": "Jabłko w miodzie", - "item.create.integrated_circuit": "Układ scalony", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "Arkusz żelaza", - "item.create.lapis_sheet": "Arkusz lazurytu", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Maszyna w wagoniku", "item.create.minecart_coupling": "Łącznik wagoników", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "Tajemnicza przemiana", "create.recipe.spout_filling": "Wypełnianie", "create.recipe.draining": "Osuszanie", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "%1$s%% szans", "create.recipe.heat_requirement.none": "Nie wymaga podgrzewania", "create.recipe.heat_requirement.heated": "Podrzewane", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 1cc98da4e..3a2f07207 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1749", + "_": "Missing Localizations: 1755", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "UNLOCALIZED: Copper Ingot", "item.create.copper_nugget": "UNLOCALIZED: Copper Nugget", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "UNLOCALIZED: Creative Worldshaper", "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.integrated_circuit": "UNLOCALIZED: Integrated Circuit", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "Placas de Ferro", - "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", "create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout", "create.recipe.draining": "UNLOCALIZED: Item Draining", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "%1$s%% de chance", "create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", "create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index cafaf0ce0..bafa2b39f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 750", + "_": "Missing Localizations: 758", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "Ягоды в шоколадной глазури", "item.create.chromatic_compound": "Хроматический компаунд", "item.create.cinder_flour": "Незераковая пыль", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Медный слиток", "item.create.copper_nugget": "Кусочек меди", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "Ручной редактор мира", "item.create.honey_bucket": "Ведро мёда", "item.create.honeyed_apple": "Яблоко в меду", - "item.create.integrated_circuit": "Интегральная схема", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "Железный лист", - "item.create.lapis_sheet": "Лазуритовый лист", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Вагонеточная штуковина", "item.create.minecart_coupling": "Связыватель вагонеток", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "Хроматический метаморфоз", "create.recipe.spout_filling": "Заполнение дозатором", "create.recipe.draining": "Осушение предметов", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "%1$s%% шанса", "create.recipe.heat_requirement.none": "Не требует нагрева", "create.recipe.heat_requirement.heated": "Нагрето", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index d926ba980..79b58508b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 234", + "_": "Missing Localizations: 242", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "巧克力包层浆果", "item.create.chromatic_compound": "异彩化合物", "item.create.cinder_flour": "下界面粉", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "铜锭", "item.create.copper_nugget": "铜粒", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "手持式环境塑形器", "item.create.honey_bucket": "蜂蜜桶", "item.create.honeyed_apple": "蜜渍苹果", - "item.create.integrated_circuit": "集成电路板", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "铁板", - "item.create.lapis_sheet": "青金石板", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "装配过的矿车", "item.create.minecart_coupling": "矿车连轴器", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "神秘转化", "create.recipe.spout_filling": "注液", "create.recipe.draining": "分液", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "%1$s%%概率", "create.recipe.heat_requirement.none": "无需加热", "create.recipe.heat_requirement.heated": "加热", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 5b7cb3978..d885d3fff 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 229", + "_": "Missing Localizations: 237", "_": "->------------------------] Game Elements [------------------------<-", @@ -443,6 +443,7 @@ "item.create.chocolate_glazed_berries": "巧克力甜莓", "item.create.chromatic_compound": "異彩化合物", "item.create.cinder_flour": "地獄麵粉", + "item.create.clockwork_element": "UNLOCALIZED: Clockwork Element", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "銅錠", "item.create.copper_nugget": "銅粒", @@ -477,9 +478,8 @@ "item.create.handheld_worldshaper": "地形雕塑器", "item.create.honey_bucket": "蜂蜜桶", "item.create.honeyed_apple": "蜂蜜蘋果", - "item.create.integrated_circuit": "IC板", + "item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element", "item.create.iron_sheet": "鐵板", - "item.create.lapis_sheet": "青金石板", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "裝修過的礦車", "item.create.minecart_coupling": "礦車連結器", @@ -713,6 +713,12 @@ "create.recipe.mystery_conversion": "神秘轉化", "create.recipe.spout_filling": "注液", "create.recipe.draining": "分液", + "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", + "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", + "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", + "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", + "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", + "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", "create.recipe.processing.chance": "%1$s%%概率", "create.recipe.heat_requirement.none": "不需要加熱", "create.recipe.heat_requirement.heated": "普通加熱", diff --git a/src/generated/resources/assets/create/models/item/lapis_sheet.json b/src/generated/resources/assets/create/models/item/clockwork_element.json similarity index 57% rename from src/generated/resources/assets/create/models/item/lapis_sheet.json rename to src/generated/resources/assets/create/models/item/clockwork_element.json index bf1867e80..91bbbb770 100644 --- a/src/generated/resources/assets/create/models/item/lapis_sheet.json +++ b/src/generated/resources/assets/create/models/item/clockwork_element.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "create:item/lapis_sheet" + "layer0": "create:item/clockwork_element" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/integrated_circuit.json b/src/generated/resources/assets/create/models/item/incomplete_clockwork_element.json similarity index 52% rename from src/generated/resources/assets/create/models/item/integrated_circuit.json rename to src/generated/resources/assets/create/models/item/incomplete_clockwork_element.json index e06638fff..1cc1e0e40 100644 --- a/src/generated/resources/assets/create/models/item/integrated_circuit.json +++ b/src/generated/resources/assets/create/models/item/incomplete_clockwork_element.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "create:item/integrated_circuit" + "layer0": "create:item/incomplete_clockwork_element" } } \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/integrated_circuit.json b/src/generated/resources/data/create/advancements/integrated_circuit.json index ea773a430..1b267bbbe 100644 --- a/src/generated/resources/data/create/advancements/integrated_circuit.json +++ b/src/generated/resources/data/create/advancements/integrated_circuit.json @@ -2,7 +2,7 @@ "parent": "create:crafter", "display": { "icon": { - "item": "create:integrated_circuit" + "item": "create:clockwork_element" }, "title": { "translate": "advancement.create.integrated_circuit" @@ -21,7 +21,7 @@ "conditions": { "items": [ { - "item": "create:integrated_circuit" + "item": "create:clockwork_element" } ] } diff --git a/src/generated/resources/data/create/advancements/integrated_circuit_eob.json b/src/generated/resources/data/create/advancements/integrated_circuit_eob.json index 858b7e963..20c6037ba 100644 --- a/src/generated/resources/data/create/advancements/integrated_circuit_eob.json +++ b/src/generated/resources/data/create/advancements/integrated_circuit_eob.json @@ -21,7 +21,7 @@ "conditions": { "items": [ { - "item": "create:integrated_circuit" + "item": "create:clockwork_element" } ] } diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json b/src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json index f25765247..9946c8447 100644 --- a/src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json @@ -6,7 +6,7 @@ ], "key": { "B": { - "item": "create:integrated_circuit" + "item": "create:clockwork_element" }, "C": { "item": "create:brass_casing" diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/integrated_circuit.json b/src/generated/resources/data/create/recipes/mechanical_crafting/integrated_circuit.json deleted file mode 100644 index 68a5323da..000000000 --- a/src/generated/resources/data/create/recipes/mechanical_crafting/integrated_circuit.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:mechanical_crafting", - "pattern": [ - " L ", - "RRQRR", - " CCC " - ], - "key": { - "L": { - "item": "create:lapis_sheet" - }, - "R": { - "tag": "forge:dusts/redstone" - }, - "Q": { - "item": "create:polished_rose_quartz" - }, - "C": { - "tag": "forge:nuggets/gold" - } - }, - "result": { - "item": "create:integrated_circuit" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/pressing/lapis_block.json b/src/generated/resources/data/create/recipes/pressing/lapis_block.json deleted file mode 100644 index 7551fecd2..000000000 --- a/src/generated/resources/data/create/recipes/pressing/lapis_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "create:pressing", - "ingredients": [ - { - "item": "minecraft:lapis_block" - } - ], - "results": [ - { - "item": "create:lapis_sheet" - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/sequenced_assembly/test.json b/src/generated/resources/data/create/recipes/sequenced_assembly/test.json new file mode 100644 index 000000000..5b1fb6948 --- /dev/null +++ b/src/generated/resources/data/create/recipes/sequenced_assembly/test.json @@ -0,0 +1,123 @@ +{ + "type": "create:sequenced_assembly", + "ingredient": { + "tag": "forge:plates/gold" + }, + "transitionalItem": { + "item": "create:incomplete_clockwork_element" + }, + "sequence": [ + { + "type": "create:deploying", + "ingredients": [ + { + "item": "create:incomplete_clockwork_element" + }, + { + "item": "create:cogwheel" + } + ], + "results": [ + { + "item": "create:incomplete_clockwork_element" + } + ] + }, + { + "type": "create:pressing", + "ingredients": [ + { + "item": "create:incomplete_clockwork_element" + } + ], + "results": [ + { + "item": "create:incomplete_clockwork_element" + } + ] + }, + { + "type": "create:deploying", + "ingredients": [ + { + "item": "create:incomplete_clockwork_element" + }, + { + "item": "create:large_cogwheel" + } + ], + "results": [ + { + "item": "create:incomplete_clockwork_element" + } + ] + }, + { + "type": "create:filling", + "ingredients": [ + { + "item": "create:incomplete_clockwork_element" + }, + { + "fluid": "minecraft:water", + "nbt": {}, + "amount": 100 + } + ], + "results": [ + { + "item": "create:incomplete_clockwork_element" + } + ] + }, + { + "type": "create:deploying", + "ingredients": [ + { + "item": "create:incomplete_clockwork_element" + }, + { + "item": "create:shaft" + } + ], + "results": [ + { + "item": "create:incomplete_clockwork_element" + } + ] + }, + { + "type": "create:cutting", + "ingredients": [ + { + "item": "create:incomplete_clockwork_element" + } + ], + "results": [ + { + "item": "create:incomplete_clockwork_element" + } + ], + "processingTime": 100 + } + ], + "results": [ + { + "item": "create:clockwork_element", + "chance": 10.0 + }, + { + "item": "create:golden_sheet", + "chance": 5.0 + }, + { + "item": "create:andesite_alloy", + "chance": 2.0 + }, + { + "item": "create:cogwheel" + } + ], + "averageSteps": 20, + "maxSteps": 30 +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/plates.json b/src/generated/resources/data/forge/tags/items/plates.json index 3ba58600a..c294488df 100644 --- a/src/generated/resources/data/forge/tags/items/plates.json +++ b/src/generated/resources/data/forge/tags/items/plates.json @@ -4,7 +4,6 @@ "create:copper_sheet", "create:brass_sheet", "create:iron_sheet", - "create:golden_sheet", - "create:lapis_sheet" + "create:golden_sheet" ] } \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/plates/lapis_lazuli.json b/src/generated/resources/data/forge/tags/items/plates/lapis_lazuli.json deleted file mode 100644 index b9f6147a1..000000000 --- a/src/generated/resources/data/forge/tags/items/plates/lapis_lazuli.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "create:lapis_sheet" - ] -} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 0c12df01c..0151940aa 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -79,8 +79,12 @@ public class AllItems { CINDER_FLOUR = ingredient("cinder_flour"), POWDERED_OBSIDIAN = ingredient("powdered_obsidian"), ROSE_QUARTZ = ingredient("rose_quartz"), POLISHED_ROSE_QUARTZ = ingredient("polished_rose_quartz"), PROPELLER = ingredient("propeller"), WHISK = ingredient("whisk"), BRASS_HAND = ingredient("brass_hand"), - CRAFTER_SLOT_COVER = ingredient("crafter_slot_cover"), ELECTRON_TUBE = ingredient("electron_tube"), - INTEGRATED_CIRCUIT = ingredient("integrated_circuit"); + CRAFTER_SLOT_COVER = ingredient("crafter_slot_cover"), ELECTRON_TUBE = ingredient("electron_tube"); + + public static final ItemEntry INCOMPLETE_CLOCKWORK_ELEMENT = + hiddenIngredient("incomplete_clockwork_element"); + + public static final ItemEntry CLOCKWORK_ELEMENT = ingredient("clockwork_element"); public static final ItemEntry BLAZE_CAKE_BASE = REGISTRATE.item("blaze_cake_base", HiddenIngredientItem::new) @@ -152,7 +156,6 @@ public class AllItems { BRASS_SHEET = taggedIngredient("brass_sheet", forgeItemTag("plates/brass"), PLATES.tag), IRON_SHEET = taggedIngredient("iron_sheet", forgeItemTag("plates/iron"), PLATES.tag), GOLDEN_SHEET = taggedIngredient("golden_sheet", forgeItemTag("plates/gold"), PLATES.tag, ItemTags.PIGLIN_LOVED), - LAPIS_SHEET = taggedIngredient("lapis_sheet", forgeItemTag("plates/lapis_lazuli"), PLATES.tag), CRUSHED_IRON = taggedIngredient("crushed_iron_ore", CRUSHED_ORES.tag), CRUSHED_GOLD = taggedIngredient("crushed_gold_ore", CRUSHED_ORES.tag, ItemTags.PIGLIN_LOVED), @@ -219,6 +222,24 @@ public class AllItems { .model(AssetLookup.itemModelWithPartials()) .register(); + public static final ItemEntry MINECART_CONTRAPTION = + REGISTRATE.item("minecart_contraption", MinecartContraptionItem::rideable) + .register(); + + public static final ItemEntry FURNACE_MINECART_CONTRAPTION = + REGISTRATE.item("furnace_minecart_contraption", MinecartContraptionItem::furnace) + .register(); + + public static final ItemEntry CHEST_MINECART_CONTRAPTION = + REGISTRATE.item("chest_minecart_contraption", MinecartContraptionItem::chest) + .register(); + + // Curiosities + + static { + REGISTRATE.startSection(CURIOSITIES); + } + public static final ItemEntry EXTENDO_GRIP = REGISTRATE.item("extendo_grip", ExtendoGripItem::new) .transform(CreateRegistrate.customRenderedItem(() -> ExtendoGripModel::new)) .model(AssetLookup.itemModelWithPartials()) @@ -251,39 +272,6 @@ public class AllItems { .model(AssetLookup.itemModelWithPartials()) .register(); - public static final ItemEntry MINECART_CONTRAPTION = - REGISTRATE.item("minecart_contraption", MinecartContraptionItem::rideable) - .register(); - - public static final ItemEntry FURNACE_MINECART_CONTRAPTION = - REGISTRATE.item("furnace_minecart_contraption", MinecartContraptionItem::furnace) - .register(); - - public static final ItemEntry CHEST_MINECART_CONTRAPTION = - REGISTRATE.item("chest_minecart_contraption", MinecartContraptionItem::chest) - .register(); - - // Logistics - - static { - REGISTRATE.startSection(LOGISTICS); - } - - public static final ItemEntry FILTER = REGISTRATE.item("filter", FilterItem::regular) - .model(AssetLookup.existingItemModel()) - .register(); - - public static final ItemEntry ATTRIBUTE_FILTER = - REGISTRATE.item("attribute_filter", FilterItem::attribute) - .model(AssetLookup.existingItemModel()) - .register(); - - // Curiosities - - static { - REGISTRATE.startSection(CURIOSITIES); - } - public static final ItemEntry COPPER_BACKTANK = @@ -302,6 +290,21 @@ public class AllItems { REGISTRATE.item("tree_fertilizer", TreeFertilizerItem::new) .register(); + // Logistics + + static { + REGISTRATE.startSection(LOGISTICS); + } + + public static final ItemEntry FILTER = REGISTRATE.item("filter", FilterItem::regular) + .model(AssetLookup.existingItemModel()) + .register(); + + public static final ItemEntry ATTRIBUTE_FILTER = + REGISTRATE.item("attribute_filter", FilterItem::attribute) + .model(AssetLookup.existingItemModel()) + .register(); + // Schematics static { @@ -328,7 +331,6 @@ public class AllItems { .register(); } - @SuppressWarnings("unused") private static ItemEntry hiddenIngredient(String name) { return REGISTRATE.item(name, HiddenIngredientItem::new) .register(); diff --git a/src/main/java/com/simibubi/create/AllRecipeTypes.java b/src/main/java/com/simibubi/create/AllRecipeTypes.java index c21740132..d3731470c 100644 --- a/src/main/java/com/simibubi/create/AllRecipeTypes.java +++ b/src/main/java/com/simibubi/create/AllRecipeTypes.java @@ -14,6 +14,7 @@ import com.simibubi.create.content.contraptions.components.mixer.MixingRecipe; import com.simibubi.create.content.contraptions.components.press.PressingRecipe; import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe; import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe; +import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipeSerializer; import com.simibubi.create.content.contraptions.processing.BasinRecipe; import com.simibubi.create.content.contraptions.processing.EmptyingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; @@ -48,6 +49,7 @@ public enum AllRecipeTypes { DEPLOYING(processingSerializer(DeployerApplicationRecipe::new)), FILLING(processingSerializer(FillingRecipe::new)), EMPTYING(processingSerializer(EmptyingRecipe::new)), + SEQUENCED_ASSEMBLY(SequencedAssemblyRecipeSerializer::new), ; diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index b22279830..b44b6b13b 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -26,6 +26,7 @@ import com.simibubi.create.foundation.data.CreateRegistrate; import com.simibubi.create.foundation.data.LangMerger; import com.simibubi.create.foundation.data.recipe.MechanicalCraftingRecipeGen; import com.simibubi.create.foundation.data.recipe.ProcessingRecipeGen; +import com.simibubi.create.foundation.data.recipe.SequencedAssemblyRecipeGen; import com.simibubi.create.foundation.data.recipe.StandardRecipeGen; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.worldgen.AllWorldFeatures; @@ -132,6 +133,7 @@ public class Create { gen.addProvider(AllSoundEvents.provider(gen)); gen.addProvider(new StandardRecipeGen(gen)); gen.addProvider(new MechanicalCraftingRecipeGen(gen)); + gen.addProvider(new SequencedAssemblyRecipeGen(gen)); ProcessingRecipeGen.registerAll(gen); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java index 28b14c1cc..d3d6c6d3e 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java @@ -45,11 +45,11 @@ public class DeployingCategory extends CreateRecipeCategory { @@ -42,25 +49,40 @@ public class DeployerApplicationRecipe extends ProcessingRecipe { public Ingredient getRequiredHeldItem() { if (ingredients.isEmpty()) throw new IllegalStateException("Deploying Recipe: " + id.toString() + " has no tool!"); - return ingredients.get(0); + return ingredients.get(1); } public Ingredient getProcessedItem() { if (ingredients.size() < 2) throw new IllegalStateException("Deploying Recipe: " + id.toString() + " has no ingredient!"); - return ingredients.get(1); + return ingredients.get(0); } public static List convert(List> sandpaperRecipes) { return sandpaperRecipes.stream() .map(r -> new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new, Create.asResource(r.getId() - .getPath() + "_using_deployer")) + .getPath() + "_using_deployer")).require(r.getIngredients() + .get(0)) .require(Ingredient.fromItems(AllItems.SAND_PAPER.get(), AllItems.RED_SAND_PAPER.get())) - .require(r.getIngredients() - .get(0)) .output(r.getRecipeOutput()) .build()) .collect(Collectors.toList()); } + @Override + public boolean supportsAssembly() { + return true; + } + + @Override + @OnlyIn(Dist.CLIENT) + public ITextComponent getDescriptionForAssembly() { + ItemStack[] matchingStacks = ingredients.get(1) + .getMatchingStacks(); + if (matchingStacks.length == 0) + return new StringTextComponent("Invalid"); + return Lang.translate("recipe.assembly.deploying_item", + new TranslationTextComponent(matchingStacks[0].getTranslationKey()).getString()); + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java index 8235a25a7..8c69d61d9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java @@ -4,6 +4,7 @@ import static com.simibubi.create.content.contraptions.base.DirectionalKineticBl import java.util.ArrayList; import java.util.List; +import java.util.Optional; import javax.annotation.Nullable; @@ -12,6 +13,7 @@ import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe; import com.simibubi.create.content.curiosities.tools.SandPaperItem; import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe.SandPaperInv; import com.simibubi.create.foundation.advancement.AllTriggers; @@ -448,8 +450,14 @@ public class DeployerTileEntity extends KineticTileEntity { return AllRecipeTypes.SANDPAPER_POLISHING.find(sandpaperInv, world) .orElse(null); } - recipeInv.setInventorySlotContents(0, heldItemMainhand); - recipeInv.setInventorySlotContents(1, stack); + recipeInv.setInventorySlotContents(0, stack); + recipeInv.setInventorySlotContents(1, heldItemMainhand); + + Optional assemblyRecipe = SequencedAssemblyRecipe.getRecipe(world, recipeInv, + AllRecipeTypes.DEPLOYING.getType(), DeployerApplicationRecipe.class); + if (assemblyRecipe.isPresent()) + return assemblyRecipe.get(); + return AllRecipeTypes.DEPLOYING.find(recipeInv, world) .orElse(null); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index f87ef8786..d6bbb96c3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -8,6 +8,7 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe; import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity; import com.simibubi.create.content.contraptions.processing.BasinTileEntity; import com.simibubi.create.content.contraptions.processing.InWorldProcessing; @@ -325,6 +326,11 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { private static final RecipeWrapper pressingInv = new RecipeWrapper(new ItemStackHandler(1)); public Optional getRecipe(ItemStack item) { + Optional assemblyRecipe = + SequencedAssemblyRecipe.getRecipe(world, item, AllRecipeTypes.PRESSING.getType(), PressingRecipe.class); + if (assemblyRecipe.isPresent()) + return assemblyRecipe; + pressingInv.setInventorySlotContents(0, item); return AllRecipeTypes.PRESSING.find(pressingInv, world); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java index 481acc8e0..82d9dd597 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java @@ -5,8 +5,12 @@ import javax.annotation.ParametersAreNonnullByDefault; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; +import com.simibubi.create.foundation.utility.Lang; +import net.minecraft.util.text.ITextComponent; import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.items.wrapper.RecipeWrapper; @ParametersAreNonnullByDefault @@ -28,9 +32,21 @@ public class PressingRecipe extends ProcessingRecipe { protected int getMaxInputCount() { return 1; } - + @Override protected int getMaxOutputCount() { return 2; } + + @Override + public boolean supportsAssembly() { + return true; + } + + @Override + @OnlyIn(Dist.CLIENT) + public ITextComponent getDescriptionForAssembly() { + return Lang.translate("recipe.assembly.pressing"); + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/CuttingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/CuttingRecipe.java index bb76d1cab..b368d0508 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/CuttingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/CuttingRecipe.java @@ -5,8 +5,12 @@ import javax.annotation.ParametersAreNonnullByDefault; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; +import com.simibubi.create.foundation.utility.Lang; +import net.minecraft.util.text.ITextComponent; import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.items.wrapper.RecipeWrapper; @ParametersAreNonnullByDefault @@ -33,5 +37,16 @@ public class CuttingRecipe extends ProcessingRecipe { protected int getMaxOutputCount() { return 4; } + + @Override + public boolean supportsAssembly() { + return true; + } + + @Override + @OnlyIn(Dist.CLIENT) + public ITextComponent getDescriptionForAssembly() { + return Lang.translate("recipe.assembly.cutting"); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index f42e683f4..378b57ec0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -3,16 +3,19 @@ package com.simibubi.create.content.contraptions.components.saw; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.Random; import java.util.function.Predicate; import java.util.stream.Collectors; import javax.annotation.ParametersAreNonnullByDefault; +import com.google.common.collect.ImmutableList; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.AllTags; import com.simibubi.create.content.contraptions.components.actors.BlockBreakingKineticTileEntity; +import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingInventory; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.item.ItemHelper; @@ -208,6 +211,8 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { boolean changed = false; if (!behaviour.canInsertFromSide(itemMovementFacing)) return; + if (world.isRemote && !isVirtual()) + return; for (int slot = 0; slot < inventory.getSlots(); slot++) { ItemStack stack = inventory.getStackInSlot(slot); if (stack.isEmpty()) @@ -320,14 +325,11 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { } private List> getRecipes() { - /* - * Predicate> types = - * AllConfigs.SERVER.recipes.allowStonecuttingOnSaw.get() ? - * RecipeConditions.isOfType(IRecipeType.STONECUTTING, - * AllRecipeTypes.CUTTING.getType()) : - * RecipeConditions.isOfType(AllRecipeTypes.CUTTING.getType()); - * - */ + Optional assemblyRecipe = SequencedAssemblyRecipe.getRecipe(world, inventory.getStackInSlot(0), + AllRecipeTypes.CUTTING.getType(), CuttingRecipe.class); + if (assemblyRecipe.isPresent() && filtering.test(assemblyRecipe.get() + .getRecipeOutput())) + return ImmutableList.of(assemblyRecipe.get()); Predicate> types = RecipeConditions.isOfType(AllRecipeTypes.CUTTING.getType(), AllConfigs.SERVER.recipes.allowStonecuttingOnSaw.get() ? IRecipeType.STONECUTTING : null, diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java index fc012e730..a3036d007 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java @@ -1,8 +1,10 @@ package com.simibubi.create.content.contraptions.fluids.actors; import java.util.List; +import java.util.Optional; import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe; import com.simibubi.create.foundation.fluid.FluidIngredient; import net.minecraft.item.ItemStack; @@ -18,6 +20,12 @@ public class FillingBySpout { public static boolean canItemBeFilled(World world, ItemStack stack) { wrapper.setInventorySlotContents(0, stack); + + Optional assemblyRecipe = + SequencedAssemblyRecipe.getRecipe(world, wrapper, AllRecipeTypes.FILLING.getType(), FillingRecipe.class); + if (assemblyRecipe.isPresent()) + return true; + if (AllRecipeTypes.FILLING.find(wrapper, world) .isPresent()) return true; @@ -26,6 +34,16 @@ public class FillingBySpout { public static int getRequiredAmountForItem(World world, ItemStack stack, FluidStack availableFluid) { wrapper.setInventorySlotContents(0, stack); + + Optional assemblyRecipe = + SequencedAssemblyRecipe.getRecipe(world, wrapper, AllRecipeTypes.FILLING.getType(), FillingRecipe.class); + if (assemblyRecipe.isPresent()) { + FluidIngredient requiredFluid = assemblyRecipe.get() + .getRequiredFluid(); + if (requiredFluid.test(availableFluid)) + return requiredFluid.getRequiredAmount(); + } + for (IRecipe recipe : world.getRecipeManager() .getRecipes(AllRecipeTypes.FILLING.getType(), wrapper, world)) { FillingRecipe fillingRecipe = (FillingRecipe) recipe; @@ -41,18 +59,29 @@ public class FillingBySpout { toFill.setAmount(requiredAmount); wrapper.setInventorySlotContents(0, stack); - for (IRecipe recipe : world.getRecipeManager() - .getRecipes(AllRecipeTypes.FILLING.getType(), wrapper, world)) { - FillingRecipe fillingRecipe = (FillingRecipe) recipe; - FluidIngredient requiredFluid = fillingRecipe.getRequiredFluid(); - if (requiredFluid.test(toFill)) { - List results = fillingRecipe.rollResults(); - availableFluid.shrink(requiredAmount); - stack.shrink(1); - return results.isEmpty() ? ItemStack.EMPTY : results.get(0); - } + + FillingRecipe fillingRecipe = + SequencedAssemblyRecipe.getRecipe(world, wrapper, AllRecipeTypes.FILLING.getType(), FillingRecipe.class) + .filter(fr -> fr.getRequiredFluid() + .test(toFill)) + .orElseGet(() -> { + for (IRecipe recipe : world.getRecipeManager() + .getRecipes(AllRecipeTypes.FILLING.getType(), wrapper, world)) { + FillingRecipe fr = (FillingRecipe) recipe; + FluidIngredient requiredFluid = fr.getRequiredFluid(); + if (requiredFluid.test(toFill)) + return fr; + } + return null; + }); + + if (fillingRecipe != null) { + List results = fillingRecipe.rollResults(); + availableFluid.shrink(requiredAmount); + stack.shrink(1); + return results.isEmpty() ? ItemStack.EMPTY : results.get(0); } - + return GenericItemFilling.fillItem(world, requiredAmount, stack, availableFluid); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java index 7a085f03a..d8dea5920 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java @@ -1,11 +1,20 @@ package com.simibubi.create.content.contraptions.fluids.actors; +import java.util.List; + import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; import com.simibubi.create.foundation.fluid.FluidIngredient; +import com.simibubi.create.foundation.utility.Lang; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.wrapper.RecipeWrapper; public class FillingRecipe extends ProcessingRecipe { @@ -16,7 +25,8 @@ public class FillingRecipe extends ProcessingRecipe { @Override public boolean matches(RecipeWrapper inv, World p_77569_2_) { - return ingredients.get(0).test(inv.getStackInSlot(0)); + return ingredients.get(0) + .test(inv.getStackInSlot(0)); } @Override @@ -28,16 +38,33 @@ public class FillingRecipe extends ProcessingRecipe { protected int getMaxOutputCount() { return 1; } - + @Override protected int getMaxFluidInputCount() { return 1; } - + public FluidIngredient getRequiredFluid() { if (fluidIngredients.isEmpty()) throw new IllegalStateException("Filling Recipe: " + id.toString() + " has no fluid ingredient!"); return fluidIngredients.get(0); } + @Override + public boolean supportsAssembly() { + return true; + } + + @Override + @OnlyIn(Dist.CLIENT) + public ITextComponent getDescriptionForAssembly() { + List matchingFluidStacks = fluidIngredients.get(0) + .getMatchingFluidStacks(); + if (matchingFluidStacks.size() == 0) + return new StringTextComponent("Invalid"); + return Lang.translate("recipe.assembly.spout_filling_fluid", + new TranslationTextComponent(matchingFluidStacks.get(0) + .getTranslationKey()).getString()); + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java new file mode 100644 index 000000000..296387f64 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java @@ -0,0 +1,204 @@ +package com.simibubi.create.content.contraptions.itemAssembly; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.processing.ProcessingOutput; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.foundation.utility.Lang; + +import net.minecraft.client.Minecraft; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.items.wrapper.RecipeWrapper; + +public class SequencedAssemblyRecipe implements IRecipe { + + ResourceLocation id; + SequencedAssemblyRecipeSerializer serializer; + + Ingredient ingredient; + List> sequence; + int averageSteps; + int maxSteps; + ProcessingOutput transitionalItem; + List resultPool; + + public SequencedAssemblyRecipe(ResourceLocation recipeId, SequencedAssemblyRecipeSerializer serializer) { + this.id = recipeId; + this.serializer = serializer; + sequence = new ArrayList<>(); + resultPool = new ArrayList<>(); + averageSteps = 16; + maxSteps = 32; + } + + public static > Optional getRecipe(World world, C inv, + IRecipeType type, Class recipeClass) { + return getRecipe(world, inv.getStackInSlot(0), type, recipeClass).filter(r -> r.matches(inv, world)); + } + + public static > Optional getRecipe(World world, ItemStack item, + IRecipeType type, Class recipeClass) { + List all = world.getRecipeManager() + .listAllOfType(AllRecipeTypes.SEQUENCED_ASSEMBLY.getType()); + for (SequencedAssemblyRecipe sequencedAssemblyRecipe : all) { + if (!sequencedAssemblyRecipe.appliesTo(item)) + continue; + SequencedRecipe nextRecipe = sequencedAssemblyRecipe.getNextRecipe(item); + if (nextRecipe.wrapped.getType() != type || !recipeClass.isInstance(nextRecipe.wrapped)) + continue; + nextRecipe.wrapped.enforceNextResult(() -> sequencedAssemblyRecipe.advance(item)); + return Optional.of(recipeClass.cast(nextRecipe.wrapped)); + } + return Optional.empty(); + } + + private ItemStack advance(ItemStack input) { + int step = getStep(input); + if (step >= sequence.size()) { + float chance = 1f / (averageSteps - sequence.size()); + if (step >= maxSteps || Create.RANDOM.nextFloat() < chance) + return rollResult(); + } + + ItemStack advancedItem = ItemHandlerHelper.copyStackWithSize(transitionalItem.getStack(), 1); + CompoundNBT itemTag = advancedItem.getOrCreateTag(); + CompoundNBT tag = new CompoundNBT(); + tag.putString("id", id.toString()); + tag.putInt("Step", step + 1); + itemTag.put("SequencedAssembly", tag); + advancedItem.setTag(itemTag); + return advancedItem; + } + + private ItemStack rollResult() { + float totalWeight = 0; + for (ProcessingOutput entry : resultPool) + totalWeight += entry.getChance(); + float number = Create.RANDOM.nextFloat() * totalWeight; + for (ProcessingOutput entry : resultPool) { + number -= entry.getChance(); + if (number < 0) + return entry.getStack() + .copy(); + } + return ItemStack.EMPTY; + } + + private boolean appliesTo(ItemStack input) { + if (ingredient.test(input)) + return true; + return input.hasTag() && transitionalItem.getStack() + .getItem() == input.getItem() && input.getTag() + .contains("SequencedAssembly") + && input.getTag() + .getCompound("SequencedAssembly") + .getString("id") + .equals(id.toString()); + } + + private SequencedRecipe getNextRecipe(ItemStack input) { + return sequence.get(getStep(input) % sequence.size()); + } + + private int getStep(ItemStack input) { + if (!input.hasTag()) + return 0; + CompoundNBT tag = input.getTag(); + if (!tag.contains("SequencedAssembly")) + return 0; + int step = tag.getCompound("SequencedAssembly") + .getInt("Step"); + return step; + } + + @Override + public boolean matches(RecipeWrapper inv, World p_77569_2_) { + return false; + } + + @Override + public ItemStack getCraftingResult(RecipeWrapper p_77572_1_) { + return ItemStack.EMPTY; + } + + @Override + public boolean canFit(int p_194133_1_, int p_194133_2_) { + return false; + } + + @Override + public ItemStack getRecipeOutput() { + return resultPool.get(0) + .getStack(); + } + + @Override + public ResourceLocation getId() { + return id; + } + + @Override + public IRecipeSerializer getSerializer() { + return serializer; + } + + @Override + public IRecipeType getType() { + return AllRecipeTypes.SEQUENCED_ASSEMBLY.getType(); + } + + @OnlyIn(Dist.CLIENT) + public static void addToTooltip(List toolTip, ItemStack stack) { + if (!stack.hasTag() || !stack.getTag() + .contains("SequencedAssembly")) + return; + CompoundNBT compound = stack.getTag() + .getCompound("SequencedAssembly"); + ResourceLocation resourceLocation = new ResourceLocation(compound.getString("id")); + Optional> recipe = Minecraft.getInstance().world.getRecipeManager() + .getRecipe(resourceLocation); + if (!recipe.isPresent()) + return; + IRecipe iRecipe = recipe.get(); + if (!(iRecipe instanceof SequencedAssemblyRecipe)) + return; + + SequencedAssemblyRecipe sequencedAssemblyRecipe = (SequencedAssemblyRecipe) iRecipe; + toolTip.add(new StringTextComponent("")); + toolTip.add(Lang.translate("recipe.sequenced_assembly") + .formatted(TextFormatting.GRAY)); + int step = sequencedAssemblyRecipe.getStep(stack); + + for (int i = 0; i < sequencedAssemblyRecipe.sequence.size(); i++) { + SequencedRecipe sequencedRecipe = + sequencedAssemblyRecipe.sequence.get((i + step) % sequencedAssemblyRecipe.sequence.size()); + ITextComponent textComponent = sequencedRecipe.wrapped.getDescriptionForAssembly(); + if (i == 0) + toolTip.add(Lang.translate("recipe.assembly.next", textComponent) + .formatted(TextFormatting.AQUA)); + else + toolTip.add(new StringTextComponent("-> ").append(textComponent) + .formatted(TextFormatting.DARK_AQUA)); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java new file mode 100644 index 000000000..5a627281c --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java @@ -0,0 +1,141 @@ +package com.simibubi.create.content.contraptions.itemAssembly; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.UnaryOperator; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.processing.ProcessingOutput; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeFactory; +import com.simibubi.create.foundation.utility.Lang; + +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.tags.ITag; +import net.minecraft.util.IItemProvider; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.conditions.ICondition; + +public class SequencedAssemblyRecipeBuilder { + + private SequencedAssemblyRecipe recipe; + protected List recipeConditions; + + public SequencedAssemblyRecipeBuilder(ResourceLocation id) { + recipeConditions = new ArrayList<>(); + this.recipe = new SequencedAssemblyRecipe(id, + (SequencedAssemblyRecipeSerializer) AllRecipeTypes.SEQUENCED_ASSEMBLY.serializer); + } + + public > SequencedAssemblyRecipeBuilder addStep(ProcessingRecipeFactory factory, + UnaryOperator> builder) { + ProcessingRecipeBuilder recipeBuilder = + new ProcessingRecipeBuilder<>(factory, new ResourceLocation("dummy")); + Item placeHolder = recipe.transitionalItem.getStack() + .getItem(); + recipe.sequence.add(new SequencedRecipe<>(builder.apply(recipeBuilder.require(placeHolder) + .output(placeHolder)) + .build())); + return this; + } + + public SequencedAssemblyRecipeBuilder require(IItemProvider ingredient) { + return require(Ingredient.fromItems(ingredient)); + } + + public SequencedAssemblyRecipeBuilder require(ITag.INamedTag tag) { + return require(Ingredient.fromTag(tag)); + } + + public SequencedAssemblyRecipeBuilder require(Ingredient ingredient) { + recipe.ingredient = ingredient; + return this; + } + + public SequencedAssemblyRecipeBuilder transitionTo(IItemProvider item) { + recipe.transitionalItem = new ProcessingOutput(new ItemStack(item), 1); + return this; + } + + public SequencedAssemblyRecipeBuilder expectedSteps(int average) { + return expectedStepsAndMax(average, (int) (average * 1.5)); + } + + public SequencedAssemblyRecipeBuilder expectedStepsAndMax(int average, int max) { + recipe.averageSteps = average; + recipe.maxSteps = max; + return this; + } + + public SequencedAssemblyRecipeBuilder addOutput(IItemProvider item, float weight) { + return addOutput(new ItemStack(item), weight); + } + + public SequencedAssemblyRecipeBuilder addOutput(ItemStack item, float weight) { + recipe.resultPool.add(new ProcessingOutput(item, weight)); + return this; + } + + public void build(Consumer consumer) { + consumer.accept(new DataGenResult(recipe, recipeConditions)); + } + + public static class DataGenResult implements IFinishedRecipe { + + private List recipeConditions; + private SequencedAssemblyRecipeSerializer serializer; + private ResourceLocation id; + private SequencedAssemblyRecipe recipe; + + public DataGenResult(SequencedAssemblyRecipe recipe, List recipeConditions) { + this.recipeConditions = recipeConditions; + this.recipe = recipe; + this.id = Create.asResource(Lang.asId(AllRecipeTypes.SEQUENCED_ASSEMBLY.name()) + "/" + recipe.getId() + .getPath()); + this.serializer = (SequencedAssemblyRecipeSerializer) recipe.getSerializer(); + } + + @Override + public void serialize(JsonObject json) { + serializer.write(json, recipe); + if (recipeConditions.isEmpty()) + return; + + JsonArray conds = new JsonArray(); + recipeConditions.forEach(c -> conds.add(CraftingHelper.serialize(c))); + json.add("conditions", conds); + } + + @Override + public ResourceLocation getID() { + return id; + } + + @Override + public IRecipeSerializer getSerializer() { + return serializer; + } + + @Override + public JsonObject getAdvancementJson() { + return null; + } + + @Override + public ResourceLocation getAdvancementID() { + return null; + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeSerializer.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeSerializer.java new file mode 100644 index 000000000..3226fce52 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeSerializer.java @@ -0,0 +1,96 @@ +package com.simibubi.create.content.contraptions.itemAssembly; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.simibubi.create.content.contraptions.processing.ProcessingOutput; + +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistryEntry; + +public class SequencedAssemblyRecipeSerializer extends ForgeRegistryEntry> + implements IRecipeSerializer { + + public SequencedAssemblyRecipeSerializer() {} + + protected void writeToJson(JsonObject json, SequencedAssemblyRecipe recipe) { + JsonArray nestedRecipes = new JsonArray(); + JsonArray results = new JsonArray(); + json.add("ingredient", recipe.ingredient.serialize()); + recipe.sequence.forEach(i -> nestedRecipes.add(i.toJson())); + recipe.resultPool.forEach(p -> results.add(p.serialize())); + json.add("transitionalItem", recipe.transitionalItem.serialize()); + json.add("sequence", nestedRecipes); + json.add("results", results); + json.addProperty("averageSteps", recipe.averageSteps); + json.addProperty("maxSteps", recipe.maxSteps); + } + + protected SequencedAssemblyRecipe readFromJson(ResourceLocation recipeId, JsonObject json) { + SequencedAssemblyRecipe recipe = new SequencedAssemblyRecipe(recipeId, this); + recipe.ingredient = Ingredient.deserialize(json.get("ingredient")); + recipe.transitionalItem = ProcessingOutput.deserialize(JSONUtils.getJsonObject(json, "transitionalItem")); + int i = 0; + for (JsonElement je : JSONUtils.getJsonArray(json, "sequence")) + recipe.sequence.add(SequencedRecipe.fromJson(je.getAsJsonObject(), recipe, i++)); + for (JsonElement je : JSONUtils.getJsonArray(json, "results")) + recipe.resultPool.add(ProcessingOutput.deserialize(je)); + if (JSONUtils.hasField(json, "averageSteps")) { + recipe.averageSteps = JSONUtils.getInt(json, "averageSteps"); + recipe.maxSteps = (int) (recipe.averageSteps * 1.5f); + } + if (JSONUtils.hasField(json, "maxSteps")) + recipe.maxSteps = JSONUtils.getInt(json, "maxSteps"); + return recipe; + } + + protected void writeToBuffer(PacketBuffer buffer, SequencedAssemblyRecipe recipe) { + recipe.ingredient.write(buffer); + buffer.writeVarInt(recipe.sequence.size()); + recipe.sequence.forEach(sr -> sr.writeToBuffer(buffer)); + buffer.writeVarInt(recipe.resultPool.size()); + recipe.resultPool.forEach(sr -> sr.write(buffer)); + recipe.transitionalItem.write(buffer); + buffer.writeInt(recipe.averageSteps); + buffer.writeInt(recipe.maxSteps); + } + + protected SequencedAssemblyRecipe readFromBuffer(ResourceLocation recipeId, PacketBuffer buffer) { + SequencedAssemblyRecipe recipe = new SequencedAssemblyRecipe(recipeId, this); + recipe.ingredient = Ingredient.read(buffer); + int size = buffer.readVarInt(); + for (int i = 0; i < size; i++) + recipe.sequence.add(SequencedRecipe.readFromBuffer(buffer)); + size = buffer.readVarInt(); + for (int i = 0; i < size; i++) + recipe.resultPool.add(ProcessingOutput.read(buffer)); + recipe.transitionalItem = ProcessingOutput.read(buffer); + recipe.averageSteps = buffer.readInt(); + recipe.maxSteps = buffer.readInt(); + return recipe; + } + + public final void write(JsonObject json, SequencedAssemblyRecipe recipe) { + writeToJson(json, recipe); + } + + @Override + public final SequencedAssemblyRecipe read(ResourceLocation id, JsonObject json) { + return readFromJson(id, json); + } + + @Override + public final void write(PacketBuffer buffer, SequencedAssemblyRecipe recipe) { + writeToBuffer(buffer, recipe); + } + + @Override + public final SequencedAssemblyRecipe read(ResourceLocation id, PacketBuffer buffer) { + return readFromBuffer(id, buffer); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedRecipe.java new file mode 100644 index 000000000..f17718af5 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedRecipe.java @@ -0,0 +1,71 @@ +package com.simibubi.create.content.contraptions.itemAssembly; + +import com.google.common.collect.ImmutableList; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer; + +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.item.crafting.RecipeManager; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistries; + +public class SequencedRecipe> { + + T wrapped; + + public SequencedRecipe(T wrapped) { + this.wrapped = wrapped; + } + + public JsonObject toJson() { + @SuppressWarnings("unchecked") + ProcessingRecipeSerializer serializer = (ProcessingRecipeSerializer) wrapped.getSerializer(); + JsonObject json = new JsonObject(); + json.addProperty("type", ForgeRegistries.RECIPE_SERIALIZERS.getKey(serializer) + .toString()); + serializer.write(json, wrapped); + return json; + } + + public static SequencedRecipe fromJson(JsonObject json, SequencedAssemblyRecipe parent, int index) { + ResourceLocation parentId = parent.getId(); + IRecipe recipe = RecipeManager.deserializeRecipe( + new ResourceLocation(parentId.getNamespace(), parentId.getPath() + "_step_" + index), json); + if (recipe instanceof ProcessingRecipe) { + ProcessingRecipe processingRecipe = (ProcessingRecipe) recipe; + if (processingRecipe.supportsAssembly()) { + Ingredient transit = Ingredient.fromStacks(parent.transitionalItem.getStack()); + processingRecipe.getIngredients() + .set(0, index == 0 ? Ingredient.merge(ImmutableList.of(transit, parent.ingredient)) : transit); + SequencedRecipe sequencedRecipe = new SequencedRecipe<>(processingRecipe); + return sequencedRecipe; + } + } + throw new JsonParseException("Not a supported recipe type"); + } + + public void writeToBuffer(PacketBuffer buffer) { + @SuppressWarnings("unchecked") + ProcessingRecipeSerializer serializer = (ProcessingRecipeSerializer) wrapped.getSerializer(); + buffer.writeResourceLocation(ForgeRegistries.RECIPE_SERIALIZERS.getKey(serializer)); + buffer.writeResourceLocation(wrapped.getId()); + serializer.write(buffer, wrapped); + } + + public static SequencedRecipe readFromBuffer(PacketBuffer buffer) { + ResourceLocation resourcelocation = buffer.readResourceLocation(); + ResourceLocation resourcelocation1 = buffer.readResourceLocation(); + IRecipeSerializer serializer = ForgeRegistries.RECIPE_SERIALIZERS.getValue(resourcelocation); + if (!(serializer instanceof ProcessingRecipeSerializer)) + throw new JsonParseException("Not a supported recipe type"); + @SuppressWarnings("rawtypes") + ProcessingRecipe recipe = (ProcessingRecipe) serializer.read(resourcelocation1, buffer); + return new SequencedRecipe<>(recipe); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java index 78febd8cc..836be4ad3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java @@ -2,6 +2,8 @@ package com.simibubi.create.content.contraptions.processing; import java.util.ArrayList; import java.util.List; +import java.util.Optional; +import java.util.function.Supplier; import java.util.stream.Collectors; import javax.annotation.ParametersAreNonnullByDefault; @@ -25,6 +27,10 @@ import net.minecraft.item.crafting.Ingredient; import net.minecraft.network.PacketBuffer; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fluids.FluidStack; @MethodsReturnNonnullByDefault @@ -42,9 +48,11 @@ public abstract class ProcessingRecipe implements IRecipe< private IRecipeType type; private IRecipeSerializer serializer; private AllRecipeTypes enumType; + private Optional> forcedResult; public ProcessingRecipe(AllRecipeTypes recipeType, ProcessingRecipeParams params) { + this.forcedResult = Optional.empty(); this.enumType = recipeType; this.processingDuration = params.processingDuration; this.fluidIngredients = params.fluidIngredients; @@ -91,11 +99,11 @@ public abstract class ProcessingRecipe implements IRecipe< if (ingredientCount > getMaxInputCount()) logger.warn(messageHeader + " has more item inputs (" + ingredientCount + ") than supported (" - + getMaxInputCount() + ")."); + + getMaxInputCount() + ")."); if (outputCount > getMaxOutputCount()) logger.warn(messageHeader + " has more item outputs (" + outputCount + ") than supported (" - + getMaxOutputCount() + ")."); + + getMaxOutputCount() + ")."); if (processingDuration > 0 && !canSpecifyDuration()) logger.warn(messageHeader + " specified a duration. Durations have no impact on this type of recipe."); @@ -139,10 +147,17 @@ public abstract class ProcessingRecipe implements IRecipe< .collect(Collectors.toList()); } + public void enforceNextResult(Supplier stack) { + forcedResult = Optional.of(stack); + } + public List rollResults() { List results = new ArrayList<>(); - for (ProcessingOutput output : getRollableResults()) { - ItemStack stack = output.rollOutput(); + NonNullList rollableResults = getRollableResults(); + for (int i = 0; i < rollableResults.size(); i++) { + ProcessingOutput output = rollableResults.get(i); + ItemStack stack = i == 0 && forcedResult.isPresent() ? forcedResult.get() + .get() : output.rollOutput(); if (!stack.isEmpty()) results.add(stack); } @@ -215,5 +230,14 @@ public abstract class ProcessingRecipe implements IRecipe< public AllRecipeTypes getEnumType() { return enumType; } + + public boolean supportsAssembly() { + return false; + } + + @OnlyIn(Dist.CLIENT) + public ITextComponent getDescriptionForAssembly() { + return new StringTextComponent(""); + } } diff --git a/src/main/java/com/simibubi/create/events/ClientEvents.java b/src/main/java/com/simibubi/create/events/ClientEvents.java index cfc441162..38284706d 100644 --- a/src/main/java/com/simibubi/create/events/ClientEvents.java +++ b/src/main/java/com/simibubi/create/events/ClientEvents.java @@ -23,6 +23,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.tra import com.simibubi.create.content.contraptions.components.turntable.TurntableHandler; import com.simibubi.create.content.contraptions.goggles.GoggleOverlayRenderer; import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; +import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe; import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorHandler; import com.simibubi.create.content.curiosities.armor.CopperBacktankArmorLayer; import com.simibubi.create.content.curiosities.tools.BlueprintOverlayRenderer; @@ -264,6 +265,7 @@ public class ClientEvents { } PonderTooltipHandler.addToTooltip(event.getToolTip(), stack); + SequencedAssemblyRecipe.addToTooltip(event.getToolTip(), stack); } @SubscribeEvent diff --git a/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java b/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java index 18fcb1deb..76519a4c7 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java @@ -335,11 +335,11 @@ public class AllAdvancements implements IDataProvider { .register(t, id + ":overstress_flywheel"); Advancement integrated_circuit = - itemAdvancement("integrated_circuit", AllItems.INTEGRATED_CIRCUIT, TaskType.NORMAL).withParent(crafter) + itemAdvancement("integrated_circuit", AllItems.CLOCKWORK_ELEMENT, TaskType.NORMAL).withParent(crafter) .register(t, id + ":integrated_circuit"); Advancement integrated_circuit_eob = deadEnd().withParent(integrated_circuit) - .withCriterion("0", itemGathered(AllItems.INTEGRATED_CIRCUIT.get())) + .withCriterion("0", itemGathered(AllItems.CLOCKWORK_ELEMENT.get())) .register(t, id + ":integrated_circuit_eob"); Advancement speed_controller = diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java index 3f5f87671..f8843a0bf 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java @@ -78,6 +78,10 @@ public abstract class CreateRecipeProvider extends RecipeProvider { static IItemProvider cog() { return AllBlocks.COGWHEEL.get(); } + + static IItemProvider largeCog() { + return AllBlocks.LARGE_COGWHEEL.get(); + } static IItemProvider andesiteCasing() { return AllBlocks.ANDESITE_CASING.get(); @@ -112,7 +116,7 @@ public abstract class CreateRecipeProvider extends RecipeProvider { } static IItemProvider circuit() { - return AllItems.INTEGRATED_CIRCUIT.get(); + return AllItems.CLOCKWORK_ELEMENT.get(); } static ITag.INamedTag copperBlock() { diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java index 7a7956291..f97902395 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java @@ -29,15 +29,6 @@ public class MechanicalCraftingRecipeGen extends CreateRecipeProvider { .patternLine("AAPAA") .patternLine(" AAA ")), - INTEGRATED_CIRCUIT = create(AllItems.INTEGRATED_CIRCUIT::get).returns(1) - .recipe(b -> b.key('L', AllItems.LAPIS_SHEET.get()) - .key('R', Ingredient.fromTag(I.redstone())) - .key('Q', AllItems.POLISHED_ROSE_QUARTZ.get()) - .key('C', Ingredient.fromTag(Tags.Items.NUGGETS_GOLD)) - .patternLine(" L ") - .patternLine("RRQRR") - .patternLine(" CCC ")), - EXTENDO_GRIP = create(AllItems.EXTENDO_GRIP::get).returns(1) .recipe(b -> b.key('L', Ingredient.fromTag(I.brass())) .key('R', I.cog()) diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java index a42bd4893..e2f38a40c 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java @@ -3,7 +3,6 @@ package com.simibubi.create.foundation.data.recipe; import com.simibubi.create.AllItems; import com.simibubi.create.AllRecipeTypes; -import net.minecraft.block.Blocks; import net.minecraft.data.DataGenerator; import net.minecraft.item.Items; import net.minecraft.item.crafting.Ingredient; @@ -23,8 +22,6 @@ public class PressingRecipeGen extends ProcessingRecipeGen { .output(AllItems.GOLDEN_SHEET.get())), COPPER = create("copper_ingot", b -> b.require(I.copper()) .output(AllItems.COPPER_SHEET.get())), - LAPIS = create("lapis_block", b -> b.require(Blocks.LAPIS_BLOCK) - .output(AllItems.LAPIS_SHEET.get())), BRASS = create("brass_ingot", b -> b.require(I.brass()) .output(AllItems.BRASS_SHEET.get())) diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java new file mode 100644 index 000000000..181a272a8 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java @@ -0,0 +1,53 @@ +package com.simibubi.create.foundation.data.recipe; + +import java.util.function.UnaryOperator; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; +import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe; +import com.simibubi.create.content.contraptions.components.press.PressingRecipe; +import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe; +import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe; +import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipeBuilder; + +import net.minecraft.data.DataGenerator; +import net.minecraft.fluid.Fluids; + +public class SequencedAssemblyRecipeGen extends CreateRecipeProvider { + + GeneratedRecipe + + TEST = create("test", b -> b.require(I.goldSheet()) + .transitionTo(AllItems.INCOMPLETE_CLOCKWORK_ELEMENT.get()) + .addOutput(AllItems.CLOCKWORK_ELEMENT.get(), 10) + .addOutput(AllItems.GOLDEN_SHEET.get(), 5) + .addOutput(AllItems.ANDESITE_ALLOY.get(), 2) + .addOutput(AllBlocks.COGWHEEL.get(), 1) + .expectedSteps(20) + .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.cog())) + .addStep(PressingRecipe::new, rb -> rb) + .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.largeCog())) + .addStep(FillingRecipe::new, rb -> rb.require(Fluids.WATER, 100)) + .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.shaft())) + .addStep(CuttingRecipe::new, rb -> rb.averageProcessingDuration())) + ; + + public SequencedAssemblyRecipeGen(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + protected GeneratedRecipe create(String name, UnaryOperator transform) { + GeneratedRecipe generatedRecipe = + c -> transform.apply(new SequencedAssemblyRecipeBuilder(Create.asResource(name))) + .build(c); + all.add(generatedRecipe); + return generatedRecipe; + } + + @Override + public String getName() { + return "Create's Sequenced Assembly Recipes"; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/item/CreateItemGroupBase.java b/src/main/java/com/simibubi/create/foundation/item/CreateItemGroupBase.java index 379c84c76..cc234227a 100644 --- a/src/main/java/com/simibubi/create/foundation/item/CreateItemGroupBase.java +++ b/src/main/java/com/simibubi/create/foundation/item/CreateItemGroupBase.java @@ -58,10 +58,7 @@ public abstract class CreateItemGroupBase extends ItemGroup { continue; ItemStack stack = new ItemStack(item); IBakedModel model = itemRenderer.getItemModelWithOverrides(stack, world, null); - if (AllSections.of(stack) != AllSections.KINETICS) { - if (specialItems) - continue; - } else if (model.isGui3d() != specialItems) + if (model.isGui3d() != specialItems) continue; item.fillItemGroup(this, items); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java b/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java index cf9877283..29d9ef7a8 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java @@ -29,7 +29,6 @@ import static com.simibubi.create.AllItems.CRUSHED_GOLD; import static com.simibubi.create.AllItems.CRUSHED_IRON; import static com.simibubi.create.AllItems.CRUSHED_ZINC; import static com.simibubi.create.AllItems.GOLDEN_SHEET; -import static com.simibubi.create.AllItems.LAPIS_SHEET; import static com.simibubi.create.AllItems.POWDERED_OBSIDIAN; import static com.simibubi.create.AllItems.SCHEMATIC; import static com.simibubi.create.AllItems.SCHEMATIC_AND_QUILL; @@ -158,7 +157,6 @@ public class RemapHelper { reMap.put("piston_pole", PISTON_EXTENSION_POLE.getId()); // reMap.put("shadow_steel_sword", ); - reMap.put("lapis_plate", LAPIS_SHEET.getId()); reMap.put("crushed_copper", CRUSHED_COPPER.getId()); reMap.put("empty_blueprint", SCHEMATIC.getId()); // reMap.put("shadow_steel_mattock", ); diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index 4de25257f..5559152bc 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -47,6 +47,13 @@ "create.recipe.spout_filling": "Filling by Spout", "create.recipe.draining": "Item Draining", + "create.recipe.sequenced_assembly": "Sequenced Assembly", + "create.recipe.assembly.next": "Next: %1$s", + "create.recipe.assembly.pressing": "Process in Press", + "create.recipe.assembly.spout_filling_fluid": "Spout %1$s", + "create.recipe.assembly.deploying_item": "Deploy %1$s", + "create.recipe.assembly.cutting": "Cut with Saw", + "create.recipe.processing.chance": "%1$s%% Chance", "create.recipe.heat_requirement.none": "No Heating Required", "create.recipe.heat_requirement.heated": "Heated", diff --git a/src/main/resources/assets/create/textures/item/clockwork_element.png b/src/main/resources/assets/create/textures/item/clockwork_element.png new file mode 100644 index 000000000..02cc85ba2 Binary files /dev/null and b/src/main/resources/assets/create/textures/item/clockwork_element.png differ diff --git a/src/main/resources/assets/create/textures/item/incomplete_clockwork_element.png b/src/main/resources/assets/create/textures/item/incomplete_clockwork_element.png new file mode 100644 index 000000000..d15357214 Binary files /dev/null and b/src/main/resources/assets/create/textures/item/incomplete_clockwork_element.png differ