Just encase

- Added a new recipe type for manual item on block interaction
- Changed casing recipes
- Added the #create:casing tag
This commit is contained in:
simibubi 2022-05-16 17:47:55 +02:00
parent fbd676a235
commit 279349a37a
60 changed files with 760 additions and 488 deletions

View file

@ -544,22 +544,22 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
df56b5a55feb05caf63e59d7473c814cc212c593 assets/create/lang/en_ud.json
16081fd6f3e8241aa3c4f3bd6d867d8555478787 assets/create/lang/en_us.json
e61667043280cfb4414f063dd70761ea801e3129 assets/create/lang/unfinished/de_de.json
5ff1e28fe23bf3dacce2210cb3ca67a6a4f38b31 assets/create/lang/unfinished/es_cl.json
803bb955aba9425dcf77d5137fe58318524aeb42 assets/create/lang/unfinished/es_es.json
3134fecc8a92c44a0643fb89110987c4a57868a1 assets/create/lang/unfinished/fr_fr.json
7078cfddbdf73f65c89f8634e7d5979842ca34bb assets/create/lang/unfinished/it_it.json
4bb376849f661b658fd941a2407b0f78158cc0d4 assets/create/lang/unfinished/ja_jp.json
03db667e726d137a5daaa320b7d5801640173951 assets/create/lang/unfinished/ko_kr.json
0d5a2352092fa0218ffd3e35500ae47dec2306bc assets/create/lang/unfinished/nl_nl.json
67e8e20aaa1cad67581c9b7f6cd1b505c589e08a assets/create/lang/unfinished/pl_pl.json
7be5d96ae1d40b99f98594cd2140a111462514f9 assets/create/lang/unfinished/pt_br.json
428afed80b16e6def974b4d31d6609a14477cdcf assets/create/lang/unfinished/pt_pt.json
39219ca58890611aef68ee5d713614c4a8eaaf8e assets/create/lang/unfinished/ro_ro.json
5de2edb9239c491fdcfe51ee45c8206f16b3d4d3 assets/create/lang/unfinished/ru_ru.json
5db28a284f52b3b6d7f33bbba8542e3aeb49e0c3 assets/create/lang/unfinished/zh_cn.json
9c1d56dec09913608536eecbfecc0276bedf658c assets/create/lang/unfinished/zh_tw.json
99c8b4f8ebb8184a24293a3b2de2a1635ebc1e7e assets/create/lang/en_us.json
4affec8c0528a7704d8801faa62cce3e98b4f1ef assets/create/lang/unfinished/de_de.json
ce1f1c8dcf2e1059e65fe43f5b7c46b2d3501cb4 assets/create/lang/unfinished/es_cl.json
3cf9394de670cd73ee3e0de94daf866e854f6721 assets/create/lang/unfinished/es_es.json
dd63f8c280bd44163e726e027e6fef488803f9ab assets/create/lang/unfinished/fr_fr.json
1374e2cdaaedbb6ba1e663fbf2b077298dfef2a6 assets/create/lang/unfinished/it_it.json
3e49953d1ad799a38128a6724c022b92808bcd63 assets/create/lang/unfinished/ja_jp.json
08c2e857d98e7f5946672be533781412ea305b4e assets/create/lang/unfinished/ko_kr.json
94b8c296349c6e58e85716c8bb25fa660f08177f assets/create/lang/unfinished/nl_nl.json
1bb858c04a0052949c66b5d7852eca0e9785cf64 assets/create/lang/unfinished/pl_pl.json
ca2573e3dd5dae6c0dd39a227e7e105bee524409 assets/create/lang/unfinished/pt_br.json
f82850935227af35505d3e6caf6d0b708dc21bfd assets/create/lang/unfinished/pt_pt.json
f7833b62a0abe1d567b6fa1504cb5bc2fdb72deb assets/create/lang/unfinished/ro_ro.json
4fa955a914facda1b4530bf9371d7be373cbe3f0 assets/create/lang/unfinished/ru_ru.json
37fa33bef9352201f10889fb80f601c41d6ae388 assets/create/lang/unfinished/zh_cn.json
9258763a4c46a0983276035aeb01323bc4311d3e 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
@ -2474,22 +2474,17 @@ b9b0a8bfff61a89149d4fcadf679f753385212d0 data/create/advancements/recipes/create
675c980c5b9088233b8d777fa03aba4c44650c4e data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switch.json
8e137e9ad4870708d4c015400f91d78cb37b4a92 data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy.json
6ad84f6f8b4ef85e67ebcc68c5326a22b59bc81a data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy_from_zinc.json
4c947a5af4362a52b64a6a72d23c6767a2f76627 data/create/advancements/recipes/create.base/crafting/materials/andesite_casing.json
a7d9a6dda3049332f04f4db027340070e1a9e597 data/create/advancements/recipes/create.base/crafting/materials/brass_block_from_compacting.json
37691ebd182e09b5c41fbeeb15ca31fda0cf8ca9 data/create/advancements/recipes/create.base/crafting/materials/brass_casing.json
7716dae5a22a02fa9ea129985eb14639811c2045 data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_compacting.json
906a26d805d46f44ce094a14ce138a6ce14431fa data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_decompacting.json
90d4658a26a32bfdade4573797ea4d913151c707 data/create/advancements/recipes/create.base/crafting/materials/brass_nugget_from_decompacting.json
e0493cc058cc7dc647b4147dabedae9aa61bc9e3 data/create/advancements/recipes/create.base/crafting/materials/copper_casing.json
dbfba4474ce5229205245d46680a651754a593ce data/create/advancements/recipes/create.base/crafting/materials/copper_nugget.json
a8a032b40204919242bf5043d2920627cd28d348 data/create/advancements/recipes/create.base/crafting/materials/electron_tube.json
121f9d02b1405327ff01113e32c1a1019f9b2f35 data/create/advancements/recipes/create.base/crafting/materials/raw_zinc.json
433e9dae24a4167b2cbd23e37e59bc84cfe352e5 data/create/advancements/recipes/create.base/crafting/materials/raw_zinc_block.json
2d875ed3e78b4840863f2188aea2b9dd23304512 data/create/advancements/recipes/create.base/crafting/materials/red_sand_paper.json
984fedbd1e66dd2730d50a9b0b171df6ba03bacc data/create/advancements/recipes/create.base/crafting/materials/refined_radiance_casing.json
bc58b9bec08df3ae2ba9aa871097f0113e4f9075 data/create/advancements/recipes/create.base/crafting/materials/rose_quartz.json
75cbc691e7443b566c1639d0c77c96cab66677c8 data/create/advancements/recipes/create.base/crafting/materials/sand_paper.json
c645e7d65da663f2bdf1ceab4fca9853a3177798 data/create/advancements/recipes/create.base/crafting/materials/shadow_steel_casing.json
d8a83ace588c01d781fea3e62fa3762ee04e0250 data/create/advancements/recipes/create.base/crafting/materials/zinc_block_from_compacting.json
827269a9749c37af9221d27281a85de09942fa2a data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_compacting.json
b15e93ea48cc71a78dca4d5fa5738d5354a3a944 data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_decompacting.json
@ -4097,23 +4092,18 @@ bc511f7c225750743ae3e985502fa65beb1e7b8d data/create/recipes/crafting/logistics/
10b16358664f2bb8a11589ef8ba3d69ee8d3b9fc data/create/recipes/crafting/logistics/stockpile_switch.json
0dc99b8a8c68d6a9250c3a1167ffb565be9622ec data/create/recipes/crafting/materials/andesite_alloy.json
8bb306454795fd6a2066152717c169e0e8aaf480 data/create/recipes/crafting/materials/andesite_alloy_from_zinc.json
1e54883620660cb5562d8354de0e49bcca81e470 data/create/recipes/crafting/materials/andesite_casing.json
fa23f8ff9f43ed39a70a86d0c9080102d57d14b6 data/create/recipes/crafting/materials/brass_block_from_compacting.json
94bbe2869e4926d7b8df8a73f3cd41e86d0da6b0 data/create/recipes/crafting/materials/brass_casing.json
6a7d69e7e6abeb643f3158c575061e3edac01421 data/create/recipes/crafting/materials/brass_ingot_from_compacting.json
7e10c06f4d77b17efb03252801d9fe189de8aefe data/create/recipes/crafting/materials/brass_ingot_from_decompacting.json
49c263368f8c02509332654c0ce97b7472d45cd3 data/create/recipes/crafting/materials/brass_nugget_from_decompacting.json
9ef75592334f5c72c889cdeb5280b6b9220b6d45 data/create/recipes/crafting/materials/copper_casing.json
62ce480f3b5a2f9de27858fdde4f48cf8b91fe2c data/create/recipes/crafting/materials/copper_ingot.json
9a8cef55dc3b7cecef500bad0c7bbb86c51f4b5f data/create/recipes/crafting/materials/copper_nugget.json
7cd3500890430496381cb56c432a233f78b21a25 data/create/recipes/crafting/materials/electron_tube.json
e73e4abd1306e2bfeb59ab5ca2d804c23fc66f7e data/create/recipes/crafting/materials/raw_zinc.json
cc167074d22aff7ba824ec738653e84f131a1bf0 data/create/recipes/crafting/materials/raw_zinc_block.json
9c9e40ffd41ce46c65113080a92ff9b4f27e5fab data/create/recipes/crafting/materials/red_sand_paper.json
7ff4df8c25b7647463a88dfd5d750a5562d5015c data/create/recipes/crafting/materials/refined_radiance_casing.json
7eb292bc564de70227f4bf947050bcdbfc5a8d67 data/create/recipes/crafting/materials/rose_quartz.json
5ca47ec1bca9a5ce28aabd9868b74b71c829ca07 data/create/recipes/crafting/materials/sand_paper.json
12c6ce7a1d229575fefffc449907fd285a6acecd data/create/recipes/crafting/materials/shadow_steel_casing.json
e1ac783d1f8fd96a1dd1088cf736e95ee3f7b025 data/create/recipes/crafting/materials/zinc_block_from_compacting.json
06cc0ec46bc5a7d2e98dbd4ece82d451c5f79de9 data/create/recipes/crafting/materials/zinc_ingot_from_compacting.json
fe1d69b1e33d5748eb3c0ea732b8d67e2d612203 data/create/recipes/crafting/materials/zinc_ingot_from_decompacting.json
@ -4661,6 +4651,12 @@ c0aab10c6c323b92931e8b59bf9902a47165b263 data/create/recipes/haunting/soul_soil.
a6c387d19c357d7c89aa44a10b9deb9e93b6c614 data/create/recipes/haunting/warped_fungus.json
05908d48b6ac0c117da0b4b9ae4ae5e933ed900e data/create/recipes/horizontal_framed_glass_from_glass_colorless_stonecutting.json
4e8d49934f9899f788d45d4347bfc085b2836699 data/create/recipes/horizontal_framed_glass_pane.json
1f14e213ce80509fe51d76016d0c9707d3ad12b8 data/create/recipes/item_application/andesite_casing_from_log.json
ec1cd543397750e5f74a78d1f79d49dafdd46460 data/create/recipes/item_application/andesite_casing_from_wood.json
b6b72466615bcce50e31238ee78b7f6dcee1bbfe data/create/recipes/item_application/brass_casing_from_log.json
62eb2897c263fdf2d2d24e5279f8b4c0f9acd101 data/create/recipes/item_application/brass_casing_from_wood.json
320cf6df9446236f42799aafbfad7a46cd425cb3 data/create/recipes/item_application/copper_casing_from_log.json
4cf9c45c5ffae0600d3c305818aa05e7ecf7b7b1 data/create/recipes/item_application/copper_casing_from_wood.json
c3ccd16b7fe9878cc734d699b4c8b219ad556f46 data/create/recipes/jungle_window.json
76dab06d0bda78c4247f76d6a849e1aa083fceb1 data/create/recipes/jungle_window_pane.json
fc00b0e336c45698df1f94ad470f9941e19b0e24 data/create/recipes/layered_andesite_from_andesite_stonecutting.json
@ -5235,6 +5231,7 @@ d79c82bc6cf59b073b2f51f5fea9c98e81d14b68 data/create/recipes/weathered_copper_ti
ac265a674626e0e832330086fd18fe0be37fc327 data/create/recipes/weathered_copper_tile_stairs.json
5942a571f79c40524bbf408775cf91de4715f2b6 data/create/recipes/weathered_copper_tile_stairs_from_weathered_copper_tiles_stonecutting.json
2d549ea56fb226c0e31e66c0391996093f8bece9 data/create/tags/blocks/brittle.json
f6fd40f3697b4ffa0bf45cd3bda8cdf5fab536f7 data/create/tags/blocks/casing.json
330bfb3850ba3964b10b1bccbc3cbb9b012cae54 data/create/tags/blocks/fan_heaters.json
57b942386a15c874d1ca9cd6a8032c11a5599fc2 data/create/tags/blocks/fan_transparent.json
10781e8cfcbb3486327aace3aa00e437fb44b331 data/create/tags/blocks/ore_override_stone.json
@ -5250,6 +5247,7 @@ a8bdc387cfa6296ebcc4af14323e2ddb632234dc data/create/tags/fluids/bottomless/allo
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/fluids/bottomless/deny.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/items/blaze_burner_fuel/regular.json
97061ef67cac1fafd869493d06115b968bcb99bf data/create/tags/items/blaze_burner_fuel/special.json
f6fd40f3697b4ffa0bf45cd3bda8cdf5fab536f7 data/create/tags/items/casing.json
5212172aee2239136c94f9868ad39ec2e17cf1c6 data/create/tags/items/create_ingots.json
4480f211f4a37bfee193eba945bc9f5a8d2c6e34 data/create/tags/items/crushed_ores.json
bce28787b0271382842823d04a977912a88b01c2 data/create/tags/items/sandpaper.json
@ -5271,6 +5269,8 @@ ed2d9221e4101a572b86187bfa5e49f6b72dce2c data/create/tags/items/stone_types/scor
d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/items/toolboxes.json
2f4044c2989b9a8aa394c88617d67a6a310e6b1b data/create/tags/items/upright_on_belt.json
50936b211d94167a35ec78c89954082a336b6269 data/create/tags/items/valve_handles.json
f8d83f446d0a2071dca4481251339c4249b2fd3f data/create/tags/items/vanilla_stripped_logs.json
f3e20d8b3ca5652d3975da680740cc36326fdfc9 data/create/tags/items/vanilla_stripped_wood.json
16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/blocks/glass/colorless.json
81d3eb40b048160fcc2d6bb7ff12b49276297efd data/forge/tags/blocks/glass_panes.json
6eec92869baa44d3ac53aec6a7a92c15147b59f0 data/forge/tags/blocks/ores.json
@ -5311,6 +5311,8 @@ dc96331cded39b2d2f24853f4dd6c1f6f3863115 data/forge/tags/items/raw_materials/zin
ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/items/storage_blocks/brass.json
823d05187626797205381d4620a84abda3bc8f89 data/forge/tags/items/storage_blocks/raw_zinc.json
7f71a774800111e50b42de0e6159ed2d2a807d32 data/forge/tags/items/storage_blocks/zinc.json
4853a67b18e1fbfc8f60b5ce6c386b05e40c9942 data/forge/tags/items/stripped_logs.json
4efc25d146ac84be29a702b3f6490a367695242a data/forge/tags/items/stripped_wood.json
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/azalea_root_replaceable.json
9f7a428085b1aac66da32a43e9d51c7efc1f0d81 data/minecraft/tags/blocks/beacon_base_blocks.json
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/dripstone_replaceable_blocks.json

View file

@ -857,7 +857,9 @@
"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.item_application": "Manual Item Application",
"create.recipe.item_application.any_axe": "Any Axe",
"create.recipe.sequenced_assembly": "Recipe Sequence",
"create.recipe.assembly.next": "Next: %1$s",
"create.recipe.assembly.step": "Step %1$s:",
"create.recipe.assembly.progress": "Progress: %1$s/%2$s",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1537",
"_": "Missing Localizations: 1539",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,7 +858,9 @@
"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.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Recipe Sequence",
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 559",
"_": "Missing Localizations: 561",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,6 +858,8 @@
"create.recipe.mystery_conversion": "Conversión Misteriosa",
"create.recipe.spout_filling": "Llenado por Surtidor",
"create.recipe.draining": "Drenaje de Objeto",
"create.recipe.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "Ensamblaje Secuenciado",
"create.recipe.assembly.next": "Siguiente: %1$s",
"create.recipe.assembly.step": "Paso %1$s:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 230",
"_": "Missing Localizations: 232",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,6 +858,8 @@
"create.recipe.mystery_conversion": "Conversión misteriosa",
"create.recipe.spout_filling": "Llenar por el pico",
"create.recipe.draining": "Drenador de objetos",
"create.recipe.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "Montaje secuenciado",
"create.recipe.assembly.next": "Siguiente: %1$s",
"create.recipe.assembly.step": "Fase %1$s:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1799",
"_": "Missing Localizations: 1801",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,7 +858,9 @@
"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.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Recipe Sequence",
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1488",
"_": "Missing Localizations: 1490",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,7 +858,9 @@
"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.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Recipe Sequence",
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 225",
"_": "Missing Localizations: 227",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,6 +858,8 @@
"create.recipe.mystery_conversion": "神秘の変転",
"create.recipe.spout_filling": "アイテムへの注液",
"create.recipe.draining": "アイテムからの排液",
"create.recipe.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "組立ライン",
"create.recipe.assembly.next": "次の工程: %1$s",
"create.recipe.assembly.step": "手順: %1$s:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 225",
"_": "Missing Localizations: 227",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,6 +858,8 @@
"create.recipe.mystery_conversion": "?",
"create.recipe.spout_filling": "채우기",
"create.recipe.draining": "배수",
"create.recipe.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "순서 조립",
"create.recipe.assembly.next": "다음 단계: %1$s",
"create.recipe.assembly.step": "단계 %1$s:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2151",
"_": "Missing Localizations: 2153",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,7 +858,9 @@
"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.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Recipe Sequence",
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 598",
"_": "Missing Localizations: 600",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,6 +858,8 @@
"create.recipe.mystery_conversion": "Tajemnicza przemiana",
"create.recipe.spout_filling": "Napełnianie",
"create.recipe.draining": "Osuszanie",
"create.recipe.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "Składanie",
"create.recipe.assembly.next": "Następnie: %1$s",
"create.recipe.assembly.step": "Krok %1$s:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1399",
"_": "Missing Localizations: 1401",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,6 +858,8 @@
"create.recipe.mystery_conversion": "Conversão misteriosa",
"create.recipe.spout_filling": "Preenchimento com bica",
"create.recipe.draining": "Drenação de item",
"create.recipe.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "Montagem sequenciada",
"create.recipe.assembly.next": "Proximo: %1$s",
"create.recipe.assembly.step": "Passo %1$s:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1771",
"_": "Missing Localizations: 1773",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,7 +858,9 @@
"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.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "UNLOCALIZED: Recipe Sequence",
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 226",
"_": "Missing Localizations: 228",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,6 +858,8 @@
"create.recipe.mystery_conversion": "Conversie Misterioasă",
"create.recipe.spout_filling": "Umplere prin Duză",
"create.recipe.draining": "Drenaj De Obiecte",
"create.recipe.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "Asamblare Secvențială",
"create.recipe.assembly.next": "Următorul: %1$s",
"create.recipe.assembly.step": "Pasul %1$s:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 603",
"_": "Missing Localizations: 605",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,6 +858,8 @@
"create.recipe.mystery_conversion": "Хроматический метаморфоз",
"create.recipe.spout_filling": "Заполнение дозатором",
"create.recipe.draining": "Осушение предметов",
"create.recipe.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "Последовательная сборка",
"create.recipe.assembly.next": "Следующее: %1$s",
"create.recipe.assembly.step": "Шаг %1$s:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 225",
"_": "Missing Localizations: 227",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,6 +858,8 @@
"create.recipe.mystery_conversion": "神秘转化",
"create.recipe.spout_filling": "注液",
"create.recipe.draining": "分液",
"create.recipe.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "序列组装",
"create.recipe.assembly.next": "下一步:%1$s",
"create.recipe.assembly.step": "第%1$s步",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 617",
"_": "Missing Localizations: 619",
"_": "->------------------------] Game Elements [------------------------<-",
@ -858,6 +858,8 @@
"create.recipe.mystery_conversion": "神秘轉化",
"create.recipe.spout_filling": "注液",
"create.recipe.draining": "分液",
"create.recipe.item_application": "UNLOCALIZED: Manual Item Application",
"create.recipe.item_application.any_axe": "UNLOCALIZED: Any Axe",
"create.recipe.sequenced_assembly": "排序中的步驟",
"create.recipe.assembly.next": "下一步:%1$s",
"create.recipe.assembly.step": "步驟 %1$s",

View file

@ -1,34 +0,0 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:crafting/materials/andesite_casing"
]
},
"criteria": {
"has_item": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"create:andesite_alloy"
]
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:crafting/materials/andesite_casing"
}
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
]
}

View file

@ -1,32 +0,0 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:crafting/materials/brass_casing"
]
},
"criteria": {
"has_item": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"tag": "forge:ingots/brass"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:crafting/materials/brass_casing"
}
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
]
}

View file

@ -1,34 +0,0 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:crafting/materials/copper_casing"
]
},
"criteria": {
"has_item": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"minecraft:copper_ingot"
]
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:crafting/materials/copper_casing"
}
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
]
}

View file

@ -1,34 +0,0 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:crafting/materials/refined_radiance_casing"
]
},
"criteria": {
"has_item": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"create:refined_radiance"
]
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:crafting/materials/refined_radiance_casing"
}
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
]
}

View file

@ -1,34 +0,0 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:crafting/materials/shadow_steel_casing"
]
},
"criteria": {
"has_item": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"create:shadow_steel"
]
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:crafting/materials/shadow_steel_casing"
}
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
]
}

View file

@ -1,23 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"AAA",
"CSC",
"AAA"
],
"key": {
"A": {
"tag": "minecraft:planks"
},
"C": {
"item": "create:andesite_alloy"
},
"S": {
"tag": "minecraft:logs"
}
},
"result": {
"item": "create:andesite_casing",
"count": 4
}
}

View file

@ -1,23 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"AAA",
"CSC",
"AAA"
],
"key": {
"A": {
"tag": "minecraft:planks"
},
"C": {
"tag": "forge:plates/brass"
},
"S": {
"tag": "minecraft:logs"
}
},
"result": {
"item": "create:brass_casing",
"count": 4
}
}

View file

@ -1,23 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"AAA",
"CSC",
"AAA"
],
"key": {
"A": {
"tag": "minecraft:planks"
},
"C": {
"tag": "forge:plates/copper"
},
"S": {
"tag": "minecraft:logs"
}
},
"result": {
"item": "create:copper_casing",
"count": 4
}
}

View file

@ -1,23 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"AAA",
"CSC",
"AAA"
],
"key": {
"A": {
"tag": "minecraft:planks"
},
"C": {
"item": "create:refined_radiance"
},
"S": {
"tag": "forge:glass/colorless"
}
},
"result": {
"item": "create:refined_radiance_casing",
"count": 4
}
}

View file

@ -1,23 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"AAA",
"CSC",
"AAA"
],
"key": {
"A": {
"tag": "minecraft:planks"
},
"C": {
"item": "create:shadow_steel"
},
"S": {
"tag": "forge:obsidian"
}
},
"result": {
"item": "create:shadow_steel_casing",
"count": 4
}
}

View file

@ -0,0 +1,16 @@
{
"type": "create:item_application",
"ingredients": [
{
"tag": "forge:stripped_logs"
},
{
"item": "create:andesite_alloy"
}
],
"results": [
{
"item": "create:andesite_casing"
}
]
}

View file

@ -0,0 +1,16 @@
{
"type": "create:item_application",
"ingredients": [
{
"tag": "forge:stripped_wood"
},
{
"item": "create:andesite_alloy"
}
],
"results": [
{
"item": "create:andesite_casing"
}
]
}

View file

@ -0,0 +1,16 @@
{
"type": "create:item_application",
"ingredients": [
{
"tag": "forge:stripped_logs"
},
{
"tag": "forge:plates/brass"
}
],
"results": [
{
"item": "create:brass_casing"
}
]
}

View file

@ -0,0 +1,16 @@
{
"type": "create:item_application",
"ingredients": [
{
"tag": "forge:stripped_wood"
},
{
"tag": "forge:plates/brass"
}
],
"results": [
{
"item": "create:brass_casing"
}
]
}

View file

@ -0,0 +1,16 @@
{
"type": "create:item_application",
"ingredients": [
{
"tag": "forge:stripped_logs"
},
{
"tag": "forge:plates/copper"
}
],
"results": [
{
"item": "create:copper_casing"
}
]
}

View file

@ -0,0 +1,16 @@
{
"type": "create:item_application",
"ingredients": [
{
"tag": "forge:stripped_wood"
},
{
"tag": "forge:plates/copper"
}
],
"results": [
{
"item": "create:copper_casing"
}
]
}

View file

@ -0,0 +1,10 @@
{
"replace": false,
"values": [
"create:andesite_casing",
"create:brass_casing",
"create:copper_casing",
"create:shadow_steel_casing",
"create:refined_radiance_casing"
]
}

View file

@ -0,0 +1,10 @@
{
"replace": false,
"values": [
"create:andesite_casing",
"create:brass_casing",
"create:copper_casing",
"create:shadow_steel_casing",
"create:refined_radiance_casing"
]
}

View file

@ -0,0 +1,13 @@
{
"replace": false,
"values": [
"minecraft:stripped_acacia_log",
"minecraft:stripped_birch_log",
"minecraft:stripped_crimson_stem",
"minecraft:stripped_dark_oak_log",
"minecraft:stripped_jungle_log",
"minecraft:stripped_oak_log",
"minecraft:stripped_spruce_log",
"minecraft:stripped_warped_stem"
]
}

View file

@ -0,0 +1,13 @@
{
"replace": false,
"values": [
"minecraft:stripped_acacia_wood",
"minecraft:stripped_birch_wood",
"minecraft:stripped_crimson_hyphae",
"minecraft:stripped_dark_oak_wood",
"minecraft:stripped_jungle_wood",
"minecraft:stripped_oak_wood",
"minecraft:stripped_spruce_wood",
"minecraft:stripped_warped_hyphae"
]
}

View file

@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"#create:vanilla_stripped_logs"
]
}

View file

@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"#create:vanilla_stripped_wood"
]
}

View file

@ -9,6 +9,7 @@ import com.simibubi.create.compat.jei.ConversionRecipe;
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe;
import com.simibubi.create.content.contraptions.components.crusher.CrushingRecipe;
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
import com.simibubi.create.content.contraptions.components.deployer.ManualApplicationRecipe;
import com.simibubi.create.content.contraptions.components.fan.HauntingRecipe;
import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe;
import com.simibubi.create.content.contraptions.components.millstone.MillingRecipe;
@ -54,6 +55,7 @@ public enum AllRecipeTypes implements IRecipeTypeInfo {
DEPLOYING(DeployerApplicationRecipe::new),
FILLING(FillingRecipe::new),
EMPTYING(EmptyingRecipe::new),
ITEM_APPLICATION(ManualApplicationRecipe::new),
MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new),
SEQUENCED_ASSEMBLY(SequencedAssemblyRecipeSerializer::new),

View file

@ -38,8 +38,10 @@ public class AllTags {
private static final CreateRegistrate REGISTRATE = Create.registrate()
.creativeModeTab(() -> Create.BASE_CREATIVE_TAB);
public static <T extends IForgeRegistryEntry<T>> TagKey<T> optionalTag(IForgeRegistry<T> registry, ResourceLocation id) {
return registry.tags().createOptionalTagKey(id, Collections.emptySet());
public static <T extends IForgeRegistryEntry<T>> TagKey<T> optionalTag(IForgeRegistry<T> registry,
ResourceLocation id) {
return registry.tags()
.createOptionalTagKey(id, Collections.emptySet());
}
public static <T extends IForgeRegistryEntry<T>> TagKey<T> forgeTag(IForgeRegistry<T> registry, String path) {
@ -85,9 +87,7 @@ public class AllTags {
public enum NameSpace {
MOD(Create.ID, false, true),
FORGE("forge"),
TIC("tconstruct")
MOD(Create.ID, false, true), FORGE("forge"), TIC("tconstruct")
;
@ -120,6 +120,7 @@ public class AllTags {
WINDMILL_SAILS,
WINDOWABLE,
WRENCH_PICKUP,
CASING,
PASSIVE_BOILER_HEATERS,
@ -162,7 +163,8 @@ public class AllTags {
@SuppressWarnings("deprecation")
public boolean matches(Block block) {
return block.builtInRegistryHolder().is(tag);
return block.builtInRegistryHolder()
.is(tag);
}
public boolean matches(BlockState state) {
@ -201,7 +203,12 @@ public class AllTags {
TOOLBOXES,
UPRIGHT_ON_BELT,
VALVE_HANDLES,
VANILLA_STRIPPED_LOGS,
VANILLA_STRIPPED_WOOD,
CASING,
STRIPPED_LOGS(FORGE),
STRIPPED_WOOD(FORGE),
BEACON_PAYMENT(FORGE),
PLATES(FORGE)
@ -239,7 +246,8 @@ public class AllTags {
@SuppressWarnings("deprecation")
public boolean matches(Item item) {
return item.builtInRegistryHolder().is(tag);
return item.builtInRegistryHolder()
.is(tag);
}
public boolean matches(ItemStack stack) {
@ -339,6 +347,16 @@ public class AllTags {
public static void register() {
AllFluidTags.BOTTOMLESS_ALLOW.add(Fluids.WATER, Fluids.LAVA);
AllItemTags.VANILLA_STRIPPED_LOGS.add(Items.STRIPPED_ACACIA_LOG, Items.STRIPPED_BIRCH_LOG,
Items.STRIPPED_CRIMSON_STEM, Items.STRIPPED_DARK_OAK_LOG, Items.STRIPPED_JUNGLE_LOG, Items.STRIPPED_OAK_LOG,
Items.STRIPPED_SPRUCE_LOG, Items.STRIPPED_WARPED_STEM);
AllItemTags.VANILLA_STRIPPED_LOGS.includeIn(AllItemTags.STRIPPED_LOGS);
AllItemTags.VANILLA_STRIPPED_WOOD.add(Items.STRIPPED_ACACIA_WOOD, Items.STRIPPED_BIRCH_WOOD,
Items.STRIPPED_CRIMSON_HYPHAE, Items.STRIPPED_DARK_OAK_WOOD, Items.STRIPPED_JUNGLE_WOOD,
Items.STRIPPED_OAK_WOOD, Items.STRIPPED_SPRUCE_WOOD, Items.STRIPPED_WARPED_HYPHAE);
AllItemTags.VANILLA_STRIPPED_WOOD.includeIn(AllItemTags.STRIPPED_WOOD);
AllItemTags.CREATE_INGOTS.includeIn(AllItemTags.BEACON_PAYMENT);
AllItemTags.CREATE_INGOTS.includeIn(Tags.Items.INGOTS);

View file

@ -27,6 +27,7 @@ import com.simibubi.create.compat.jei.category.FanBlastingCategory;
import com.simibubi.create.compat.jei.category.FanHauntingCategory;
import com.simibubi.create.compat.jei.category.FanSmokingCategory;
import com.simibubi.create.compat.jei.category.FanWashingCategory;
import com.simibubi.create.compat.jei.category.ItemApplicationCategory;
import com.simibubi.create.compat.jei.category.ItemDrainCategory;
import com.simibubi.create.compat.jei.category.MechanicalCraftingCategory;
import com.simibubi.create.compat.jei.category.MillingCategory;
@ -41,6 +42,7 @@ import com.simibubi.create.compat.jei.category.SequencedAssemblyCategory;
import com.simibubi.create.compat.jei.category.SpoutCategory;
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe;
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
import com.simibubi.create.content.contraptions.components.deployer.ManualApplicationRecipe;
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid;
@ -52,6 +54,7 @@ import com.simibubi.create.content.logistics.item.filter.AbstractFilterScreen;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.config.CRecipes;
import com.simibubi.create.foundation.config.ConfigBase.ConfigBool;
import com.simibubi.create.foundation.data.recipe.LogStrippingFakeRecipes;
import com.simibubi.create.foundation.gui.container.AbstractSimiContainerScreen;
import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo;
@ -190,8 +193,14 @@ public class CreateJEI implements IModPlugin {
.catalyst(AllItems.RED_SAND_PAPER::get)
.build(),
item_application = register("item_application", ItemApplicationCategory::new)
.addTypedRecipes(AllRecipeTypes.ITEM_APPLICATION)
.addRecipes(LogStrippingFakeRecipes::createRecipes)
.build(),
deploying = register("deploying", DeployingCategory::new).addTypedRecipes(AllRecipeTypes.DEPLOYING)
.addTypedRecipes(AllRecipeTypes.SANDPAPER_POLISHING::getType, DeployerApplicationRecipe::convert)
.addTypedRecipes(AllRecipeTypes.ITEM_APPLICATION::getType, ManualApplicationRecipe::asDeploying)
.catalyst(AllBlocks.DEPLOYER::get)
.catalyst(AllBlocks.DEPOT::get)
.catalyst(AllItems.BELT_CONNECTOR::get)

View file

@ -19,6 +19,7 @@ import com.simibubi.create.foundation.utility.Lang;
import mezz.jei.api.gui.drawable.IDrawable;
import mezz.jei.api.gui.ingredient.IGuiFluidStackGroup;
import mezz.jei.api.gui.ingredient.IGuiItemStackGroup;
import mezz.jei.api.gui.ingredient.IRecipeSlotTooltipCallback;
import mezz.jei.api.recipe.category.IRecipeCategory;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
@ -115,6 +116,15 @@ public abstract class CreateRecipeCategory<T extends Recipe<?>> implements IReci
});
}
public static IRecipeSlotTooltipCallback addStochasticTooltip(ProcessingOutput output) {
return (view, tooltip) -> {
float chance = output.getChance();
if (chance != 1)
tooltip.add(1, Lang.translate("recipe.processing.chance", chance < 0.01 ? "<1" : (int) (chance * 100))
.withStyle(ChatFormatting.GOLD));
};
}
public static List<FluidStack> withImprovedVisibility(List<FluidStack> stacks) {
return stacks.stream()
.map(CreateRecipeCategory::withImprovedVisibility)

View file

@ -0,0 +1,96 @@
package com.simibubi.create.compat.jei.category;
import java.util.Arrays;
import java.util.Optional;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f;
import com.simibubi.create.AllItems;
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
import com.simibubi.create.content.contraptions.processing.ItemApplicationRecipe;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.gui.element.GuiGameElement;
import com.simibubi.create.foundation.utility.Lang;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
import mezz.jei.api.recipe.IFocusGroup;
import mezz.jei.api.recipe.RecipeIngredientRole;
import net.minecraft.ChatFormatting;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.state.BlockState;
public class ItemApplicationCategory extends CreateRecipeCategory<ItemApplicationRecipe> {
public ItemApplicationCategory() {
super(itemIcon(AllItems.BRASS_HAND.get()), emptyBackground(177, 60));
}
@Override
public Class<ItemApplicationRecipe> getRecipeClass() {
return ItemApplicationRecipe.class;
}
@Override
public void setRecipe(IRecipeLayoutBuilder builder, ItemApplicationRecipe recipe, IFocusGroup focuses) {
builder.addSlot(RecipeIngredientRole.INPUT, 27, 38)
.addItemStacks(Arrays.asList(recipe.getProcessedItem()
.getItems()));
builder.addSlot(RecipeIngredientRole.INPUT, 51, 5)
.addItemStacks(Arrays.asList(recipe.getRequiredHeldItem()
.getItems()))
.addTooltipCallback(
recipe.shouldKeepHeldItem()
? (view, tooltip) -> tooltip.add(1, Lang.translate("recipe.deploying.not_consumed")
.withStyle(ChatFormatting.GOLD))
: (view, tooltip) -> {
});
builder.addSlot(RecipeIngredientRole.OUTPUT, 132, 38)
.addItemStack(recipe.getResultItem())
.addTooltipCallback(addStochasticTooltip(recipe.getRollableResults()
.get(0)));
}
@Override
public void draw(ItemApplicationRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack matrixStack,
double mouseX, double mouseY) {
AllGuiTextures.JEI_SLOT.render(matrixStack, 50, 4);
AllGuiTextures.JEI_SLOT.render(matrixStack, 26, 37);
getRenderedSlot(recipe, 0).render(matrixStack, 131, 37);
AllGuiTextures.JEI_SHADOW.render(matrixStack, 62, 47);
AllGuiTextures.JEI_DOWN_ARROW.render(matrixStack, 74, 10);
Optional<ItemStack> displayedIngredient = recipeSlotsView.getSlotViews()
.get(0)
.getDisplayedIngredient(VanillaTypes.ITEM);
if (displayedIngredient.isEmpty())
return;
Item item = displayedIngredient.get()
.getItem();
if (!(item instanceof BlockItem blockItem))
return;
BlockState state = blockItem.getBlock()
.defaultBlockState();
matrixStack.pushPose();
matrixStack.translate(74, 51, 100);
matrixStack.mulPose(Vector3f.XP.rotationDegrees(-15.5f));
matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f));
int scale = 20;
GuiGameElement.of(state)
.lighting(AnimatedKinetics.DEFAULT_LIGHTING)
.scale(scale)
.render(matrixStack);
matrixStack.popPose();
}
}

View file

@ -10,6 +10,7 @@ import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.Mode;
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.State;
import com.simibubi.create.content.contraptions.processing.InWorldProcessing;
import com.simibubi.create.content.contraptions.processing.ItemApplicationRecipe;
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe;
@ -122,11 +123,12 @@ public class BeltDeployerCallbacks {
boolean unbreakable = heldItem.hasTag() && heldItem.getTag()
.getBoolean("Unbreakable");
boolean keepHeld =
recipe instanceof DeployerApplicationRecipe && ((DeployerApplicationRecipe) recipe).shouldKeepHeldItem();
recipe instanceof ItemApplicationRecipe && ((ItemApplicationRecipe) recipe).shouldKeepHeldItem();
if (!unbreakable && !keepHeld) {
if (heldItem.isDamageableItem())
heldItem.hurtAndBreak(1, deployerTileEntity.player, s -> s.broadcastBreakEvent(InteractionHand.MAIN_HAND));
heldItem.hurtAndBreak(1, deployerTileEntity.player,
s -> s.broadcastBreakEvent(InteractionHand.MAIN_HAND));
else
heldItem.shrink(1);
}

View file

@ -4,52 +4,31 @@ import java.util.List;
import java.util.Set;
import java.util.function.Supplier;
import com.google.gson.JsonObject;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.AllTags.AllItemTags;
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.ItemApplicationRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.GsonHelper;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.Level;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.items.wrapper.RecipeWrapper;
public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> implements IAssemblyRecipe {
private boolean keepHeldItem;
public class DeployerApplicationRecipe extends ItemApplicationRecipe implements IAssemblyRecipe {
public DeployerApplicationRecipe(ProcessingRecipeParams params) {
super(AllRecipeTypes.DEPLOYING, params);
keepHeldItem = params.keepHeldItem;
}
@Override
public boolean matches(RecipeWrapper inv, Level p_77569_2_) {
return ingredients.get(0)
.test(inv.getItem(0))
&& ingredients.get(1)
.test(inv.getItem(1));
}
@Override
protected int getMaxInputCount() {
return 2;
}
@Override
@ -57,27 +36,12 @@ public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> i
return 2;
}
public boolean shouldKeepHeldItem() {
return keepHeldItem;
}
public Ingredient getRequiredHeldItem() {
if (ingredients.isEmpty())
throw new IllegalStateException("Deploying Recipe: " + id.toString() + " has no tool!");
return ingredients.get(1);
}
public Ingredient getProcessedItem() {
if (ingredients.size() < 2)
throw new IllegalStateException("Deploying Recipe: " + id.toString() + " has no ingredient!");
return ingredients.get(0);
}
public static DeployerApplicationRecipe convert(Recipe<?> sandpaperRecipe) {
return new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new,
new ResourceLocation(sandpaperRecipe.getId().getNamespace(),
sandpaperRecipe.getId().getPath() + "_using_deployer"))
.require(sandpaperRecipe.getIngredients()
new ResourceLocation(sandpaperRecipe.getId()
.getNamespace(),
sandpaperRecipe.getId()
.getPath() + "_using_deployer")).require(sandpaperRecipe.getIngredients()
.get(0))
.require(AllItemTags.SANDPAPER.tag)
.output(sandpaperRecipe.getResultItem())
@ -89,31 +53,6 @@ public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> i
list.add(ingredients.get(1));
}
@Override
public void readAdditional(JsonObject json) {
super.readAdditional(json);
keepHeldItem = GsonHelper.getAsBoolean(json, "keepHeldItem", false);
}
@Override
public void writeAdditional(JsonObject json) {
super.writeAdditional(json);
if (keepHeldItem)
json.addProperty("keepHeldItem", keepHeldItem);
}
@Override
public void readAdditional(FriendlyByteBuf buffer) {
super.readAdditional(buffer);
keepHeldItem = buffer.readBoolean();
}
@Override
public void writeAdditional(FriendlyByteBuf buffer) {
super.writeAdditional(buffer);
buffer.writeBoolean(keepHeldItem);
}
@Override
@OnlyIn(Dist.CLIENT)
public Component getDescriptionForAssembly() {

View file

@ -456,11 +456,9 @@ public class DeployerTileEntity extends KineticTileEntity {
@Nullable
public Recipe<? extends Container> getRecipe(ItemStack stack) {
// safety checks
if (player == null || level == null)
return null;
// sandpaper = op
ItemStack heldItemMainhand = player.getMainHandItem();
if (heldItemMainhand.getItem() instanceof SandPaperItem) {
sandpaperInv.setItem(0, stack);
@ -468,19 +466,16 @@ public class DeployerTileEntity extends KineticTileEntity {
.orElse(null);
}
// inventory
recipeInv.setItem(0, stack);
recipeInv.setItem(1, heldItemMainhand);
// event nonsense
DeployerRecipeSearchEvent event = new DeployerRecipeSearchEvent(this, recipeInv);
// creates deployer recipes
event.addRecipe(() -> SequencedAssemblyRecipe.getRecipe(level, event.getInventory(),
AllRecipeTypes.DEPLOYING.getType(), DeployerApplicationRecipe.class), 100);
event.addRecipe(() -> AllRecipeTypes.DEPLOYING.find(event.getInventory(), level), 50);
event.addRecipe(() -> AllRecipeTypes.ITEM_APPLICATION.find(event.getInventory(), level), 50);
// post the event, get result
MinecraftForge.EVENT_BUS.post(event);
return event.getRecipe();
}

View file

@ -0,0 +1,134 @@
package com.simibubi.create.content.contraptions.components.deployer;
import java.util.List;
import java.util.Optional;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.contraptions.processing.ItemApplicationRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams;
import com.simibubi.create.foundation.utility.BlockHelper;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.items.wrapper.RecipeWrapper;
@EventBusSubscriber
public class ManualApplicationRecipe extends ItemApplicationRecipe {
@SubscribeEvent
public static void manualApplicationRecipesApplyInWorld(PlayerInteractEvent.RightClickBlock event) {
Level level = event.getWorld();
ItemStack heldItem = event.getItemStack();
BlockPos pos = event.getPos();
BlockState blockState = level.getBlockState(pos);
if (level.isClientSide())
return;
if (heldItem.isEmpty())
return;
if (blockState.isAir())
return;
if (event.isCanceled())
return;
RecipeType<Recipe<RecipeWrapper>> type = AllRecipeTypes.ITEM_APPLICATION.getType();
Optional<Recipe<RecipeWrapper>> foundRecipe = level.getRecipeManager()
.getAllRecipesFor(type)
.stream()
.filter(r -> {
ManualApplicationRecipe mar = (ManualApplicationRecipe) r;
return mar.testBlock(blockState) && mar.ingredients.get(1)
.test(heldItem);
})
.findFirst();
if (foundRecipe.isEmpty())
return;
level.playSound(null, pos, SoundEvents.COPPER_BREAK, SoundSource.PLAYERS, 1, 1.45f);
ManualApplicationRecipe recipe = (ManualApplicationRecipe) foundRecipe.get();
level.destroyBlock(pos, false);
level.setBlock(pos, recipe.transformBlock(blockState), 3);
recipe.rollResults()
.forEach(stack -> Block.popResource(level, pos, stack));
boolean unbreakable = heldItem.hasTag() && heldItem.getTag()
.getBoolean("Unbreakable");
boolean keepHeld = recipe.shouldKeepHeldItem();
if (!unbreakable && !keepHeld) {
if (heldItem.isDamageableItem())
heldItem.hurtAndBreak(1, event.getPlayer(), s -> s.broadcastBreakEvent(InteractionHand.MAIN_HAND));
else
heldItem.shrink(1);
}
event.setCancellationResult(InteractionResult.SUCCESS);
event.setCanceled(true);
}
public ManualApplicationRecipe(ProcessingRecipeParams params) {
super(AllRecipeTypes.ITEM_APPLICATION, params);
}
public static DeployerApplicationRecipe asDeploying(Recipe<?> recipe) {
ManualApplicationRecipe mar = (ManualApplicationRecipe) recipe;
ProcessingRecipeBuilder<DeployerApplicationRecipe> builder =
new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new,
new ResourceLocation(mar.id.getNamespace(), mar.id.getPath() + "_using_deployer"))
.require(mar.ingredients.get(0))
.require(mar.ingredients.get(1));
for (ProcessingOutput output : mar.results)
builder.output(output);
if (mar.shouldKeepHeldItem())
builder.toolNotConsumed();
return builder.build();
}
public boolean testBlock(BlockState in) {
return ingredients.get(0)
.test(new ItemStack(in.getBlock()
.asItem()));
}
public BlockState transformBlock(BlockState in) {
ProcessingOutput mainOutput = results.get(0);
ItemStack output = mainOutput.rollOutput();
if (output.getItem()instanceof BlockItem bi)
return BlockHelper.copyProperties(in, bi.getBlock()
.defaultBlockState());
return Blocks.AIR.defaultBlockState();
}
@Override
public List<ItemStack> rollResults() {
return rollResults(getRollableResultsExceptBlock());
}
public List<ProcessingOutput> getRollableResultsExceptBlock() {
ProcessingOutput mainOutput = results.get(0);
if (mainOutput.getStack()
.getItem() instanceof BlockItem)
return results.subList(1, results.size());
return results;
}
}

View file

@ -10,6 +10,7 @@ import java.util.Optional;
import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.contraptions.components.deployer.ManualApplicationRecipe;
import com.simibubi.create.content.contraptions.components.fan.HauntingRecipe;
import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
@ -237,11 +238,12 @@ public class InWorldProcessing {
public static List<ItemStack> applyRecipeOn(ItemStack stackIn, Recipe<?> recipe) {
List<ItemStack> stacks;
if (recipe instanceof ProcessingRecipe) {
if (recipe instanceof ProcessingRecipe<?> pr) {
stacks = new ArrayList<>();
for (int i = 0; i < stackIn.getCount(); i++) {
List<ItemStack> rollResults = ((ProcessingRecipe<?>) recipe).rollResults();
for (ItemStack stack : rollResults) {
List<ProcessingOutput> outputs =
pr instanceof ManualApplicationRecipe mar ? mar.getRollableResults() : pr.getRollableResults();
for (ItemStack stack : pr.rollResults(outputs)) {
for (ItemStack previouslyRolled : stacks) {
if (stack.isEmpty())
continue;
@ -472,8 +474,8 @@ public class InWorldProcessing {
.map(flame -> flame == LitBlazeBurnerBlock.FlameType.SOUL)
.orElse(false))
return Type.HAUNTING;
if (block == Blocks.FIRE || blockState.is(BlockTags.CAMPFIRES)
&& blockState.getOptionalValue(CampfireBlock.LIT)
if (block == Blocks.FIRE
|| blockState.is(BlockTags.CAMPFIRES) && blockState.getOptionalValue(CampfireBlock.LIT)
.orElse(false)
|| AllBlocks.LIT_BLAZE_BURNER.has(blockState)
&& blockState.getOptionalValue(LitBlazeBurnerBlock.FLAME_TYPE)

View file

@ -0,0 +1,81 @@
package com.simibubi.create.content.contraptions.processing;
import com.google.gson.JsonObject;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.util.GsonHelper;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.Level;
import net.minecraftforge.items.wrapper.RecipeWrapper;
public class ItemApplicationRecipe extends ProcessingRecipe<RecipeWrapper> {
private boolean keepHeldItem;
public ItemApplicationRecipe(AllRecipeTypes type, ProcessingRecipeParams params) {
super(type, params);
keepHeldItem = params.keepHeldItem;
}
@Override
public boolean matches(RecipeWrapper inv, Level p_77569_2_) {
return ingredients.get(0)
.test(inv.getItem(0))
&& ingredients.get(1)
.test(inv.getItem(1));
}
@Override
protected int getMaxInputCount() {
return 2;
}
@Override
protected int getMaxOutputCount() {
return 9;
}
public boolean shouldKeepHeldItem() {
return keepHeldItem;
}
public Ingredient getRequiredHeldItem() {
if (ingredients.isEmpty())
throw new IllegalStateException("Item Application Recipe: " + id.toString() + " has no tool!");
return ingredients.get(1);
}
public Ingredient getProcessedItem() {
if (ingredients.size() < 2)
throw new IllegalStateException("Item Application Recipe: " + id.toString() + " has no ingredient!");
return ingredients.get(0);
}
@Override
public void readAdditional(JsonObject json) {
super.readAdditional(json);
keepHeldItem = GsonHelper.getAsBoolean(json, "keepHeldItem", false);
}
@Override
public void writeAdditional(JsonObject json) {
super.writeAdditional(json);
if (keepHeldItem)
json.addProperty("keepHeldItem", keepHeldItem);
}
@Override
public void readAdditional(FriendlyByteBuf buffer) {
super.readAdditional(buffer);
keepHeldItem = buffer.readBoolean();
}
@Override
public void writeAdditional(FriendlyByteBuf buffer) {
super.writeAdditional(buffer);
buffer.writeBoolean(keepHeldItem);
}
}

View file

@ -126,7 +126,7 @@ public abstract class ProcessingRecipe<T extends Container> implements Recipe<T>
return fluidIngredients;
}
public NonNullList<ProcessingOutput> getRollableResults() {
public List<ProcessingOutput> getRollableResults() {
return results;
}
@ -145,8 +145,11 @@ public abstract class ProcessingRecipe<T extends Container> implements Recipe<T>
}
public List<ItemStack> rollResults() {
return rollResults(this.getRollableResults());
}
public List<ItemStack> rollResults(List<ProcessingOutput> rollableResults) {
List<ItemStack> results = new ArrayList<>();
NonNullList<ProcessingOutput> rollableResults = getRollableResults();
for (int i = 0; i < rollableResults.size(); i++) {
ProcessingOutput output = rollableResults.get(i);
ItemStack stack = i == 0 && forcedResult != null ? forcedResult.get() : output.rollOutput();

View file

@ -150,12 +150,15 @@ public class ProcessingRecipeBuilder<T extends ProcessingRecipe<?>> {
}
public ProcessingRecipeBuilder<T> output(float chance, ItemStack output) {
params.results.add(new ProcessingOutput(output, chance));
return this;
return output(new ProcessingOutput(output, chance));
}
public ProcessingRecipeBuilder<T> output(float chance, ResourceLocation registryName, int amount) {
params.results.add(new ProcessingOutput(Pair.of(registryName, amount), chance));
return output(new ProcessingOutput(Pair.of(registryName, amount), chance));
}
public ProcessingRecipeBuilder<T> output(ProcessingOutput output) {
params.results.add(output);
return this;
}

View file

@ -34,15 +34,11 @@ public class ProcessingRecipeSerializer<T extends ProcessingRecipe<?>> extends F
JsonArray jsonIngredients = new JsonArray();
JsonArray jsonOutputs = new JsonArray();
recipe.getIngredients()
.forEach(i -> jsonIngredients.add(i.toJson()));
recipe.getFluidIngredients()
.forEach(i -> jsonIngredients.add(i.serialize()));
recipe.ingredients.forEach(i -> jsonIngredients.add(i.toJson()));
recipe.fluidIngredients.forEach(i -> jsonIngredients.add(i.serialize()));
recipe.getRollableResults()
.forEach(o -> jsonOutputs.add(o.serialize()));
recipe.getFluidResults()
.forEach(o -> jsonOutputs.add(FluidHelper.serializeFluidStack(o)));
recipe.results.forEach(o -> jsonOutputs.add(o.serialize()));
recipe.fluidResults.forEach(o -> jsonOutputs.add(FluidHelper.serializeFluidStack(o)));
json.add("ingredients", jsonIngredients);
json.add("results", jsonOutputs);
@ -96,10 +92,10 @@ public class ProcessingRecipeSerializer<T extends ProcessingRecipe<?>> extends F
}
protected void writeToBuffer(FriendlyByteBuf buffer, T recipe) {
NonNullList<Ingredient> ingredients = recipe.getIngredients();
NonNullList<FluidIngredient> fluidIngredients = recipe.getFluidIngredients();
NonNullList<ProcessingOutput> outputs = recipe.getRollableResults();
NonNullList<FluidStack> fluidOutputs = recipe.getFluidResults();
NonNullList<Ingredient> ingredients = recipe.ingredients;
NonNullList<FluidIngredient> fluidIngredients = recipe.fluidIngredients;
NonNullList<ProcessingOutput> outputs = recipe.results;
NonNullList<FluidStack> fluidOutputs = recipe.fluidResults;
buffer.writeVarInt(ingredients.size());
ingredients.forEach(i -> i.toNetwork(buffer));

View file

@ -13,6 +13,7 @@ public class CRecipes extends ConfigBase {
public final ConfigBool allowStonecuttingOnSaw = b(true, "allowStonecuttingOnSaw", Comments.allowStonecuttingOnSaw);
public final ConfigBool allowWoodcuttingOnSaw = b(true, "allowWoodcuttingOnSaw", Comments.allowWoodcuttingOnSaw);
public final ConfigBool allowCastingBySpout = b(true, "allowCastingBySpout", Comments.allowCastingBySpout);
public final ConfigBool displayLogStrippingRecipes = b(true, "displayLogStrippingRecipes", Comments.displayLogStrippingRecipes);
public final ConfigInt lightSourceCountForRefinedRadiance =
i(10, 1, "lightSourceCountForRefinedRadiance", Comments.refinedRadiance);
public final ConfigBool enableRefinedRadianceRecipe =
@ -45,6 +46,7 @@ public class CRecipes extends ConfigBase {
"The amount of Light sources destroyed before Chromatic Compound turns into Refined Radiance.";
static String refinedRadianceRecipe = "Allow the standard in-world Refined Radiance recipes.";
static String shadowSteelRecipe = "Allow the standard in-world Shadow Steel recipe.";
static String displayLogStrippingRecipes = "Display vanilla Log-stripping interactions in JEI.";
}
}

View file

@ -90,8 +90,7 @@ public class BuilderTransformers {
String encasedSuffix = "_encased_cogwheel_side" + (large ? "_connected" : "");
String blockFolder = large ? "encased_large_cogwheel" : "encased_cogwheel";
String wood = casing.equals("brass") ? "dark_oak" : "spruce";
return encasedBase(b, drop)
.addLayer(() -> RenderType::cutoutMipped)
return encasedBase(b, drop).addLayer(() -> RenderType::cutoutMipped)
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, casingShift.get(),
(s, f) -> f.getAxis() == s.getValue(EncasedCogwheelBlock.AXIS)
&& !s.getValue(f.getAxisDirection() == AxisDirection.POSITIVE ? EncasedCogwheelBlock.TOP_SHAFT
@ -155,7 +154,10 @@ public class BuilderTransformers {
.blockstate((c, p) -> p.simpleBlock(c.get()))
.onRegister(connectedTextures(() -> new EncasedCTBehaviour(ct.get())))
.onRegister(casingConnectivity((block, cc) -> cc.makeCasing(block, ct.get())))
.simpleItem();
.tag(AllBlockTags.CASING.tag)
.item()
.tag(AllItemTags.CASING.tag)
.build();
}
public static <B extends BeltTunnelBlock> NonNullUnaryOperator<BlockBuilder<B, CreateRegistrate>> beltTunnel(

View file

@ -0,0 +1,47 @@
package com.simibubi.create.foundation.data.recipe;
import java.util.function.Supplier;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.AllTags.AllItemTags;
import net.minecraft.data.DataGenerator;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.ItemLike;
public class ItemApplicationRecipeGen extends ProcessingRecipeGen {
GeneratedRecipe ANDESITE = woodCasing("andesite", I::andesite, I::andesiteCasing);
GeneratedRecipe COPPER = woodCasingTag("copper", I::copperSheet, I::copperCasing);
GeneratedRecipe BRASS = woodCasingTag("brass", I::brassSheet, I::brassCasing);
protected GeneratedRecipe woodCasing(String type, Supplier<ItemLike> ingredient, Supplier<ItemLike> output) {
return woodCasingIngredient(type, () -> Ingredient.of(ingredient.get()), output);
}
protected GeneratedRecipe woodCasingTag(String type, Supplier<TagKey<Item>> ingredient, Supplier<ItemLike> output) {
return woodCasingIngredient(type, () -> Ingredient.of(ingredient.get()), output);
}
protected GeneratedRecipe woodCasingIngredient(String type, Supplier<Ingredient> ingredient,
Supplier<ItemLike> output) {
create(type + "_casing_from_log", b -> b.require(AllItemTags.STRIPPED_LOGS.tag)
.require(ingredient.get())
.output(output.get()));
return create(type + "_casing_from_wood", b -> b.require(AllItemTags.STRIPPED_WOOD.tag)
.require(ingredient.get())
.output(output.get()));
}
public ItemApplicationRecipeGen(DataGenerator p_i48262_1_) {
super(p_i48262_1_);
}
@Override
protected AllRecipeTypes getRecipeType() {
return AllRecipeTypes.ITEM_APPLICATION;
}
}

View file

@ -0,0 +1,68 @@
package com.simibubi.create.foundation.data.recipe;
import java.util.ArrayList;
import java.util.List;
import com.simibubi.create.content.contraptions.components.deployer.ManualApplicationRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.item.AxeItem;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.ItemStack.TooltipPart;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.tags.ITagManager;
/**
* Just in case players don't know about that vanilla feature
*/
public class LogStrippingFakeRecipes {
public static List<ManualApplicationRecipe> createRecipes() {
List<ManualApplicationRecipe> recipes = new ArrayList<>();
if (!AllConfigs.SERVER.recipes.displayLogStrippingRecipes.get())
return recipes;
ItemStack axe = new ItemStack(Items.IRON_AXE);
axe.hideTooltipPart(TooltipPart.MODIFIERS);
axe.setHoverName(Lang.translate("recipe.item_application.any_axe")
.withStyle(style -> style.withItalic(false)));
ITagManager<Item> tags = ForgeRegistries.ITEMS.tags();
tags.getTag(ItemTags.LOGS)
.forEach(stack -> process(stack, recipes, axe));
return recipes;
}
private static void process(Item item, List<ManualApplicationRecipe> list, ItemStack axe) {
if (!(item instanceof BlockItem blockItem))
return;
BlockState state = blockItem.getBlock()
.defaultBlockState();
BlockState strippedState = AxeItem.getAxeStrippingState(state);
if (strippedState == null)
return;
Item resultItem = strippedState.getBlock()
.asItem();
if (resultItem == null)
return;
list.add(create(item, resultItem, axe));
}
private static ManualApplicationRecipe create(Item fromItem, Item toItem, ItemStack axe) {
ResourceLocation rn = toItem.getRegistryName();
return new ProcessingRecipeBuilder<>(ManualApplicationRecipe::new,
new ResourceLocation(rn.getNamespace(), rn.getPath() + "_via_vanilla_stripping")).require(fromItem)
.require(Ingredient.of(axe))
.output(toItem)
.build();
}
}

View file

@ -39,6 +39,7 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider {
GENERATORS.add(new FillingRecipeGen(gen));
GENERATORS.add(new EmptyingRecipeGen(gen));
GENERATORS.add(new HauntingRecipeGen(gen));
GENERATORS.add(new ItemApplicationRecipeGen(gen));
gen.addProvider(new DataProvider() {

View file

@ -112,51 +112,6 @@ public class StandardRecipeGen extends CreateRecipeProvider {
.pattern("BA")
.pattern("AB")),
ANDESITE_CASING = create(AllBlocks.ANDESITE_CASING).returns(4)
.unlockedBy(I::andesite)
.viaShaped(b -> b.define('A', ItemTags.PLANKS)
.define('C', I.andesite())
.define('S', ItemTags.LOGS)
.pattern("AAA")
.pattern("CSC")
.pattern("AAA")),
BRASS_CASING = create(AllBlocks.BRASS_CASING).returns(4)
.unlockedByTag(I::brass)
.viaShaped(b -> b.define('A', ItemTags.PLANKS)
.define('C', I.brassSheet())
.define('S', ItemTags.LOGS)
.pattern("AAA")
.pattern("CSC")
.pattern("AAA")),
COPPER_CASING = create(AllBlocks.COPPER_CASING).returns(4)
.unlockedBy(I::copper)
.viaShaped(b -> b.define('A', ItemTags.PLANKS)
.define('C', I.copperSheet())
.define('S', ItemTags.LOGS)
.pattern("AAA")
.pattern("CSC")
.pattern("AAA")),
RADIANT_CASING = create(AllBlocks.REFINED_RADIANCE_CASING).returns(4)
.unlockedBy(I::refinedRadiance)
.viaShaped(b -> b.define('A', ItemTags.PLANKS)
.define('C', I.refinedRadiance())
.define('S', Tags.Items.GLASS_COLORLESS)
.pattern("AAA")
.pattern("CSC")
.pattern("AAA")),
SHADOW_CASING = create(AllBlocks.SHADOW_STEEL_CASING).returns(4)
.unlockedBy(I::shadowSteel)
.viaShaped(b -> b.define('A', ItemTags.PLANKS)
.define('C', I.shadowSteel())
.define('S', Tags.Items.OBSIDIAN)
.pattern("AAA")
.pattern("CSC")
.pattern("AAA")),
ELECTRON_TUBE = create(AllItems.ELECTRON_TUBE).unlockedBy(AllItems.ROSE_QUARTZ::get)
.viaShaped(b -> b.define('L', AllItems.POLISHED_ROSE_QUARTZ.get())
.define('R', Items.REDSTONE_TORCH)

View file

@ -56,8 +56,10 @@
"create.recipe.mystery_conversion": "Mysterious Conversion",
"create.recipe.spout_filling": "Filling by Spout",
"create.recipe.draining": "Item Draining",
"create.recipe.item_application": "Manual Item Application",
"create.recipe.item_application.any_axe": "Any Axe",
"create.recipe.sequenced_assembly": "Sequenced Assembly",
"create.recipe.sequenced_assembly": "Recipe Sequence",
"create.recipe.assembly.next": "Next: %1$s",
"create.recipe.assembly.step": "Step %1$s:",
"create.recipe.assembly.progress": "Progress: %1$s/%2$s",