diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 0030dcfb4..a8e415f83 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -24,6 +24,7 @@ f25693a9429f6337149ff24f27900dc4eb82a7c2 assets\create\blockstates\belt.json 40d10934934ea142d71fc6ce598b1455c3ad47b4 assets\create\blockstates\belt_observer.json cf9045eb16e5299a1d917c4cb536289f49411276 assets\create\blockstates\birch_window.json 94a1a91403eb4b035fec48071e7fcae57a8a6abd assets\create\blockstates\birch_window_pane.json +0626725f70103a55dabcda6f87ca943279d45793 assets\create\blockstates\blaze_heater.json fba967b1f6e44b34a9d9662e2fedfc13aad7f36c assets\create\blockstates\brass_belt_funnel.json 8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets\create\blockstates\brass_block.json b8dd6e505943e06706d0718ece620ab3cf943650 assets\create\blockstates\brass_casing.json @@ -123,7 +124,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets\create\blockstates\fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets\create\blockstates\fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets\create\blockstates\fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets\create\blockstates\fancy_weathered_limestone_bricks_wall.json -4cbd66ed3da77d1caad6ef4e657a86b1b4017a39 assets\create\blockstates\fluid_pipe.json +3aa8213ea6cd12a6964e3a70900b12d76d794d20 assets\create\blockstates\fluid_pipe.json 9d0e78a4d6d0ccac37c06d0f5810a800a04844b2 assets\create\blockstates\fluid_tank.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets\create\blockstates\flywheel.json ac00d40e1ef50a37041c0481afa1a23a14dea78e assets\create\blockstates\framed_glass.json @@ -286,7 +287,7 @@ b7829c2ef2c47188713f8cab21b2c9bc7f9c5b79 assets\create\blockstates\portable_stor e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets\create\blockstates\powered_toggle_latch.json 3a739f9d4276828d83f2d2750bf3227c87bcd438 assets\create\blockstates\pulley_magnet.json 469e430d96cb0a5e1aaf6b7cc5d401d488c9e600 assets\create\blockstates\pulse_repeater.json -6fa36883e76e9e403bb429c8f86b8c0d3bba0cff assets\create\blockstates\radial_chassis.json +4439fc83a8c7370ab44b211a3fd48abde20a4728 assets\create\blockstates\radial_chassis.json 8929677f2cc5354aa19ef182af69f9f0b41eb242 assets\create\blockstates\redstone_contact.json c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets\create\blockstates\redstone_link.json 1eac804cba08aebb5f4646758ae1ef9b32e01365 assets\create\blockstates\reinforced_rail.json @@ -337,17 +338,17 @@ c60c3115fd6eeaa3a696428a87a74d184ab7d62d assets\create\blockstates\weathered_lim c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets\create\blockstates\weathered_limestone_pillar.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets\create\blockstates\zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets\create\blockstates\zinc_ore.json -541831ab0cf2f0222f0b7e42ec6c4b0ae636168d assets\create\lang\en_ud.json -fd57d2d8144286e26033a087a501f45f2df9ea34 assets\create\lang\en_us.json -87c28254c2acb462fe6a994f688a19e31a4c7a9d assets\create\lang\unfinished\de_de.json -6cd93a72126063c634f49db190d4da545e5a6c43 assets\create\lang\unfinished\fr_fr.json -401d0b295988cfa31af1a94f8c50d86eb54cad0d assets\create\lang\unfinished\it_it.json -30f1189e1963d0a87a9505bfdac9b663ff9d09d1 assets\create\lang\unfinished\ja_jp.json -a56d5b51d410821b7993bdbfd1b141e51be11b54 assets\create\lang\unfinished\ko_kr.json -e8a39cb4afc7668f2690bcacda1f06afd9c82579 assets\create\lang\unfinished\nl_nl.json -3876e40fbc9c6e8561cc761949a6fb9565a03fce assets\create\lang\unfinished\pt_br.json -cc2c01ee69a5a394c9d6dc87f77e08f05adf38a7 assets\create\lang\unfinished\ru_ru.json -7a8b2739021d2e1d2b563f2bed3a201bd3f1b00f assets\create\lang\unfinished\zh_cn.json +00edba8c69557058bf9fbbc4d389dc455f24b0fc assets\create\lang\en_ud.json +7ed74343ba37814af0d96cd2ae5bf1249acd9baa assets\create\lang\en_us.json +4c87a086693857597af78c76761ec89ba9c602ba assets\create\lang\unfinished\de_de.json +c0fb10fa3849b9bd5b1265f6abdbf223e1de1a60 assets\create\lang\unfinished\fr_fr.json +b15d162779596a7a4d650885bdf7e2894e7b3846 assets\create\lang\unfinished\it_it.json +32053016c6a0642f9b42ab109fb3cbc512346970 assets\create\lang\unfinished\ja_jp.json +827ecb467d0ede69b8d025b15321d024f186b598 assets\create\lang\unfinished\ko_kr.json +6c730797cb1d02a2b6ec0318ec11750dc05775a0 assets\create\lang\unfinished\nl_nl.json +3a7b8d02ecb08237e887be76d7ee8173068ef63d assets\create\lang\unfinished\pt_br.json +61a40852ad3024962ee8878ca105ca59aa85922b assets\create\lang\unfinished\ru_ru.json +635c3cc20c533ecd1951092344fde2bc19c0a71e assets\create\lang\unfinished\zh_cn.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets\create\models\block\acacia_window.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets\create\models\block\acacia_window_pane_noside.json 1763ea2c9b981d187f5031ba608f3d5d3be3986a assets\create\models\block\acacia_window_pane_noside_alt.json @@ -997,6 +998,7 @@ bf1fc6bdf7fca6f1958a2d3e96202c1cecb50669 assets\create\models\item\basin.json 695a69d5854e2eb134b55d855bd2b7b18808a01d assets\create\models\item\belt_observer.json 9044243882cfd49a2827e1b910a4c9b0e46daa47 assets\create\models\item\birch_window.json 6ed49f59ea91068ef68720f43e67a9237594bdf0 assets\create\models\item\birch_window_pane.json +fa2761dc44857eb840a94df869de66a91988f0da assets\create\models\item\blaze_heater.json 17d340c3678bd24cb085ba49490b2b4cb341a9e7 assets\create\models\item\brass_block.json f5a18f4279c2e845a5967b1c2f9e807c2bb77afb assets\create\models\item\brass_casing.json ab045c951352806c3f632dda7b71573f93f60ac4 assets\create\models\item\brass_funnel.json @@ -1788,6 +1790,7 @@ c7f81e30c31837a287d6d6040cdb02c7dec11441 data\create\loot_tables\blocks\belt.jso 1104e323abb2a8c25769c47dc5d1154965113cc9 data\create\loot_tables\blocks\belt_observer.json 67a8e2513c3cb09e6fe80279fda94f79d5018c37 data\create\loot_tables\blocks\birch_window.json bf1d5843f93533f84bc4adec5b77da2114fa2025 data\create\loot_tables\blocks\birch_window_pane.json +798ef290b388dee758df3e779b4b1c9289955f7b data\create\loot_tables\blocks\blaze_heater.json 1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data\create\loot_tables\blocks\brass_belt_funnel.json 70d9d4def43d5b31fa7cdc5ca5002c71cf4a90b0 data\create\loot_tables\blocks\brass_block.json 8a14258ad5d79d9e4dc5a318905644b446196420 data\create\loot_tables\blocks\brass_casing.json @@ -2478,6 +2481,7 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data\create\recipes\weathered_limestone 11667414f73bc2d00bda7c5c1a7d2934bf6e9165 data\create\recipes\weathered_limestone_pillar_from_weathered_limestone_stonecutting.json 266f08e604d229a9d2b46f7272c0b06ec270bf3d data\create\recipes\zinc_block.json 403576ae5710d4fe731144fe623b1673093076ea data\create\tags\blocks\brittle.json +06d3931993d4f61713390416f1e6fe1a0b5aaf43 data\create\tags\blocks\fan_heaters.json 081f5aa35602fc27af2ca01ea9f2fd5e7eb284dc data\create\tags\items\create_ingots.json d2dc4ff179ef7b2aa9276455c196e15d44aa95a8 data\create\tags\items\crushed_ores.json 16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data\forge\tags\blocks\glass\colorless.json diff --git a/src/generated/resources/assets/create/blockstates/blaze_heater.json b/src/generated/resources/assets/create/blockstates/blaze_heater.json new file mode 100644 index 000000000..ede37bfd8 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/blaze_heater.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "create:block/blaze_heater/block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/fluid_pipe.json b/src/generated/resources/assets/create/blockstates/fluid_pipe.json index 96f2f6808..44255c27a 100644 --- a/src/generated/resources/assets/create/blockstates/fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/fluid_pipe.json @@ -181,10 +181,10 @@ }, { "when": { - "north": "false", - "south": "true", "west": "true", - "east": "false" + "east": "false", + "north": "false", + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/lu_y" @@ -192,10 +192,10 @@ }, { "when": { - "north": "false", - "south": "true", "west": "false", - "east": "true" + "east": "true", + "north": "false", + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/ru_y" @@ -203,10 +203,10 @@ }, { "when": { - "north": "true", - "south": "false", "west": "true", - "east": "false" + "east": "false", + "north": "true", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/ld_y" @@ -214,10 +214,10 @@ }, { "when": { - "north": "true", - "south": "false", "west": "false", - "east": "true" + "east": "true", + "north": "true", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/rd_y" @@ -225,10 +225,10 @@ }, { "when": { + "west": "false", + "east": "false", "north": "true", - "south": "true", - "west": "false", - "east": "false" + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -236,10 +236,10 @@ }, { "when": { + "west": "false", + "east": "false", "north": "false", - "south": "true", - "west": "false", - "east": "false" + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -247,10 +247,10 @@ }, { "when": { + "west": "false", + "east": "false", "north": "true", - "south": "false", - "west": "false", - "east": "false" + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -258,10 +258,10 @@ }, { "when": { - "north": "false", - "south": "false", "west": "true", - "east": "true" + "east": "true", + "north": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -269,10 +269,10 @@ }, { "when": { - "north": "false", - "south": "false", "west": "true", - "east": "false" + "east": "false", + "north": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -280,10 +280,10 @@ }, { "when": { - "north": "false", - "south": "false", "west": "false", - "east": "true" + "east": "true", + "north": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -291,10 +291,10 @@ }, { "when": { - "north": "false", - "south": "false", "west": "false", - "east": "false" + "east": "false", + "north": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/none_y" @@ -302,10 +302,10 @@ }, { "when": { - "up": "true", "west": "false", - "down": "false", - "east": "true" + "east": "true", + "up": "true", + "down": "false" }, "apply": { "model": "create:block/fluid_pipe/lu_z" @@ -313,10 +313,10 @@ }, { "when": { - "up": "true", "west": "true", - "down": "false", - "east": "false" + "east": "false", + "up": "true", + "down": "false" }, "apply": { "model": "create:block/fluid_pipe/ru_z" @@ -324,10 +324,10 @@ }, { "when": { - "up": "false", "west": "false", - "down": "true", - "east": "true" + "east": "true", + "up": "false", + "down": "true" }, "apply": { "model": "create:block/fluid_pipe/ld_z" @@ -335,10 +335,10 @@ }, { "when": { - "up": "false", "west": "true", - "down": "true", - "east": "false" + "east": "false", + "up": "false", + "down": "true" }, "apply": { "model": "create:block/fluid_pipe/rd_z" @@ -346,10 +346,10 @@ }, { "when": { + "west": "false", + "east": "false", "up": "true", - "west": "false", - "down": "true", - "east": "false" + "down": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -357,10 +357,10 @@ }, { "when": { + "west": "false", + "east": "false", "up": "true", - "west": "false", - "down": "false", - "east": "false" + "down": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -368,10 +368,10 @@ }, { "when": { - "up": "false", "west": "false", - "down": "true", - "east": "false" + "east": "false", + "up": "false", + "down": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -379,10 +379,10 @@ }, { "when": { - "up": "false", "west": "true", - "down": "false", - "east": "true" + "east": "true", + "up": "false", + "down": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -390,10 +390,10 @@ }, { "when": { - "up": "false", "west": "false", - "down": "false", - "east": "true" + "east": "true", + "up": "false", + "down": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -401,10 +401,10 @@ }, { "when": { - "up": "false", "west": "true", - "down": "false", - "east": "false" + "east": "false", + "up": "false", + "down": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -412,10 +412,10 @@ }, { "when": { - "up": "false", "west": "false", - "down": "false", - "east": "false" + "east": "false", + "up": "false", + "down": "false" }, "apply": { "model": "create:block/fluid_pipe/none_z" diff --git a/src/generated/resources/assets/create/blockstates/radial_chassis.json b/src/generated/resources/assets/create/blockstates/radial_chassis.json index f97d8c8bc..8bd829ffc 100644 --- a/src/generated/resources/assets/create/blockstates/radial_chassis.json +++ b/src/generated/resources/assets/create/blockstates/radial_chassis.json @@ -89,8 +89,8 @@ }, { "when": { - "sticky_west": "true", - "axis": "x" + "axis": "x", + "sticky_west": "true" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -99,8 +99,8 @@ }, { "when": { - "sticky_west": "true", - "axis": "y" + "axis": "y", + "sticky_west": "true" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky", @@ -109,8 +109,8 @@ }, { "when": { - "sticky_west": "true", - "axis": "z" + "axis": "z", + "sticky_west": "true" }, "apply": { "model": "create:block/radial_chassis_side_z_sticky", @@ -119,8 +119,8 @@ }, { "when": { - "sticky_west": "false", - "axis": "x" + "axis": "x", + "sticky_west": "false" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -129,8 +129,8 @@ }, { "when": { - "sticky_west": "false", - "axis": "y" + "axis": "y", + "sticky_west": "false" }, "apply": { "model": "create:block/radial_chassis_side_y", @@ -139,8 +139,8 @@ }, { "when": { - "sticky_west": "false", - "axis": "z" + "axis": "z", + "sticky_west": "false" }, "apply": { "model": "create:block/radial_chassis_side_z", @@ -149,8 +149,8 @@ }, { "when": { - "sticky_north": "true", - "axis": "x" + "axis": "x", + "sticky_north": "true" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky" @@ -158,8 +158,8 @@ }, { "when": { - "sticky_north": "true", - "axis": "y" + "axis": "y", + "sticky_north": "true" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky", @@ -168,8 +168,8 @@ }, { "when": { - "sticky_north": "true", - "axis": "z" + "axis": "z", + "sticky_north": "true" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -178,8 +178,8 @@ }, { "when": { - "sticky_north": "false", - "axis": "x" + "axis": "x", + "sticky_north": "false" }, "apply": { "model": "create:block/radial_chassis_side_x" @@ -187,8 +187,8 @@ }, { "when": { - "sticky_north": "false", - "axis": "y" + "axis": "y", + "sticky_north": "false" }, "apply": { "model": "create:block/radial_chassis_side_y", @@ -197,8 +197,8 @@ }, { "when": { - "sticky_north": "false", - "axis": "z" + "axis": "z", + "sticky_north": "false" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -207,8 +207,8 @@ }, { "when": { - "sticky_east": "true", - "axis": "x" + "axis": "x", + "sticky_east": "true" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -217,8 +217,8 @@ }, { "when": { - "sticky_east": "true", - "axis": "y" + "axis": "y", + "sticky_east": "true" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky", @@ -227,8 +227,8 @@ }, { "when": { - "sticky_east": "true", - "axis": "z" + "axis": "z", + "sticky_east": "true" }, "apply": { "model": "create:block/radial_chassis_side_z_sticky" @@ -236,8 +236,8 @@ }, { "when": { - "sticky_east": "false", - "axis": "x" + "axis": "x", + "sticky_east": "false" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -246,8 +246,8 @@ }, { "when": { - "sticky_east": "false", - "axis": "y" + "axis": "y", + "sticky_east": "false" }, "apply": { "model": "create:block/radial_chassis_side_y", @@ -256,8 +256,8 @@ }, { "when": { - "sticky_east": "false", - "axis": "z" + "axis": "z", + "sticky_east": "false" }, "apply": { "model": "create:block/radial_chassis_side_z" diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index be027ea35..72e9325f0 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -25,6 +25,7 @@ "block.create.belt_observer": "\u0279\u01DD\u028C\u0279\u01DDsqO \u0287\u05DF\u01DD\u15FA", "block.create.birch_window": "\u028Dopu\u0131M \u0265\u0254\u0279\u0131\u15FA", "block.create.birch_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u0265\u0254\u0279\u0131\u15FA", + "block.create.blaze_heater": "\u0279\u01DD\u0287\u0250\u01DDH \u01DDz\u0250\u05DF\u15FA", "block.create.brass_belt_funnel": "\u05DF\u01DDuun\u2132 \u0287\u05DF\u01DD\u15FA ss\u0250\u0279\u15FA", "block.create.brass_block": "\u029E\u0254o\u05DF\u15FA ss\u0250\u0279\u15FA", "block.create.brass_casing": "bu\u0131s\u0250\u0186 ss\u0250\u0279\u15FA", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 5b5379ff7..b94e8b5fc 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -28,6 +28,7 @@ "block.create.belt_observer": "Belt Observer", "block.create.birch_window": "Birch Window", "block.create.birch_window_pane": "Birch Window Pane", + "block.create.blaze_heater": "Blaze Heater", "block.create.brass_belt_funnel": "Brass Belt Funnel", "block.create.brass_block": "Brass Block", "block.create.brass_casing": "Brass Casing", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 9a8c82e36..39a749b7a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 781", + "_": "Missing Localizations: 782", "_": "->------------------------] Game Elements [------------------------<-", @@ -29,6 +29,7 @@ "block.create.belt_observer": "Fließband-Beobachter", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", + "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 4f2fc8b3d..af1b58872 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 384", + "_": "Missing Localizations: 385", "_": "->------------------------] Game Elements [------------------------<-", @@ -29,6 +29,7 @@ "block.create.belt_observer": "Observateur d'entité", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", + "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "Boîtier en laiton", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index b91adee26..8ef5b1d8a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 368", + "_": "Missing Localizations: 369", "_": "->------------------------] Game Elements [------------------------<-", @@ -29,6 +29,7 @@ "block.create.belt_observer": "Osservatore a Cinghia", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", + "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "Blocco di Ottone", "block.create.brass_casing": "Involucro di Ottone", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 16000f239..1f0f51ea3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 363", + "_": "Missing Localizations: 364", "_": "->------------------------] Game Elements [------------------------<-", @@ -29,6 +29,7 @@ "block.create.belt_observer": "ベルトオブザーバー", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", + "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "真鍮ブロック", "block.create.brass_casing": "真鍮ケーシング", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index ac39c9e93..5a1b2d785 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 368", + "_": "Missing Localizations: 369", "_": "->------------------------] Game Elements [------------------------<-", @@ -29,6 +29,7 @@ "block.create.belt_observer": "벨트 감지기", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", + "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "황동 블럭", "block.create.brass_casing": "황동 케이스", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 6bbaa48c1..4b5e20a52 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 718", + "_": "Missing Localizations: 719", "_": "->------------------------] Game Elements [------------------------<-", @@ -29,6 +29,7 @@ "block.create.belt_observer": "Transportband Observeerder", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", + "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index d49c96b2a..af6638ac5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 788", + "_": "Missing Localizations: 789", "_": "->------------------------] Game Elements [------------------------<-", @@ -29,6 +29,7 @@ "block.create.belt_observer": "Observador de Esteira", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", + "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index cf9239c4f..5354626b2 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 782", + "_": "Missing Localizations: 783", "_": "->------------------------] Game Elements [------------------------<-", @@ -29,6 +29,7 @@ "block.create.belt_observer": "Ленточный сканер", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", + "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index b691687f8..f09a4a227 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 44", + "_": "Missing Localizations: 45", "_": "->------------------------] Game Elements [------------------------<-", @@ -29,6 +29,7 @@ "block.create.belt_observer": "传送带侦测器", "block.create.birch_window": "白桦窗户", "block.create.birch_window_pane": "白桦窗户板", + "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "黄铜块", "block.create.brass_casing": "黄铜机壳", diff --git a/src/generated/resources/assets/create/models/item/blaze_heater.json b/src/generated/resources/assets/create/models/item/blaze_heater.json new file mode 100644 index 000000000..40a3c3428 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/blaze_heater.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/blaze_heater/block" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/blaze_heater.json b/src/generated/resources/data/create/loot_tables/blocks/blaze_heater.json new file mode 100644 index 000000000..291dbd019 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/blaze_heater.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:blaze_heater" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/blocks/fan_heaters.json b/src/generated/resources/data/create/tags/blocks/fan_heaters.json new file mode 100644 index 000000000..2cf03ca08 --- /dev/null +++ b/src/generated/resources/data/create/tags/blocks/fan_heaters.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "create:blaze_heater" + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 04818d7a5..d2751a015 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -26,13 +26,12 @@ import net.minecraftforge.client.model.ModelLoader; public class AllBlockPartials { - private static List all = new ArrayList<>(); - - public static final AllBlockPartials - SCHEMATICANNON_CONNECTOR = get("schematicannon/connector"), + private static final List all = new ArrayList<>(); + + public static final AllBlockPartials SCHEMATICANNON_CONNECTOR = get("schematicannon/connector"), SCHEMATICANNON_PIPE = get("schematicannon/pipe"), - SHAFTLESS_COGWHEEL = get("cogwheel_shaftless"), + SHAFTLESS_COGWHEEL = get("cogwheel_shaftless"), SHAFT_HALF = get("shaft_half"), BELT_PULLEY = get("belt_pulley"), @@ -46,11 +45,12 @@ public class AllBlockPartials { BELT_DIAGONAL_MIDDLE = get("belt/diagonal_middle"), BELT_DIAGONAL_END = get("belt/diagonal_end"), - ENCASED_FAN_INNER = get("encased_fan/propeller"), - HAND_CRANK_HANDLE = get("hand_crank/handle"), - MECHANICAL_PRESS_HEAD = get("mechanical_press/head"), - MECHANICAL_MIXER_POLE = get("mechanical_mixer/pole"), - MECHANICAL_MIXER_HEAD = get("mechanical_mixer/head"), + ENCASED_FAN_INNER = get("encased_fan/propeller"), HAND_CRANK_HANDLE = get("hand_crank/handle"), + MECHANICAL_PRESS_HEAD = get("mechanical_press/head"), MECHANICAL_MIXER_POLE = get("mechanical_mixer/pole"), + MECHANICAL_MIXER_HEAD = get("mechanical_mixer/head"), BLAZE_HEATER_BLAZE_ONE = get("blaze_heater/blaze/one"), + BLAZE_HEATER_BLAZE_TWO = get("blaze_heater/blaze/two"), + BLAZE_HEATER_BLAZE_THREE = get("blaze_heater/blaze/three"), + BLAZE_HEATER_BLAZE_FOUR = get("blaze_heater/blaze/four"), MECHANICAL_CRAFTER_LID = get("mechanical_crafter/lid"), MECHANICAL_CRAFTER_ARROW = get("mechanical_crafter/arrow"), MECHANICAL_CRAFTER_BELT_FRAME = get("mechanical_crafter/belt"), @@ -73,41 +73,29 @@ public class AllBlockPartials { FLEXPEATER_INDICATOR = get("diodes/indicator"), FLYWHEEL = get("flywheel/wheel"), FLYWHEEL_UPPER_ROTATING = get("flywheel/upper_rotating_connector"), + FLYWHEEL_LOWER_ROTATING = get("flywheel/lower_rotating_connector"), FLYWHEEL_UPPER_SLIDING = get("flywheel/upper_sliding_connector"), FLYWHEEL_LOWER_SLIDING = get("flywheel/lower_sliding_connector"), - FURNACE_GENERATOR_FRAME = get("furnace_engine/frame"), - CUCKOO_MINUTE_HAND = get("cuckoo_clock/minute_hand"), - CUCKOO_HOUR_HAND = get("cuckoo_clock/hour_hand"), - CUCKOO_LEFT_DOOR = get("cuckoo_clock/left_door"), - CUCKOO_RIGHT_DOOR = get("cuckoo_clock/right_door"), - CUCKOO_PIG = get("cuckoo_clock/pig"), - CUCKOO_CREEPER = get("cuckoo_clock/creeper"), - ROPE_COIL = get("rope_pulley/rope_coil"), - ROPE_HALF = get("rope_pulley/rope_half"), - ROPE_HALF_MAGNET = get("rope_pulley/rope_half_magnet"), - MILLSTONE_COG = get("millstone/inner"), - PACKAGER_SEALER = get("packager/sealer"), + FURNACE_GENERATOR_FRAME = get("furnace_engine/frame"), CUCKOO_MINUTE_HAND = get("cuckoo_clock/minute_hand"), + CUCKOO_HOUR_HAND = get("cuckoo_clock/hour_hand"), CUCKOO_LEFT_DOOR = get("cuckoo_clock/left_door"), + CUCKOO_RIGHT_DOOR = get("cuckoo_clock/right_door"), CUCKOO_PIG = get("cuckoo_clock/pig"), + CUCKOO_CREEPER = get("cuckoo_clock/creeper"), ROPE_COIL = get("rope_pulley/rope_coil"), + ROPE_HALF = get("rope_pulley/rope_half"), ROPE_HALF_MAGNET = get("rope_pulley/rope_half_magnet"), + MILLSTONE_COG = get("millstone/inner"), PACKAGER_SEALER = get("packager/sealer"), - SYMMETRY_PLANE = get("symmetry_effect/plane"), - SYMMETRY_CROSSPLANE = get("symmetry_effect/crossplane"), + SYMMETRY_PLANE = get("symmetry_effect/plane"), SYMMETRY_CROSSPLANE = get("symmetry_effect/crossplane"), SYMMETRY_TRIPLEPLANE = get("symmetry_effect/tripleplane"), - ARM_COG = get("mechanical_arm/cog"), - ARM_BASE = get("mechanical_arm/base"), - ARM_LOWER_BODY = get("mechanical_arm/lower_body"), - ARM_UPPER_BODY = get("mechanical_arm/upper_body"), - ARM_HEAD = get("mechanical_arm/head"), - ARM_CLAW_BASE = get("mechanical_arm/claw_base"), - ARM_CLAW_GRIP = get("mechanical_arm/claw_grip"), - - FLAG_SHORT_IN = get("mechanical_arm/flag/short_in"), - FLAG_SHORT_OUT = get("mechanical_arm/flag/short_out"), - FLAG_LONG_IN = get("mechanical_arm/flag/long_in"), - FLAG_LONG_OUT = get("mechanical_arm/flag/long_out"), - - MECHANICAL_PUMP_ARROW = get("mechanical_pump/arrow"), - MECHANICAL_PUMP_COG = get("mechanical_pump/cog"), + ARM_COG = get("mechanical_arm/cog"), ARM_BASE = get("mechanical_arm/base"), + ARM_LOWER_BODY = get("mechanical_arm/lower_body"), ARM_UPPER_BODY = get("mechanical_arm/upper_body"), + ARM_HEAD = get("mechanical_arm/head"), ARM_CLAW_BASE = get("mechanical_arm/claw_base"), + ARM_CLAW_GRIP = get("mechanical_arm/claw_grip"), + + FLAG_SHORT_IN = get("mechanical_arm/flag/short_in"), FLAG_SHORT_OUT = get("mechanical_arm/flag/short_out"), + FLAG_LONG_IN = get("mechanical_arm/flag/long_in"), FLAG_LONG_OUT = get("mechanical_arm/flag/long_out"), + + MECHANICAL_PUMP_ARROW = get("mechanical_pump/arrow"), MECHANICAL_PUMP_COG = get("mechanical_pump/cog"), FLUID_PIPE_CASING = get("fluid_pipe/casing"); public static final Map PIPE_RIMS = map(); @@ -123,8 +111,7 @@ public class AllBlockPartials { private ResourceLocation modelLocation; private IBakedModel bakedModel; - private AllBlockPartials() { - } + private AllBlockPartials() {} private static void populateMaps() { for (Direction d : Iterate.directions) { @@ -194,9 +181,7 @@ public class AllBlockPartials { .rotateY(AngleHelper.horizontalAngle(facing)) .rotateX(AngleHelper.verticalAngle(facing)) .unCentre(); - SuperByteBuffer renderPartial = - CreateClient.bufferCache.renderDirectionalPartial(this, referenceState, facing, ms); - return renderPartial; + return CreateClient.bufferCache.renderDirectionalPartial(this, referenceState, facing, ms); } } diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index d8a8d0e7a..a1d766d01 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -56,6 +56,7 @@ import com.simibubi.create.content.contraptions.fluids.FluidTankBlock; import com.simibubi.create.content.contraptions.fluids.FluidTankModel; import com.simibubi.create.content.contraptions.fluids.PumpBlock; import com.simibubi.create.content.contraptions.processing.BasinBlock; +import com.simibubi.create.content.contraptions.processing.HeaterBlock; import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlock; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftBlock; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftGenerator; @@ -144,6 +145,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.generators.ConfiguredModel; import net.minecraftforge.common.ToolType; +@SuppressWarnings("unused") public class AllBlocks { private static final CreateRegistrate REGISTRATE = Create.registrate() @@ -206,7 +208,7 @@ public class AllBlocks { public static final BlockEntry ENCASED_SHAFT = REGISTRATE.block("encased_shaft", EncasedShaftBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .transform(StressConfigDefaults.setNoImpact()) .blockstate(BlockStateGen.axisBlockProvider(true)) .item() @@ -215,7 +217,7 @@ public class AllBlocks { public static final BlockEntry GEARBOX = REGISTRATE.block("gearbox", GearboxBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .transform(StressConfigDefaults.setNoImpact()) .blockstate(BlockStateGen.axisBlockProvider(true)) .item() @@ -224,7 +226,7 @@ public class AllBlocks { public static final BlockEntry CLUTCH = REGISTRATE.block("clutch", ClutchBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .transform(StressConfigDefaults.setNoImpact()) .blockstate((c, p) -> BlockStateGen.axisBlock(c, p, AssetLookup.forPowered(c, p))) .item() @@ -233,7 +235,7 @@ public class AllBlocks { public static final BlockEntry GEARSHIFT = REGISTRATE.block("gearshift", GearshiftBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .transform(StressConfigDefaults.setNoImpact()) .blockstate((c, p) -> BlockStateGen.axisBlock(c, p, AssetLookup.forPowered(c, p))) .item() @@ -243,7 +245,7 @@ public class AllBlocks { public static final BlockEntry ENCASED_BELT = REGISTRATE.block("encased_belt", EncasedBeltBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .transform(StressConfigDefaults.setNoImpact()) .blockstate((c, p) -> new EncasedBeltGenerator((state, suffix) -> p.models() .getExistingFile(p.modLoc("block/" + c.getName() + "/" + suffix))).generate(c, p)) @@ -254,7 +256,7 @@ public class AllBlocks { public static final BlockEntry ADJUSTABLE_PULLEY = REGISTRATE.block("adjustable_pulley", AdjustablePulleyBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .transform(StressConfigDefaults.setNoImpact()) .blockstate((c, p) -> new EncasedBeltGenerator((state, suffix) -> { String powered = state.get(AdjustablePulleyBlock.POWERED) ? "_powered" : ""; @@ -289,7 +291,7 @@ public class AllBlocks { public static final BlockEntry WATER_WHEEL = REGISTRATE.block("water_wheel", WaterWheelBlock::new) .initialProperties(SharedProperties::wooden) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .blockstate(BlockStateGen.horizontalWheelProvider(false)) .addLayer(() -> RenderType::getCutoutMipped) .transform(StressConfigDefaults.setCapacity(16.0)) @@ -353,7 +355,7 @@ public class AllBlocks { public static final BlockEntry CRUSHING_WHEEL = REGISTRATE.block("crushing_wheel", CrushingWheelBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .blockstate(BlockStateGen.axisBlockProvider(false)) .addLayer(() -> RenderType::getCutoutMipped) .transform(StressConfigDefaults.setImpact(8.0)) @@ -373,7 +375,7 @@ public class AllBlocks { public static final BlockEntry MECHANICAL_PRESS = REGISTRATE.block("mechanical_press", MechanicalPressBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .blockstate(BlockStateGen.horizontalBlockProvider(true)) .transform(StressConfigDefaults.setImpact(8.0)) .item(BasinOperatorBlockItem::new) @@ -383,7 +385,7 @@ public class AllBlocks { public static final BlockEntry MECHANICAL_MIXER = REGISTRATE.block("mechanical_mixer", MechanicalMixerBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) .addLayer(() -> RenderType::getCutoutMipped) .transform(StressConfigDefaults.setImpact(4.0)) @@ -397,6 +399,15 @@ public class AllBlocks { .simpleItem() .register(); + public static final BlockEntry HEATER = REGISTRATE.block("blaze_heater", HeaterBlock::new) + .initialProperties(SharedProperties::softMetal) + .properties(p -> p.lightValue(12)) + .tag(AllBlockTags.FAN_HEATERS.tag) + .addLayer(() -> RenderType::getCutoutMipped) + .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) + .simpleItem() + .register(); + public static final BlockEntry DEPOT = REGISTRATE.block("depot", DepotBlock::new) .initialProperties(SharedProperties::stone) .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) @@ -523,7 +534,7 @@ public class AllBlocks { public static final BlockEntry CART_ASSEMBLER = REGISTRATE.block("cart_assembler", CartAssemblerBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .blockstate(BlockStateGen.cartAssembler()) .addLayer(() -> RenderType::getCutoutMipped) .tag(BlockTags.RAILS) @@ -534,7 +545,7 @@ public class AllBlocks { public static final BlockEntry REINFORCED_RAIL = REGISTRATE.block("reinforced_rail", ReinforcedRailBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .blockstate(BlockStateGen.reinforcedRail()) .addLayer(() -> RenderType::getCutoutMipped) .tag(BlockTags.RAILS) @@ -645,7 +656,7 @@ public class AllBlocks { public static final BlockEntry MECHANICAL_CRAFTER = REGISTRATE.block("mechanical_crafter", MechanicalCrafterBlock::new) .initialProperties(SharedProperties::softMetal) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .blockstate(BlockStateGen.horizontalBlockProvider(true)) .transform(StressConfigDefaults.setImpact(2.0)) .onRegister(CreateRegistrate.connectedTextures(new CrafterCTBehaviour())) @@ -657,7 +668,7 @@ public class AllBlocks { public static final BlockEntry SEQUENCED_GEARSHIFT = REGISTRATE.block("sequenced_gearshift", SequencedGearshiftBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .transform(StressConfigDefaults.setNoImpact()) .blockstate(new SequencedGearshiftGenerator()::generate) .item() @@ -666,7 +677,7 @@ public class AllBlocks { public static final BlockEntry FLYWHEEL = REGISTRATE.block("flywheel", FlywheelBlock::new) .initialProperties(SharedProperties::softMetal) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .transform(StressConfigDefaults.setNoImpact()) .blockstate(new FlywheelGenerator()::generate) .item() @@ -817,7 +828,7 @@ public class AllBlocks { public static final BlockEntry PACKAGER = REGISTRATE.block("packager", PackagerBlock::new) .initialProperties(SharedProperties::softMetal) .transform(StressConfigDefaults.setImpact(4.0)) - .properties(p -> p.nonOpaque()) + .properties(Block.Properties::nonOpaque) .blockstate((c, p) -> p.getVariantBuilder(c.get()) .forAllStates(s -> ConfiguredModel.builder() .modelFile(AssetLookup.partialBaseModel(c, p)) diff --git a/src/main/java/com/simibubi/create/AllRecipeTypes.java b/src/main/java/com/simibubi/create/AllRecipeTypes.java index 87fcec136..c5d81e469 100644 --- a/src/main/java/com/simibubi/create/AllRecipeTypes.java +++ b/src/main/java/com/simibubi/create/AllRecipeTypes.java @@ -1,7 +1,5 @@ package com.simibubi.create; -import java.util.function.Supplier; - 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; @@ -12,11 +10,11 @@ import com.simibubi.create.content.contraptions.components.press.PressingRecipe; import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer.IExtendedRecipeFactory; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer.IRecipeFactory; import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe; import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperUpgradeRecipe; import com.simibubi.create.foundation.utility.Lang; - import net.minecraft.inventory.IInventory; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipeSerializer; @@ -26,18 +24,20 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; import net.minecraftforge.event.RegistryEvent; +import java.util.function.Supplier; + public enum AllRecipeTypes { BLOCKZAPPER_UPGRADE(BlockzapperUpgradeRecipe.Serializer::new, IRecipeType.CRAFTING), - MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new), - CRUSHING(processingSerializer(CrushingRecipe::new)), - MILLING(processingSerializer(MillingRecipe::new)), - SPLASHING(processingSerializer(SplashingRecipe::new)), - PRESSING(processingSerializer(PressingRecipe::new)), - CUTTING(processingSerializer(CuttingRecipe::new)), - MIXING(processingSerializer(MixingRecipe::new)), - SANDPAPER_POLISHING(processingSerializer(SandPaperPolishingRecipe::new)), CONVERSION(processingSerializer(ConversionRecipe::new)), + CRUSHING(processingSerializer(CrushingRecipe::new)), + CUTTING(processingSerializer(CuttingRecipe::new)), + MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new), + MILLING(processingSerializer(MillingRecipe::new)), + MIXING(extendedProcessingSerializer(MixingRecipe::new)), + PRESSING(processingSerializer(PressingRecipe::new)), + SANDPAPER_POLISHING(processingSerializer(SandPaperPolishingRecipe::new)), + SPLASHING(processingSerializer(SplashingRecipe::new)), ; @@ -45,34 +45,30 @@ public enum AllRecipeTypes { public Supplier> supplier; public IRecipeType> type; - @SuppressWarnings("unchecked") - public > T getType() { - return (T) type; - } - - private AllRecipeTypes(Supplier> supplier) { + AllRecipeTypes(Supplier> supplier) { this(supplier, null); } - private AllRecipeTypes(Supplier> supplier, - IRecipeType> existingType) { + AllRecipeTypes(Supplier> supplier, + IRecipeType> existingType) { this.supplier = supplier; this.type = existingType; } public static void register(RegistryEvent.Register> event) { ShapedRecipe.setCraftingSize(9, 9); - + for (AllRecipeTypes r : AllRecipeTypes.values()) { if (r.type == null) r.type = customType(Lang.asId(r.name())); - + r.serializer = r.supplier.get(); ResourceLocation location = new ResourceLocation(Create.ID, Lang.asId(r.name())); - event.getRegistry().register(r.serializer.setRegistryName(location)); + event.getRegistry() + .register(r.serializer.setRegistryName(location)); } } - + private static > IRecipeType customType(String id) { return Registry.register(Registry.RECIPE_TYPE, new ResourceLocation(Create.ID, id), new IRecipeType() { public String toString() { @@ -80,10 +76,19 @@ public enum AllRecipeTypes { } }); } - - private static Supplier> processingSerializer(IRecipeFactory> factory) { + + private static Supplier> processingSerializer( + IRecipeFactory> factory) { return () -> new ProcessingRecipeSerializer<>(factory); } + private static Supplier> extendedProcessingSerializer( + IExtendedRecipeFactory> factory) { + return () -> new ProcessingRecipeSerializer<>(factory); + } + @SuppressWarnings("unchecked") + public > T getType() { + return (T) type; + } } diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 5e67ace79..f191f5eac 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -49,8 +49,7 @@ import com.simibubi.create.content.contraptions.fluids.FluidTankRenderer; import com.simibubi.create.content.contraptions.fluids.FluidTankTileEntity; import com.simibubi.create.content.contraptions.fluids.PumpRenderer; import com.simibubi.create.content.contraptions.fluids.PumpTileEntity; -import com.simibubi.create.content.contraptions.processing.BasinRenderer; -import com.simibubi.create.content.contraptions.processing.BasinTileEntity; +import com.simibubi.create.content.contraptions.processing.*; import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerRenderer; import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerTileEntity; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftTileEntity; @@ -201,6 +200,8 @@ public class AllTileEntities { register("deployer", DeployerTileEntity::new, AllBlocks.DEPLOYER); public static final TileEntityEntry BASIN = register("basin", BasinTileEntity::new, AllBlocks.BASIN); + public static final TileEntityEntry HEATER = + register("blaze_heater", HeaterTileEntity::new, AllBlocks.HEATER); public static final TileEntityEntry MECHANICAL_CRAFTER = register("mechanical_crafter", MechanicalCrafterTileEntity::new, AllBlocks.MECHANICAL_CRAFTER); public static final TileEntityEntry SEQUENCED_GEARSHIFT = @@ -300,6 +301,7 @@ public class AllTileEntities { bind(SPEEDOMETER, GaugeRenderer::speed); bind(STRESSOMETER, GaugeRenderer::stress); bind(BASIN, BasinRenderer::new); + bind(HEATER, HeaterRenderer::new); bind(DEPLOYER, DeployerRenderer::new); bind(FLYWHEEL, FlywheelRenderer::new); bind(FURNACE_ENGINE, EngineRenderer::new); diff --git a/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java b/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java index 069783c75..4c838bc55 100644 --- a/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java +++ b/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java @@ -1,8 +1,10 @@ package com.simibubi.create.compat.jei; -import java.util.Arrays; +import java.util.Collections; import java.util.List; +import javax.annotation.ParametersAreNonnullByDefault; + import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; @@ -21,23 +23,25 @@ import net.minecraftforge.items.wrapper.RecipeWrapper; * @author simibubi * */ +@ParametersAreNonnullByDefault public class ConversionRecipe extends ProcessingRecipe { public ConversionRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { + List results, int processingDuration) { super(AllRecipeTypes.CONVERSION, id, group, ingredients, results, processingDuration); } static int counter = 0; public static ConversionRecipe create(ItemStack from, ItemStack to) { - List ingredients = Arrays.asList(new ProcessingIngredient(Ingredient.fromStacks(from))); - List outputs = Arrays.asList(new ProcessingOutput(to, 1)); + List ingredients = + Collections.singletonList(new ProcessingIngredient(Ingredient.fromStacks(from))); + List outputs = Collections.singletonList(new ProcessingOutput(to, 1)); return new ConversionRecipe(new ResourceLocation(Create.ID, "conversion_" + counter++), ingredients, outputs); } public ConversionRecipe(ResourceLocation id, List ingredients, - List results) { + List results) { this(id, "conversions", ingredients, results, -1); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java index 59e5a866d..832841461 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java @@ -59,10 +59,10 @@ public abstract class CreateRecipeCategory> implements IRec if (!(recipe instanceof ProcessingRecipe)) return jeiSlot; ProcessingRecipe processingRecipe = (ProcessingRecipe) recipe; - List rollableResults = processingRecipe.getRollableResults(); + List rollableResults = processingRecipe.getRollableItemResults(); if (rollableResults.size() <= index) return jeiSlot; - if (processingRecipe.getRollableResults().get(index).getChance() == 1) + if (processingRecipe.getRollableItemResults().get(index).getChance() == 1) return jeiSlot; return AllGuiTextures.JEI_CHANCE_SLOT; } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java index 5e95a3c2c..088456e68 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java @@ -41,7 +41,7 @@ public class CrushingCategory extends CreateRecipeCategory results = recipe.getRollableResults(); + List results = recipe.getRollableItemResults(); int size = results.size(); int offset = -size * 19 / 2; for (int outputIndex = 0; outputIndex < size; outputIndex++) { @@ -54,7 +54,7 @@ public class CrushingCategory extends CreateRecipeCategory results = recipe.getRollableResults(); + List results = recipe.getRollableItemResults(); AllGuiTextures.JEI_SLOT.draw(50, 2); AllGuiTextures.JEI_DOWN_ARROW.draw(72, 7); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java index 90ddeacc8..79985ef23 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java @@ -43,7 +43,7 @@ public class MillingCategory extends CreateRecipeCategory results = recipe.getRollableResults(); + List results = recipe.getRollableItemResults(); boolean single = results.size() == 1; for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { int xOffset = outputIndex % 2 == 0 ? 0 : 19; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java index 42a1cdde0..36514730c 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java @@ -41,7 +41,7 @@ public class MysteriousItemConversionCategory extends CreateRecipeCategory results = recipe.getRollableResults(); + List results = recipe.getRollableItemResults(); itemStacks.init(0, true, 26, 16); itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks())); itemStacks.init(1, false, 131, 16); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java index 3b3399f27..0fd563557 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java @@ -43,7 +43,7 @@ public class PolishingCategory extends CreateRecipeCategory results = recipe.getRollableResults(); + List results = recipe.getRollableItemResults(); itemStacks.init(0, true, 26, 28); itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks())); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java index f1260b4fd..b635f5625 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java @@ -41,7 +41,7 @@ public class PressingCategory extends CreateRecipeCategory { itemStacks.init(0, true, 26, 50); itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks())); - List results = recipe.getRollableResults(); + List results = recipe.getRollableItemResults(); for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { itemStacks.init(outputIndex + 1, false, 131 + 19 * outputIndex, 50); itemStacks.set(outputIndex + 1, results.get(outputIndex).getStack()); @@ -54,7 +54,7 @@ public class PressingCategory extends CreateRecipeCategory { public void draw(PressingRecipe recipe, double mouseX, double mouseY) { AllGuiTextures.JEI_SLOT.draw(26, 50); getRenderedSlot(recipe, 0).draw(131, 50); - if (recipe.getRollableResults().size() > 1) + if (recipe.getRollableItemResults().size() > 1) getRenderedSlot(recipe, 1).draw(131 + 19, 50); AllGuiTextures.JEI_SHADOW.draw(61, 41); AllGuiTextures.JEI_LONG_ARROW.draw(52, 54); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java index 52de5db32..c5b331f8c 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java @@ -40,7 +40,7 @@ public class SawingCategory extends CreateRecipeCategory { itemStacks.init(0, true, 43, 4); itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks())); - List results = recipe.getRollableResults(); + List results = recipe.getRollableItemResults(); for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { int xOffset = outputIndex % 2 == 0 ? 0 : 19; int yOffset = (outputIndex / 2) * -19; @@ -55,7 +55,7 @@ public class SawingCategory extends CreateRecipeCategory { @Override public void draw(CuttingRecipe recipe, double mouseX, double mouseY) { AllGuiTextures.JEI_SLOT.draw(43, 4); - int size = recipe.getRollableResults().size(); + int size = recipe.getRollableItemResults().size(); for (int i = 0; i < size; i++) { int xOffset = i % 2 == 0 ? 0 : 19; int yOffset = (i / 2) * -19; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SplashingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SplashingCategory.java index 9fe2eb3c6..89ca987c2 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SplashingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SplashingCategory.java @@ -42,7 +42,7 @@ public class SplashingCategory extends ProcessingViaFanCategory .get(0) .getMatchingStacks())); - List results = recipe.getRollableResults(); + List results = recipe.getRollableItemResults(); boolean single = results.size() == 1; for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { int xOffset = outputIndex % 2 == 0 ? 0 : 19; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java index 2ee5d5f1d..bd99f7740 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java @@ -13,7 +13,7 @@ import net.minecraftforge.items.wrapper.RecipeWrapper; public abstract class AbstractCrushingRecipe extends ProcessingRecipe { public AbstractCrushingRecipe(AllRecipeTypes recipeType, ResourceLocation id, String group, - List ingredients, List results, int processingDuration) { + List ingredients, List results, int processingDuration) { super(recipeType, id, group, ingredients, results, processingDuration); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java index 9f77db133..5f5ff519c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java @@ -1,19 +1,20 @@ package com.simibubi.create.content.contraptions.components.crusher; -import java.util.List; - import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; import com.simibubi.create.content.contraptions.processing.ProcessingOutput; - import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.items.wrapper.RecipeWrapper; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; + +@ParametersAreNonnullByDefault public class CrushingRecipe extends AbstractCrushingRecipe { public CrushingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { + List results, int processingDuration) { super(AllRecipeTypes.CRUSHING, id, group, ingredients, results, processingDuration); } @@ -21,9 +22,10 @@ public class CrushingRecipe extends AbstractCrushingRecipe { public boolean matches(RecipeWrapper inv, World worldIn) { if (inv.isEmpty()) return false; - return ingredients.get(0).test(inv.getStackInSlot(0)); + return ingredients.get(0) + .test(inv.getStackInSlot(0)); } - + @Override protected int getMaxOutputCount() { return 7; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java index 8141fcf36..3f5eeec54 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java @@ -191,7 +191,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { inventory.clear(); for (int roll = 0; roll < rolls; roll++) { List rolledResults = recipe.get() - .rollResults(); + .rollResults().getItemStacks(); for (int i = 0; i < rolledResults.size(); i++) { ItemStack stack = rolledResults.get(i); ItemHelper.addToList(stack, list); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java index 47da85aa0..2ff2c545a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java @@ -1,21 +1,22 @@ package com.simibubi.create.content.contraptions.components.fan; -import java.util.List; - import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.logistics.InWorldProcessing; import com.simibubi.create.content.logistics.InWorldProcessing.SplashingInv; - import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; + +@ParametersAreNonnullByDefault public class SplashingRecipe extends ProcessingRecipe { public SplashingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { + List results, int processingDuration) { super(AllRecipeTypes.SPLASHING, id, group, ingredients, results, processingDuration); } @@ -23,9 +24,10 @@ public class SplashingRecipe extends ProcessingRecipe ingredients, - List results, int processingDuration) { + List results, int processingDuration) { super(AllRecipeTypes.MILLING, id, group, ingredients, results, processingDuration); } @@ -22,12 +23,12 @@ public class MillingRecipe extends AbstractCrushingRecipe { public boolean matches(RecipeWrapper inv, World worldIn) { if (inv.isEmpty()) return false; - return ingredients.get(0).test(inv.getStackInSlot(0)); + return ingredients.get(0) + .test(inv.getStackInSlot(0)); } - + @Override protected int getMaxOutputCount() { return 4; } - } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java index bccc88d6d..434c6883c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java @@ -94,7 +94,7 @@ public class MillstoneTileEntity extends KineticTileEntity { ItemStack stackInSlot = inputInv.getStackInSlot(0); stackInSlot.shrink(1); inputInv.setStackInSlot(0, stackInSlot); - lastRecipe.rollResults().forEach(stack -> ItemHandlerHelper.insertItemStacked(outputInv, stack, false)); + lastRecipe.rollResults().forEachItemStack(stack -> ItemHandlerHelper.insertItemStacked(outputInv, stack, false)); sendData(); markDirty(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index 9d89b97d3..9c566b870 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -1,14 +1,17 @@ package com.simibubi.create.content.contraptions.components.mixer; -import java.util.ArrayList; import java.util.Comparator; import java.util.LinkedList; import java.util.List; import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.AllTags; import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity; +import com.simibubi.create.content.contraptions.fluids.CombinedFluidHandler; import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity; import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory; +import com.simibubi.create.content.contraptions.processing.CombinedItemFluidList; +import com.simibubi.create.content.contraptions.processing.HeaterTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform; import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour; @@ -23,6 +26,7 @@ import net.minecraft.item.crafting.Ingredient; import net.minecraft.nbt.CompoundNBT; import net.minecraft.particles.ItemParticleData; import net.minecraft.particles.ParticleTypes; +import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction.Axis; import net.minecraft.util.NonNullList; @@ -65,7 +69,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { } public float getRenderedHeadOffset(float partialTicks) { - int localTick = 0; + int localTick; float offset = 0; if (running) { if (runningTicks < 20) { @@ -121,7 +125,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { @Override public void lazyTick() { super.lazyTick(); - if (world.isRemote && running && !basinItemInv.isPresent()) + if (world != null && world.isRemote && running && !basinItemInv.isPresent()) updateBasin(); } @@ -163,7 +167,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { public void renderParticles() { IItemHandler itemHandler = basinItemInv.orElse(null); BasinInventory inv = (BasinInventory) itemHandler; - if (inv == null) + if (inv == null || world == null) return; for (int slot = 0; slot < inv.getInputHandler() @@ -204,14 +208,16 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { .allMatch(ingredient -> (ingredient.isSimple() || ingredient.getMatchingStacks().length == 1))) return false; - List remaining = new ArrayList<>(); + CombinedItemFluidList remaining = new CombinedItemFluidList(); inputs.forEachItemStack(stack -> remaining.add(stack.copy())); + basinFluidInv.ifPresent( + fluidInv -> ((CombinedFluidHandler) fluidInv).forEachTank(fluidStack -> remaining.add(fluidStack.copy()))); // sort by leniency List sortedIngredients = new LinkedList<>(ingredients); sortedIngredients.sort(Comparator.comparingInt(i -> i.getMatchingStacks().length)); Ingredients: for (Ingredient ingredient : sortedIngredients) { - for (ItemStack stack : remaining) { + for (ItemStack stack : remaining.getItemStacks()) { if (stack.isEmpty()) continue; if (ingredient.test(stack)) { @@ -221,7 +227,10 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { } return false; } - return true; + + if (!(recipe instanceof MixingRecipe)) + return true; + return ((MixingRecipe) recipe).getHeatLevelRequired() <= getHeatLevelApplied(); } @Override @@ -258,4 +267,13 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { return running; } + private int getHeatLevelApplied() { + if (world == null) + return 0; + TileEntity te = world.getTileEntity(pos.down(3)); + if (!(te instanceof HeaterTileEntity)) + return AllTags.AllBlockTags.FAN_HEATERS.matches(world.getBlockState(pos.down(3))) ? 1 : 0; + return ((HeaterTileEntity) te).getHeatLevel(); + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java index 58ee10ff0..80aa7b53b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java @@ -1,52 +1,58 @@ package com.simibubi.create.content.contraptions.components.mixer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; - import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInputInventory; import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; - import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +import javax.annotation.Nonnull; +import java.util.*; public class MixingRecipe extends ProcessingRecipe { public MixingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { - super(AllRecipeTypes.MIXING, id, group, ingredients, results, processingDuration); + List results, int processingDuration, List fluidIngredients, + List fluidResults, int requiredHeat) { + super(AllRecipeTypes.MIXING, id, group, ingredients, results, processingDuration, fluidIngredients, + fluidResults, requiredHeat); + } + + public static MixingRecipe of(IRecipe recipe) { + return new MixingRecipe(recipe.getId(), recipe.getGroup(), ProcessingIngredient.list(recipe.getIngredients()), + Collections.singletonList(new ProcessingOutput(recipe.getRecipeOutput(), 1)), -1, null, null, 0); } @Override protected int getMaxInputCount() { return 9; } - + @Override protected int getMaxOutputCount() { return 1; } - + @Override protected boolean canHaveCatalysts() { return true; } - + @Override - public boolean matches(BasinInputInventory inv, World worldIn) { + public boolean matches(BasinInputInventory inv, @Nonnull World worldIn) { if (inv.isEmpty()) return false; - NonNullList ingredients = getIngredients(); - if (!ingredients.stream().allMatch(Ingredient::isSimple)) + NonNullList ingredients = this.getIngredients(); + if (!ingredients.stream() + .allMatch(Ingredient::isSimple)) return false; List remaining = new ArrayList<>(); @@ -59,7 +65,7 @@ public class MixingRecipe extends ProcessingRecipe { // sort by leniency List sortedIngredients = new LinkedList<>(ingredients); - sortedIngredients.sort((i1, i2) -> i1.getMatchingStacks().length - i2.getMatchingStacks().length); + sortedIngredients.sort(Comparator.comparingInt(i -> i.getMatchingStacks().length)); Ingredients: for (Ingredient ingredient : sortedIngredients) { for (ItemStack stack : remaining) { if (stack.isEmpty()) @@ -74,9 +80,22 @@ public class MixingRecipe extends ProcessingRecipe { return true; } - public static MixingRecipe of(IRecipe recipe) { - return new MixingRecipe(recipe.getId(), recipe.getGroup(), ProcessingIngredient.list(recipe.getIngredients()), - Arrays.asList(new ProcessingOutput(recipe.getRecipeOutput(), 1)), -1); + @Override + protected boolean canHaveFluidIngredient() { + return true; } + @Override + protected boolean canHaveFluidOutput() { + return true; + } + + @Override + protected boolean requiresHeating() { + return this.requiredHeat > 0; + } + + public int getHeatLevelRequired() { + return requiredHeat; + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index e35e23ae7..94ffcfdd2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -6,8 +6,10 @@ import java.util.Optional; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllSoundEvents; +import com.simibubi.create.content.contraptions.fluids.CombinedFluidHandler; import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity; import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory; +import com.simibubi.create.content.contraptions.processing.CombinedItemFluidList; import com.simibubi.create.content.logistics.InWorldProcessing; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.item.ItemHelper; @@ -297,11 +299,12 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { .allMatch(Ingredient::isSimple)) return false; - List remaining = new ArrayList<>(); + CombinedItemFluidList remaining = new CombinedItemFluidList(); inputs.forEachItemStack(stack -> remaining.add(stack.copy())); + basinFluidInv.ifPresent(fluidInv -> ((CombinedFluidHandler) fluidInv).forEachTank(fluidStack -> remaining.add(fluidStack.copy()))); Ingredients: for (Ingredient ingredient : ingredients) { - for (ItemStack stack : remaining) { + for (ItemStack stack : remaining.getItemStacks()) { if (stack.isEmpty()) continue; if (ingredient.test(stack)) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java index c8efe3b34..3ff546dd5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java @@ -1,20 +1,21 @@ package com.simibubi.create.content.contraptions.components.press; -import java.util.List; - import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity.PressingInv; import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; - import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; + +@ParametersAreNonnullByDefault public class PressingRecipe extends ProcessingRecipe { public PressingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { + List results, int processingDuration) { super(AllRecipeTypes.PRESSING, id, group, ingredients, results, processingDuration); } @@ -22,12 +23,12 @@ public class PressingRecipe extends ProcessingRecipe { public CuttingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { + List results, int processingDuration) { super(AllRecipeTypes.CUTTING, id, group, ingredients, results, processingDuration); } @@ -22,9 +23,10 @@ public class CuttingRecipe extends ProcessingRecipe { public boolean matches(RecipeWrapper inv, World worldIn) { if (inv.isEmpty()) return false; - return ingredients.get(0).test(inv.getStackInSlot(0)); + return ingredients.get(0) + .test(inv.getStackInSlot(0)); } - + @Override protected int getMaxOutputCount() { return 4; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index 9fd313749..e127b162b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -248,7 +248,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { for (int roll = 0; roll < rolls; roll++) { List results = new LinkedList(); if (recipe instanceof CuttingRecipe) - results = ((CuttingRecipe) recipe).rollResults(); + results = ((CuttingRecipe) recipe).rollResults().getItemStacks(); else if (recipe instanceof StonecuttingRecipe) results.add(recipe.getRecipeOutput() .copy()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java index 492c3f106..18645dedd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java @@ -37,7 +37,7 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { protected IRecipe lastRecipe; protected LazyOptional basinItemInv = LazyOptional.empty(); protected LazyOptional basinFluidInv = LazyOptional.empty(); - protected MultiIngredientTypeList inputs; + protected CombinedItemFluidList inputs; public BasinOperatingTileEntity(TileEntityType typeIn) { super(typeIn); @@ -59,7 +59,7 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { } public void gatherInputs() { - inputs = new MultiIngredientTypeList(); + inputs = new CombinedItemFluidList(); basinItemInv.ifPresent(inv -> { IItemHandlerModifiable inputHandler = ((BasinInventory) inv).getInputHandler(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java index 78f4d7b95..f96fc6384 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java @@ -3,6 +3,8 @@ package com.simibubi.create.content.contraptions.processing; import java.util.List; import java.util.Optional; +import javax.annotation.Nonnull; + import com.simibubi.create.content.contraptions.fluids.CombinedFluidHandler; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; @@ -10,6 +12,7 @@ import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputB import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; @@ -24,8 +27,6 @@ import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.items.wrapper.RecipeWrapper; -import javax.annotation.Nonnull; - public class BasinTileEntity extends SmartTileEntity implements ITickableTileEntity { public boolean contentsChanged; @@ -121,7 +122,7 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt super.read(compound); inputItemInventory.deserializeNBT(compound.getCompound("InputItems")); outputItemInventory.deserializeNBT(compound.getCompound("OutputItems")); - if (compound.hasUniqueId("fluids")) + if (compound.contains("fluids")) fluidInventory .ifPresent(combinedFluidHandler -> combinedFluidHandler.readFromNBT(compound.getList("fluids", 10))); } @@ -131,7 +132,10 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt super.write(compound); compound.put("InputItems", inputItemInventory.serializeNBT()); compound.put("OutputItems", outputItemInventory.serializeNBT()); - fluidInventory.ifPresent(combinedFuidHandler -> compound.put("fluids", combinedFuidHandler.getListNBT())); + fluidInventory.ifPresent(combinedFuidHandler -> { + ListNBT nbt = combinedFuidHandler.getListNBT(); + compound.put("fluids", nbt); + }); return compound; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/MultiIngredientTypeList.java b/src/main/java/com/simibubi/create/content/contraptions/processing/CombinedItemFluidList.java similarity index 50% rename from src/main/java/com/simibubi/create/content/contraptions/processing/MultiIngredientTypeList.java rename to src/main/java/com/simibubi/create/content/contraptions/processing/CombinedItemFluidList.java index 1206bc283..f5eac96d6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/MultiIngredientTypeList.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/CombinedItemFluidList.java @@ -6,23 +6,31 @@ import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; import java.util.function.Consumer; -public class MultiIngredientTypeList { - private final ArrayList itemIngredients = new ArrayList<>(); - private final ArrayList fluidIngredients = new ArrayList<>(); +public class CombinedItemFluidList { + private final ArrayList itemStacks = new ArrayList<>(); + private final ArrayList fluidStacks = new ArrayList<>(); public void add(ItemStack itemstack) { - itemIngredients.add(itemstack); + itemStacks.add(itemstack); } public void add(FluidStack fluidStack) { - fluidIngredients.add(fluidStack); + fluidStacks.add(fluidStack); } public void forEachItemStack(Consumer itemStackConsumer) { - itemIngredients.forEach(itemStackConsumer); + itemStacks.forEach(itemStackConsumer); } public void forEachFluidStack(Consumer fluidStackConsumer) { - fluidIngredients.forEach(fluidStackConsumer); + fluidStacks.forEach(fluidStackConsumer); + } + + public ArrayList getItemStacks() { + return itemStacks; + } + + public ArrayList getFluidStacks() { + return fluidStacks; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlock.java new file mode 100644 index 000000000..b4ffbfdac --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlock.java @@ -0,0 +1,56 @@ +package com.simibubi.create.content.contraptions.processing; + +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.foundation.block.ITE; +import mcp.MethodsReturnNonnullByDefault; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; + +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; + +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +public class HeaterBlock extends Block implements ITE { + + public HeaterBlock(Properties properties) { + super(properties); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Nullable + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.HEATER.create(); + } + + @Override + public Class getTileEntityClass() { + return HeaterTileEntity.class; + } + + @Override + public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + BlockRayTraceResult blockRayTraceResult) { + TileEntity te = world.getTileEntity(pos); + if (te instanceof HeaterTileEntity && ((HeaterTileEntity) te).tryUpdateFuel(player.getHeldItem(hand))) { + if (!player.isCreative()) + player.getHeldItem(hand) + .shrink(1); + return ActionResultType.SUCCESS; + } + return ActionResultType.PASS; + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterRenderer.java new file mode 100644 index 000000000..b3bf13311 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterRenderer.java @@ -0,0 +1,53 @@ +package com.simibubi.create.content.contraptions.processing; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; +import com.simibubi.create.foundation.utility.SuperByteBuffer; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.Vector3f; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.util.Direction; + +public class HeaterRenderer extends SafeTileEntityRenderer { + private static final Minecraft INSTANCE = Minecraft.getInstance(); + + public HeaterRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + @Override + protected void renderSafe(HeaterTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, + int light, int overlay) { + AllBlockPartials blazeModel; + switch (te.getHeatLevel()) { + case 2: + blazeModel = AllBlockPartials.BLAZE_HEATER_BLAZE_TWO; + break; + case 3: + blazeModel = AllBlockPartials.BLAZE_HEATER_BLAZE_THREE; + break; + case 4: + blazeModel = AllBlockPartials.BLAZE_HEATER_BLAZE_FOUR; + break; + default: + blazeModel = AllBlockPartials.BLAZE_HEATER_BLAZE_ONE; + } + Vector3f difference = new Vector3f(INSTANCE.player.getPositionVector() + .subtract(te.getPos() + .getX() + 0.5, 0, + te.getPos() + .getZ() + 0.5) + .mul(1, 0, 1)); + difference.normalize(); + + SuperByteBuffer blazeBuffer = blazeModel.renderOn(te.getBlockState()); + blazeBuffer.rotateCentered(Direction.UP, + (float) ((difference.getX() < 0 ? 1 : -1) * Math.acos(Direction.NORTH.getUnitVector() + .dot(difference)))); + blazeBuffer.renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterTileEntity.java new file mode 100644 index 000000000..8cc05bae8 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterTileEntity.java @@ -0,0 +1,91 @@ +package com.simibubi.create.content.contraptions.processing; + +import java.util.List; + +import com.simibubi.create.AllItems; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; +import net.minecraftforge.common.ForgeHooks; + +public class HeaterTileEntity extends SmartTileEntity { + + int fuelLevel; + private int burnTimeRemaining; + private int bufferedHeatLevel; + + public HeaterTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + fuelLevel = 0; + burnTimeRemaining = 0; + bufferedHeatLevel = 1; + } + + @Override + public void tick() { + super.tick(); + if (burnTimeRemaining > 0) { + burnTimeRemaining--; + if (burnTimeRemaining == 0 && fuelLevel > 0) { + fuelLevel--; + sendData(); + } + markDirty(); + } + } + + @Override + public void lazyTick() { + super.lazyTick(); + updateHeatLevel(); + } + + @Override + public void addBehaviours(List behaviours) {} + + @Override + public CompoundNBT write(CompoundNBT compound) { + compound.putInt("fuelLevel", fuelLevel); + compound.putInt("burnTimeRemaining", burnTimeRemaining); + return super.write(compound); + } + + @Override + public void read(CompoundNBT compound) { + fuelLevel = compound.getInt("fuelLevel"); + burnTimeRemaining = compound.getInt("burnTimeRemaining"); + super.read(compound); + if (fuelLevel == 0) { + burnTimeRemaining = 0; + markDirty(); + } + } + + boolean tryUpdateFuel(ItemStack itemStack) { + int burnTime = itemStack.getItem() + .getBurnTime(itemStack); + int newFuelLevel = 1; // todo: int newFuelLevel = itemStack.getItem() == AllItems.SUPER_SPECIAL_FUEL.get() ? 2 : 1; + if (burnTime == -1) + burnTime = ForgeHooks.getBurnTime(itemStack); + if (burnTime < burnTimeRemaining && newFuelLevel <= fuelLevel) + return false; + burnTimeRemaining = burnTime; + fuelLevel = newFuelLevel; + updateHeatLevel(); + return true; + } + + public int getHeatLevel() { + return bufferedHeatLevel; + } + + private void updateHeatLevel() { + bufferedHeatLevel = 1 + fuelLevel; + // todo: check for fan + markDirty(); + sendData(); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java index aacc6d39c..186cf0b72 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java @@ -7,9 +7,9 @@ import net.minecraft.network.PacketBuffer; public class ProcessingOutput { - private static Random r = new Random(); - private ItemStack stack; - private float chance; + private static final Random r = new Random(); + private final ItemStack stack; + private final float chance; public ProcessingOutput(ItemStack stack, float chance) { this.stack = stack; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java index ae665072a..8134ee208 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java @@ -1,12 +1,8 @@ package com.simibubi.create.content.contraptions.processing; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.Create; - +import mcp.MethodsReturnNonnullByDefault; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; @@ -15,18 +11,35 @@ import net.minecraft.item.crafting.IRecipeType; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; +import java.util.stream.Collectors; + +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault public abstract class ProcessingRecipe implements IRecipe { protected final List ingredients; - private final List results; - private final IRecipeType type; - private final IRecipeSerializer serializer; protected final ResourceLocation id; protected final String group; protected final int processingDuration; + protected final List fluidIngredients; + protected final List fluidResults; + protected final int requiredHeat; + private final List results; + private final IRecipeType type; + private final IRecipeSerializer serializer; public ProcessingRecipe(AllRecipeTypes recipeType, ResourceLocation id, String group, - List ingredients, List results, int processingDuration) { + List ingredients, List results, int processingDuration) { + this(recipeType, id, group, ingredients, results, processingDuration, null, null, 0); + } + + public ProcessingRecipe(AllRecipeTypes recipeType, ResourceLocation id, String group, + List ingredients, List results, int processingDuration, + @Nullable List fluidIngredients, @Nullable List fluidResults, int requiredHeat) { this.type = recipeType.type; this.serializer = recipeType.serializer; this.id = id; @@ -34,20 +47,23 @@ public abstract class ProcessingRecipe implements IRecipe< this.ingredients = ingredients; this.results = results; this.processingDuration = processingDuration; + this.fluidIngredients = fluidIngredients; + this.fluidResults = fluidResults; + this.requiredHeat = requiredHeat; validate(recipeType); } private void validate(AllRecipeTypes recipeType) { if (ingredients.size() > getMaxInputCount()) Create.logger.warn("Your custom " + recipeType.name() + " recipe (" + id.toString() + ") has more inputs (" - + ingredients.size() + ") than supported (" + getMaxInputCount() + ")."); + + ingredients.size() + ") than supported (" + getMaxInputCount() + ")."); if (results.size() > getMaxOutputCount()) Create.logger.warn("Your custom " + recipeType.name() + " recipe (" + id.toString() + ") has more outputs (" - + results.size() + ") than supported (" + getMaxOutputCount() + ")."); + + results.size() + ") than supported (" + getMaxOutputCount() + ")."); ingredients.forEach(i -> { if (i.isCatalyst() && !canHaveCatalysts()) Create.logger.warn("Your custom " + recipeType.name() + " recipe (" + id.toString() - + ") has a catalyst ingredient, which act like a regular ingredient in this type."); + + ") has a catalyst ingredient, which act like a regular ingredient in this type."); }); } @@ -62,14 +78,14 @@ public abstract class ProcessingRecipe implements IRecipe< return processingDuration; } - public List rollResults() { - List stacks = new ArrayList<>(); - for (ProcessingOutput output : getRollableResults()) { + public CombinedItemFluidList rollResults() { + CombinedItemFluidList results = new CombinedItemFluidList(); + for (ProcessingOutput output : getRollableItemResults()) { ItemStack stack = output.rollOutput(); if (!stack.isEmpty()) - stacks.add(stack); + results.add(stack); } - return stacks; + return results; } @Override @@ -84,7 +100,9 @@ public abstract class ProcessingRecipe implements IRecipe< @Override public ItemStack getRecipeOutput() { - return getRollableResults().isEmpty() ? ItemStack.EMPTY : getRollableResults().get(0).getStack(); + return getRollableItemResults().isEmpty() ? ItemStack.EMPTY + : getRollableItemResults().get(0) + .getStack(); } @Override @@ -119,15 +137,29 @@ public abstract class ProcessingRecipe implements IRecipe< return false; } - public List getRollableResults() { + public List getRollableItemResults() { return results; } - + public List getRollableIngredients() { return ingredients; } public List getPossibleOutputs() { - return getRollableResults().stream().map(output -> output.getStack()).collect(Collectors.toList()); + return getRollableItemResults().stream() + .map(ProcessingOutput::getStack) + .collect(Collectors.toList()); + } + + protected boolean canHaveFluidIngredient() { + return false; + } + + protected boolean canHaveFluidOutput() { + return false; + } + + protected boolean requiresHeating() { + return false; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java index aff3b800f..3c8de24d8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java @@ -1,20 +1,27 @@ package com.simibubi.create.content.contraptions.processing; -import java.util.ArrayList; -import java.util.List; - import com.google.gson.JsonElement; import com.google.gson.JsonObject; - +import mcp.MethodsReturnNonnullByDefault; +import net.minecraft.fluid.Fluid; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.network.PacketBuffer; import net.minecraft.util.JSONUtils; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.registries.ForgeRegistries; +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.ArrayList; +import java.util.List; + +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault public class ProcessingRecipeSerializer> - extends net.minecraftforge.registries.ForgeRegistryEntry> implements IRecipeSerializer { + extends net.minecraftforge.registries.ForgeRegistryEntry> implements IRecipeSerializer { protected final IRecipeFactory factory; @@ -27,32 +34,59 @@ public class ProcessingRecipeSerializer> String s = JSONUtils.getString(json, "group", ""); List ingredients = new ArrayList<>(); + List fluidIngredients = new ArrayList<>(); for (JsonElement e : JSONUtils.getJsonArray(json, "ingredients")) { - int count = 1; - if (JSONUtils.hasField((JsonObject) e, "count")) { - count = JSONUtils.getInt(e.getAsJsonObject().get("count"), "count"); - } - for(int i = 0; i < count; i++) { - ingredients.add(ProcessingIngredient.parse(e.getAsJsonObject())); + JsonObject entry = e.getAsJsonObject(); + if (JSONUtils.hasField(entry, "fluid")) { + addFluidToList(fluidIngredients, entry); + } else { + int count = 1; + if (JSONUtils.hasField(entry, "count")) { + count = JSONUtils.getInt(entry, "count"); + } + for (int i = 0; i < count; i++) { + ingredients.add(ProcessingIngredient.parse(entry)); + } } } List results = new ArrayList<>(); + List fluidResults = new ArrayList<>(); for (JsonElement e : JSONUtils.getJsonArray(json, "results")) { - String s1 = JSONUtils.getString(e.getAsJsonObject().get("item"), "item"); - int i = JSONUtils.getInt(e.getAsJsonObject().get("count"), "count"); - float chance = 1; - if (JSONUtils.hasField((JsonObject) e, "chance")) - chance = JSONUtils.getFloat(e.getAsJsonObject().get("chance"), "chance"); - ItemStack itemstack = new ItemStack(Registry.ITEM.getOrDefault(new ResourceLocation(s1)), i); - results.add(new ProcessingOutput(itemstack, chance)); + JsonObject entry = e.getAsJsonObject(); + if (JSONUtils.hasField(entry, "fluid")) { + addFluidToList(fluidResults, entry); + } else { + String s1 = JSONUtils.getString(entry, "item"); + int i = JSONUtils.getInt(entry, "count"); + float chance = 1; + if (JSONUtils.hasField(entry, "chance")) + chance = JSONUtils.getFloat(entry, "chance"); + ItemStack itemstack = new ItemStack(Registry.ITEM.getOrDefault(new ResourceLocation(s1)), i); + results.add(new ProcessingOutput(itemstack, chance)); + } } int duration = -1; if (JSONUtils.hasField(json, "processingTime")) duration = JSONUtils.getInt(json, "processingTime"); - return this.factory.create(recipeId, s, ingredients, results, duration); + int requiredHeat = 0; + if (JSONUtils.hasField(json, "requiredHeat")) + requiredHeat = JSONUtils.getInt(json, "requiredHeat"); + + return this.factory.create(recipeId, s, ingredients, results, duration, fluidIngredients, fluidResults, + requiredHeat); + } + + private void addFluidToList(List fluidStacks, JsonObject entry) { + Fluid fluid = ForgeRegistries.FLUIDS.getValue(ResourceLocation.tryCreate(JSONUtils.getString(entry, "fluid"))); + int amount = 1; + if (JSONUtils.hasField(entry, "amount")) { + amount = JSONUtils.getInt(entry, "amount"); + } + if (fluid != null && amount > 0) + fluidStacks.add(new FluidStack(fluid, amount)); } public T read(ResourceLocation recipeId, PacketBuffer buffer) { @@ -63,14 +97,26 @@ public class ProcessingRecipeSerializer> for (int i = 0; i < ingredientCount; i++) ingredients.add(ProcessingIngredient.parse(buffer)); + int fluidInputCount = buffer.readInt(); + List fluidIngredients = new ArrayList<>(); + for (int i = 0; i < fluidInputCount; i++) + fluidIngredients.add(FluidStack.readFromPacket(buffer)); + List results = new ArrayList<>(); int outputCount = buffer.readInt(); for (int i = 0; i < outputCount; i++) results.add(ProcessingOutput.read(buffer)); - int duration = buffer.readInt(); + int fluidOutputCount = buffer.readInt(); + List fluidResults = new ArrayList<>(); + for (int i = 0; i < fluidOutputCount; i++) + fluidResults.add(FluidStack.readFromPacket(buffer)); - return this.factory.create(recipeId, s, ingredients, results, duration); + int duration = buffer.readInt(); + int requiredHeat = buffer.readInt(); + + return this.factory.create(recipeId, s, ingredients, results, duration, fluidIngredients, fluidResults, + requiredHeat); } public void write(PacketBuffer buffer, T recipe) { @@ -78,16 +124,49 @@ public class ProcessingRecipeSerializer> buffer.writeInt(recipe.ingredients.size()); recipe.ingredients.forEach(i -> i.write(buffer)); + if (recipe.canHaveFluidIngredient() && recipe.fluidIngredients != null) { + buffer.writeInt(recipe.fluidIngredients.size()); + recipe.fluidIngredients.forEach(fluidStack -> fluidStack.writeToPacket(buffer)); + } else { + buffer.writeInt(0); + } - buffer.writeInt(recipe.getRollableResults().size()); - recipe.getRollableResults().forEach(i -> i.write(buffer)); + buffer.writeInt(recipe.getRollableItemResults() + .size()); + recipe.getRollableItemResults() + .forEach(i -> i.write(buffer)); + if (recipe.canHaveFluidOutput() && recipe.fluidResults != null) { + buffer.writeInt(recipe.fluidResults.size()); + recipe.fluidResults.forEach(fluidStack -> fluidStack.writeToPacket(buffer)); + } else { + buffer.writeInt(0); + } buffer.writeInt(recipe.processingDuration); + buffer.writeInt(recipe.requiredHeat); } public interface IRecipeFactory> { - T create(ResourceLocation id, String group, List ingredients, List results, - int duration); + default T create(ResourceLocation recipeId, String s, List ingredients, + List results, int duration, @Nullable List fluidIngredients, + @Nullable List fluidResults, int requiredHeat) { + return create(recipeId, s, ingredients, results, duration); + } + + T create(ResourceLocation recipeId, String s, List ingredients, + List results, int duration); } + public interface IExtendedRecipeFactory> extends IRecipeFactory { + @Override + T create(ResourceLocation recipeId, String s, List ingredients, + List results, int duration, @Nullable List fluidIngredients, + @Nullable List fluidResults, int requiredHeat); + + @Override + default T create(ResourceLocation recipeId, String s, List ingredients, + List results, int duration) { + throw new IllegalStateException("Incorrect recipe creation function used: " + recipeId); + } + } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java index c1c4c7f0f..d06c16b4c 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.curiosities.tools; import com.simibubi.create.foundation.utility.VecHelper; +import mcp.MethodsReturnNonnullByDefault; import net.minecraft.enchantment.Enchantment; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.item.ItemEntity; @@ -24,6 +25,10 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; +import javax.annotation.ParametersAreNonnullByDefault; + +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault public class SandPaperItem extends Item { public SandPaperItem(Properties properties) { @@ -68,8 +73,6 @@ public class SandPaperItem extends Item { return FAIL; BlockRayTraceResult ray = (BlockRayTraceResult) raytraceresult; Vec3d hitVec = ray.getHitVec(); - if (hitVec == null) - return FAIL; AxisAlignedBB bb = new AxisAlignedBB(hitVec, hitVec).grow(1f); ItemEntity pickUp = null; diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java index b4e588e8a..c2a752b41 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java @@ -1,28 +1,26 @@ package com.simibubi.create.content.curiosities.tools; -import java.util.List; - import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe.SandPaperInv; - import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.DamageSource; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.RecipeWrapper; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; + +@ParametersAreNonnullByDefault public class SandPaperPolishingRecipe extends ProcessingRecipe { - public static DamageSource CURSED_POLISHING = new DamageSource("create.curse_polish").setExplosion(); - public SandPaperPolishingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { + List results, int processingDuration) { super(AllRecipeTypes.SANDPAPER_POLISHING, id, group, ingredients, results, processingDuration); } @@ -33,18 +31,21 @@ public class SandPaperPolishingRecipe extends ProcessingRecipe { public static ItemStack applyPolish(World world, Vec3d position, ItemStack stack, ItemStack sandPaperStack) { List> matchingRecipes = getMatchingRecipes(world, stack); if (!matchingRecipes.isEmpty()) - return matchingRecipes.get(0).getCraftingResult(new SandPaperInv(stack)).copy(); + return matchingRecipes.get(0) + .getCraftingResult(new SandPaperInv(stack)) + .copy(); return stack; } + public static List> getMatchingRecipes(World world, ItemStack stack) { + return world.getRecipeManager() + .getRecipes(AllRecipeTypes.SANDPAPER_POLISHING.getType(), new SandPaperInv(stack), world); + } + @Override public boolean matches(SandPaperInv inv, World worldIn) { - return ingredients.get(0).test(inv.getStackInSlot(0)); - } - - public static List> getMatchingRecipes(World world, ItemStack stack) { - return world.getRecipeManager().getRecipes(AllRecipeTypes.SANDPAPER_POLISHING.getType(), new SandPaperInv(stack), - world); + return ingredients.get(0) + .test(inv.getStackInSlot(0)); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java b/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java index b2765dd7d..9aa814255 100644 --- a/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java +++ b/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java @@ -263,7 +263,7 @@ public class InWorldProcessing { if (recipe instanceof ProcessingRecipe) { stacks = new ArrayList<>(); for (int i = 0; i < stackIn.getCount(); i++) { - List rollResults = ((ProcessingRecipe) recipe).rollResults(); + List rollResults = ((ProcessingRecipe) recipe).rollResults().getItemStacks(); for (ItemStack stack : rollResults) { for (ItemStack previouslyRolled : stacks) { if (stack.isEmpty()) diff --git a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java index 4b0c993a8..ad0f06f01 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java @@ -21,6 +21,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.mou import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock; import com.simibubi.create.content.contraptions.fluids.FluidPipeBlock; import com.simibubi.create.content.contraptions.fluids.FluidTankBlock; +import com.simibubi.create.content.contraptions.processing.HeaterBlock; import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverBlock; import com.simibubi.create.content.palettes.PavedBlock; import com.simibubi.create.foundation.utility.Iterate; @@ -212,6 +213,10 @@ public class BlockStateGen { .build(); }); } + + public static NonNullBiConsumer, RegistrateBlockstateProvider> blazeHeater(){ + return (c, p) -> ConfiguredModel.builder().modelFile(p.models().getExistingFile(p.modLoc("block/" + c.getName() + "/block"))).build(); + } public static NonNullBiConsumer, RegistrateBlockstateProvider> reinforcedRail() { return (c, p) -> p.getVariantBuilder(c.get()) diff --git a/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java b/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java index 2c25c51bd..f5f82a7f6 100644 --- a/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java +++ b/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java @@ -1,13 +1,15 @@ package com.simibubi.create.foundation.data; +import mcp.MethodsReturnNonnullByDefault; + import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.block.material.Material; import net.minecraft.block.material.MaterialColor; import net.minecraft.block.material.PushReaction; +@MethodsReturnNonnullByDefault public class SharedProperties { - public static Material beltMaterial = new Material(MaterialColor.GRAY, false, true, true, true, true, false, false, PushReaction.NORMAL); @@ -22,5 +24,4 @@ public class SharedProperties { public static Block wooden() { return Blocks.STRIPPED_SPRUCE_WOOD; } - } diff --git a/src/main/resources/assets/create/models/block/blaze_heater/blaze/four.json b/src/main/resources/assets/create/models/block/blaze_heater/blaze/four.json new file mode 100644 index 000000000..cc0f8c54f --- /dev/null +++ b/src/main/resources/assets/create/models/block/blaze_heater/blaze/four.json @@ -0,0 +1,29 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "1": "create:block/tamed_blaze" + }, + "elements": [ + { + "name": "Blaze 4", + "from": [4, 6, 4], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 6, 6]}, + "faces": { + "north": {"uv": [12, 0, 16, 4], "texture": "#1"}, + "east": {"uv": [8, 0, 12, 4], "texture": "#1"}, + "south": {"uv": [8, 0, 12, 4], "texture": "#1"}, + "west": {"uv": [8, 0, 12, 4], "texture": "#1"}, + "up": {"uv": [8, 4, 12, 8], "texture": "#1"}, + "down": {"uv": [12, 4, 16, 8], "texture": "#1"} + } + } + ], + "groups": [ + { + "name": "Blazes", + "origin": [8, 8, 8], + "children": [15, 16, 17, 18] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_heater/blaze/one.json b/src/main/resources/assets/create/models/block/blaze_heater/blaze/one.json new file mode 100644 index 000000000..b0b318ff6 --- /dev/null +++ b/src/main/resources/assets/create/models/block/blaze_heater/blaze/one.json @@ -0,0 +1,28 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "1": "create:block/tamed_blaze" + }, + "elements": [ + { + "name": "Blaze 1", + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "north": {"uv": [8, 8, 10, 10], "texture": "#1"}, + "east": {"uv": [6, 8, 8, 10], "texture": "#1"}, + "south": {"uv": [6, 8, 8, 10], "texture": "#1"}, + "west": {"uv": [6, 8, 8, 10], "texture": "#1"}, + "up": {"uv": [6, 10, 8, 12], "texture": "#1"}, + "down": {"uv": [8, 10, 10, 12], "texture": "#1"} + } + } + ], + "groups": [ + { + "name": "Blazes", + "origin": [8, 8, 8], + "children": [15, 16, 17, 18] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_heater/blaze/three.json b/src/main/resources/assets/create/models/block/blaze_heater/blaze/three.json new file mode 100644 index 000000000..a9d78104f --- /dev/null +++ b/src/main/resources/assets/create/models/block/blaze_heater/blaze/three.json @@ -0,0 +1,29 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "1": "create:block/tamed_blaze" + }, + "elements": [ + { + "name": "Blaze 3", + "from": [4, 6, 4], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 6, 6]}, + "faces": { + "north": {"uv": [4, 0, 8, 4], "texture": "#1"}, + "east": {"uv": [0, 0, 4, 4], "texture": "#1"}, + "south": {"uv": [0, 0, 4, 4], "texture": "#1"}, + "west": {"uv": [0, 0, 4, 4], "texture": "#1"}, + "up": {"uv": [0, 4, 4, 8], "texture": "#1"}, + "down": {"uv": [4, 4, 8, 8], "texture": "#1"} + } + } + ], + "groups": [ + { + "name": "Blazes", + "origin": [8, 8, 8], + "children": [15, 16, 17, 18] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_heater/blaze/two.json b/src/main/resources/assets/create/models/block/blaze_heater/blaze/two.json new file mode 100644 index 000000000..ab5e5aea4 --- /dev/null +++ b/src/main/resources/assets/create/models/block/blaze_heater/blaze/two.json @@ -0,0 +1,29 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "1": "create:block/tamed_blaze" + }, + "elements": [ + { + "name": "Blaze 2", + "from": [5, 6, 5], + "to": [11, 12, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 7, 7]}, + "faces": { + "north": {"uv": [3, 8, 6, 11], "texture": "#1"}, + "east": {"uv": [0, 8, 3, 11], "texture": "#1"}, + "south": {"uv": [0, 8, 3, 11], "texture": "#1"}, + "west": {"uv": [0, 8, 3, 11], "texture": "#1"}, + "up": {"uv": [0, 11, 3, 14], "texture": "#1"}, + "down": {"uv": [3, 11, 6, 14], "texture": "#1"} + } + } + ], + "groups": [ + { + "name": "Blazes", + "origin": [8, 8, 8], + "children": [15, 16, 17, 18] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_heater/block.json b/src/main/resources/assets/create/models/block/blaze_heater/block.json new file mode 100644 index 000000000..5f2cc3495 --- /dev/null +++ b/src/main/resources/assets/create/models/block/blaze_heater/block.json @@ -0,0 +1,236 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/blaze_heater_brazier", + "particle": "create:block/blaze_heater_brazier" + }, + "elements": [ + { + "name": "Brazier Sides 1", + "from": [2, 5, 2], + "to": [14, 14, 14], + "faces": { + "north": {"uv": [1.5, 2, 6.5, 5.5], "texture": "#0"}, + "east": {"uv": [1.5, 2, 6.5, 5.5], "texture": "#0"}, + "south": {"uv": [1.5, 2, 6.5, 5.5], "texture": "#0"}, + "west": {"uv": [1.5, 2, 6.5, 5.5], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 12, 12], "texture": "#0"} + } + }, + { + "name": "Brazier Sides 2", + "from": [1, 5, 2], + "to": [2, 14, 14], + "faces": { + "north": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "east": {"uv": [1.5, 2, 6.5, 5.5], "texture": "#0"}, + "south": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "west": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 12, 12], "texture": "#0"} + } + }, + { + "name": "Brazier Sides 3", + "from": [2, 5, 14], + "to": [14, 14, 15], + "faces": { + "north": {"uv": [1.5, 2, 6.5, 5.5], "texture": "#0"}, + "east": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "south": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "west": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 0, 12, 12], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Brazier Sides 4", + "from": [14, 5, 2], + "to": [15, 14, 14], + "faces": { + "north": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "east": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "south": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "west": {"uv": [1.5, 2, 6.5, 5.5], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 0, 12, 12], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Brazier Sides 5", + "from": [2, 5, 1], + "to": [14, 14, 2], + "faces": { + "north": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "east": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "south": {"uv": [1.5, 2, 6.5, 5.5], "texture": "#0"}, + "west": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 12, 12], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "Brazier Spikes 1", + "from": [2, 14, 2], + "to": [14, 17, 3], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 2]}, + "faces": { + "north": {"uv": [1.5, 0.5, 6.5, 2], "texture": "#0"}, + "east": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "south": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "down": {"uv": [8, 8, 16, 16], "texture": "#0"} + } + }, + { + "name": "Brazier Spikes 1b", + "from": [2, 14, 1], + "to": [14, 17, 2], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 2]}, + "faces": { + "north": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "south": {"uv": [1.5, 0.5, 6.5, 2], "texture": "#0"}, + "west": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8, 8, 16, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Brazier Spikes 2", + "from": [2, 14, 2], + "to": [3, 17, 14], + "rotation": {"angle": 45, "axis": "z", "origin": [2, 14, 8]}, + "faces": { + "north": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "east": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "west": {"uv": [1.5, 0.5, 6.5, 2], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "rotation": 270, "texture": "#0"}, + "down": {"uv": [8, 8, 16, 16], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Brazier Spikes 2b", + "from": [1, 14, 2], + "to": [2, 17, 14], + "rotation": {"angle": 45, "axis": "z", "origin": [2, 14, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "east": {"uv": [1.5, 0.5, 6.5, 2], "texture": "#0"}, + "south": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "west": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8, 8, 16, 16], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "Brazier Spikes 3", + "from": [2, 14, 13], + "to": [14, 17, 14], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 14]}, + "faces": { + "north": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "south": {"uv": [1.5, 0.5, 6.5, 2], "texture": "#0"}, + "west": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8, 8, 16, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Brazier Spikes 3b", + "from": [2, 14, 14], + "to": [14, 17, 15], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 14]}, + "faces": { + "north": {"uv": [1.5, 0.5, 6.5, 2], "texture": "#0"}, + "east": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "south": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "down": {"uv": [8, 8, 16, 16], "texture": "#0"} + } + }, + { + "name": "Brazier Spikes 4", + "from": [14, 14, 2], + "to": [17, 15, 14], + "rotation": {"angle": 45, "axis": "z", "origin": [14, 14, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 3], "rotation": 270, "texture": "#0"}, + "east": {"uv": [8, 8, 16, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [8, 8, 16, 16], "rotation": 90, "texture": "#0"}, + "west": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "up": {"uv": [8, 8, 16, 16], "rotation": 90, "texture": "#0"}, + "down": {"uv": [1.5, 0.5, 6.5, 2], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Brazier Spikes 4b", + "from": [14, 13, 2], + "to": [17, 14, 14], + "rotation": {"angle": 45, "axis": "z", "origin": [14, 14, 8]}, + "faces": { + "north": {"uv": [8, 8, 16, 16], "rotation": 270, "texture": "#0"}, + "east": {"uv": [8, 8, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 3], "rotation": 90, "texture": "#0"}, + "west": {"uv": [8, 8, 16, 16], "rotation": 180, "texture": "#0"}, + "up": {"uv": [1.5, 0.5, 6.5, 2], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8, 8, 16, 16], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Base", + "from": [0, 0, 0], + "to": [16, 4, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0.5, 8, 0.5]}, + "faces": { + "north": {"uv": [0, 6, 8, 8], "texture": "#0"}, + "east": {"uv": [0, 6, 8, 8], "texture": "#0"}, + "south": {"uv": [0, 6, 8, 8], "texture": "#0"}, + "west": {"uv": [0, 6, 8, 8], "texture": "#0"}, + "up": {"uv": [0, 8, 8, 16], "texture": "#0"}, + "down": {"uv": [0, 8, 8, 16], "texture": "#0"} + } + }, + { + "name": "Brazier bottom", + "from": [2, 4, 2], + "to": [14, 5, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [2.5, 8, 2.5]}, + "faces": { + "north": {"uv": [1.5, 5.5, 6.5, 6], "texture": "#0"}, + "east": {"uv": [1.5, 5.5, 6.5, 6], "texture": "#0"}, + "south": {"uv": [1.5, 5.5, 6.5, 6], "texture": "#0"}, + "west": {"uv": [1.5, 5.5, 6.5, 6], "texture": "#0"}, + "up": {"uv": [9, 1, 15, 7], "texture": "#0"}, + "down": {"uv": [8, 8, 16, 16], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Brazier", + "origin": [0.5, 0.5, 0.5], + "children": [ + { + "name": "Brazier Sides", + "origin": [0.5, 0.5, 0.5], + "children": [0, 1, 2, 3, 4] + }, + { + "name": "Brazier Spikes", + "origin": [0.5, 0.5, 0.5], + "children": [5, 6, 7, 8, 9, 10, 11, 12] + }, 13, 14] + }, + { + "name": "Blazes", + "origin": [8, 8, 8], + "children": [15, 16, 17, 18] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/blaze_heater_brazier.png b/src/main/resources/assets/create/textures/block/blaze_heater_brazier.png new file mode 100644 index 000000000..5bb9f3d37 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/blaze_heater_brazier.png differ diff --git a/src/main/resources/assets/create/textures/block/tamed_blaze.png b/src/main/resources/assets/create/textures/block/tamed_blaze.png new file mode 100644 index 000000000..ba3918be1 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/tamed_blaze.png differ diff --git a/src/main/resources/data/create/recipes/mixing/brass_ingot.json b/src/main/resources/data/create/recipes/mixing/brass_ingot.json index cf03e301b..6b06a9e03 100644 --- a/src/main/resources/data/create/recipes/mixing/brass_ingot.json +++ b/src/main/resources/data/create/recipes/mixing/brass_ingot.json @@ -16,5 +16,6 @@ "item": "create:brass_ingot", "count": 2 } - ] + ], + "requiredHeat": 1 } \ No newline at end of file