Merge branch 'mc1.15/dev' into mc1.16/dev

This commit is contained in:
simibubi 2020-10-12 22:15:32 +02:00
commit cbeb5dc649
36 changed files with 446 additions and 333 deletions

View File

@ -367,17 +367,17 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
c113d0a180880243538e9b1c3019c863df3fbdc1 assets/create/lang/en_ud.json
2fb3d9c9ba6abdecc765cb789ed248a3732d21b4 assets/create/lang/en_us.json
8cdaa5cf60560475055e46190616e0b215e8a899 assets/create/lang/unfinished/de_de.json
cb09edb58ba48c514a4a70ef9bb7117252b5eb2d assets/create/lang/unfinished/fr_fr.json
17856b4bdbc8fe08c342e876f9fd249ce80dbc2b assets/create/lang/unfinished/it_it.json
482f3d41c6531881c38e1b115a1b24f61de6aaef assets/create/lang/unfinished/ja_jp.json
66cc3a9966522f0699b1f3e06bf130326376a82d assets/create/lang/unfinished/ko_kr.json
4e66916c75d8e65dd3ff2c12b53e80d622bac4c0 assets/create/lang/unfinished/nl_nl.json
7b7e538539be7cb6adc7dd09c37ae7153c680210 assets/create/lang/unfinished/pt_br.json
89d5586e37d293fb2b565ff49aa5e20e82fe0b0e assets/create/lang/unfinished/ru_ru.json
6f9e1dcef331957aef3d8e01152ef736943e2586 assets/create/lang/unfinished/zh_cn.json
82524600ca83a766522129634a44b47a277a4b71 assets/create/lang/en_ud.json
c39a5082dd2b24a98e1f6c66884a855a72cd52f1 assets/create/lang/en_us.json
38515a29696ded8afad721e1d7e5825179ae358c assets/create/lang/unfinished/de_de.json
8376325bea8c0234b7634b6852b7016df9c8814f assets/create/lang/unfinished/fr_fr.json
ea8e85c8d7d5354429f420667537a7b62ab12a1c assets/create/lang/unfinished/it_it.json
12a7c0d56e705004deb23b2cc16eb84a419ce38b assets/create/lang/unfinished/ja_jp.json
6672691add00fdace20218ecbb6d6a46273aa765 assets/create/lang/unfinished/ko_kr.json
3e33fd417af5812b028834666de6983c78cbe05f assets/create/lang/unfinished/nl_nl.json
6f0a8d1ef696e514f40b3d5204d21e1391ed5686 assets/create/lang/unfinished/pt_br.json
f65718ac2d3d40a44f266fd7143e9a3b1067ffae assets/create/lang/unfinished/ru_ru.json
67e3f92bb97e5c441f8efe375a35662af0d805f4 assets/create/lang/unfinished/zh_cn.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
@ -1094,6 +1094,7 @@ d537fffaede521efa525fb2a7f9863fe6a80054e assets/create/models/item/birch_window_
22632bd681c8a605f0845f7549770389a741156a assets/create/models/item/black_seat.json
56a6baedc608792cd6ab72a1c4fd53046cbda070 assets/create/models/item/black_valve_handle.json
80a6e8b00709fe0521aca5b789ae17485ed9c56d assets/create/models/item/blaze_burner.json
6e350231e9f217019883096b4f0bb95ab0af4728 assets/create/models/item/blaze_cake.json
0e1977585128fc0ecef640f72e5fc5e9fb47ef92 assets/create/models/item/blue_seat.json
bec96ebf3369d3cffa9bb1b8bf9f2a5cd5d0ef96 assets/create/models/item/blue_valve_handle.json
17d340c3678bd24cb085ba49490b2b4cb341a9e7 assets/create/models/item/brass_block.json
@ -1114,6 +1115,7 @@ afd697168c9786eb80e54eccdc6a23afa6c7fb0e assets/create/models/item/chiseled_gabb
a47fbe5f2da79080d99ef0975bfa8da4d08f8be4 assets/create/models/item/chiseled_scoria.json
70232ce9b88119fb383717e2c1ad113f7aad6a99 assets/create/models/item/chiseled_weathered_limestone.json
fe67c3f380d17735a9436a4579a8be1a02b8e4a0 assets/create/models/item/chute.json
6680a68526576ded5dac2aa3bc9fb9de3e744146 assets/create/models/item/cinder_flour.json
b1531a7bd3f7f27b9587d13e818a93dc2d088bc8 assets/create/models/item/clockwork_bearing.json
0a2a0f0aafeab0088172f77afd40c1fa2cc1f2b8 assets/create/models/item/clutch.json
dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json
@ -1222,7 +1224,6 @@ f4727119b75ab632c3ad295be4d398b1919d782f assets/create/models/item/fluid_valve.j
8707332c0cb6ee123e7962d08536a60725c64ce8 assets/create/models/item/flywheel.json
f2496d3b16e5b5415474bcfb7d6c6a6c3b28ed60 assets/create/models/item/framed_glass.json
1041d462c6e856f7f3f2365c299c0599703d1ed7 assets/create/models/item/framed_glass_pane.json
7039702b4b3564bf818e818398b5d03b39c74f3d assets/create/models/item/fuel_pellet.json
0bee2855dc9bad52e941153b87e9c35797c246ee assets/create/models/item/furnace_engine.json
a703b16625ad9d3b9042b6b19fdb88407726898b assets/create/models/item/furnace_minecart_contraption.json
2c1608c114ccc285a84e936dc3f1233c535e1a26 assets/create/models/item/gabbro.json
@ -2489,8 +2490,7 @@ d9021504be855cd2d4d91503a82b84233052adb0 data/create/recipes/blasting/gold_ingot
c323b106e88b7de77fea71ff12494abdbb818d15 data/create/recipes/chiseled_limestone_from_limestone_stonecutting.json
da9a919b476954c1de34826aa7706bf6056a8f12 data/create/recipes/chiseled_scoria_from_scoria_stonecutting.json
09faa4ddcf9f3907dcdb3ab3e8b68c1deb2486e5 data/create/recipes/chiseled_weathered_limestone_from_weathered_limestone_stonecutting.json
c3cfdc9552a23e4749c42e71fbddd153b76ca708 data/create/recipes/compacting/ice.json
5758a1804287c261e1c953bda599d8495ba7c40a data/create/recipes/compacting/temp_gabbro.json
370a536cc75b58cb0a07552665297669a763747a data/create/recipes/compacting/blaze_cake.json
19526da3a59fc136654ff1bc93c0251581f397a9 data/create/recipes/crafting/appliances/dough.json
7b5f863dda3d05a79cb85943a178eba0bd8a7dc7 data/create/recipes/crafting/appliances/slime_ball.json
b159ba84428eee6ef6e23df1766f2a18f2c8a63e data/create/recipes/crafting/appliances/tree_fertilizer.json
@ -2675,6 +2675,7 @@ e870d049abc5cd5f389f70414c67e76ddc14060d data/create/recipes/crushing/leather_ho
d73a0ed13112e001dad61d6ea66fd729c86e7b62 data/create/recipes/crushing/nether_quartz_ore.json
2b9b8e1ab81f47c4f7fb79a007aef214af12a342 data/create/recipes/crushing/nether_wart_block_no_quark.json
70116a5a9d1f93ae377e1526ca99582190cf2e3e data/create/recipes/crushing/nether_wart_block_quark.json
0dfe5092af96fbaeddaace6d3b1c45fa6f4cf7fe data/create/recipes/crushing/netherrack.json
71397f0ae2e175181195b8b2894d108e0cdc3da7 data/create/recipes/crushing/obsidian.json
88d7ab3d6407010876e328f5f20a4ed9ddda7e3e data/create/recipes/crushing/prismarine_crystals.json
42299b3a0596c7743404496205854ac2324aedd7 data/create/recipes/crushing/redstone_ore.json
@ -2943,7 +2944,8 @@ e7bfaa806d57573d060fac0a5e7a84f345b8bb85 data/create/recipes/mixing/andesite_all
76939e4d3e5b615ae21d14c0ff7b917a622bcf80 data/create/recipes/mixing/chromatic_compound.json
d9a3dff1288d675ab812eef1eb73cb27dcc71bd2 data/create/recipes/mixing/crushed_brass.json
00b165ea38d834c7955440e87062004a8182c3f8 data/create/recipes/mixing/gunpowder.json
35c4e8a765479861f307afb9ec650f912f92b998 data/create/recipes/mixing/temp_cobble.json
743c2d62c94a4989b88046c9cdf0fa024cd09fa8 data/create/recipes/mixing/temp_cobble.json
3295a2195707f952a83deb3bed10b43570b215e5 data/create/recipes/mixing/temp_lava.json
1998c6f84f871d6da58ec29d729401d18f8f1aa1 data/create/recipes/mossy_andesite_from_andesite_stonecutting.json
89929d9cb11b5c589b2ecfa821c61add1ef7b62b data/create/recipes/mossy_dark_scoria_from_dark_scoria_stonecutting.json
4b8b1191dd3a21294293dc5ad237af89b849df28 data/create/recipes/mossy_diorite_from_diorite_stonecutting.json

View File

@ -375,11 +375,13 @@
"item.create.andesite_alloy": "\u028Eo\u05DF\u05DF\u2C6F \u01DD\u0287\u0131s\u01DDpu\u2C6F",
"item.create.attribute_filter": "\u0279\u01DD\u0287\u05DF\u0131\u2132 \u01DD\u0287nq\u0131\u0279\u0287\u0287\u2C6F",
"item.create.belt_connector": "\u0287\u05DF\u01DD\u15FA \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW",
"item.create.blaze_cake": "\u01DD\u029E\u0250\u0186 \u01DDz\u0250\u05DF\u15FA",
"item.create.brass_hand": "pu\u0250H ss\u0250\u0279\u15FA",
"item.create.brass_ingot": "\u0287obuI ss\u0250\u0279\u15FA",
"item.create.brass_nugget": "\u0287\u01DDbbnN ss\u0250\u0279\u15FA",
"item.create.brass_sheet": "\u0287\u01DD\u01DD\u0265S ss\u0250\u0279\u15FA",
"item.create.chromatic_compound": "punod\u026Fo\u0186 \u0254\u0131\u0287\u0250\u026Fo\u0279\u0265\u0186",
"item.create.cinder_flour": "\u0279no\u05DF\u2132 \u0279\u01DDpu\u0131\u0186",
"item.create.copper_ingot": "\u0287obuI \u0279\u01DDddo\u0186",
"item.create.copper_nugget": "\u0287\u01DDbbnN \u0279\u01DDddo\u0186",
"item.create.copper_sheet": "\u0287\u01DD\u01DD\u0265S \u0279\u01DDddo\u0186",
@ -396,7 +398,6 @@
"item.create.empty_schematic": "\u0254\u0131\u0287\u0250\u026F\u01DD\u0265\u0254S \u028E\u0287d\u026F\u018E",
"item.create.extendo_grip": "d\u0131\u0279\u2141 opu\u01DD\u0287x\u018E",
"item.create.filter": "\u0279\u01DD\u0287\u05DF\u0131\u2132",
"item.create.fuel_pellet": "\u0287\u01DD\u05DF\u05DF\u01DD\u0500 \u05DF\u01DDn\u2132",
"item.create.furnace_minecart_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W \u01DD\u0254\u0250u\u0279n\u2132",
"item.create.goggles": "s\u01DD\u05DFbbo\u2141 s,\u0279\u01DD\u01DDu\u0131bu\u018E",
"item.create.golden_sheet": "\u0287\u01DD\u01DD\u0265S u\u01DDp\u05DFo\u2141",

View File

@ -380,11 +380,13 @@
"item.create.andesite_alloy": "Andesite Alloy",
"item.create.attribute_filter": "Attribute Filter",
"item.create.belt_connector": "Mechanical Belt",
"item.create.blaze_cake": "Blaze Cake",
"item.create.brass_hand": "Brass Hand",
"item.create.brass_ingot": "Brass Ingot",
"item.create.brass_nugget": "Brass Nugget",
"item.create.brass_sheet": "Brass Sheet",
"item.create.chromatic_compound": "Chromatic Compound",
"item.create.cinder_flour": "Cinder Flour",
"item.create.copper_ingot": "Copper Ingot",
"item.create.copper_nugget": "Copper Nugget",
"item.create.copper_sheet": "Copper Sheet",
@ -401,7 +403,6 @@
"item.create.empty_schematic": "Empty Schematic",
"item.create.extendo_grip": "Extendo Grip",
"item.create.filter": "Filter",
"item.create.fuel_pellet": "Fuel Pellet",
"item.create.furnace_minecart_contraption": "Furnace Minecart Contraption",
"item.create.goggles": "Engineer's Goggles",
"item.create.golden_sheet": "Golden Sheet",

View File

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 858",
"_": "Missing Localizations: 859",
"_": "->------------------------] Game Elements [------------------------<-",
@ -381,11 +381,13 @@
"item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy",
"item.create.attribute_filter": "UNLOCALIZED: Attribute Filter",
"item.create.belt_connector": "Mechanischer Riemen",
"item.create.blaze_cake": "UNLOCALIZED: Blaze Cake",
"item.create.brass_hand": "UNLOCALIZED: Brass Hand",
"item.create.brass_ingot": "UNLOCALIZED: Brass Ingot",
"item.create.brass_nugget": "UNLOCALIZED: Brass Nugget",
"item.create.brass_sheet": "UNLOCALIZED: Brass Sheet",
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_ingot": "UNLOCALIZED: Copper Ingot",
"item.create.copper_nugget": "UNLOCALIZED: Copper Nugget",
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
@ -402,7 +404,6 @@
"item.create.empty_schematic": "Leerer Bauplan",
"item.create.extendo_grip": "UNLOCALIZED: Extendo Grip",
"item.create.filter": "Filter",
"item.create.fuel_pellet": "UNLOCALIZED: Fuel Pellet",
"item.create.furnace_minecart_contraption": "UNLOCALIZED: Furnace Minecart Contraption",
"item.create.goggles": "UNLOCALIZED: Engineer's Goggles",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",

View File

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 482",
"_": "Missing Localizations: 483",
"_": "->------------------------] Game Elements [------------------------<-",
@ -381,11 +381,13 @@
"item.create.andesite_alloy": "Alliage d'andésite",
"item.create.attribute_filter": "Filtre d'attribut",
"item.create.belt_connector": "Tapis roulant",
"item.create.blaze_cake": "UNLOCALIZED: Blaze Cake",
"item.create.brass_hand": "Main",
"item.create.brass_ingot": "Lingot de laiton",
"item.create.brass_nugget": "Pépite de laiton",
"item.create.brass_sheet": "Plaques de laiton",
"item.create.chromatic_compound": "Composé chromatique",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_ingot": "Lingot de cuivre",
"item.create.copper_nugget": "Pépite de cuivre",
"item.create.copper_sheet": "Plaques de cuivre",
@ -402,7 +404,6 @@
"item.create.empty_schematic": "Schéma vide",
"item.create.extendo_grip": "UNLOCALIZED: Extendo Grip",
"item.create.filter": "Filtre",
"item.create.fuel_pellet": "UNLOCALIZED: Fuel Pellet",
"item.create.furnace_minecart_contraption": "UNLOCALIZED: Furnace Minecart Contraption",
"item.create.goggles": "Lunettes d'ingénieur",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",

View File

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 466",
"_": "Missing Localizations: 467",
"_": "->------------------------] Game Elements [------------------------<-",
@ -381,11 +381,13 @@
"item.create.andesite_alloy": "Lega di Andesite",
"item.create.attribute_filter": "Filtro Attributi",
"item.create.belt_connector": "Nastro Meccanico",
"item.create.blaze_cake": "UNLOCALIZED: Blaze Cake",
"item.create.brass_hand": "Mano",
"item.create.brass_ingot": "Lingotto di Ottone",
"item.create.brass_nugget": "Pepita di Ottone",
"item.create.brass_sheet": "Lamiera di Ottone",
"item.create.chromatic_compound": "Composto Cromatico",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_ingot": "Lingotto di Rame",
"item.create.copper_nugget": "Pepita di Rame",
"item.create.copper_sheet": "Lamiera di Rame",
@ -402,7 +404,6 @@
"item.create.empty_schematic": "Schematica Vuota",
"item.create.extendo_grip": "UNLOCALIZED: Extendo Grip",
"item.create.filter": "Filtro",
"item.create.fuel_pellet": "UNLOCALIZED: Fuel Pellet",
"item.create.furnace_minecart_contraption": "UNLOCALIZED: Furnace Minecart Contraption",
"item.create.goggles": "Occhiali da Ingegnere",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",

View File

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 461",
"_": "Missing Localizations: 462",
"_": "->------------------------] Game Elements [------------------------<-",
@ -381,11 +381,13 @@
"item.create.andesite_alloy": "安山岩合金",
"item.create.attribute_filter": "属性フィルター",
"item.create.belt_connector": "メカニカルベルト",
"item.create.blaze_cake": "UNLOCALIZED: Blaze Cake",
"item.create.brass_hand": "手",
"item.create.brass_ingot": "真鍮インゴット",
"item.create.brass_nugget": "真鍮ナゲット",
"item.create.brass_sheet": "真鍮シート",
"item.create.chromatic_compound": "色彩の化合物",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_ingot": "銅インゴット",
"item.create.copper_nugget": "銅塊",
"item.create.copper_sheet": "銅板",
@ -402,7 +404,6 @@
"item.create.empty_schematic": "空の概略図",
"item.create.extendo_grip": "UNLOCALIZED: Extendo Grip",
"item.create.filter": "フィルター",
"item.create.fuel_pellet": "UNLOCALIZED: Fuel Pellet",
"item.create.furnace_minecart_contraption": "UNLOCALIZED: Furnace Minecart Contraption",
"item.create.goggles": "エンジニアのゴーグル",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",

View File

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 466",
"_": "Missing Localizations: 467",
"_": "->------------------------] Game Elements [------------------------<-",
@ -381,11 +381,13 @@
"item.create.andesite_alloy": "안산암 합금",
"item.create.attribute_filter": "속성 필터 틀",
"item.create.belt_connector": "기계식 벨트",
"item.create.blaze_cake": "UNLOCALIZED: Blaze Cake",
"item.create.brass_hand": "황동 손",
"item.create.brass_ingot": "황동 주괴",
"item.create.brass_nugget": "황동 조각",
"item.create.brass_sheet": "황동 판",
"item.create.chromatic_compound": "색채 혼합물",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_ingot": "구리 주괴",
"item.create.copper_nugget": "구리 조각",
"item.create.copper_sheet": "구리 판",
@ -402,7 +404,6 @@
"item.create.empty_schematic": "빈 청사진",
"item.create.extendo_grip": "UNLOCALIZED: Extendo Grip",
"item.create.filter": "필터 틀",
"item.create.fuel_pellet": "UNLOCALIZED: Fuel Pellet",
"item.create.furnace_minecart_contraption": "UNLOCALIZED: Furnace Minecart Contraption",
"item.create.goggles": "엔지니어의 고글",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",

View File

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 796",
"_": "Missing Localizations: 797",
"_": "->------------------------] Game Elements [------------------------<-",
@ -381,11 +381,13 @@
"item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy",
"item.create.attribute_filter": "UNLOCALIZED: Attribute Filter",
"item.create.belt_connector": "Mechanische Transportband",
"item.create.blaze_cake": "UNLOCALIZED: Blaze Cake",
"item.create.brass_hand": "UNLOCALIZED: Brass Hand",
"item.create.brass_ingot": "UNLOCALIZED: Brass Ingot",
"item.create.brass_nugget": "Brons klompje",
"item.create.brass_sheet": "Brons Platen",
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_ingot": "Koperstaaf",
"item.create.copper_nugget": "Koper klompje",
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
@ -402,7 +404,6 @@
"item.create.empty_schematic": "Lege bouwtekening",
"item.create.extendo_grip": "UNLOCALIZED: Extendo Grip",
"item.create.filter": "Filter",
"item.create.fuel_pellet": "UNLOCALIZED: Fuel Pellet",
"item.create.furnace_minecart_contraption": "UNLOCALIZED: Furnace Minecart Contraption",
"item.create.goggles": "Ingenieur's Bril",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",

View File

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 865",
"_": "Missing Localizations: 866",
"_": "->------------------------] Game Elements [------------------------<-",
@ -381,11 +381,13 @@
"item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy",
"item.create.attribute_filter": "UNLOCALIZED: Attribute Filter",
"item.create.belt_connector": "Esteira Mecânica",
"item.create.blaze_cake": "UNLOCALIZED: Blaze Cake",
"item.create.brass_hand": "UNLOCALIZED: Brass Hand",
"item.create.brass_ingot": "UNLOCALIZED: Brass Ingot",
"item.create.brass_nugget": "UNLOCALIZED: Brass Nugget",
"item.create.brass_sheet": "UNLOCALIZED: Brass Sheet",
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_ingot": "UNLOCALIZED: Copper Ingot",
"item.create.copper_nugget": "UNLOCALIZED: Copper Nugget",
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
@ -402,7 +404,6 @@
"item.create.empty_schematic": "Esquema vazio",
"item.create.extendo_grip": "UNLOCALIZED: Extendo Grip",
"item.create.filter": "Filtro",
"item.create.fuel_pellet": "UNLOCALIZED: Fuel Pellet",
"item.create.furnace_minecart_contraption": "UNLOCALIZED: Furnace Minecart Contraption",
"item.create.goggles": "UNLOCALIZED: Engineer's Goggles",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",

View File

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 859",
"_": "Missing Localizations: 860",
"_": "->------------------------] Game Elements [------------------------<-",
@ -381,11 +381,13 @@
"item.create.andesite_alloy": "UNLOCALIZED: Andesite Alloy",
"item.create.attribute_filter": "UNLOCALIZED: Attribute Filter",
"item.create.belt_connector": "Механическая лента",
"item.create.blaze_cake": "UNLOCALIZED: Blaze Cake",
"item.create.brass_hand": "UNLOCALIZED: Brass Hand",
"item.create.brass_ingot": "UNLOCALIZED: Brass Ingot",
"item.create.brass_nugget": "UNLOCALIZED: Brass Nugget",
"item.create.brass_sheet": "UNLOCALIZED: Brass Sheet",
"item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_ingot": "UNLOCALIZED: Copper Ingot",
"item.create.copper_nugget": "UNLOCALIZED: Copper Nugget",
"item.create.copper_sheet": "UNLOCALIZED: Copper Sheet",
@ -402,7 +404,6 @@
"item.create.empty_schematic": "Пустая схема",
"item.create.extendo_grip": "UNLOCALIZED: Extendo Grip",
"item.create.filter": "Фильтр",
"item.create.fuel_pellet": "UNLOCALIZED: Fuel Pellet",
"item.create.furnace_minecart_contraption": "UNLOCALIZED: Furnace Minecart Contraption",
"item.create.goggles": "UNLOCALIZED: Engineer's Goggles",
"item.create.golden_sheet": "UNLOCALIZED: Golden Sheet",

View File

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 146",
"_": "Missing Localizations: 147",
"_": "->------------------------] Game Elements [------------------------<-",
@ -381,11 +381,13 @@
"item.create.andesite_alloy": "安山合金",
"item.create.attribute_filter": "属性过滤器",
"item.create.belt_connector": "传送带",
"item.create.blaze_cake": "UNLOCALIZED: Blaze Cake",
"item.create.brass_hand": "黄铜手部零件",
"item.create.brass_ingot": "黄铜锭",
"item.create.brass_nugget": "黄铜粒",
"item.create.brass_sheet": "黄铜板",
"item.create.chromatic_compound": "异彩化合物",
"item.create.cinder_flour": "UNLOCALIZED: Cinder Flour",
"item.create.copper_ingot": "铜锭",
"item.create.copper_nugget": "铜粒",
"item.create.copper_sheet": "铜板",
@ -402,7 +404,6 @@
"item.create.empty_schematic": "空白蓝图",
"item.create.extendo_grip": "伸缩机械手",
"item.create.filter": "过滤器",
"item.create.fuel_pellet": "UNLOCALIZED: Fuel Pellet",
"item.create.furnace_minecart_contraption": "装配过的动力矿车",
"item.create.goggles": "工程师护目镜",
"item.create.golden_sheet": "金板",

View File

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

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "create:item/cinder_flour"
}
}

View File

@ -0,0 +1,24 @@
{
"type": "create:compacting",
"ingredients": [
{
"tag": "forge:eggs"
},
{
"item": "minecraft:sugar"
},
{
"item": "create:cinder_flour"
},
{
"fluidTag": "minecraft:lava",
"amount": 125
}
],
"results": [
{
"item": "create:blaze_cake",
"count": 1
}
]
}

View File

@ -1,14 +0,0 @@
{
"type": "create:compacting",
"ingredients": [
{
"item": "minecraft:ice"
}
],
"results": [
{
"fluid": "minecraft:water",
"amount": 250
}
]
}

View File

@ -1,18 +0,0 @@
{
"type": "create:compacting",
"ingredients": [
{
"item": "minecraft:cobblestone"
},
{
"fluidTag": "minecraft:lava",
"amount": 250
}
],
"results": [
{
"item": "create:gabbro",
"count": 1
}
]
}

View File

@ -0,0 +1,20 @@
{
"type": "create:crushing",
"ingredients": [
{
"item": "minecraft:netherrack"
}
],
"results": [
{
"item": "create:cinder_flour",
"count": 1
},
{
"item": "create:cinder_flour",
"count": 1,
"chance": 0.5
}
],
"processingTime": 250
}

View File

@ -7,7 +7,7 @@
},
{
"fluidTag": "minecraft:lava",
"amount": 250
"amount": 25
}
],
"results": [

View File

@ -0,0 +1,15 @@
{
"type": "create:mixing",
"ingredients": [
{
"tag": "forge:cobblestone"
}
],
"results": [
{
"fluid": "minecraft:lava",
"amount": 25
}
],
"heatRequirement": "superheated"
}

View File

@ -82,12 +82,15 @@ public class AllItems {
ZINC_INGOT = taggedIngredient("zinc_ingot", forgeItemTag("ingots/zinc"), CREATE_INGOTS.tag),
BRASS_INGOT = taggedIngredient("brass_ingot", forgeItemTag("ingots/brass"), CREATE_INGOTS.tag),
WHEAT_FLOUR = ingredient("wheat_flour"), DOUGH = ingredient("dough"),
WHEAT_FLOUR = ingredient("wheat_flour"), DOUGH = ingredient("dough"), CINDER_FLOUR = ingredient("cinder_flour"),
POWDERED_OBSIDIAN = ingredient("powdered_obsidian"), ROSE_QUARTZ = ingredient("rose_quartz"),
POLISHED_ROSE_QUARTZ = ingredient("polished_rose_quartz"), PROPELLER = ingredient("propeller"),
WHISK = ingredient("whisk"), BRASS_HAND = ingredient("brass_hand"),
CRAFTER_SLOT_COVER = ingredient("crafter_slot_cover");
public static final ItemEntry<CombustibleItem> BLAZE_CAKE = REGISTRATE.item("blaze_cake", CombustibleItem::new)
.register();
public static final ItemEntry<ChromaticCompoundItem> CHROMATIC_COMPOUND =
REGISTRATE.item("chromatic_compound", ChromaticCompoundItem::new)
.properties(p -> p.rarity(Rarity.UNCOMMON))
@ -187,10 +190,6 @@ public class AllItems {
REGISTRATE.item("tree_fertilizer", TreeFertilizerItem::new)
.register();
public static final ItemEntry<CombustibleItem> FUEL_PELLET = REGISTRATE.item("fuel_pellet", CombustibleItem::new)
// .onRegister(item -> item.setBurnTime(2048))
.register();
public static final ItemEntry<BlockzapperItem> BLOCKZAPPER =
REGISTRATE.item("handheld_blockzapper", BlockzapperItem::new)
.transform(CreateRegistrate.customRenderedItem(() -> BlockzapperModel::new))

View File

@ -29,11 +29,14 @@ import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateSc
import com.simibubi.create.content.schematics.block.SchematicannonScreen;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.config.CRecipes;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.utility.Lang;
import mezz.jei.api.IModPlugin;
import mezz.jei.api.JeiPlugin;
import mezz.jei.api.ingredients.IIngredientType;
import mezz.jei.api.registration.IGuiHandlerRegistration;
import mezz.jei.api.registration.IModIngredientRegistration;
import mezz.jei.api.registration.IRecipeCatalystRegistration;
import mezz.jei.api.registration.IRecipeCategoryRegistration;
import mezz.jei.api.registration.IRecipeRegistration;
@ -53,6 +56,15 @@ import net.minecraft.util.text.TextFormatting;
public class CreateJEI implements IModPlugin {
private static ResourceLocation ID = new ResourceLocation(Create.ID, "jei_plugin");
public static final IIngredientType<FluidIngredient> FLUIDS = new IIngredientType<FluidIngredient>() {
@Override
public Class<? extends FluidIngredient> getIngredientClass() {
return FluidIngredient.class;
}
};
private MillingCategory millingCategory;
private CrushingCategory crushingCategory;
private SplashingCategory splashingCategory;

View File

@ -2,12 +2,14 @@ package com.simibubi.create.compat.jei.category;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import com.mojang.blaze3d.matrix.MatrixStack;
import org.apache.commons.lang3.mutable.MutableInt;
import com.simibubi.create.content.contraptions.processing.BasinRecipe;
import com.simibubi.create.content.contraptions.processing.HeatCondition;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.item.ItemHelper;
import com.simibubi.create.foundation.utility.Pair;
@ -15,11 +17,13 @@ import com.simibubi.create.foundation.utility.Pair;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.IRecipeLayout;
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.ingredients.IIngredients;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fluids.FluidStack;
public class BasinCategory extends CreateRecipeCategory<BasinRecipe> {
@ -35,24 +39,44 @@ public class BasinCategory extends CreateRecipeCategory<BasinRecipe> {
@Override
public void setIngredients(BasinRecipe recipe, IIngredients ingredients) {
ingredients.setInputIngredients(recipe.getIngredients());
ingredients.setInputLists(VanillaTypes.FLUID, recipe.getFluidIngredients()
.stream()
.map(FluidIngredient::getMatchingFluidStacks)
.collect(Collectors.toList()));
if (!recipe.getRollableResults()
.isEmpty())
ingredients.setOutput(VanillaTypes.ITEM, recipe.getRecipeOutput());
if (!recipe.getFluidResults()
.isEmpty())
ingredients.setOutputs(VanillaTypes.FLUID, recipe.getFluidResults());
}
@Override
public void setRecipe(IRecipeLayout recipeLayout, BasinRecipe recipe, IIngredients ingredients) {
public void setRecipe(IRecipeLayout recipeLayout, BasinRecipe recipe, IIngredients iingredients) {
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
NonNullList<Ingredient> recipeIngredients = recipe.getIngredients();
List<Pair<Ingredient, MutableInt>> actualIngredients = ItemHelper.condenseIngredients(recipeIngredients);
IGuiFluidStackGroup fluidStacks = recipeLayout.getFluidStacks();
int size = actualIngredients.size();
ItemStack itemOutput = recipe.getRollableResultsAsItemStacks()
.isEmpty() ? ItemStack.EMPTY
: recipe.getRollableResultsAsItemStacks()
.get(0);
FluidStack fluidOutput = recipe.getFluidResults()
.isEmpty() ? FluidStack.EMPTY
: recipe.getFluidResults()
.get(0);
NonNullList<FluidIngredient> fluidIngredients = recipe.getFluidIngredients();
List<Pair<Ingredient, MutableInt>> ingredients = ItemHelper.condenseIngredients(recipe.getIngredients());
int size = ingredients.size() + fluidIngredients.size();
int xOffset = size < 3 ? (3 - size) * 19 / 2 : 0;
int yOffset = recipe.getRequiredHeat() != HeatCondition.NONE ? 30 : 10;
int i;
for (i = 0; i < actualIngredients.size(); i++) {
for (i = 0; i < ingredients.size(); i++) {
itemStacks.init(i, true, 16 + xOffset + (i % 3) * 19, 50 - (i / 3) * 19 + yOffset);
List<ItemStack> stacks = new ArrayList<>();
Pair<Ingredient, MutableInt> pair = actualIngredients.get(i);
Pair<Ingredient, MutableInt> pair = ingredients.get(i);
Ingredient ingredient = pair.getFirst();
MutableInt amount = pair.getSecond();
@ -65,16 +89,33 @@ public class BasinCategory extends CreateRecipeCategory<BasinRecipe> {
itemStacks.set(i, stacks);
}
int j;
for (j = 0; j < fluidIngredients.size(); j++) {
int i2 = i + j;
fluidStacks.init(j, true, 17 + xOffset + (i2 % 3) * 19, 51 - (i2 / 3) * 19 + yOffset);
List<FluidStack> stacks = fluidIngredients.get(j)
.getMatchingFluidStacks();
fluidStacks.set(j, stacks);
}
if (!itemOutput.isEmpty()) {
itemStacks.init(i, false, 141, 50 + yOffset);
itemStacks.set(i, recipe.getRecipeOutput()
.getStack());
yOffset -= 19;
}
if (!fluidOutput.isEmpty()) {
fluidStacks.init(j, false, 142, 51 + yOffset);
fluidStacks.set(j, fluidOutput);
}
}
@Override
public void draw(BasinRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
List<Pair<Ingredient, MutableInt>> actualIngredients = ItemHelper.condenseIngredients(recipe.getIngredients());
int size = actualIngredients.size();
int size = actualIngredients.size() + recipe.getFluidIngredients().size();
int xOffset = size < 3 ? (3 - size) * 19 / 2 : 0;
HeatCondition requiredHeat = recipe.getRequiredHeat();
int yOffset = requiredHeat != HeatCondition.NONE ? 30 : 10;

View File

@ -51,7 +51,9 @@ public class BasinRecipe extends ProcessingRecipe<SmartInventory> {
if (availableItems == null || availableFluids == null)
return false;
HeatLevel heat = basin.getHeatLevel();
HeatLevel heat = BasinTileEntity.getHeatLevelOf(basin.getWorld()
.getBlockState(basin.getPos()
.down(1)));
if (isBasinRecipe && !((BasinRecipe) recipe).getRequiredHeat()
.testBlazeBurner(heat))
return false;
@ -150,8 +152,8 @@ public class BasinRecipe extends ProcessingRecipe<SmartInventory> {
public boolean convertedRecipe;
public static BasinRecipe convert(IRecipe<?> recipe) {
BasinRecipe basinRecipe = new ProcessingRecipeBuilder<>(BasinRecipe::new, recipe.getId())
.withItemIngredients(recipe.getIngredients())
BasinRecipe basinRecipe =
new ProcessingRecipeBuilder<>(BasinRecipe::new, recipe.getId()).withItemIngredients(recipe.getIngredients())
.withSingleItemOutput(recipe.getRecipeOutput())
.build();
basinRecipe.convertedRecipe = true;

View File

@ -33,7 +33,7 @@ public class BasinRenderer extends SmartTileEntityRenderer<BasinTileEntity> {
int light, int overlay) {
super.renderSafe(basin, partialTicks, ms, buffer, light, overlay);
float fluidSurface = renderFluids(basin, partialTicks, ms, buffer, light, overlay);
renderFluids(basin, partialTicks, ms, buffer, light, overlay);
ms.push();
BlockPos pos = basin.getPos();

View File

@ -27,8 +27,8 @@ import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.capabilities.Capability;
@ -144,7 +144,8 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt
BlockPos toUpdate = pos.up()
.offset(offset);
BlockState stateToUpdate = world.getBlockState(toUpdate);
if (stateToUpdate.getBlock() instanceof BasinBlock && stateToUpdate.get(BasinBlock.FACING) == offset.getOpposite()) {
if (stateToUpdate.getBlock() instanceof BasinBlock
&& stateToUpdate.get(BasinBlock.FACING) == offset.getOpposite()) {
TileEntity te = world.getTileEntity(toUpdate);
if (te instanceof BasinTileEntity)
((BasinTileEntity) te).contentsChanged = true;
@ -256,8 +257,7 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt
outputInventory.deserializeNBT(compound.getCompound("OutputItems"));
}
public HeatLevel getHeatLevel() {
BlockState state = world.getBlockState(pos.down(1));
public static HeatLevel getHeatLevelOf(BlockState state) {
if (BlockHelper.hasBlockStateProperty(state, BlazeBurnerBlock.HEAT_LEVEL))
return state.get(BlazeBurnerBlock.HEAT_LEVEL);
return AllTags.AllBlockTags.FAN_HEATERS.matches(state) ? HeatLevel.SMOULDERING : HeatLevel.NONE;

View File

@ -7,6 +7,7 @@ import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.processing.BasinTileEntity;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.utility.Lang;
@ -61,6 +62,18 @@ public class BlazeBurnerBlock extends Block implements ITE<BlazeBurnerTileEntity
builder.add(HEAT_LEVEL);
}
@Override
public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState p_220082_4_,
boolean p_220082_5_) {
if (world.isRemote)
return;
TileEntity tileEntity = world.getTileEntity(pos.up());
if (!(tileEntity instanceof BasinTileEntity))
return;
BasinTileEntity basin = (BasinTileEntity) tileEntity;
basin.notifyChangeOfContents();
}
@Override
public boolean hasTileEntity(BlockState state) {
return state.get(HEAT_LEVEL)
@ -96,7 +109,8 @@ public class BlazeBurnerBlock extends Block implements ITE<BlazeBurnerTileEntity
return ActionResultType.SUCCESS;
}
public static boolean tryInsert(BlockState state, World world, BlockPos pos, ItemStack stack, boolean forceOverflow, boolean simulate) {
public static boolean tryInsert(BlockState state, World world, BlockPos pos, ItemStack stack, boolean forceOverflow,
boolean simulate) {
if (!state.hasTileEntity())
return false;
@ -143,13 +157,6 @@ public class BlazeBurnerBlock extends Block implements ITE<BlazeBurnerTileEntity
.ordinal() * 4 - 1, 0, 15);
}
static void setBlazeLevel(World world, BlockPos pos, HeatLevel blazeLevel) {
BlockState blockState = world.getBlockState(pos);
if (!(blockState.getBlock() instanceof BlazeBurnerBlock))
return;
world.setBlockState(pos, blockState.with(HEAT_LEVEL, blazeLevel));
}
public static HeatLevel getHeatLevelOf(BlockState blockState) {
return blockState.contains(BlazeBurnerBlock.HEAT_LEVEL) ? blockState.get(BlazeBurnerBlock.HEAT_LEVEL)
: HeatLevel.NONE;

View File

@ -0,0 +1,58 @@
package com.simibubi.create.content.contraptions.processing.burner;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerTileEntity.FuelType;
import net.minecraft.entity.projectile.EggEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.ProjectileImpactEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
@Mod.EventBusSubscriber
public class BlazeBurnerHandler {
@SubscribeEvent
public static void thrownEggsGetEatenByBurner(ProjectileImpactEvent.Throwable event) {
if (!(event.getThrowable() instanceof EggEntity))
return;
if (event.getRayTraceResult()
.getType() != RayTraceResult.Type.BLOCK)
return;
TileEntity tile = event.getThrowable().world.getTileEntity(new BlockPos(event.getRayTraceResult()
.getHitVec()));
if (!(tile instanceof BlazeBurnerTileEntity)) {
return;
}
event.setCanceled(true);
event.getThrowable()
.setMotion(Vec3d.ZERO);
event.getThrowable()
.remove();
World world = event.getThrowable().world;
if (world.isRemote)
return;
BlazeBurnerTileEntity heater = (BlazeBurnerTileEntity) tile;
if (heater.activeFuel != FuelType.SPECIAL) {
heater.activeFuel = FuelType.NORMAL;
heater.remainingBurnTime =
MathHelper.clamp(heater.remainingBurnTime + 80, 0, BlazeBurnerTileEntity.maxHeatCapacity);
heater.updateBlockState();
heater.notifyUpdate();
}
world.playSound(null, heater.getPos(), AllSoundEvents.BLAZE_MUNCH.get(), SoundCategory.BLOCKS, .5F, 1F);
}
}

View File

@ -4,6 +4,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
@ -22,7 +23,7 @@ public class BlazeBurnerRenderer extends SafeTileEntityRenderer<BlazeBurnerTileE
@Override
protected void renderSafe(BlazeBurnerTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
int light, int overlay) {
HeatLevel heatLevel = te.getHeatLevel();
HeatLevel heatLevel = te.getHeatLevelFromBlock();
if (heatLevel == HeatLevel.NONE)
return;
@ -31,7 +32,7 @@ public class BlazeBurnerRenderer extends SafeTileEntityRenderer<BlazeBurnerTileE
AllBlockPartials blazeModel = AllBlockPartials.BLAZES.get(heatLevel);
SuperByteBuffer blazeBuffer = blazeModel.renderOn(te.getBlockState());
blazeBuffer.rotateCentered(Direction.UP, (float) Math.toRadians(-te.rot + (te.speed * partialTicks)));
blazeBuffer.rotateCentered(Direction.UP, AngleHelper.rad(te.headAngle.getValue(partialTicks)));
blazeBuffer.translate(0, offset, 0);
blazeBuffer.light(0xF000F0)
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));

View File

@ -4,56 +4,46 @@ import java.util.List;
import java.util.Random;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.content.contraptions.particle.CubeParticleData;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.ColorHelper;
import com.simibubi.create.foundation.utility.LerpedFloat;
import com.simibubi.create.foundation.utility.LerpedFloat.Chaser;
import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.entity.projectile.EggEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.particles.IParticleData;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.event.entity.ProjectileImpactEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
@Mod.EventBusSubscriber
public class BlazeBurnerTileEntity extends SmartTileEntity {
private final static int[][] heatParticleColors = {
{0x3B141A, 0x47141A, 0x7A3B24, 0x854D26},
{0x2A0103, 0x741B0A, 0xC38246, 0xCCBD78},
{0x630B03, 0x8B3503, 0xBC8200, 0xCCC849},
{0x1C6378, 0x4798B5, 0x4DA6C0, 0xBAC8CE}
};
private final static int[][] heatParticleColors =
{ { 0x3B141A, 0x47141A, 0x7A3B24, 0x854D26 }, { 0x2A0103, 0x741B0A, 0xC38246, 0xCCBD78 },
{ 0x630B03, 0x8B3503, 0xBC8200, 0xCCC849 }, { 0x1C6378, 0x4798B5, 0x4DA6C0, 0xBAC8CE } };
private static final int maxHeatCapacity = 10000;
public static final int maxHeatCapacity = 10000;
private int remainingBurnTime;
private FuelType activeFuel;
public static enum FuelType {
NONE, NORMAL, SPECIAL
}
// Rendering state
float rot, speed;
int remainingBurnTime;
FuelType activeFuel;
LerpedFloat headAngle;
public BlazeBurnerTileEntity(TileEntityType<? extends BlazeBurnerTileEntity> tileEntityTypeIn) {
super(tileEntityTypeIn);
activeFuel = FuelType.NONE;
remainingBurnTime = 0;
setLazyTickRate(40);
headAngle = LerpedFloat.angular();
}
@Override
@ -61,93 +51,38 @@ public class BlazeBurnerTileEntity extends SmartTileEntity {
super.tick();
if (world.isRemote) {
tickRotation();
}
spawnParticles(getHeatLevel(), 1);
if (remainingBurnTime <= 0) {
spawnParticles(getHeatLevelFromBlock(), 1);
return;
}
if (remainingBurnTime > 0)
remainingBurnTime--;
if (remainingBurnTime == 0)
if (activeFuel == FuelType.NORMAL)
updateBlockState();
if (remainingBurnTime > 0)
return;
if (activeFuel == FuelType.SPECIAL) {
activeFuel = FuelType.NORMAL;
remainingBurnTime = maxHeatCapacity / 2;
updateHeatLevel();
} else {
} else
activeFuel = FuelType.NONE;
updateHeatLevel();
updateBlockState();
notifyUpdate();
}
markDirty();
}
private static final float MAX_ROT_SPEED = 5;
private static final float ROT_DAMPING = 15;
private void tickRotation() {
ClientPlayerEntity player = Minecraft.getInstance().player;
Angle target;
if (player == null) {
target = new Angle(360, 0);
} else {
float target = 0;
if (player != null) {
double dx = player.getX() - (getPos().getX() + 0.5);
double dz = player.getZ() - (getPos().getZ() + 0.5);
target = new Angle(360, (float) (MathHelper.atan2(dz, dx) * 180.0 / Math.PI + 90));
target = AngleHelper.deg(-MathHelper.atan2(dz, dx)) - 90;
}
Angle current = new Angle(360, rot);
float diff = new Angle(180, current.get() - target.get()).get();
if (diff > 0.1 || diff < -0.1) {
// Inverse function https://www.desmos.com/calculator/kiaberb6sf
speed = MAX_ROT_SPEED + (-MAX_ROT_SPEED / ((Math.abs(diff) / ROT_DAMPING) + 1));
if (diff > 0) {
current.add(-Math.min(diff, speed));
speed = Math.min(diff, speed);
} else {
current.add(Math.min(-diff, speed));
speed = Math.min(-diff, -speed);
}
} else {
speed = 0;
}
rot = current.get();
}
// From EnderIO with <3
private static class Angle {
private final float offset;
private float a;
Angle(float offset, float a) {
this.offset = offset;
set(a);
}
void set(float a) {
while (a >= offset) {
a -= 360;
}
while (a < (offset - 360)) {
a += 360;
}
this.a = a;
}
void add(float b) {
set(a + b);
}
float get() {
return a;
}
}
@Override
public void lazyTick() {
super.lazyTick();
//using lazy ticks to transition between kindled and fading, this doesn't need to happen instantly at the threshold
updateHeatLevel();
target = headAngle.getValue() + AngleHelper.getShortestAngleDiff(headAngle.getValue(), target);
headAngle.chase(target, .25f, Chaser.exp(5));
headAngle.tickChaser();
}
@Override
@ -168,148 +103,125 @@ public class BlazeBurnerTileEntity extends SmartTileEntity {
}
/**
* @return true if the heater updated its burn time and a item should be consumed
* @return true if the heater updated its burn time and a item should be
* consumed
*/
boolean tryUpdateFuel(ItemStack itemStack, boolean forceOverflow, boolean simulate) {
FuelType newFuel = FuelType.NONE;
int burnTick = ForgeHooks.getBurnTime(itemStack);
if (burnTick > 0)
int newBurnTime = ForgeHooks.getBurnTime(itemStack);
if (newBurnTime > 0)
newFuel = FuelType.NORMAL;
if (itemStack.getItem() == AllItems.FUEL_PELLET.get()) {
burnTick = 1000;
if (AllItems.BLAZE_CAKE.isIn(itemStack)) {
newBurnTime = 1000;
newFuel = FuelType.SPECIAL;
}
if (newFuel == FuelType.NONE || newFuel.ordinal() < activeFuel.ordinal())
if (newFuel == FuelType.NONE)
return false;
if (newFuel.ordinal() < activeFuel.ordinal())
return false;
if (newFuel == activeFuel) {
if (remainingBurnTime + burnTick > maxHeatCapacity && !forceOverflow)
if (remainingBurnTime + newBurnTime > maxHeatCapacity && !forceOverflow)
return false;
if (simulate)
return true;
remainingBurnTime = MathHelper.clamp(remainingBurnTime + burnTick, 0, maxHeatCapacity);
} else {
if (simulate)
return true;
activeFuel = newFuel;
remainingBurnTime = burnTick;
newBurnTime = MathHelper.clamp(remainingBurnTime + newBurnTime, 0, maxHeatCapacity);
}
updateHeatLevel();
HeatLevel level = getHeatLevel();
if (simulate)
return true;
activeFuel = newFuel;
remainingBurnTime = newBurnTime;
if (world.isRemote) {
HeatLevel level = getHeatLevelFromFuelType(newFuel);
for (int i = 0; i < 20; i++)
spawnParticles(level, 1 + (.25 * (i / 4)));
return true;
}
public BlazeBurnerBlock.HeatLevel getHeatLevel() {
updateBlockState();
return true;
}
public BlazeBurnerBlock.HeatLevel getHeatLevelFromBlock() {
return BlazeBurnerBlock.getHeatLevelOf(getBlockState());
}
private void updateHeatLevel() {
public void updateBlockState() {
HeatLevel inBlockState = getHeatLevelFromBlock();
HeatLevel inTE = getHeatLevelFromFuelType(activeFuel);
if (inBlockState == inTE)
return;
world.setBlockState(pos, getBlockState().with(BlazeBurnerBlock.HEAT_LEVEL, inTE));
notifyUpdate();
}
protected HeatLevel getHeatLevelFromFuelType(FuelType fuel) {
HeatLevel level = HeatLevel.SMOULDERING;
switch (activeFuel) {
case SPECIAL:
BlazeBurnerBlock.setBlazeLevel(world, pos, BlazeBurnerBlock.HeatLevel.SEETHING);
level = HeatLevel.SEETHING;
break;
case NORMAL:
boolean lowPercent = (double) remainingBurnTime / maxHeatCapacity < 0.1;
BlazeBurnerBlock.setBlazeLevel(world, pos, lowPercent ? BlazeBurnerBlock.HeatLevel.FADING : BlazeBurnerBlock.HeatLevel.KINDLED);
level = lowPercent ? HeatLevel.FADING : HeatLevel.KINDLED;
break;
default:
case NONE:
BlazeBurnerBlock.setBlazeLevel(world, pos, BlazeBurnerBlock.HeatLevel.SMOULDERING);
break;
}
return level;
}
private void spawnParticles(BlazeBurnerBlock.HeatLevel heatLevel, double burstMult) {
private void spawnParticles(HeatLevel heatLevel, double burstMult) {
if (world == null)
return;
if (heatLevel == BlazeBurnerBlock.HeatLevel.NONE)
return;
Random r = world.getRandom();
if (heatLevel == BlazeBurnerBlock.HeatLevel.SMOULDERING) {
switch (heatLevel) {
case SMOULDERING:
if (r.nextDouble() > 0.25)
return;
Vector3d color = randomColor(heatLevel);
spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.03F, 15, false), 0.015 * burstMult, 0.1 * burstMult);
} else if (heatLevel == BlazeBurnerBlock.HeatLevel.FADING) {
spawnParticle(heatLevel, 0.03F, 15, false, 0.015 * burstMult, 0.1 * burstMult);
break;
case FADING:
if (r.nextDouble() > 0.5)
return;
Vector3d color = randomColor(heatLevel);
spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.035F, 18, false), 0.03 * burstMult, 0.15 * burstMult);
} else if (heatLevel == BlazeBurnerBlock.HeatLevel.KINDLED) {
Vector3d color = randomColor(heatLevel);
spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.04F, 35, true), 0.05 * burstMult, 0.2 * burstMult);
}else if (heatLevel == BlazeBurnerBlock.HeatLevel.SEETHING) {
spawnParticle(heatLevel, 0.035F, 18, false, 0.03 * burstMult, 0.15 * burstMult);
break;
case KINDLED:
spawnParticle(heatLevel, 0.04F, 35, true, 0.05 * burstMult, 0.2 * burstMult);
break;
case SEETHING:
for (int i = 0; i < 2; i++) {
if (r.nextDouble() > 0.6)
return;
Vector3d color = randomColor(heatLevel);
spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.045F, 35, true), 0.06 * burstMult, 0.22 * burstMult);
spawnParticle(heatLevel, 0.045F, 35, true, 0.06 * burstMult, 0.22 * burstMult);
}
break;
default:
break;
}
}
private void spawnParticle(IParticleData particleData, double speed, double spread) {
private void spawnParticle(HeatLevel heatLevel, float scale, int avgAge, boolean hot, double speed, double spread) {
Random random = world.getRandom();
Vector3d color = randomColor(heatLevel);
world.addOptionalParticle(
particleData,
new CubeParticleData((float) color.x, (float) color.y, (float) color.z, scale, avgAge, hot),
(double) pos.getX() + 0.5D + (random.nextDouble() * 2.0 - 1D) * spread,
(double) pos.getY() + 0.6D + (random.nextDouble() / 4.0),
(double) pos.getZ() + 0.5D + (random.nextDouble() * 2.0 - 1D) * spread,
0.0D,
speed,
0.0D);
(double) pos.getZ() + 0.5D + (random.nextDouble() * 2.0 - 1D) * spread, 0.0D, speed, 0.0D);
}
private static Vector3d randomColor(BlazeBurnerBlock.HeatLevel heatLevel) {
if (heatLevel == BlazeBurnerBlock.HeatLevel.NONE)
return new Vector3d(0,0,0);
return ColorHelper.getRGB(heatParticleColors[heatLevel.ordinal()-1][(int) (Math.random()*4)]);
return new Vector3d(0, 0, 0);
return ColorHelper.getRGB(heatParticleColors[heatLevel.ordinal() - 1][(int) (Math.random() * 4)]);
}
@SubscribeEvent
public static void eggsGetEaten(ProjectileImpactEvent.Throwable event) {
if (!(event.getThrowable() instanceof EggEntity))
return;
if (event.getRayTraceResult().getType() != RayTraceResult.Type.BLOCK)
return;
TileEntity tile = event.getThrowable().world.getTileEntity(new BlockPos(event.getRayTraceResult().getHitVec()));
if (!(tile instanceof BlazeBurnerTileEntity)) {
return;
}
event.setCanceled(true);
event.getThrowable().setMotion(Vector3d.ZERO);
event.getThrowable().remove();
BlazeBurnerTileEntity heater = (BlazeBurnerTileEntity) tile;
if (heater.activeFuel != FuelType.SPECIAL) {
heater.activeFuel = FuelType.NORMAL;
heater.remainingBurnTime = MathHelper.clamp(heater.remainingBurnTime + 80, 0, maxHeatCapacity);
heater.markDirty();
}
World world = event.getThrowable().world;
if (world.isRemote)
return;
world.playSound(null, heater.getPos(), AllSoundEvents.BLAZE_MUNCH.get(), SoundCategory.BLOCKS, .5F, 1F);
}
private enum FuelType {
NONE,
NORMAL,
SPECIAL
}
}

View File

@ -1,25 +1,23 @@
package com.simibubi.create.foundation.data.recipe;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.palettes.AllPaletteBlocks;
import net.minecraft.data.DataGenerator;
import net.minecraft.fluid.Fluids;
import net.minecraft.item.Items;
import net.minecraft.tags.FluidTags;
import net.minecraftforge.common.Tags;
public class CompactingRecipeGen extends ProcessingRecipeGen {
GeneratedRecipe
TEMPGABBRO = create("temp_gabbro", b -> b
.require(Items.COBBLESTONE)
.require(FluidTags.LAVA, 250)
.output(AllPaletteBlocks.GABBRO.get(), 1)),
ICE = create("ice", b -> b
.require(Items.ICE)
.output(Fluids.WATER, 250))
BLAZE_CAKE = create("blaze_cake", b -> b
.require(Tags.Items.EGGS)
.require(Items.SUGAR)
.require(AllItems.CINDER_FLOUR.get())
.require(FluidTags.LAVA, 125)
.output(AllItems.BLAZE_CAKE.get(), 1))
;

View File

@ -125,7 +125,11 @@ public class CrushingRecipeGen extends ProcessingRecipeGen {
SAND = create(() -> Blocks.SAND, b -> b.duration(150)
.output(AllPaletteBlocks.LIMESAND.get())
.output(.5f, AllPaletteBlocks.LIMESAND.get())
.output(.05f, Items.BONE_MEAL))
.output(.05f, Items.BONE_MEAL)),
NETHERRACK = create(() -> Blocks.NETHERRACK, b -> b.duration(250)
.output(AllItems.CINDER_FLOUR.get())
.output(.5f, AllItems.CINDER_FLOUR.get()))
;

View File

@ -7,6 +7,7 @@ import com.simibubi.create.content.contraptions.processing.HeatCondition;
import net.minecraft.block.Blocks;
import net.minecraft.data.DataGenerator;
import net.minecraft.fluid.Fluids;
import net.minecraft.item.Items;
import net.minecraft.tags.FluidTags;
import net.minecraft.tags.ItemTags;
@ -16,11 +17,14 @@ public class MixingRecipeGen extends ProcessingRecipeGen {
GeneratedRecipe
TEMPCOBBLE = create("temp_cobble", b -> b
.require(FluidTags.WATER, 250)
.require(FluidTags.LAVA, 250)
TEMPCOBBLE = create("temp_cobble", b -> b.require(FluidTags.WATER, 250)
.require(FluidTags.LAVA, 25)
.output(Blocks.COBBLESTONE, 1)),
TEMP_LAVA = create("temp_lava", b -> b.require(Tags.Items.COBBLESTONE)
.output(Fluids.LAVA, 25)
.requiresHeat(HeatCondition.SUPERHEATED)),
BRASS_INGOT = create("brass_ingot", b -> b.require(I.copper())
.require(I.zinc())
.output(AllItems.BRASS_INGOT.get(), 2)

View File

@ -1,11 +1,14 @@
package com.simibubi.create.foundation.fluid;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import com.google.common.collect.ImmutableList;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@ -25,6 +28,8 @@ public abstract class FluidIngredient implements Predicate<FluidStack> {
public static final FluidIngredient EMPTY = new FluidStackIngredient();
public List<FluidStack> matchingFluidStacks;
public static FluidIngredient fromTag(ITag.INamedTag<Fluid> tag, int amount) {
FluidTagIngredient ingredient = new FluidTagIngredient();
ingredient.tag = tag;
@ -51,10 +56,18 @@ public abstract class FluidIngredient implements Predicate<FluidStack> {
protected abstract void writeInternal(JsonObject json);
protected abstract List<FluidStack> determineMatchingFluidStacks();
public int getRequiredAmount() {
return amountRequired;
}
public List<FluidStack> getMatchingFluidStacks() {
if (matchingFluidStacks != null)
return matchingFluidStacks;
return matchingFluidStacks = determineMatchingFluidStacks();
}
@Override
public boolean test(FluidStack t) {
if (t == null)
@ -156,6 +169,11 @@ public abstract class FluidIngredient implements Predicate<FluidStack> {
json.add("nbt", new JsonParser().parse(tagToMatch.toString()));
}
@Override
protected List<FluidStack> determineMatchingFluidStacks() {
return ImmutableList.of(new FluidStack(fluid, amountRequired, tagToMatch));
}
}
public static class FluidTagIngredient extends FluidIngredient {
@ -183,8 +201,11 @@ public abstract class FluidIngredient implements Predicate<FluidStack> {
@Override
protected void readInternal(JsonObject json) {
ResourceLocation id = new ResourceLocation(JSONUtils.getString(json, "fluidTag"));
Optional<? extends ITag.INamedTag<Fluid>> optionalINamedTag = FluidTags.getRequiredTags().stream()
.filter(fluidINamedTag -> fluidINamedTag.getId().equals(id)).findFirst(); // fixme
Optional<? extends ITag.INamedTag<Fluid>> optionalINamedTag = FluidTags.getRequiredTags()
.stream()
.filter(fluidINamedTag -> fluidINamedTag.getId()
.equals(id))
.findFirst(); // fixme
if (!optionalINamedTag.isPresent())
throw new JsonSyntaxException("Unknown fluid tag '" + id + "'");
tag = optionalINamedTag.get();
@ -196,6 +217,14 @@ public abstract class FluidIngredient implements Predicate<FluidStack> {
.toString());
}
@Override
protected List<FluidStack> determineMatchingFluidStacks() {
return tag.values()
.stream()
.map(f -> new FluidStack(f, amountRequired))
.collect(Collectors.toList());
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B