Just enough assembly lines

- Added JEI integration to Sequenced Assembly
- Bit of Refactoring
- The amount of steps before the transformation occurs are no longer random
- Intermediate item now shows assembly progress in its tooltip
This commit is contained in:
simibubi 2021-06-28 17:02:57 +02:00
parent 7b18c658b7
commit 94e4f56fe1
52 changed files with 912 additions and 334 deletions

View file

@ -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
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
7818080b0809c3a01f28c05c0ed7edf8bcbc7b1d assets/create/lang/en_ud.json
8fa6882a7cb3a89aef2b4b15378be513e0b39035 assets/create/lang/en_us.json
cd1667de5c4baede2cc6b40c18a1dfdbeab4ca92 assets/create/lang/unfinished/de_de.json
33ee62f5383be9038c5f33c6bba7cd352de962b3 assets/create/lang/unfinished/es_es.json
2e00b6f84ca1ed6532d0cb13ce6d534544c128d7 assets/create/lang/unfinished/es_mx.json
e9168dac5cce730ea1425a2d39aa979f7b944ef8 assets/create/lang/unfinished/fr_fr.json
45974fc63f80241b481367895e6f4059821d9d98 assets/create/lang/unfinished/it_it.json
b8292ad388663d5bb144813c81c23737b19a6696 assets/create/lang/unfinished/ja_jp.json
a33f8a2d9675c58420d12a807a079b29979dbb2a assets/create/lang/unfinished/ko_kr.json
9f109e77eb4a258ed30633d423889612dfc3689a assets/create/lang/unfinished/nl_nl.json
08c31f2734fe78242ef889d001cebee28c3cc33a assets/create/lang/unfinished/pl_pl.json
7af2e8033d29038d077c5f7b0b0433d38b9c6f8b assets/create/lang/unfinished/pt_br.json
0a6e6219f07d3eb68c45e2eaebbb5327383a6b06 assets/create/lang/unfinished/ru_ru.json
994953150b977f373424f1e7193c7d5bc1ad1ba3 assets/create/lang/unfinished/zh_cn.json
ebfe8edd3bd161efc819fced5e25f02e2bc93888 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,7 +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
47fb26e7a75c7bd521f46cdf9c11885769e1c94e assets/create/models/item/clockwork_component.json
0a2a0f0aafeab0088172f77afd40c1fa2cc1f2b8 assets/create/models/item/clutch.json
dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json
7717e3b21cff39f497f07687c70c1fa40eaa756d assets/create/models/item/content_observer.json
@ -1423,7 +1423,7 @@ 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
93bd17bd2beb5db7f750151bc2c21256d70de5a0 assets/create/models/item/incomplete_clockwork_element.json
94a09bbd2ca14a72f9f79ca9364a2c342c1637e3 assets/create/models/item/incomplete_clockwork_component.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
@ -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
5937ff2cb0d480c15fe093304c8533afc9934378 data/create/advancements/integrated_circuit.json
acf44f38768c711ddd34067518e2b52104d4b97d data/create/advancements/integrated_circuit_eob.json
86702f4f1bfee988a2fee5647d603c9ea2dfc8b0 data/create/advancements/integrated_circuit.json
b3596d6bdc67fc503ad430f64ad3b7a0a355d3e2 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
cd7f75ef1162578432b49cfcf635f13a03ad3073 data/create/recipes/crafting/kinetics/rotation_speed_controller.json
eab3a50d3252106bb244c6662404ba51d647a641 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
@ -3548,7 +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
073b7c585b6733e6b984f34b9658566c47540968 data/create/recipes/sequenced_assembly/clockwork_component.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

View file

@ -436,7 +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.clockwork_component": "\u0287u\u01DDuod\u026Fo\u0186 \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",
@ -471,7 +471,7 @@
"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.incomplete_clockwork_element": "\u0287u\u01DD\u026F\u01DD\u05DF\u018E \u029E\u0279o\u028D\u029E\u0254o\u05DF\u0186 \u01DD\u0287\u01DD\u05DFd\u026Fo\u0254uI",
"item.create.incomplete_clockwork_component": "\u0287u\u01DDuod\u026Fo\u0186 \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.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",

View file

@ -442,7 +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.clockwork_component": "Clockwork Component",
"item.create.copper_backtank": "Copper Backtank",
"item.create.copper_ingot": "Copper Ingot",
"item.create.copper_nugget": "Copper Nugget",
@ -477,7 +477,7 @@
"item.create.handheld_worldshaper": "Creative Worldshaper",
"item.create.honey_bucket": "Honey Bucket",
"item.create.honeyed_apple": "Honeyed Apple",
"item.create.incomplete_clockwork_element": "Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "Incomplete Clockwork Component",
"item.create.iron_sheet": "Iron Sheet",
"item.create.linked_controller": "Linked Controller",
"item.create.minecart_contraption": "Minecart Contraption",
@ -714,10 +714,14 @@
"create.recipe.draining": "Item Draining",
"create.recipe.sequenced_assembly": "Sequenced Assembly",
"create.recipe.assembly.next": "Next: %1$s",
"create.recipe.assembly.step": "Step %1$s:",
"create.recipe.assembly.progress": "Progress: %1$s/%2$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.assembly.repeat": "Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "Random junk",
"create.recipe.processing.chance": "%1$s%% Chance",
"create.recipe.heat_requirement.none": "No Heating Required",
"create.recipe.heat_requirement.heated": "Heated",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1081",
"_": "Missing Localizations: 1085",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +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.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Kupferbarren",
"item.create.copper_nugget": "Kupferklumpen",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "Geländeformer",
"item.create.honey_bucket": "Honigeimer",
"item.create.honeyed_apple": "Honigapfel",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "Eisenblech",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Loren Vorrichtung",
@ -715,10 +715,14 @@
"create.recipe.draining": "Gegenstandsablassung",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 842",
"_": "Missing Localizations: 846",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +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.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingote de cobre",
"item.create.copper_nugget": "Pepita de cobre",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "Worldshaper",
"item.create.honey_bucket": "Cubo de miel",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "Lámina de hierro",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Artilugio de vagoneta",
@ -715,10 +715,14 @@
"create.recipe.draining": "Drenador de elementos",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "%1$s%% Chance",
"create.recipe.heat_requirement.none": "No es necesario calentar",
"create.recipe.heat_requirement.heated": "Calentado",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1448",
"_": "Missing Localizations: 1452",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +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.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingote de Cobre",
"item.create.copper_nugget": "Pepita de Cobre",
@ -478,7 +478,7 @@
"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.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "Lámina de Hierro",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Artefacto de Vagón",
@ -715,10 +715,14 @@
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "UNLOCALIZED: %1$s%% Chance",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1333",
"_": "Missing Localizations: 1337",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +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.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingot de cuivre",
"item.create.copper_nugget": "Pépite de cuivre",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "Térraformeur portable",
"item.create.honey_bucket": "Seau de miel",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "Plaque de Fer",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Engin de wagonnet",
@ -715,10 +715,14 @@
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "%1$s%% de chance",
"create.recipe.heat_requirement.none": "Pas de chauffage requis",
"create.recipe.heat_requirement.heated": "Chauffé",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 859",
"_": "Missing Localizations: 863",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +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.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Lingotto di rame",
"item.create.copper_nugget": "Pepita di rame",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "Plasmatore del mondo portatile",
"item.create.honey_bucket": "Secchio di miele",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "Lamiera di ferro",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Contrazione per carrello da miniera",
@ -715,10 +715,14 @@
"create.recipe.draining": "Drenaggio di oggetti",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "%1$s%% di probabilità",
"create.recipe.heat_requirement.none": "Nessun riscaldamento",
"create.recipe.heat_requirement.heated": "Riscaldamento",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 225",
"_": "Missing Localizations: 229",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +443,7 @@
"item.create.chocolate_glazed_berries": "チョコレートグレーズドベリー",
"item.create.chromatic_compound": "色彩の化合物",
"item.create.cinder_flour": "ネザーラックの粉",
"item.create.clockwork_element": "UNLOCALIZED: Clockwork Element",
"item.create.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "銅インゴット",
"item.create.copper_nugget": "銅塊",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "携帯型ワールドシェーパー",
"item.create.honey_bucket": "ハチミツ入りバケツ",
"item.create.honeyed_apple": "リンゴのハチミツかけ",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "鉄板",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "からくり付きトロッコ",
@ -715,10 +715,14 @@
"create.recipe.draining": "アイテムから排液",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "%1$s%%チャンス",
"create.recipe.heat_requirement.none": "加熱不要",
"create.recipe.heat_requirement.heated": "加熱が必要",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 912",
"_": "Missing Localizations: 916",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +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.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "구리 주괴",
"item.create.copper_nugget": "구리 조각",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "휴대용 세계편집기",
"item.create.honey_bucket": "꿀 양동이",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "철 판",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "광산 수레 장치",
@ -715,10 +715,14 @@
"create.recipe.draining": "배수",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "%1$s%% 확률",
"create.recipe.heat_requirement.none": "열이 필요하지 않음",
"create.recipe.heat_requirement.heated": "고온으로 가열됨",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1714",
"_": "Missing Localizations: 1718",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +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.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Koperstaaf",
"item.create.copper_nugget": "Koper klompje",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "UNLOCALIZED: Creative Worldshaper",
"item.create.honey_bucket": "UNLOCALIZED: Honey Bucket",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "IJzeren Platen",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption",
@ -715,10 +715,14 @@
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "%1$s%% Kans",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 201",
"_": "Missing Localizations: 205",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +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.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "Miedziany zbiornik w plecaku",
"item.create.copper_ingot": "Sztabka miedzi",
"item.create.copper_nugget": "Bryłka miedzi",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "Ręczny kształter",
"item.create.honey_bucket": "Wiadro miodu",
"item.create.honeyed_apple": "Jabłko w miodzie",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "Arkusz żelaza",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Maszyna w wagoniku",
@ -715,10 +715,14 @@
"create.recipe.draining": "Osuszanie",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "%1$s%% szans",
"create.recipe.heat_requirement.none": "Nie wymaga podgrzewania",
"create.recipe.heat_requirement.heated": "Podrzewane",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1755",
"_": "Missing Localizations: 1759",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +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.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "UNLOCALIZED: Copper Ingot",
"item.create.copper_nugget": "UNLOCALIZED: Copper Nugget",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "UNLOCALIZED: Creative Worldshaper",
"item.create.honey_bucket": "UNLOCALIZED: Honey Bucket",
"item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "Placas de Ferro",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption",
@ -715,10 +715,14 @@
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "%1$s%% de chance",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 758",
"_": "Missing Localizations: 762",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +443,7 @@
"item.create.chocolate_glazed_berries": "Ягоды в шоколадной глазури",
"item.create.chromatic_compound": "Хроматический компаунд",
"item.create.cinder_flour": "Незераковая пыль",
"item.create.clockwork_element": "UNLOCALIZED: Clockwork Element",
"item.create.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "Медный слиток",
"item.create.copper_nugget": "Кусочек меди",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "Ручной редактор мира",
"item.create.honey_bucket": "Ведро мёда",
"item.create.honeyed_apple": "Яблоко в меду",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "Железный лист",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "Вагонеточная штуковина",
@ -715,10 +715,14 @@
"create.recipe.draining": "Осушение предметов",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "%1$s%% шанса",
"create.recipe.heat_requirement.none": "Не требует нагрева",
"create.recipe.heat_requirement.heated": "Нагрето",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 242",
"_": "Missing Localizations: 246",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +443,7 @@
"item.create.chocolate_glazed_berries": "巧克力包层浆果",
"item.create.chromatic_compound": "异彩化合物",
"item.create.cinder_flour": "下界面粉",
"item.create.clockwork_element": "UNLOCALIZED: Clockwork Element",
"item.create.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "铜锭",
"item.create.copper_nugget": "铜粒",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "手持式环境塑形器",
"item.create.honey_bucket": "蜂蜜桶",
"item.create.honeyed_apple": "蜜渍苹果",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "铁板",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "装配过的矿车",
@ -715,10 +715,14 @@
"create.recipe.draining": "分液",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "%1$s%%概率",
"create.recipe.heat_requirement.none": "无需加热",
"create.recipe.heat_requirement.heated": "加热",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 237",
"_": "Missing Localizations: 241",
"_": "->------------------------] Game Elements [------------------------<-",
@ -443,7 +443,7 @@
"item.create.chocolate_glazed_berries": "巧克力甜莓",
"item.create.chromatic_compound": "異彩化合物",
"item.create.cinder_flour": "地獄麵粉",
"item.create.clockwork_element": "UNLOCALIZED: Clockwork Element",
"item.create.clockwork_component": "UNLOCALIZED: Clockwork Component",
"item.create.copper_backtank": "UNLOCALIZED: Copper Backtank",
"item.create.copper_ingot": "銅錠",
"item.create.copper_nugget": "銅粒",
@ -478,7 +478,7 @@
"item.create.handheld_worldshaper": "地形雕塑器",
"item.create.honey_bucket": "蜂蜜桶",
"item.create.honeyed_apple": "蜂蜜蘋果",
"item.create.incomplete_clockwork_element": "UNLOCALIZED: Incomplete Clockwork Element",
"item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component",
"item.create.iron_sheet": "鐵板",
"item.create.linked_controller": "UNLOCALIZED: Linked Controller",
"item.create.minecart_contraption": "裝修過的礦車",
@ -715,10 +715,14 @@
"create.recipe.draining": "分液",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly",
"create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s",
"create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:",
"create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$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.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "UNLOCALIZED: Random junk",
"create.recipe.processing.chance": "%1$s%%概率",
"create.recipe.heat_requirement.none": "不需要加熱",
"create.recipe.heat_requirement.heated": "普通加熱",

View file

@ -1,6 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "create:item/clockwork_element"
"layer0": "create:item/clockwork_component"
}
}

View file

@ -1,6 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "create:item/incomplete_clockwork_element"
"layer0": "create:item/incomplete_clockwork_component"
}
}

View file

@ -2,7 +2,7 @@
"parent": "create:crafter",
"display": {
"icon": {
"item": "create:clockwork_element"
"item": "create:clockwork_component"
},
"title": {
"translate": "advancement.create.integrated_circuit"
@ -21,7 +21,7 @@
"conditions": {
"items": [
{
"item": "create:clockwork_element"
"item": "create:clockwork_component"
}
]
}

View file

@ -21,7 +21,7 @@
"conditions": {
"items": [
{
"item": "create:clockwork_element"
"item": "create:clockwork_component"
}
]
}

View file

@ -6,7 +6,7 @@
],
"key": {
"B": {
"item": "create:clockwork_element"
"item": "create:clockwork_component"
},
"C": {
"item": "create:brass_casing"

View file

@ -0,0 +1,77 @@
{
"type": "create:sequenced_assembly",
"ingredient": {
"tag": "forge:plates/gold"
},
"transitionalItem": {
"item": "create:incomplete_clockwork_component"
},
"sequence": [
{
"type": "create:deploying",
"ingredients": [
{
"item": "create:incomplete_clockwork_component"
},
{
"item": "create:cogwheel"
}
],
"results": [
{
"item": "create:incomplete_clockwork_component"
}
]
},
{
"type": "create:deploying",
"ingredients": [
{
"item": "create:incomplete_clockwork_component"
},
{
"item": "create:large_cogwheel"
}
],
"results": [
{
"item": "create:incomplete_clockwork_component"
}
]
},
{
"type": "create:deploying",
"ingredients": [
{
"item": "create:incomplete_clockwork_component"
},
{
"tag": "forge:nuggets/iron"
}
],
"results": [
{
"item": "create:incomplete_clockwork_component"
}
]
}
],
"results": [
{
"item": "create:clockwork_component",
"chance": 12.0
},
{
"item": "create:golden_sheet",
"chance": 2.0
},
{
"item": "create:andesite_alloy",
"chance": 2.0
},
{
"item": "create:cogwheel"
}
],
"loops": 5
}

View file

@ -1,123 +0,0 @@
{
"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
}

View file

@ -17,6 +17,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.mou
import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCouplingItem;
import com.simibubi.create.content.contraptions.goggles.GogglesItem;
import com.simibubi.create.content.contraptions.goggles.GogglesModel;
import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyItem;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem;
import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorItem;
import com.simibubi.create.content.contraptions.relays.gearbox.VerticalGearboxItem;
@ -81,10 +82,11 @@ public class AllItems {
PROPELLER = ingredient("propeller"), WHISK = ingredient("whisk"), BRASS_HAND = ingredient("brass_hand"),
CRAFTER_SLOT_COVER = ingredient("crafter_slot_cover"), ELECTRON_TUBE = ingredient("electron_tube");
public static final ItemEntry<HiddenIngredientItem> INCOMPLETE_CLOCKWORK_ELEMENT =
hiddenIngredient("incomplete_clockwork_element");
public static final ItemEntry<SequencedAssemblyItem> INCOMPLETE_CLOCKWORK_COMPONENT =
REGISTRATE.item("incomplete_clockwork_component", SequencedAssemblyItem::new)
.register();
public static final ItemEntry<Item> CLOCKWORK_ELEMENT = ingredient("clockwork_element");
public static final ItemEntry<Item> CLOCKWORK_COMPONENT = ingredient("clockwork_component");
public static final ItemEntry<HiddenIngredientItem> BLAZE_CAKE_BASE =
REGISTRATE.item("blaze_cake_base", HiddenIngredientItem::new)

View file

@ -33,6 +33,7 @@ import com.simibubi.create.compat.jei.category.PolishingCategory;
import com.simibubi.create.compat.jei.category.PressingCategory;
import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory;
import com.simibubi.create.compat.jei.category.SawingCategory;
import com.simibubi.create.compat.jei.category.SequencedAssemblyCategory;
import com.simibubi.create.compat.jei.category.SpoutCategory;
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
@ -121,6 +122,14 @@ public class CreateJEI implements IModPlugin {
.catalyst(AllBlocks.BASIN::get)
.build(),
seqAssembly = register("sequenced_assembly", SequencedAssemblyCategory::new)
.recipes(AllRecipeTypes.SEQUENCED_ASSEMBLY::getType)
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
.catalyst(AllBlocks.MECHANICAL_SAW::get)
.catalyst(AllBlocks.DEPLOYER::get)
.catalyst(AllBlocks.SPOUT::get)
.build(),
autoShapeless = register("automatic_shapeless", MixingCategory::autoShapeless)
.recipes(r -> r.getSerializer() == IRecipeSerializer.CRAFTING_SHAPELESS && r.getIngredients()
.size() > 1 && !MechanicalPressTileEntity.canCompress(r.getIngredients()),

View file

@ -67,6 +67,7 @@ public class BlockCuttingCategory extends CreateRecipeCategory<CondensedBlockCut
AllGuiTextures.JEI_SLOT.draw(matrixStack, 77 + xOffset, 47 + yOffset);
}
AllGuiTextures.JEI_DOWN_ARROW.draw(matrixStack, 31, 6);
AllGuiTextures.JEI_SHADOW.draw(matrixStack, 33 - 17, 37 + 13);
saw.draw(matrixStack, 33, 37);
}

View file

@ -104,30 +104,39 @@ public abstract class CreateRecipeCategory<T extends IRecipe<?>> implements IRec
ProcessingOutput output = results.get(slotIndex - 1);
float chance = output.getChance();
if (chance != 1)
tooltip.add(1, Lang.translate("recipe.processing.chance", chance < 0.01 ? "<1" : (int) (chance * 100)).formatted(TextFormatting.GOLD));
tooltip.add(1, Lang.translate("recipe.processing.chance", chance < 0.01 ? "<1" : (int) (chance * 100))
.formatted(TextFormatting.GOLD));
});
}
public List<FluidStack> withImprovedVisibility(List<FluidStack> stacks) {
public static List<FluidStack> withImprovedVisibility(List<FluidStack> stacks) {
return stacks.stream()
.map(this::withImprovedVisibility)
.map(CreateRecipeCategory::withImprovedVisibility)
.collect(Collectors.toList());
}
public FluidStack withImprovedVisibility(FluidStack stack) {
public static FluidStack withImprovedVisibility(FluidStack stack) {
FluidStack display = stack.copy();
int displayedAmount = (int) (stack.getAmount() * .75f) + 250;
display.setAmount(displayedAmount);
return display;
}
protected static void addFluidTooltip(IGuiFluidStackGroup fluidStacks, List<FluidIngredient> inputs,
public static void addFluidTooltip(IGuiFluidStackGroup fluidStacks, List<FluidIngredient> inputs,
List<FluidStack> outputs) {
addFluidTooltip(fluidStacks, inputs, outputs, -1);
}
public static void addFluidTooltip(IGuiFluidStackGroup fluidStacks, List<FluidIngredient> inputs,
List<FluidStack> outputs, int index) {
List<Integer> amounts = new ArrayList<>();
inputs.forEach(f -> amounts.add(f.getRequiredAmount()));
outputs.forEach(f -> amounts.add(f.getAmount()));
fluidStacks.addTooltipCallback((slotIndex, input, fluid, tooltip) -> {
if (index != -1 && slotIndex != index)
return;
if (fluid.getFluid()
.isEquivalentTo(AllFluids.POTION.get())) {
ITextComponent name = fluid.getDisplayName();
@ -142,12 +151,13 @@ public abstract class CreateRecipeCategory<T extends IRecipe<?>> implements IRec
.collect(Collectors.toList()));
}
int amount = amounts.get(slotIndex);
int amount = amounts.get(index != -1 ? 0 : slotIndex);
ITextComponent text = (Lang.translate("generic.unit.millibuckets", amount)).formatted(TextFormatting.GOLD);
if (tooltip.isEmpty())
tooltip.add(0, text);
else {
List<ITextComponent> siblings = tooltip.get(0).getSiblings();
List<ITextComponent> siblings = tooltip.get(0)
.getSiblings();
siblings.add(new StringTextComponent(" "));
siblings.add(text);
}

View file

@ -39,7 +39,9 @@ public class SawingCategory extends CreateRecipeCategory<CuttingRecipe> {
public void setRecipe(IRecipeLayout recipeLayout, CuttingRecipe recipe, IIngredients ingredients) {
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
itemStacks.init(0, true, 43, 4);
itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks()));
itemStacks.set(0, Arrays.asList(recipe.getIngredients()
.get(0)
.getMatchingStacks()));
List<ProcessingOutput> results = recipe.getRollableResults();
for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) {
@ -47,7 +49,8 @@ public class SawingCategory extends CreateRecipeCategory<CuttingRecipe> {
int yOffset = (outputIndex / 2) * -19;
itemStacks.init(outputIndex + 1, false, 117 + xOffset, 47 + yOffset);
itemStacks.set(outputIndex + 1, results.get(outputIndex).getStack());
itemStacks.set(outputIndex + 1, results.get(outputIndex)
.getStack());
}
addStochasticTooltip(itemStacks, results);
@ -56,13 +59,15 @@ public class SawingCategory extends CreateRecipeCategory<CuttingRecipe> {
@Override
public void draw(CuttingRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
AllGuiTextures.JEI_SLOT.draw(matrixStack, 43, 4);
int size = recipe.getRollableResults().size();
int size = recipe.getRollableResults()
.size();
for (int i = 0; i < size; i++) {
int xOffset = i % 2 == 0 ? 0 : 19;
int yOffset = (i / 2) * -19;
getRenderedSlot(recipe, i).draw(matrixStack, 117 + xOffset, 47 + yOffset);
}
AllGuiTextures.JEI_DOWN_ARROW.draw(matrixStack, 70, 6);
AllGuiTextures.JEI_SHADOW.draw(matrixStack, 72 - 17, 42 + 13);
saw.draw(matrixStack, 72, 42);
}

View file

@ -0,0 +1,241 @@
package com.simibubi.create.compat.jei.category;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.systems.RenderSystem;
import com.simibubi.create.AllItems;
import com.simibubi.create.compat.jei.EmptyBackground;
import com.simibubi.create.compat.jei.category.sequencedAssembly.SequencedAssemblySubCategory;
import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe;
import com.simibubi.create.content.contraptions.itemAssembly.SequencedRecipe;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.utility.Lang;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.ingredient.IGuiFluidStackGroup;
import mezz.jei.api.gui.ingredient.IGuiItemStackGroup;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
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.util.text.TranslationTextComponent;
public class SequencedAssemblyCategory extends CreateRecipeCategory<SequencedAssemblyRecipe> {
Map<ResourceLocation, SequencedAssemblySubCategory> subCategories = new HashMap<>();
public SequencedAssemblyCategory() {
super(itemIcon(AllItems.CLOCKWORK_COMPONENT.get()), new EmptyBackground(180, 115));
}
@Override
public Class<? extends SequencedAssemblyRecipe> getRecipeClass() {
return SequencedAssemblyRecipe.class;
}
@Override
public void setIngredients(SequencedAssemblyRecipe recipe, IIngredients ingredients) {
List<Ingredient> assemblyIngredients = getAllItemIngredients(recipe);
List<FluidIngredient> assemblyFluidIngredients = getAllFluidIngredients(recipe);
ingredients.setInputIngredients(assemblyIngredients);
if (!assemblyFluidIngredients.isEmpty())
ingredients.setInputLists(VanillaTypes.FLUID, assemblyFluidIngredients.stream()
.map(FluidIngredient::getMatchingFluidStacks)
.collect(Collectors.toList()));
ingredients.setOutputs(VanillaTypes.ITEM,
ImmutableList.of(recipe.getRecipeOutput(), recipe.getTransitionalItem()));
}
@Override
public void setRecipe(IRecipeLayout recipeLayout, SequencedAssemblyRecipe recipe, IIngredients ingredients) {
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
IGuiFluidStackGroup fluidStacks = recipeLayout.getFluidStacks();
int xOffset = recipe.getOutputChance() == 1 ? 0 : -7;
itemStacks.init(0, true, 26 + xOffset, 90);
itemStacks.set(0, Arrays.asList(recipe.getIngredient()
.getMatchingStacks()));
ItemStack result = recipe.getRecipeOutput();
itemStacks.init(1, false, 131 + xOffset, 90);
itemStacks.set(1, result);
int width = 0;
int margin = 3;
for (SequencedRecipe<?> sequencedRecipe : recipe.getSequence())
width += getSubCategory(sequencedRecipe).getWidth() + margin;
width -= margin;
int x = width / -2 + getBackground().getWidth() / 2;
int index = 2;
int fluidIndex = 0;
for (SequencedRecipe<?> sequencedRecipe : recipe.getSequence()) {
SequencedAssemblySubCategory subCategory = getSubCategory(sequencedRecipe);
index += subCategory.addItemIngredients(sequencedRecipe, itemStacks, x, index);
fluidIndex += subCategory.addFluidIngredients(sequencedRecipe, fluidStacks, x, fluidIndex);
x += subCategory.getWidth() + margin;
}
itemStacks.addTooltipCallback((slotIndex, input, ingredient, tooltip) -> {
if (slotIndex != 1)
return;
float chance = recipe.getOutputChance();
if (chance != 1)
tooltip.add(1, Lang.translate("recipe.processing.chance", chance < 0.01 ? "<1" : (int) (chance * 100))
.formatted(TextFormatting.GOLD));
});
}
private SequencedAssemblySubCategory getSubCategory(SequencedRecipe<?> sequencedRecipe) {
return subCategories.computeIfAbsent(sequencedRecipe.getRecipe()
.getSerializer()
.getRegistryName(),
rl -> sequencedRecipe.getAsAssemblyRecipe()
.getJEISubCategory()
.get()
.get());
}
final String[] romans = { "I", "II", "III", "IV", "V", "VI", "-" };
@Override
public void draw(SequencedAssemblyRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
FontRenderer font = Minecraft.getInstance().fontRenderer;
matrixStack.push();
matrixStack.translate(0, 15, 0);
boolean singleOutput = recipe.getOutputChance() == 1;
int xOffset = singleOutput ? 0 : -7;
AllGuiTextures.JEI_SLOT.draw(matrixStack, 26 + xOffset, 75);
(singleOutput ? AllGuiTextures.JEI_SLOT : AllGuiTextures.JEI_CHANCE_SLOT).draw(matrixStack, 131 + xOffset, 75);
AllGuiTextures.JEI_LONG_ARROW.draw(matrixStack, 52 + xOffset, 79);
if (!singleOutput) {
AllGuiTextures.JEI_CHANCE_SLOT.draw(matrixStack, 150 + xOffset, 75);
ITextComponent component = new StringTextComponent("?").formatted(TextFormatting.BOLD);
font.drawWithShadow(matrixStack, component, font.getWidth(component) / -2 + 8 + 150 + xOffset, 2 + 78,
0xefefef);
}
if (recipe.getLoops() > 1) {
matrixStack.push();
matrixStack.translate(15, 9, 0);
RenderSystem.color4f(.65f, .65f, .65f, 1);
AllIcons.I_REFRESH.draw(matrixStack, 50 + xOffset, 75);
RenderSystem.color4f(1, 1, 1, 1);
ITextComponent repeat = new StringTextComponent("x" + recipe.getLoops());
font.draw(matrixStack, repeat, 66 + xOffset, 80, 0x888888);
matrixStack.pop();
}
matrixStack.pop();
int width = 0;
int margin = 3;
for (SequencedRecipe<?> sequencedRecipe : recipe.getSequence())
width += getSubCategory(sequencedRecipe).getWidth() + margin;
width -= margin;
matrixStack.translate(width / -2 + getBackground().getWidth() / 2, 0, 0);
matrixStack.push();
List<SequencedRecipe<?>> sequence = recipe.getSequence();
for (int i = 0; i < sequence.size(); i++) {
SequencedRecipe<?> sequencedRecipe = sequence.get(i);
SequencedAssemblySubCategory subCategory = getSubCategory(sequencedRecipe);
int subWidth = subCategory.getWidth();
StringTextComponent component = new StringTextComponent("" + romans[Math.min(i, 6)]);
font.draw(matrixStack, component, font.getWidth(component) / -2 + subWidth / 2, 2, 0x888888);
subCategory.draw(sequencedRecipe, matrixStack, mouseX, mouseY, i);
matrixStack.translate(subWidth + margin, 0, 0);
}
matrixStack.pop();
}
@Override
public List<ITextComponent> getTooltipStrings(SequencedAssemblyRecipe recipe, double mouseX, double mouseY) {
List<ITextComponent> tooltip = new ArrayList<ITextComponent>();
TranslationTextComponent junk = Lang.translate("recipe.assembly.junk");
boolean singleOutput = recipe.getOutputChance() == 1;
boolean willRepeat = recipe.getLoops() > 1;
int xOffset = -7;
int minX = 150 + xOffset;
int maxX = minX + 18;
int minY = 90;
int maxY = minY + 18;
if (!singleOutput && mouseX >= minX && mouseX < maxX && mouseY >= minY && mouseY < maxY) {
float chance = recipe.getOutputChance();
tooltip.add(junk);
tooltip.add(Lang.translate("recipe.processing.chance", chance < 0.01 ? "<1" : 100 - (int) (chance * 100))
.formatted(TextFormatting.GOLD));
return tooltip;
}
minX = 55 + xOffset;
maxX = minX + 65;
minY = 92;
maxY = minY + 24;
if (willRepeat && mouseX >= minX && mouseX < maxX && mouseY >= minY && mouseY < maxY) {
tooltip.add(Lang.translate("recipe.assembly.repeat", recipe.getLoops()));
return tooltip;
}
if (mouseY > 5 && mouseY < 84) {
int width = 0;
int margin = 3;
for (SequencedRecipe<?> sequencedRecipe : recipe.getSequence())
width += getSubCategory(sequencedRecipe).getWidth() + margin;
width -= margin;
xOffset = width / 2 + getBackground().getWidth() / -2;
double relativeX = mouseX + xOffset;
List<SequencedRecipe<?>> sequence = recipe.getSequence();
for (int i = 0; i < sequence.size(); i++) {
SequencedRecipe<?> sequencedRecipe = sequence.get(i);
SequencedAssemblySubCategory subCategory = getSubCategory(sequencedRecipe);
if (relativeX >= 0 && relativeX < subCategory.getWidth()) {
tooltip.add(Lang.translate("recipe.assembly.step", i + 1));
tooltip.add(sequencedRecipe.getAsAssemblyRecipe()
.getDescriptionForAssembly()
.copy()
.formatted(TextFormatting.DARK_GREEN));
return tooltip;
}
relativeX -= subCategory.getWidth() + margin;
}
}
return tooltip;
}
private List<FluidIngredient> getAllFluidIngredients(SequencedAssemblyRecipe recipe) {
List<FluidIngredient> assemblyFluidIngredients = new ArrayList<>();
recipe.addAdditionalFluidIngredients(assemblyFluidIngredients);
return assemblyFluidIngredients;
}
private List<Ingredient> getAllItemIngredients(SequencedAssemblyRecipe recipe) {
List<Ingredient> assemblyIngredients = new ArrayList<>();
assemblyIngredients.add(recipe.getIngredient());
assemblyIngredients.add(Ingredient.fromStacks(recipe.getTransitionalItem()));
recipe.addAdditionalIngredients(assemblyIngredients);
return assemblyIngredients;
}
}

View file

@ -31,7 +31,7 @@ public class AnimatedDeployer extends AnimatedKinetics {
.scale(scale)
.render(matrixStack);
float cycle = AnimationTickHolder.getRenderTime() % 30;
float cycle = (AnimationTickHolder.getRenderTime() - offset * 8) % 30;
float offset = cycle < 10 ? cycle / 10f : cycle < 20 ? (20 - cycle) / 10f : 0;
matrixStack.push();

View file

@ -15,6 +15,8 @@ import net.minecraft.util.Direction.Axis;
public abstract class AnimatedKinetics implements IDrawable {
public int offset = 0;
public static final ILightingSettings DEFAULT_LIGHTING = CustomLightingSettings.builder()
.firstLightRotation(12.5f, 45.0f)
.secondLightRotation(-20.0f, 50.0f)

View file

@ -48,7 +48,7 @@ public class AnimatedPress extends AnimatedKinetics {
}
private float getAnimatedHeadOffset() {
float cycle = (AnimationTickHolder.getRenderTime()) % 30;
float cycle = (AnimationTickHolder.getRenderTime() - offset * 8) % 30;
if (cycle < 10) {
float progress = cycle / 10;
return -(progress * progress * progress);

View file

@ -4,7 +4,6 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.saw.SawBlock;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
@ -16,12 +15,10 @@ public class AnimatedSaw extends AnimatedKinetics {
public void draw(MatrixStack matrixStack, int xOffset, int yOffset) {
matrixStack.push();
matrixStack.translate(xOffset, yOffset, 0);
AllGuiTextures.JEI_SHADOW.draw(matrixStack, -16, 13);
matrixStack.translate(0, 0, 200);
matrixStack.translate(29, 17, 0);
matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-22.5f));
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(90 - 225f));
matrixStack.translate(2, 22, 0);
matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-15.5f));
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f + 90));
int scale = 25;
defaultBlockElement(shaft(Axis.X))

View file

@ -36,7 +36,7 @@ public class AnimatedSpout extends AnimatedKinetics {
.scale(scale)
.render(matrixStack);
float cycle = AnimationTickHolder.getRenderTime() % 30;
float cycle = (AnimationTickHolder.getRenderTime() - offset * 8) % 30;
float squeeze = cycle < 20 ? MathHelper.sin((float) (cycle / 20f * Math.PI)) : 0;
squeeze *= 20;

View file

@ -0,0 +1,154 @@
package com.simibubi.create.compat.jei.category.sequencedAssembly;
import java.util.Arrays;
import java.util.Collections;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.compat.jei.category.CreateRecipeCategory;
import com.simibubi.create.compat.jei.category.animations.AnimatedDeployer;
import com.simibubi.create.compat.jei.category.animations.AnimatedPress;
import com.simibubi.create.compat.jei.category.animations.AnimatedSaw;
import com.simibubi.create.compat.jei.category.animations.AnimatedSpout;
import com.simibubi.create.content.contraptions.itemAssembly.SequencedRecipe;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import mezz.jei.api.gui.ingredient.IGuiFluidStackGroup;
import mezz.jei.api.gui.ingredient.IGuiItemStackGroup;
public abstract class SequencedAssemblySubCategory {
private int width;
public SequencedAssemblySubCategory(int width) {
this.width = width;
}
public int getWidth() {
return width;
}
public int addItemIngredients(SequencedRecipe<?> recipe, IGuiItemStackGroup itemStacks, int x, int index) {
return 0;
}
public int addFluidIngredients(SequencedRecipe<?> recipe, IGuiFluidStackGroup fluidStacks, int x, int index) {
return 0;
}
public abstract void draw(SequencedRecipe<?> recipe, MatrixStack ms, double mouseX, double mouseY, int index);
public static class AssemblyPressing extends SequencedAssemblySubCategory {
AnimatedPress press;
public AssemblyPressing() {
super(25);
press = new AnimatedPress(false);
}
@Override
public void draw(SequencedRecipe<?> recipe, MatrixStack ms, double mouseX, double mouseY, int index) {
press.offset = index;
ms.push();
ms.translate(-5, 50, 0);
ms.scale(.6f, .6f, .6f);
press.draw(ms, getWidth() / 2, 0);
ms.pop();
}
}
public static class AssemblySpouting extends SequencedAssemblySubCategory {
AnimatedSpout spout;
public AssemblySpouting() {
super(25);
spout = new AnimatedSpout();
}
@Override
public int addFluidIngredients(SequencedRecipe<?> recipe, IGuiFluidStackGroup fluidStacks, int x, int index) {
FluidIngredient fluidIngredient = recipe.getRecipe()
.getFluidIngredients()
.get(0);
fluidStacks.init(index, true, x + 4, 15);
fluidStacks.set(index,
CreateRecipeCategory.withImprovedVisibility(fluidIngredient.getMatchingFluidStacks()));
CreateRecipeCategory.addFluidTooltip(fluidStacks, ImmutableList.of(fluidIngredient),
Collections.emptyList(), index);
return 1;
}
@Override
public void draw(SequencedRecipe<?> recipe, MatrixStack ms, double mouseX, double mouseY, int index) {
spout.offset = index;
AllGuiTextures.JEI_SLOT.draw(ms, 3, 14);
ms.push();
ms.translate(-7, 50, 0);
ms.scale(.75f, .75f, .75f);
spout.withFluids(recipe.getRecipe()
.getFluidIngredients()
.get(0)
.getMatchingFluidStacks())
.draw(ms, getWidth() / 2, 0);
ms.pop();
}
}
public static class AssemblyDeploying extends SequencedAssemblySubCategory {
AnimatedDeployer deployer;
public AssemblyDeploying() {
super(25);
deployer = new AnimatedDeployer();
}
@Override
public int addItemIngredients(SequencedRecipe<?> recipe, IGuiItemStackGroup itemStacks, int x, int index) {
itemStacks.init(index, true, x + 3, 14);
itemStacks.set(index, Arrays.asList(recipe.getRecipe()
.getIngredients()
.get(1)
.getMatchingStacks()));
return 1;
}
@Override
public void draw(SequencedRecipe<?> recipe, MatrixStack ms, double mouseX, double mouseY, int index) {
deployer.offset = index;
AllGuiTextures.JEI_SLOT.draw(ms, 3, 14);
ms.push();
ms.translate(-7, 50, 0);
ms.scale(.75f, .75f, .75f);
deployer.draw(ms, getWidth() / 2, 0);
ms.pop();
}
}
public static class AssemblyCutting extends SequencedAssemblySubCategory {
AnimatedSaw saw;
public AssemblyCutting() {
super(25);
saw = new AnimatedSaw();
}
@Override
public void draw(SequencedRecipe<?> recipe, MatrixStack ms, double mouseX, double mouseY, int index) {
ms.push();
ms.translate(0, 51.5f, 0);
ms.scale(.6f, .6f, .6f);
saw.draw(ms, getWidth() / 2, 30);
ms.pop();
}
}
}

View file

@ -1,11 +1,14 @@
package com.simibubi.create.content.contraptions.components.deployer;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.Create;
import com.simibubi.create.compat.jei.category.sequencedAssembly.SequencedAssemblySubCategory;
import com.simibubi.create.content.contraptions.itemAssembly.IAssemblyRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams;
@ -22,7 +25,7 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.items.wrapper.RecipeWrapper;
public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> {
public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> implements IAssemblyRecipe {
public DeployerApplicationRecipe(ProcessingRecipeParams params) {
super(AllRecipeTypes.DEPLOYING, params);
@ -70,8 +73,8 @@ public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> {
}
@Override
public boolean supportsAssembly() {
return true;
public void addAssemblyIngredients(List<Ingredient> list) {
list.add(ingredients.get(1));
}
@Override
@ -85,4 +88,9 @@ public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> {
new TranslationTextComponent(matchingStacks[0].getTranslationKey()).getString());
}
@Override
public Supplier<Supplier<SequencedAssemblySubCategory>> getJEISubCategory() {
return () -> SequencedAssemblySubCategory.AssemblyDeploying::new;
}
}

View file

@ -1,12 +1,18 @@
package com.simibubi.create.content.contraptions.components.press;
import java.util.List;
import java.util.function.Supplier;
import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.compat.jei.category.sequencedAssembly.SequencedAssemblySubCategory;
import com.simibubi.create.content.contraptions.itemAssembly.IAssemblyRecipe;
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.item.crafting.Ingredient;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
@ -14,7 +20,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.items.wrapper.RecipeWrapper;
@ParametersAreNonnullByDefault
public class PressingRecipe extends ProcessingRecipe<RecipeWrapper> {
public class PressingRecipe extends ProcessingRecipe<RecipeWrapper> implements IAssemblyRecipe {
public PressingRecipe(ProcessingRecipeParams params) {
super(AllRecipeTypes.PRESSING, params);
@ -39,9 +45,7 @@ public class PressingRecipe extends ProcessingRecipe<RecipeWrapper> {
}
@Override
public boolean supportsAssembly() {
return true;
}
public void addAssemblyIngredients(List<Ingredient> list) {}
@Override
@OnlyIn(Dist.CLIENT)
@ -49,4 +53,9 @@ public class PressingRecipe extends ProcessingRecipe<RecipeWrapper> {
return Lang.translate("recipe.assembly.pressing");
}
@Override
public Supplier<Supplier<SequencedAssemblySubCategory>> getJEISubCategory() {
return () -> SequencedAssemblySubCategory.AssemblyPressing::new;
}
}

View file

@ -1,12 +1,18 @@
package com.simibubi.create.content.contraptions.components.saw;
import java.util.List;
import java.util.function.Supplier;
import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.compat.jei.category.sequencedAssembly.SequencedAssemblySubCategory;
import com.simibubi.create.content.contraptions.itemAssembly.IAssemblyRecipe;
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.item.crafting.Ingredient;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
@ -14,7 +20,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.items.wrapper.RecipeWrapper;
@ParametersAreNonnullByDefault
public class CuttingRecipe extends ProcessingRecipe<RecipeWrapper> {
public class CuttingRecipe extends ProcessingRecipe<RecipeWrapper> implements IAssemblyRecipe {
public CuttingRecipe(ProcessingRecipeParams params) {
super(AllRecipeTypes.CUTTING, params);
@ -39,9 +45,7 @@ public class CuttingRecipe extends ProcessingRecipe<RecipeWrapper> {
}
@Override
public boolean supportsAssembly() {
return true;
}
public void addAssemblyIngredients(List<Ingredient> list) {}
@Override
@OnlyIn(Dist.CLIENT)
@ -49,4 +53,9 @@ public class CuttingRecipe extends ProcessingRecipe<RecipeWrapper> {
return Lang.translate("recipe.assembly.cutting");
}
@Override
public Supplier<Supplier<SequencedAssemblySubCategory>> getJEISubCategory() {
return () -> SequencedAssemblySubCategory.AssemblyCutting::new;
}
}

View file

@ -1,13 +1,17 @@
package com.simibubi.create.content.contraptions.fluids.actors;
import java.util.List;
import java.util.function.Supplier;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.compat.jei.category.sequencedAssembly.SequencedAssemblySubCategory;
import com.simibubi.create.content.contraptions.itemAssembly.IAssemblyRecipe;
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.item.crafting.Ingredient;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.TranslationTextComponent;
@ -17,7 +21,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.wrapper.RecipeWrapper;
public class FillingRecipe extends ProcessingRecipe<RecipeWrapper> {
public class FillingRecipe extends ProcessingRecipe<RecipeWrapper> implements IAssemblyRecipe {
public FillingRecipe(ProcessingRecipeParams params) {
super(AllRecipeTypes.FILLING, params);
@ -51,8 +55,11 @@ public class FillingRecipe extends ProcessingRecipe<RecipeWrapper> {
}
@Override
public boolean supportsAssembly() {
return true;
public void addAssemblyIngredients(List<Ingredient> list) {}
@Override
public void addAssemblyFluidIngredients(List<FluidIngredient> list) {
list.add(getRequiredFluid());
}
@Override
@ -67,4 +74,9 @@ public class FillingRecipe extends ProcessingRecipe<RecipeWrapper> {
.getTranslationKey()).getString());
}
@Override
public Supplier<Supplier<SequencedAssemblySubCategory>> getJEISubCategory() {
return () -> SequencedAssemblySubCategory.AssemblySpouting::new;
}
}

View file

@ -0,0 +1,29 @@
package com.simibubi.create.content.contraptions.itemAssembly;
import java.util.List;
import java.util.function.Supplier;
import com.simibubi.create.compat.jei.category.sequencedAssembly.SequencedAssemblySubCategory;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
public interface IAssemblyRecipe {
default boolean supportsAssembly() {
return true;
}
@OnlyIn(Dist.CLIENT)
public ITextComponent getDescriptionForAssembly();
public void addAssemblyIngredients(List<Ingredient> list);
default void addAssemblyFluidIngredients(List<FluidIngredient> list) {}
public Supplier<Supplier<SequencedAssemblySubCategory>> getJEISubCategory();
}

View file

@ -0,0 +1,42 @@
package com.simibubi.create.content.contraptions.itemAssembly;
import com.simibubi.create.foundation.utility.ColorHelper;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.MathHelper;
public class SequencedAssemblyItem extends Item {
public SequencedAssemblyItem(Properties p_i48487_1_) {
super(p_i48487_1_);
}
@Override
public void fillItemGroup(ItemGroup p_150895_1_, NonNullList<ItemStack> p_150895_2_) {}
@Override
public double getDurabilityForDisplay(ItemStack stack) {
if (!stack.hasTag())
return 1;
CompoundNBT tag = stack.getTag();
if (!tag.contains("SequencedAssembly"))
return 1;
return MathHelper.lerp(tag.getCompound("SequencedAssembly")
.getFloat("Progress"), 1, 0);
}
@Override
public boolean showDurabilityBar(ItemStack stack) {
return true;
}
@Override
public int getRGBDurabilityForDisplay(ItemStack stack) {
return ColorHelper.mixColors(0xFF_46FFE0, 0xFF_FFC074, (float) getDurabilityForDisplay(stack));
}
}

View file

@ -8,6 +8,7 @@ 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.fluid.FluidIngredient;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.client.Minecraft;
@ -35,8 +36,7 @@ public class SequencedAssemblyRecipe implements IRecipe<RecipeWrapper> {
Ingredient ingredient;
List<SequencedRecipe<?>> sequence;
int averageSteps;
int maxSteps;
int loops;
ProcessingOutput transitionalItem;
List<ProcessingOutput> resultPool;
@ -45,8 +45,7 @@ public class SequencedAssemblyRecipe implements IRecipe<RecipeWrapper> {
this.serializer = serializer;
sequence = new ArrayList<>();
resultPool = new ArrayList<>();
averageSteps = 16;
maxSteps = 32;
loops = 5;
}
public static <C extends IInventory, R extends ProcessingRecipe<C>> Optional<R> getRecipe(World world, C inv,
@ -62,32 +61,45 @@ public class SequencedAssemblyRecipe implements IRecipe<RecipeWrapper> {
if (!sequencedAssemblyRecipe.appliesTo(item))
continue;
SequencedRecipe<?> nextRecipe = sequencedAssemblyRecipe.getNextRecipe(item);
if (nextRecipe.wrapped.getType() != type || !recipeClass.isInstance(nextRecipe.wrapped))
ProcessingRecipe<?> recipe = nextRecipe.getRecipe();
if (recipe.getType() != type || !recipeClass.isInstance(recipe))
continue;
nextRecipe.wrapped.enforceNextResult(() -> sequencedAssemblyRecipe.advance(item));
return Optional.of(recipeClass.cast(nextRecipe.wrapped));
recipe.enforceNextResult(() -> sequencedAssemblyRecipe.advance(item));
return Optional.of(recipeClass.cast(recipe));
}
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)
if ((step + 1) / sequence.size() >= loops)
return rollResult();
}
ItemStack advancedItem = ItemHandlerHelper.copyStackWithSize(transitionalItem.getStack(), 1);
ItemStack advancedItem = ItemHandlerHelper.copyStackWithSize(getTransitionalItem(), 1);
CompoundNBT itemTag = advancedItem.getOrCreateTag();
CompoundNBT tag = new CompoundNBT();
tag.putString("id", id.toString());
tag.putInt("Step", step + 1);
tag.putFloat("Progress", (step + 1f) / (sequence.size() * loops));
itemTag.put("SequencedAssembly", tag);
advancedItem.setTag(itemTag);
return advancedItem;
}
public int getLoops() {
return loops;
}
public void addAdditionalIngredients(List<Ingredient> list) {
sequence.forEach(sr -> sr.getAsAssemblyRecipe()
.addAssemblyIngredients(list));
}
public void addAdditionalFluidIngredients(List<FluidIngredient> list) {
sequence.forEach(sr -> sr.getAsAssemblyRecipe()
.addAssemblyFluidIngredients(list));
}
private ItemStack rollResult() {
float totalWeight = 0;
for (ProcessingOutput entry : resultPool)
@ -105,10 +117,8 @@ public class SequencedAssemblyRecipe implements IRecipe<RecipeWrapper> {
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()
return input.hasTag() && getTransitionalItem().getItem() == input.getItem() && input.getTag()
.contains("SequencedAssembly") && input.getTag()
.getCompound("SequencedAssembly")
.getString("id")
.equals(id.toString());
@ -150,6 +160,14 @@ public class SequencedAssemblyRecipe implements IRecipe<RecipeWrapper> {
.getStack();
}
public float getOutputChance() {
float totalWeight = 0;
for (ProcessingOutput entry : resultPool)
totalWeight += entry.getChance();
return resultPool.get(0)
.getChance() / totalWeight;
}
@Override
public ResourceLocation getId() {
return id;
@ -182,15 +200,22 @@ public class SequencedAssemblyRecipe implements IRecipe<RecipeWrapper> {
return;
SequencedAssemblyRecipe sequencedAssemblyRecipe = (SequencedAssemblyRecipe) iRecipe;
int length = sequencedAssemblyRecipe.sequence.size();
int step = sequencedAssemblyRecipe.getStep(stack);
int total = length * sequencedAssemblyRecipe.loops;
toolTip.add(new StringTextComponent(""));
toolTip.add(Lang.translate("recipe.sequenced_assembly")
.formatted(TextFormatting.GRAY));
int step = sequencedAssemblyRecipe.getStep(stack);
toolTip.add(Lang.translate("recipe.assembly.progress", step, total)
.formatted(TextFormatting.DARK_GRAY));
for (int i = 0; i < sequencedAssemblyRecipe.sequence.size(); i++) {
SequencedRecipe<?> sequencedRecipe =
sequencedAssemblyRecipe.sequence.get((i + step) % sequencedAssemblyRecipe.sequence.size());
ITextComponent textComponent = sequencedRecipe.wrapped.getDescriptionForAssembly();
int remaining = total - step;
for (int i = 0; i < length; i++) {
if (i >= remaining)
break;
SequencedRecipe<?> sequencedRecipe = sequencedAssemblyRecipe.sequence.get((i + step) % length);
ITextComponent textComponent = sequencedRecipe.getAsAssemblyRecipe()
.getDescriptionForAssembly();
if (i == 0)
toolTip.add(Lang.translate("recipe.assembly.next", textComponent)
.formatted(TextFormatting.AQUA));
@ -201,4 +226,16 @@ public class SequencedAssemblyRecipe implements IRecipe<RecipeWrapper> {
}
public Ingredient getIngredient() {
return ingredient;
}
public List<SequencedRecipe<?>> getSequence() {
return sequence;
}
public ItemStack getTransitionalItem() {
return transitionalItem.getStack();
}
}

View file

@ -41,9 +41,10 @@ public class SequencedAssemblyRecipeBuilder {
UnaryOperator<ProcessingRecipeBuilder<T>> builder) {
ProcessingRecipeBuilder<T> recipeBuilder =
new ProcessingRecipeBuilder<>(factory, new ResourceLocation("dummy"));
Item placeHolder = recipe.transitionalItem.getStack()
Item placeHolder = recipe.getTransitionalItem()
.getItem();
recipe.sequence.add(new SequencedRecipe<>(builder.apply(recipeBuilder.require(placeHolder)
recipe.getSequence()
.add(new SequencedRecipe<>(builder.apply(recipeBuilder.require(placeHolder)
.output(placeHolder))
.build()));
return this;
@ -67,13 +68,8 @@ public class SequencedAssemblyRecipeBuilder {
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;
public SequencedAssemblyRecipeBuilder loops(int loops) {
recipe.loops = loops;
return this;
}

View file

@ -20,14 +20,13 @@ public class SequencedAssemblyRecipeSerializer extends ForgeRegistryEntry<IRecip
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()));
json.add("ingredient", recipe.getIngredient().serialize());
recipe.getSequence().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);
json.addProperty("loops", recipe.loops);
}
protected SequencedAssemblyRecipe readFromJson(ResourceLocation recipeId, JsonObject json) {
@ -36,27 +35,22 @@ public class SequencedAssemblyRecipeSerializer extends ForgeRegistryEntry<IRecip
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++));
recipe.getSequence().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");
if (JSONUtils.hasField(json, "loops"))
recipe.loops = JSONUtils.getInt(json, "loops");
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));
recipe.getIngredient().write(buffer);
buffer.writeVarInt(recipe.getSequence().size());
recipe.getSequence().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);
buffer.writeInt(recipe.loops);
}
protected SequencedAssemblyRecipe readFromBuffer(ResourceLocation recipeId, PacketBuffer buffer) {
@ -64,13 +58,12 @@ public class SequencedAssemblyRecipeSerializer extends ForgeRegistryEntry<IRecip
recipe.ingredient = Ingredient.read(buffer);
int size = buffer.readVarInt();
for (int i = 0; i < size; i++)
recipe.sequence.add(SequencedRecipe.readFromBuffer(buffer));
recipe.getSequence().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();
recipe.loops = buffer.readInt();
return recipe;
}

View file

@ -16,12 +16,20 @@ import net.minecraftforge.registries.ForgeRegistries;
public class SequencedRecipe<T extends ProcessingRecipe<?>> {
T wrapped;
private T wrapped;
public SequencedRecipe(T wrapped) {
this.wrapped = wrapped;
}
public IAssemblyRecipe getAsAssemblyRecipe() {
return (IAssemblyRecipe) wrapped;
}
public ProcessingRecipe<?> getRecipe() {
return wrapped;
}
public JsonObject toJson() {
@SuppressWarnings("unchecked")
ProcessingRecipeSerializer<T> serializer = (ProcessingRecipeSerializer<T>) wrapped.getSerializer();
@ -36,12 +44,13 @@ public class SequencedRecipe<T extends ProcessingRecipe<?>> {
ResourceLocation parentId = parent.getId();
IRecipe<?> recipe = RecipeManager.deserializeRecipe(
new ResourceLocation(parentId.getNamespace(), parentId.getPath() + "_step_" + index), json);
if (recipe instanceof ProcessingRecipe<?>) {
if (recipe instanceof ProcessingRecipe<?> && recipe instanceof IAssemblyRecipe) {
ProcessingRecipe<?> processingRecipe = (ProcessingRecipe<?>) recipe;
if (processingRecipe.supportsAssembly()) {
Ingredient transit = Ingredient.fromStacks(parent.transitionalItem.getStack());
IAssemblyRecipe assemblyRecipe = (IAssemblyRecipe) recipe;
if (assemblyRecipe.supportsAssembly()) {
Ingredient transit = Ingredient.fromStacks(parent.getTransitionalItem());
processingRecipe.getIngredients()
.set(0, index == 0 ? Ingredient.merge(ImmutableList.of(transit, parent.ingredient)) : transit);
.set(0, index == 0 ? Ingredient.merge(ImmutableList.of(transit, parent.getIngredient())) : transit);
SequencedRecipe<?> sequencedRecipe = new SequencedRecipe<>(processingRecipe);
return sequencedRecipe;
}

View file

@ -27,10 +27,6 @@ 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
@ -231,13 +227,4 @@ public abstract class ProcessingRecipe<T extends IInventory> implements IRecipe<
return enumType;
}
public boolean supportsAssembly() {
return false;
}
@OnlyIn(Dist.CLIENT)
public ITextComponent getDescriptionForAssembly() {
return new StringTextComponent("");
}
}

View file

@ -335,11 +335,11 @@ public class AllAdvancements implements IDataProvider {
.register(t, id + ":overstress_flywheel");
Advancement integrated_circuit =
itemAdvancement("integrated_circuit", AllItems.CLOCKWORK_ELEMENT, TaskType.NORMAL).withParent(crafter)
itemAdvancement("integrated_circuit", AllItems.CLOCKWORK_COMPONENT, TaskType.NORMAL).withParent(crafter)
.register(t, id + ":integrated_circuit");
Advancement integrated_circuit_eob = deadEnd().withParent(integrated_circuit)
.withCriterion("0", itemGathered(AllItems.CLOCKWORK_ELEMENT.get()))
.withCriterion("0", itemGathered(AllItems.CLOCKWORK_COMPONENT.get()))
.register(t, id + ":integrated_circuit_eob");
Advancement speed_controller =

View file

@ -99,6 +99,10 @@ public abstract class CreateRecipeProvider extends RecipeProvider {
return Tags.Items.INGOTS_IRON;
}
static ITag.INamedTag<Item> ironNugget() {
return AllTags.forgeItemTag("nuggets/iron");
}
static ITag.INamedTag<Item> zinc() {
return AllTags.forgeItemTag("ingots/zinc");
}
@ -116,7 +120,7 @@ public abstract class CreateRecipeProvider extends RecipeProvider {
}
static IItemProvider circuit() {
return AllItems.CLOCKWORK_ELEMENT.get();
return AllItems.CLOCKWORK_COMPONENT.get();
}
static ITag.INamedTag<Item> copperBlock() {

View file

@ -6,31 +6,39 @@ 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)
// TEST = create("test", b -> b.require(I.goldSheet())
// .transitionTo(AllItems.INCOMPLETE_CLOCKWORK_COMPONENT.get())
// .addOutput(AllItems.CLOCKWORK_COMPONENT.get(), 10)
// .addOutput(AllItems.GOLDEN_SHEET.get(), 5)
// .addOutput(AllItems.ANDESITE_ALLOY.get(), 2)
// .addOutput(AllBlocks.COGWHEEL.get(), 1)
// .loops(5)
// .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.cog()))
// .addStep(PressingRecipe::new, rb -> rb)
// .addStep(FillingRecipe::new, rb -> rb.require(Fluids.LAVA, 500))
// .addStep(CuttingRecipe::new, rb -> rb.averageProcessingDuration())
// .addStep(FillingRecipe::new, rb -> rb.require(Fluids.WATER, 100))
// )
CLOCKWORK_COMPONENT = create("clockwork_component", b -> b.require(I.goldSheet())
.transitionTo(AllItems.INCOMPLETE_CLOCKWORK_COMPONENT.get())
.addOutput(AllItems.CLOCKWORK_COMPONENT.get(), 12)
.addOutput(AllItems.GOLDEN_SHEET.get(), 2)
.addOutput(AllItems.ANDESITE_ALLOY.get(), 2)
.addOutput(AllBlocks.COGWHEEL.get(), 1)
.expectedSteps(20)
.addOutput(AllBlocks.COGWHEEL.get(), 1) //TODO add more junk
.loops(5)
.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()))
.addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.ironNugget()))
)
;
public SequencedAssemblyRecipeGen(DataGenerator p_i48262_1_) {

View file

@ -49,10 +49,14 @@
"create.recipe.sequenced_assembly": "Sequenced Assembly",
"create.recipe.assembly.next": "Next: %1$s",
"create.recipe.assembly.step": "Step %1$s:",
"create.recipe.assembly.progress": "Progress: %1$s/%2$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.assembly.repeat": "Repeat Sequence %1$s Times",
"create.recipe.assembly.junk": "Random junk",
"create.recipe.processing.chance": "%1$s%% Chance",
"create.recipe.heat_requirement.none": "No Heating Required",