Merge branch 'heatedMixer' into mc1.15/dev
This commit is contained in:
commit
a44ef1733b
65 changed files with 1163 additions and 373 deletions
|
@ -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
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "create:block/blaze_heater/block"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "真鍮ケーシング",
|
||||
|
|
|
@ -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": "황동 케이스",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "黄铜机壳",
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "create:block/blaze_heater/block"
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:blaze_heater"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"create:blaze_heater"
|
||||
]
|
||||
}
|
|
@ -26,10 +26,9 @@ import net.minecraftforge.client.model.ModelLoader;
|
|||
|
||||
public class AllBlockPartials {
|
||||
|
||||
private static List<AllBlockPartials> all = new ArrayList<>();
|
||||
private static final List<AllBlockPartials> all = new ArrayList<>();
|
||||
|
||||
public static final AllBlockPartials
|
||||
SCHEMATICANNON_CONNECTOR = get("schematicannon/connector"),
|
||||
public static final AllBlockPartials SCHEMATICANNON_CONNECTOR = get("schematicannon/connector"),
|
||||
SCHEMATICANNON_PIPE = get("schematicannon/pipe"),
|
||||
|
||||
SHAFTLESS_COGWHEEL = get("cogwheel_shaftless"),
|
||||
|
@ -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_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"),
|
||||
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"),
|
||||
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<Direction, AllBlockPartials> 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<EncasedShaftBlock> 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<GearboxBlock> 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<ClutchBlock> 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<GearshiftBlock> 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<EncasedBeltBlock> 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<AdjustablePulleyBlock> 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<WaterWheelBlock> 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<CrushingWheelBlock> 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<MechanicalPressBlock> 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<MechanicalMixerBlock> 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<HeaterBlock> 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<DepotBlock> 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<CartAssemblerBlock> 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<ReinforcedRailBlock> 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<MechanicalCrafterBlock> 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<SequencedGearshiftBlock> 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<FlywheelBlock> 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<PackagerBlock> 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))
|
||||
|
|
|
@ -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,16 +45,11 @@ public enum AllRecipeTypes {
|
|||
public Supplier<IRecipeSerializer<?>> supplier;
|
||||
public IRecipeType<? extends IRecipe<? extends IInventory>> type;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends IRecipeType<?>> T getType() {
|
||||
return (T) type;
|
||||
}
|
||||
|
||||
private AllRecipeTypes(Supplier<IRecipeSerializer<?>> supplier) {
|
||||
AllRecipeTypes(Supplier<IRecipeSerializer<?>> supplier) {
|
||||
this(supplier, null);
|
||||
}
|
||||
|
||||
private AllRecipeTypes(Supplier<IRecipeSerializer<?>> supplier,
|
||||
AllRecipeTypes(Supplier<IRecipeSerializer<?>> supplier,
|
||||
IRecipeType<? extends IRecipe<? extends IInventory>> existingType) {
|
||||
this.supplier = supplier;
|
||||
this.type = existingType;
|
||||
|
@ -69,7 +64,8 @@ public enum AllRecipeTypes {
|
|||
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,9 +77,18 @@ public enum AllRecipeTypes {
|
|||
});
|
||||
}
|
||||
|
||||
private static Supplier<IRecipeSerializer<?>> processingSerializer(IRecipeFactory<? extends ProcessingRecipe<?>> factory) {
|
||||
private static Supplier<IRecipeSerializer<?>> processingSerializer(
|
||||
IRecipeFactory<? extends ProcessingRecipe<?>> factory) {
|
||||
return () -> new ProcessingRecipeSerializer<>(factory);
|
||||
}
|
||||
|
||||
|
||||
private static Supplier<IRecipeSerializer<?>> extendedProcessingSerializer(
|
||||
IExtendedRecipeFactory<? extends ProcessingRecipe<?>> factory) {
|
||||
return () -> new ProcessingRecipeSerializer<>(factory);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends IRecipeType<?>> T getType() {
|
||||
return (T) type;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<BasinTileEntity> BASIN =
|
||||
register("basin", BasinTileEntity::new, AllBlocks.BASIN);
|
||||
public static final TileEntityEntry<HeaterTileEntity> HEATER =
|
||||
register("blaze_heater", HeaterTileEntity::new, AllBlocks.HEATER);
|
||||
public static final TileEntityEntry<MechanicalCrafterTileEntity> MECHANICAL_CRAFTER =
|
||||
register("mechanical_crafter", MechanicalCrafterTileEntity::new, AllBlocks.MECHANICAL_CRAFTER);
|
||||
public static final TileEntityEntry<SequencedGearshiftTileEntity> 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);
|
||||
|
|
|
@ -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,6 +23,7 @@ import net.minecraftforge.items.wrapper.RecipeWrapper;
|
|||
* @author simibubi
|
||||
*
|
||||
*/
|
||||
@ParametersAreNonnullByDefault
|
||||
public class ConversionRecipe extends ProcessingRecipe<RecipeWrapper> {
|
||||
|
||||
public ConversionRecipe(ResourceLocation id, String group, List<ProcessingIngredient> ingredients,
|
||||
|
@ -31,8 +34,9 @@ public class ConversionRecipe extends ProcessingRecipe<RecipeWrapper> {
|
|||
static int counter = 0;
|
||||
|
||||
public static ConversionRecipe create(ItemStack from, ItemStack to) {
|
||||
List<ProcessingIngredient> ingredients = Arrays.asList(new ProcessingIngredient(Ingredient.fromStacks(from)));
|
||||
List<ProcessingOutput> outputs = Arrays.asList(new ProcessingOutput(to, 1));
|
||||
List<ProcessingIngredient> ingredients =
|
||||
Collections.singletonList(new ProcessingIngredient(Ingredient.fromStacks(from)));
|
||||
List<ProcessingOutput> outputs = Collections.singletonList(new ProcessingOutput(to, 1));
|
||||
return new ConversionRecipe(new ResourceLocation(Create.ID, "conversion_" + counter++), ingredients, outputs);
|
||||
}
|
||||
|
||||
|
|
|
@ -59,10 +59,10 @@ public abstract class CreateRecipeCategory<T extends IRecipe<?>> implements IRec
|
|||
if (!(recipe instanceof ProcessingRecipe))
|
||||
return jeiSlot;
|
||||
ProcessingRecipe<?> processingRecipe = (ProcessingRecipe<?>) recipe;
|
||||
List<ProcessingOutput> rollableResults = processingRecipe.getRollableResults();
|
||||
List<ProcessingOutput> 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;
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ public class CrushingCategory extends CreateRecipeCategory<AbstractCrushingRecip
|
|||
itemStacks.init(0, true, 50, 2);
|
||||
itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks()));
|
||||
|
||||
List<ProcessingOutput> results = recipe.getRollableResults();
|
||||
List<ProcessingOutput> 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<AbstractCrushingRecip
|
|||
|
||||
@Override
|
||||
public void draw(AbstractCrushingRecipe recipe, double mouseX, double mouseY) {
|
||||
List<ProcessingOutput> results = recipe.getRollableResults();
|
||||
List<ProcessingOutput> results = recipe.getRollableItemResults();
|
||||
AllGuiTextures.JEI_SLOT.draw(50, 2);
|
||||
AllGuiTextures.JEI_DOWN_ARROW.draw(72, 7);
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ public class MillingCategory extends CreateRecipeCategory<AbstractCrushingRecipe
|
|||
.get(0)
|
||||
.getMatchingStacks()));
|
||||
|
||||
List<ProcessingOutput> results = recipe.getRollableResults();
|
||||
List<ProcessingOutput> results = recipe.getRollableItemResults();
|
||||
boolean single = results.size() == 1;
|
||||
for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) {
|
||||
int xOffset = outputIndex % 2 == 0 ? 0 : 19;
|
||||
|
|
|
@ -41,7 +41,7 @@ public class MysteriousItemConversionCategory extends CreateRecipeCategory<Conve
|
|||
@Override
|
||||
public void setRecipe(IRecipeLayout recipeLayout, ConversionRecipe recipe, IIngredients ingredients) {
|
||||
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
|
||||
List<ProcessingOutput> results = recipe.getRollableResults();
|
||||
List<ProcessingOutput> 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);
|
||||
|
|
|
@ -43,7 +43,7 @@ public class PolishingCategory extends CreateRecipeCategory<SandPaperPolishingRe
|
|||
@Override
|
||||
public void setRecipe(IRecipeLayout recipeLayout, SandPaperPolishingRecipe recipe, IIngredients ingredients) {
|
||||
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
|
||||
List<ProcessingOutput> results = recipe.getRollableResults();
|
||||
List<ProcessingOutput> results = recipe.getRollableItemResults();
|
||||
|
||||
itemStacks.init(0, true, 26, 28);
|
||||
itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks()));
|
||||
|
|
|
@ -41,7 +41,7 @@ public class PressingCategory extends CreateRecipeCategory<PressingRecipe> {
|
|||
itemStacks.init(0, true, 26, 50);
|
||||
itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks()));
|
||||
|
||||
List<ProcessingOutput> results = recipe.getRollableResults();
|
||||
List<ProcessingOutput> 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<PressingRecipe> {
|
|||
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);
|
||||
|
|
|
@ -40,7 +40,7 @@ public class SawingCategory extends CreateRecipeCategory<CuttingRecipe> {
|
|||
itemStacks.init(0, true, 43, 4);
|
||||
itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks()));
|
||||
|
||||
List<ProcessingOutput> results = recipe.getRollableResults();
|
||||
List<ProcessingOutput> 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<CuttingRecipe> {
|
|||
@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;
|
||||
|
|
|
@ -42,7 +42,7 @@ public class SplashingCategory extends ProcessingViaFanCategory<SplashingRecipe>
|
|||
.get(0)
|
||||
.getMatchingStacks()));
|
||||
|
||||
List<ProcessingOutput> results = recipe.getRollableResults();
|
||||
List<ProcessingOutput> results = recipe.getRollableItemResults();
|
||||
boolean single = results.size() == 1;
|
||||
for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) {
|
||||
int xOffset = outputIndex % 2 == 0 ? 0 : 19;
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
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<ProcessingIngredient> ingredients,
|
||||
|
@ -21,7 +22,8 @@ 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
|
||||
|
|
|
@ -191,7 +191,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
|
|||
inventory.clear();
|
||||
for (int roll = 0; roll < rolls; roll++) {
|
||||
List<ItemStack> rolledResults = recipe.get()
|
||||
.rollResults();
|
||||
.rollResults().getItemStacks();
|
||||
for (int i = 0; i < rolledResults.size(); i++) {
|
||||
ItemStack stack = rolledResults.get(i);
|
||||
ItemHelper.addToList(stack, list);
|
||||
|
|
|
@ -1,17 +1,18 @@
|
|||
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<InWorldProcessing.SplashingInv> {
|
||||
|
||||
public SplashingRecipe(ResourceLocation id, String group, List<ProcessingIngredient> ingredients,
|
||||
|
@ -23,7 +24,8 @@ public class SplashingRecipe extends ProcessingRecipe<InWorldProcessing.Splashin
|
|||
public boolean matches(SplashingInv 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
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
package com.simibubi.create.content.contraptions.components.millstone;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.AllRecipeTypes;
|
||||
import com.simibubi.create.content.contraptions.components.crusher.AbstractCrushingRecipe;
|
||||
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 MillingRecipe extends AbstractCrushingRecipe {
|
||||
|
||||
public MillingRecipe(ResourceLocation id, String group, List<ProcessingIngredient> ingredients,
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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<ItemStack> 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<Ingredient> 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;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,28 +1,33 @@
|
|||
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<BasinInputInventory> {
|
||||
|
||||
public MixingRecipe(ResourceLocation id, String group, List<ProcessingIngredient> ingredients,
|
||||
List<ProcessingOutput> results, int processingDuration) {
|
||||
super(AllRecipeTypes.MIXING, id, group, ingredients, results, processingDuration);
|
||||
List<ProcessingOutput> results, int processingDuration, List<FluidStack> fluidIngredients,
|
||||
List<FluidStack> 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
|
||||
|
@ -41,12 +46,13 @@ public class MixingRecipe extends ProcessingRecipe<BasinInputInventory> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(BasinInputInventory inv, World worldIn) {
|
||||
public boolean matches(BasinInputInventory inv, @Nonnull World worldIn) {
|
||||
if (inv.isEmpty())
|
||||
return false;
|
||||
|
||||
NonNullList<Ingredient> ingredients = getIngredients();
|
||||
if (!ingredients.stream().allMatch(Ingredient::isSimple))
|
||||
NonNullList<Ingredient> ingredients = this.getIngredients();
|
||||
if (!ingredients.stream()
|
||||
.allMatch(Ingredient::isSimple))
|
||||
return false;
|
||||
|
||||
List<ItemStack> remaining = new ArrayList<>();
|
||||
|
@ -59,7 +65,7 @@ public class MixingRecipe extends ProcessingRecipe<BasinInputInventory> {
|
|||
|
||||
// sort by leniency
|
||||
List<Ingredient> 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<BasinInputInventory> {
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<ItemStack> 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)) {
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
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<MechanicalPressTileEntity.PressingInv> {
|
||||
|
||||
public PressingRecipe(ResourceLocation id, String group, List<ProcessingIngredient> ingredients,
|
||||
|
@ -22,12 +23,12 @@ public class PressingRecipe extends ProcessingRecipe<MechanicalPressTileEntity.P
|
|||
public boolean matches(PressingInv 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 2;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
package com.simibubi.create.content.contraptions.components.saw;
|
||||
|
||||
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 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 CuttingRecipe extends ProcessingRecipe<RecipeWrapper> {
|
||||
|
||||
public CuttingRecipe(ResourceLocation id, String group, List<ProcessingIngredient> ingredients,
|
||||
|
@ -22,7 +23,8 @@ public class CuttingRecipe extends ProcessingRecipe<RecipeWrapper> {
|
|||
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
|
||||
|
|
|
@ -248,7 +248,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
|
|||
for (int roll = 0; roll < rolls; roll++) {
|
||||
List<ItemStack> results = new LinkedList<ItemStack>();
|
||||
if (recipe instanceof CuttingRecipe)
|
||||
results = ((CuttingRecipe) recipe).rollResults();
|
||||
results = ((CuttingRecipe) recipe).rollResults().getItemStacks();
|
||||
else if (recipe instanceof StonecuttingRecipe)
|
||||
results.add(recipe.getRecipeOutput()
|
||||
.copy());
|
||||
|
|
|
@ -37,7 +37,7 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity {
|
|||
protected IRecipe<?> lastRecipe;
|
||||
protected LazyOptional<IItemHandler> basinItemInv = LazyOptional.empty();
|
||||
protected LazyOptional<IFluidHandler> 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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,23 +6,31 @@ import net.minecraftforge.fluids.FluidStack;
|
|||
import java.util.ArrayList;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class MultiIngredientTypeList {
|
||||
private final ArrayList<ItemStack> itemIngredients = new ArrayList<>();
|
||||
private final ArrayList<FluidStack> fluidIngredients = new ArrayList<>();
|
||||
public class CombinedItemFluidList {
|
||||
private final ArrayList<ItemStack> itemStacks = new ArrayList<>();
|
||||
private final ArrayList<FluidStack> 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<? super ItemStack> itemStackConsumer) {
|
||||
itemIngredients.forEach(itemStackConsumer);
|
||||
itemStacks.forEach(itemStackConsumer);
|
||||
}
|
||||
|
||||
public void forEachFluidStack(Consumer<? super FluidStack> fluidStackConsumer) {
|
||||
fluidIngredients.forEach(fluidStackConsumer);
|
||||
fluidStacks.forEach(fluidStackConsumer);
|
||||
}
|
||||
|
||||
public ArrayList<ItemStack> getItemStacks() {
|
||||
return itemStacks;
|
||||
}
|
||||
|
||||
public ArrayList<FluidStack> getFluidStacks() {
|
||||
return fluidStacks;
|
||||
}
|
||||
}
|
|
@ -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<HeaterTileEntity> {
|
||||
|
||||
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<HeaterTileEntity> 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;
|
||||
}
|
||||
}
|
|
@ -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<HeaterTileEntity> {
|
||||
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()));
|
||||
}
|
||||
}
|
|
@ -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<? extends HeaterTileEntity> 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<TileEntityBehaviour> 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();
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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<T extends IInventory> implements IRecipe<T> {
|
||||
protected final List<ProcessingIngredient> ingredients;
|
||||
private final List<ProcessingOutput> results;
|
||||
private final IRecipeType<?> type;
|
||||
private final IRecipeSerializer<?> serializer;
|
||||
protected final ResourceLocation id;
|
||||
protected final String group;
|
||||
protected final int processingDuration;
|
||||
protected final List<FluidStack> fluidIngredients;
|
||||
protected final List<FluidStack> fluidResults;
|
||||
protected final int requiredHeat;
|
||||
private final List<ProcessingOutput> results;
|
||||
private final IRecipeType<?> type;
|
||||
private final IRecipeSerializer<?> serializer;
|
||||
|
||||
public ProcessingRecipe(AllRecipeTypes recipeType, ResourceLocation id, String group,
|
||||
List<ProcessingIngredient> ingredients, List<ProcessingOutput> results, int processingDuration) {
|
||||
this(recipeType, id, group, ingredients, results, processingDuration, null, null, 0);
|
||||
}
|
||||
|
||||
public ProcessingRecipe(AllRecipeTypes recipeType, ResourceLocation id, String group,
|
||||
List<ProcessingIngredient> ingredients, List<ProcessingOutput> results, int processingDuration,
|
||||
@Nullable List<FluidStack> fluidIngredients, @Nullable List<FluidStack> fluidResults, int requiredHeat) {
|
||||
this.type = recipeType.type;
|
||||
this.serializer = recipeType.serializer;
|
||||
this.id = id;
|
||||
|
@ -34,6 +47,9 @@ public abstract class ProcessingRecipe<T extends IInventory> implements IRecipe<
|
|||
this.ingredients = ingredients;
|
||||
this.results = results;
|
||||
this.processingDuration = processingDuration;
|
||||
this.fluidIngredients = fluidIngredients;
|
||||
this.fluidResults = fluidResults;
|
||||
this.requiredHeat = requiredHeat;
|
||||
validate(recipeType);
|
||||
}
|
||||
|
||||
|
@ -62,14 +78,14 @@ public abstract class ProcessingRecipe<T extends IInventory> implements IRecipe<
|
|||
return processingDuration;
|
||||
}
|
||||
|
||||
public List<ItemStack> rollResults() {
|
||||
List<ItemStack> 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<T extends IInventory> 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,7 +137,7 @@ public abstract class ProcessingRecipe<T extends IInventory> implements IRecipe<
|
|||
return false;
|
||||
}
|
||||
|
||||
public List<ProcessingOutput> getRollableResults() {
|
||||
public List<ProcessingOutput> getRollableItemResults() {
|
||||
return results;
|
||||
}
|
||||
|
||||
|
@ -128,6 +146,20 @@ public abstract class ProcessingRecipe<T extends IInventory> implements IRecipe<
|
|||
}
|
||||
|
||||
public List<ItemStack> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,18 +1,25 @@
|
|||
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<T extends ProcessingRecipe<?>>
|
||||
extends net.minecraftforge.registries.ForgeRegistryEntry<IRecipeSerializer<?>> implements IRecipeSerializer<T> {
|
||||
|
||||
|
@ -27,32 +34,59 @@ public class ProcessingRecipeSerializer<T extends ProcessingRecipe<?>>
|
|||
String s = JSONUtils.getString(json, "group", "");
|
||||
|
||||
List<ProcessingIngredient> ingredients = new ArrayList<>();
|
||||
List<FluidStack> fluidIngredients = new ArrayList<>();
|
||||
for (JsonElement e : JSONUtils.getJsonArray(json, "ingredients")) {
|
||||
JsonObject entry = e.getAsJsonObject();
|
||||
if (JSONUtils.hasField(entry, "fluid")) {
|
||||
addFluidToList(fluidIngredients, entry);
|
||||
} else {
|
||||
int count = 1;
|
||||
if (JSONUtils.hasField((JsonObject) e, "count")) {
|
||||
count = JSONUtils.getInt(e.getAsJsonObject().get("count"), "count");
|
||||
if (JSONUtils.hasField(entry, "count")) {
|
||||
count = JSONUtils.getInt(entry, "count");
|
||||
}
|
||||
for (int i = 0; i < count; i++) {
|
||||
ingredients.add(ProcessingIngredient.parse(e.getAsJsonObject()));
|
||||
ingredients.add(ProcessingIngredient.parse(entry));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<ProcessingOutput> results = new ArrayList<>();
|
||||
List<FluidStack> 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");
|
||||
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((JsonObject) e, "chance"))
|
||||
chance = JSONUtils.getFloat(e.getAsJsonObject().get("chance"), "chance");
|
||||
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<FluidStack> 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<T extends ProcessingRecipe<?>>
|
|||
for (int i = 0; i < ingredientCount; i++)
|
||||
ingredients.add(ProcessingIngredient.parse(buffer));
|
||||
|
||||
int fluidInputCount = buffer.readInt();
|
||||
List<FluidStack> fluidIngredients = new ArrayList<>();
|
||||
for (int i = 0; i < fluidInputCount; i++)
|
||||
fluidIngredients.add(FluidStack.readFromPacket(buffer));
|
||||
|
||||
List<ProcessingOutput> 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<FluidStack> 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<T extends ProcessingRecipe<?>>
|
|||
|
||||
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 extends ProcessingRecipe<?>> {
|
||||
T create(ResourceLocation id, String group, List<ProcessingIngredient> ingredients, List<ProcessingOutput> results,
|
||||
int duration);
|
||||
default T create(ResourceLocation recipeId, String s, List<ProcessingIngredient> ingredients,
|
||||
List<ProcessingOutput> results, int duration, @Nullable List<FluidStack> fluidIngredients,
|
||||
@Nullable List<FluidStack> fluidResults, int requiredHeat) {
|
||||
return create(recipeId, s, ingredients, results, duration);
|
||||
}
|
||||
|
||||
T create(ResourceLocation recipeId, String s, List<ProcessingIngredient> ingredients,
|
||||
List<ProcessingOutput> results, int duration);
|
||||
}
|
||||
|
||||
public interface IExtendedRecipeFactory<T extends ProcessingRecipe<?>> extends IRecipeFactory<T> {
|
||||
@Override
|
||||
T create(ResourceLocation recipeId, String s, List<ProcessingIngredient> ingredients,
|
||||
List<ProcessingOutput> results, int duration, @Nullable List<FluidStack> fluidIngredients,
|
||||
@Nullable List<FluidStack> fluidResults, int requiredHeat);
|
||||
|
||||
@Override
|
||||
default T create(ResourceLocation recipeId, String s, List<ProcessingIngredient> ingredients,
|
||||
List<ProcessingOutput> results, int duration) {
|
||||
throw new IllegalStateException("Incorrect recipe creation function used: " + recipeId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,25 +1,23 @@
|
|||
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;
|
||||
|
||||
public class SandPaperPolishingRecipe extends ProcessingRecipe<SandPaperInv> {
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import java.util.List;
|
||||
|
||||
public static DamageSource CURSED_POLISHING = new DamageSource("create.curse_polish").setExplosion();
|
||||
@ParametersAreNonnullByDefault
|
||||
public class SandPaperPolishingRecipe extends ProcessingRecipe<SandPaperInv> {
|
||||
|
||||
public SandPaperPolishingRecipe(ResourceLocation id, String group, List<ProcessingIngredient> ingredients,
|
||||
List<ProcessingOutput> results, int processingDuration) {
|
||||
|
@ -33,18 +31,21 @@ public class SandPaperPolishingRecipe extends ProcessingRecipe<SandPaperInv> {
|
|||
public static ItemStack applyPolish(World world, Vec3d position, ItemStack stack, ItemStack sandPaperStack) {
|
||||
List<IRecipe<SandPaperInv>> 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<IRecipe<SandPaperInv>> 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<IRecipe<SandPaperInv>> 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
|
||||
|
|
|
@ -263,7 +263,7 @@ public class InWorldProcessing {
|
|||
if (recipe instanceof ProcessingRecipe) {
|
||||
stacks = new ArrayList<>();
|
||||
for (int i = 0; i < stackIn.getCount(); i++) {
|
||||
List<ItemStack> rollResults = ((ProcessingRecipe<?>) recipe).rollResults();
|
||||
List<ItemStack> rollResults = ((ProcessingRecipe<?>) recipe).rollResults().getItemStacks();
|
||||
for (ItemStack stack : rollResults) {
|
||||
for (ItemStack previouslyRolled : stacks) {
|
||||
if (stack.isEmpty())
|
||||
|
|
|
@ -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;
|
||||
|
@ -213,6 +214,10 @@ public class BlockStateGen {
|
|||
});
|
||||
}
|
||||
|
||||
public static NonNullBiConsumer<DataGenContext<Block, HeaterBlock>, RegistrateBlockstateProvider> blazeHeater(){
|
||||
return (c, p) -> ConfiguredModel.builder().modelFile(p.models().getExistingFile(p.modLoc("block/" + c.getName() + "/block"))).build();
|
||||
}
|
||||
|
||||
public static NonNullBiConsumer<DataGenContext<Block, ReinforcedRailBlock>, RegistrateBlockstateProvider> reinforcedRail() {
|
||||
return (c, p) -> p.getVariantBuilder(c.get())
|
||||
.forAllStates(state -> {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 4.9 KiB |
BIN
src/main/resources/assets/create/textures/block/tamed_blaze.png
Normal file
BIN
src/main/resources/assets/create/textures/block/tamed_blaze.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
|
@ -16,5 +16,6 @@
|
|||
"item": "create:brass_ingot",
|
||||
"count": 2
|
||||
}
|
||||
]
|
||||
],
|
||||
"requiredHeat": 1
|
||||
}
|
Loading…
Reference in a new issue