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:
parent
fbd676a235
commit
279349a37a
60 changed files with 760 additions and 488 deletions
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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步:",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"type": "create:item_application",
|
||||
"ingredients": [
|
||||
{
|
||||
"tag": "forge:stripped_logs"
|
||||
},
|
||||
{
|
||||
"item": "create:andesite_alloy"
|
||||
}
|
||||
],
|
||||
"results": [
|
||||
{
|
||||
"item": "create:andesite_casing"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"type": "create:item_application",
|
||||
"ingredients": [
|
||||
{
|
||||
"tag": "forge:stripped_wood"
|
||||
},
|
||||
{
|
||||
"item": "create:andesite_alloy"
|
||||
}
|
||||
],
|
||||
"results": [
|
||||
{
|
||||
"item": "create:andesite_casing"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"type": "create:item_application",
|
||||
"ingredients": [
|
||||
{
|
||||
"tag": "forge:stripped_logs"
|
||||
},
|
||||
{
|
||||
"tag": "forge:plates/brass"
|
||||
}
|
||||
],
|
||||
"results": [
|
||||
{
|
||||
"item": "create:brass_casing"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"type": "create:item_application",
|
||||
"ingredients": [
|
||||
{
|
||||
"tag": "forge:stripped_wood"
|
||||
},
|
||||
{
|
||||
"tag": "forge:plates/brass"
|
||||
}
|
||||
],
|
||||
"results": [
|
||||
{
|
||||
"item": "create:brass_casing"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"type": "create:item_application",
|
||||
"ingredients": [
|
||||
{
|
||||
"tag": "forge:stripped_logs"
|
||||
},
|
||||
{
|
||||
"tag": "forge:plates/copper"
|
||||
}
|
||||
],
|
||||
"results": [
|
||||
{
|
||||
"item": "create:copper_casing"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"type": "create:item_application",
|
||||
"ingredients": [
|
||||
{
|
||||
"tag": "forge:stripped_wood"
|
||||
},
|
||||
{
|
||||
"tag": "forge:plates/copper"
|
||||
}
|
||||
],
|
||||
"results": [
|
||||
{
|
||||
"item": "create:copper_casing"
|
||||
}
|
||||
]
|
||||
}
|
10
src/generated/resources/data/create/tags/blocks/casing.json
Normal file
10
src/generated/resources/data/create/tags/blocks/casing.json
Normal 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"
|
||||
]
|
||||
}
|
10
src/generated/resources/data/create/tags/items/casing.json
Normal file
10
src/generated/resources/data/create/tags/items/casing.json
Normal 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"
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"#create:vanilla_stripped_logs"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"#create:vanilla_stripped_wood"
|
||||
]
|
||||
}
|
|
@ -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),
|
||||
|
|
|
@ -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,9 +120,10 @@ public class AllTags {
|
|||
WINDMILL_SAILS,
|
||||
WINDOWABLE,
|
||||
WRENCH_PICKUP,
|
||||
CASING,
|
||||
|
||||
PASSIVE_BOILER_HEATERS,
|
||||
|
||||
|
||||
RELOCATION_NOT_SUPPORTED(FORGE),
|
||||
WG_STONE(FORGE),
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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,31 +36,16 @@ 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())
|
||||
.build();
|
||||
.require(AllItemTags.SANDPAPER.tag)
|
||||
.output(sandpaperRecipe.getResultItem())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -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() {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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.";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ public class BuilderTransformers {
|
|||
.getExistingFile(p.modLoc("block/track/bogey/top"))))
|
||||
.onRegister(block -> IBogeyBlock.register(block.getRegistryName()));
|
||||
}
|
||||
|
||||
|
||||
public static <B extends EncasedCogwheelBlock, P> NonNullUnaryOperator<BlockBuilder<B, P>> encasedCogwheel(
|
||||
String casing, Supplier<CTSpriteShiftEntry> casingShift) {
|
||||
return b -> encasedCogwheelBase(b, casing, casingShift, () -> AllBlocks.COGWHEEL.get(), false);
|
||||
|
@ -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(
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in a new issue