diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index f6a94beba..c26c830d2 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -56,6 +56,7 @@ dc76bca1fdd41c8e6ada27fd59a2b73d7adc9596 assets/create/blockstates/copper_shingl ecf4a72411870bfdbf8a59469b114cd77621c343 assets/create/blockstates/copper_tiles.json 890be245b914c1a9f29f48a8c5d325640b5be160 assets/create/blockstates/copper_valve_handle.json 3df0d5d5170a2f6cbab0f8a9bc8f2d64229589af assets/create/blockstates/creative_crate.json +da3f1203dd0b0096ce19e09705060a0ed0478bee assets/create/blockstates/creative_fluid_tank.json f0031f5e970b3d5695472ed384950b8631b015ed assets/create/blockstates/creative_motor.json fe2f78b94c20944399101e7369e2d43324297fb6 assets/create/blockstates/crushing_wheel.json a1dd6cb3daa97ea871290ef7b178d28b564ee2a2 assets/create/blockstates/crushing_wheel_controller.json @@ -174,6 +175,8 @@ f4a0fc68e8daaa0a47cdc951ced4310057a874b0 assets/create/blockstates/green_valve_h 6ab675fa06317e6d07c0c1a453e7bb43e3f46b3b assets/create/blockstates/hand_crank.json be3bef7e091d8b50bfc1c6b7275946d1f636aefd assets/create/blockstates/horizontal_framed_glass.json 18d9fdaa1352a7e2ec91135e46dae5c02ccd8f8f assets/create/blockstates/horizontal_framed_glass_pane.json +30ec347dfc827a9ae52cf3da964b828005acede1 assets/create/blockstates/hose_pulley.json +6651c84ea621777d572a3d7aa13b75d9f061191b assets/create/blockstates/item_drain.json 5d851c90d23de5087ce546d4bbe509e112b84c49 assets/create/blockstates/jungle_window.json b15bea757ef981e0ca60f740ca234ee2014eb7b7 assets/create/blockstates/jungle_window_pane.json f651091db216b009b3379b2f48d56d03481c8675 assets/create/blockstates/large_cogwheel.json @@ -288,12 +291,8 @@ e1eca91fdcf60b8ac0c2b8cdf6674046b0bc55f4 assets/create/blockstates/paved_limesto c17d334e938dcb742550ba8307ca8266a1fc9b49 assets/create/blockstates/paved_weathered_limestone.json cb23aef25f3106b06c8fa8f152c638bb0d2185d8 assets/create/blockstates/paved_weathered_limestone_slab.json d62b0992cec1de45dad1f2c273132225f4ef33a0 assets/create/blockstates/paved_weathered_limestone_stairs.json -<<<<<<< HEAD -e29e245d06c46dac94fcd0e01a9bf7fa8e02fb87 assets/create/blockstates/paved_weathered_limestone_wall.json -======= dba4cf86e82ed4502fffed363fbce226a445e774 assets/create/blockstates/paved_weathered_limestone_wall.json 30971f2f76fe56f144178c33ad6bde5fc9fb61c3 assets/create/blockstates/pink_sail.json ->>>>>>> mc1.15/dev 919a79e4a4a5fab0aac3ef48e1c786017d6aa001 assets/create/blockstates/pink_seat.json 471a3bb474a0ae0453143888d561256cce894e3f assets/create/blockstates/pink_valve_handle.json 975c97018e9e2419943eaab43aed0970e96feaf7 assets/create/blockstates/piston_extension_pole.json @@ -329,12 +328,8 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json 92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json 61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json -<<<<<<< HEAD -d2e6f19325be65457e94bea44fd52863c0f66be7 assets/create/blockstates/radial_chassis.json -======= bdd56f32ce0a148b6e466a55ab2777f69fc08cfc assets/create/blockstates/radial_chassis.json 45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json ->>>>>>> mc1.15/dev da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json 722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json 8929677f2cc5354aa19ef182af69f9f0b41eb242 assets/create/blockstates/redstone_contact.json @@ -394,43 +389,23 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -<<<<<<< HEAD -33f621fe1a09a46426af59c9352c33e97c2bc00d assets/create/lang/en_ud.json -25fba2944b4a86281bc40fddba4a8136d53e3c26 assets/create/lang/en_us.json -52ad08a48ec59354f826b9cfe7eb6ea79ec7bab9 assets/create/lang/unfinished/de_de.json -62bf8e59e095e3c5dfc0a00f68b25de09cbd1b7e assets/create/lang/unfinished/fr_fr.json -4fb16e3e63bd5df457d7c77c6290b4ce595fd4a8 assets/create/lang/unfinished/it_it.json -654032efb15080b3824536cc4a0b32507b006264 assets/create/lang/unfinished/ja_jp.json -fec915edfbc9bca029dcbd6b5bdd7f9c777fb08b assets/create/lang/unfinished/ko_kr.json -8de3030ee744fe793ad2c27c5f9f2e7a3b933e3c assets/create/lang/unfinished/nl_nl.json -5cebc2913e4c04b496e00e0841474118c7709c4e assets/create/lang/unfinished/pt_br.json -68beb3243e78a3f34426229286f97a7cf2f3e489 assets/create/lang/unfinished/ru_ru.json -bf38c2b2063126ca3c3ed9183726665c8aaea419 assets/create/lang/unfinished/zh_cn.json -487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json -b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json -3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json -1358ff546e99004444fccca5355853d1738ef191 assets/create/models/block/acacia_window_pane_post.json -bd33b944ec6ad89850a1d275b3d2843fe6f831cc assets/create/models/block/acacia_window_pane_side.json -b272035cd746364a0bd3bf13061f51190e9b46d6 assets/create/models/block/acacia_window_pane_side_alt.json -======= -ad168f04d430ebd783a845e5928c3273da3f0074 assets/create/lang/en_ud.json -25b02b7b025f988b0cda9655b2c586c82dfd369c assets/create/lang/en_us.json -cf9075cacdbd171b33fa0b6cb68365e2c3614b40 assets/create/lang/unfinished/de_de.json -87ea3d2da2863fa61c5d5b9f535aac8c1703be28 assets/create/lang/unfinished/fr_fr.json -3349f2726256c99abd7e5268faa806b628d91e4d assets/create/lang/unfinished/it_it.json -3cf205e25543b7860d6b00f2f91dd799333b9d74 assets/create/lang/unfinished/ja_jp.json -d112e8b804ca16511c4096b328f3635b4c84a3e9 assets/create/lang/unfinished/ko_kr.json -78791855041e56a27fb3520b289ca8a144de98ad assets/create/lang/unfinished/nl_nl.json -d92ac1ec1ebbad873dd6563509767428603b6ba2 assets/create/lang/unfinished/pt_br.json -5d4f30e05fea3bec9c6c85a5f7767eb3dd0a7dfe assets/create/lang/unfinished/ru_ru.json -46996569e164858a5f9dc7f60731707d3517b888 assets/create/lang/unfinished/zh_cn.json +6fe6c50ae75a9c89c90d3423bc74f3e628bc213a assets/create/lang/en_ud.json +b054eb6cf72ac04fbb2512569effa84768adef74 assets/create/lang/en_us.json +cf432c7dcf9b91769a570242a59c12ecca79a091 assets/create/lang/unfinished/de_de.json +5a2e2499696f45b1f95feeaa702119b8e1b371eb assets/create/lang/unfinished/fr_fr.json +12ac01a6f21c536aa09599c36139f593cbbf7d1f assets/create/lang/unfinished/it_it.json +3e65e163c658e4f34124807716b009e1907187cc assets/create/lang/unfinished/ja_jp.json +4dfeba1d56d8ad688442d2ca026dfa16147178ef assets/create/lang/unfinished/ko_kr.json +3d114a874d1c198ecf0978fd13b98249536cc684 assets/create/lang/unfinished/nl_nl.json +3434f2d429bdf64dcbc915c0365e20250b64d819 assets/create/lang/unfinished/pt_br.json +0bfd9476411fc565a3011ffc43eecaca3f0e53ff assets/create/lang/unfinished/ru_ru.json +d7150e9c65d74f41e2dc65daadf003dc200e512c 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 7d23c8e4543108f5f53b78ccb4908f7a5bb76c54 assets/create/models/block/acacia_window_pane_post.json 3bdcc6bd616a179ffc22e66307aab538e9bcb75f assets/create/models/block/acacia_window_pane_side.json 7b5b6809e3ef685a497ba15b549d3918aeb6c135 assets/create/models/block/acacia_window_pane_side_alt.json ->>>>>>> mc1.15/dev 7c81658c8839fdb23429e54f847c2a0aee0e866e assets/create/models/block/adjustable_pulley_end_horizontal.json 20cfb751fc395a0e07c66ce87ab035207f9d1e0e assets/create/models/block/adjustable_pulley_end_horizontal_powered.json bb02f94b260be8fe1944b801cc4050b4d213f1df assets/create/models/block/adjustable_pulley_end_vertical.json @@ -476,20 +451,6 @@ aa5b45c6c657436bd38621344f6728d44ea974ad assets/create/models/block/andesite_cob 7c0e71f479aeef7bf02f0fb76c4333fa2227b83e assets/create/models/block/andesite_cobblestone_wall_side_tall.json 51e851b15870c0922cfbe911ef1a2f22062969f3 assets/create/models/block/andesite_funnel.json f28da6703691f1b08cfb49208f0f7bb0c5ca816d assets/create/models/block/andesite_funnel_powered.json -<<<<<<< HEAD -f77390658e8aeed4352e47b94fd24df116ea1857 assets/create/models/block/andesite_pillar.json -2294f74b5c30430de89a345af60f6669c975f33a assets/create/models/block/andesite_tunnel/cross.json -17f860947f51e84a3f9b32b10cdf61f863db3afc assets/create/models/block/andesite_tunnel/straight.json -e74aa39f8142293c202e57dbd92e8660818b18b5 assets/create/models/block/andesite_tunnel/t_left.json -c93978d636fe70d456a6e1914b65527cbc18544c assets/create/models/block/andesite_tunnel/t_right.json -2a86780c6825edce8fbdaa118a267fc09ce410b0 assets/create/models/block/andesite_tunnel/window.json -0ce09f6fdfb07dead5936c118efb4064f2f6f50f assets/create/models/block/birch_window.json -a5f0ed76e27d2ca706445f7f7c5f9270f98e34f9 assets/create/models/block/birch_window_pane_noside.json -9ad5224419ab7165c5208852bc4a4a5e65dcbf83 assets/create/models/block/birch_window_pane_noside_alt.json -f40c4d4ea6c037158f4b9862a7c11e6024a261e6 assets/create/models/block/birch_window_pane_post.json -dbfd2a996820d885d9741a3f168aa36c3538cfbd assets/create/models/block/birch_window_pane_side.json -557b35671ec417597259ba8d0239fe18c14c3d20 assets/create/models/block/birch_window_pane_side_alt.json -======= b1d0bb538fc8285b7d3fd77a977d78a104b83b62 assets/create/models/block/andesite_pillar.json aaf2e4259bcfcedd3400e9acb2d64c0cf06f7fb1 assets/create/models/block/andesite_tunnel/cross.json 75f628178fa21a2bd301eea8d1cebf7e94f7d5cc assets/create/models/block/andesite_tunnel/straight.json @@ -503,7 +464,6 @@ e2801a0c3fe8e1c2485291485b977f581fdc8b7c assets/create/models/block/andesite_tun 62b3f2edc5ef5d7dabbcff19220921b0e3582376 assets/create/models/block/birch_window_pane_side.json 95d4230eb366f5e7684820c9337e3956ed34042a assets/create/models/block/birch_window_pane_side_alt.json 2b59d6f937cd542eba670689c30fe16887dfd9a0 assets/create/models/block/black_sail.json ->>>>>>> mc1.15/dev 97d79ab99c0fb278a9b5dc54e1c6563868f87b76 assets/create/models/block/black_seat.json 02747ea1a0e5d4a1cd466bf26878885a89d347fa assets/create/models/block/black_valve_handle.json d876627b6e519c6f3f59c7c27cc7b0f903206f7c assets/create/models/block/blue_sail.json @@ -529,16 +489,6 @@ a0612a633756433e1b37ddc6d290aa1fc07839ef assets/create/models/block/brass_tunnel 8ab097caaa0db0915ae9254f7d65092d9171bc60 assets/create/models/block/brown_sail.json 4eed0ad902f5e84f2b6c160f3283e8028640e77d assets/create/models/block/brown_seat.json 6c39677f8c3a84280835c717ea1ef569b7c76a1b assets/create/models/block/brown_valve_handle.json -<<<<<<< HEAD -db7279f05c1d89e21da8887a15d3a1cfff4a9cf2 assets/create/models/block/chiseled_dark_scoria.json -22d4ad2de48739ab754f8dfcd6f84ad2267abf8b assets/create/models/block/chiseled_dolomite.json -550dc0622377b4736610b1c924dc890c857a0fd0 assets/create/models/block/chiseled_gabbro.json -1deb93125b9a8cac79bec1f4ea5345d6ea857656 assets/create/models/block/chiseled_limestone.json -1cf4b68c8cf1885ede334fbfa54e52c76ba211b6 assets/create/models/block/chiseled_scoria.json -041a20dd674277ff4f1613a0a89600f05458edf4 assets/create/models/block/chiseled_weathered_limestone.json -f9a3f0939ea43b404eb2826b94211a25fca5ebc2 assets/create/models/block/clockwork_bearing.json -1f01a4b6608f75145734b60ddf4a33ce318425ff assets/create/models/block/copper_casing.json -======= 028a07b49c05fe8a93f1d8c229d81e73d887c2df assets/create/models/block/chiseled_dark_scoria.json b1f9ee4867373dd8f976625bab744a1c72c7fd16 assets/create/models/block/chiseled_dolomite.json cd7751090cf3d55296b8e415d0af9b6f18d69770 assets/create/models/block/chiseled_gabbro.json @@ -547,7 +497,6 @@ ac07568fa7b2d3fa84d0fe89a498514d30514291 assets/create/models/block/chiseled_sco ecb2b85ee210dce329d2be66b98d0f0d4e6fc223 assets/create/models/block/chiseled_weathered_limestone.json 30fe120af3cb32faf0729df4d2cdf868f804be17 assets/create/models/block/clockwork_bearing.json 70406933cc4fa5471af6e562fd84a397347dba17 assets/create/models/block/copper_casing.json ->>>>>>> mc1.15/dev b2c528cfd24a5cb0cb96c45d0a914f1090f8c32b assets/create/models/block/copper_valve_handle.json 1ef7060b0ca7e9c0bfc8151f98ca08da31862cda assets/create/models/block/crate/brass/bottom.json 4ef2c7c3018f2d219f159a3ce58ceb00610b9c5d assets/create/models/block/crate/brass/left.json @@ -559,6 +508,30 @@ a09f639bde4c61d68592eb06c807e7a6791ff950 assets/create/models/block/crate/brass/ 7635211e4d833748acaea37ea48b1f749c32ea5f assets/create/models/block/crate/creative/right.json a123e3c8a9e2ea1665f268cf3991aa7e4b3119c6 assets/create/models/block/crate/creative/single.json 29ab5cfe7aed1271ede125e91bf78c1372b5f96e assets/create/models/block/crate/creative/top.json +e04c4987746379ec24c63929abf0df4e41e13e6a assets/create/models/block/creative_bottom.json +5b1f6d98adf1e92f678a59b7eef720deeeda2795 assets/create/models/block/creative_bottom_window.json +6dd1cf78624d5ce69259fc723e9700bd842c94c8 assets/create/models/block/creative_bottom_window_ne.json +c0dfda633c3158633814e9a6cd4f4dba793ad4c8 assets/create/models/block/creative_bottom_window_nw.json +e30b13d2ae9a437664792c16be537cea73552cf8 assets/create/models/block/creative_bottom_window_se.json +8d68f53dfa4d17f8193cd8df693e340ac7a1b92e assets/create/models/block/creative_bottom_window_sw.json +77a84b8ca790ddef80e792beb79c2ae0db78005b assets/create/models/block/creative_middle.json +179f6208a04832141d83f9a6bef96334cf4fe4aa assets/create/models/block/creative_middle_window.json +cadd6df93f6ba708a3c92a958e88531cbc1d6ebf assets/create/models/block/creative_middle_window_ne.json +75b37b07555312798a519bea3325d4af6a57eb86 assets/create/models/block/creative_middle_window_nw.json +d9d6b61ba21270c83361b3ee2391161125dfc6f0 assets/create/models/block/creative_middle_window_se.json +73696b00c063cdf6c5a492eac7e5e06062abad88 assets/create/models/block/creative_middle_window_sw.json +3af304cfaa0cdba11c120e85cea88d96c986eebc assets/create/models/block/creative_single.json +feed58a4ad7d7a9e855f0cd7b3fc720616120b4b assets/create/models/block/creative_single_window.json +4f8753ba3a04853fb006be37e15d760cc154d937 assets/create/models/block/creative_single_window_ne.json +39ee24e3b1e06d38bfa4ef36aa4f89577c7f6eab assets/create/models/block/creative_single_window_nw.json +81250161ba79b846614859fe8c991c9e18bf77ba assets/create/models/block/creative_single_window_se.json +0fdca0706c76794586199287f1e29c8e87ef6385 assets/create/models/block/creative_single_window_sw.json +873b263b688f191a927a63b2d873a797eab801e1 assets/create/models/block/creative_top.json +723c5db04011eeb1f2e0483f3466bf05432c5f4c assets/create/models/block/creative_top_window.json +0994ef30adac0d9faa19d06fd933eb16b11d1ef3 assets/create/models/block/creative_top_window_ne.json +59c43cc18525792ca96026c966076f52cf7ebef7 assets/create/models/block/creative_top_window_nw.json +a6eea01609266b757342984889af16234ecd5189 assets/create/models/block/creative_top_window_se.json +6e1d2fb66291f2a3e3a213f43b47fb9760cb959f assets/create/models/block/creative_top_window_sw.json 68843a02a32c156afad85830877b83f9b51c5147 assets/create/models/block/cyan_sail.json 6704782830b3d872321e895b6903709c18e3778f assets/create/models/block/cyan_seat.json f45ef4a5f0aa8482d493661673b1c0ab6d061157 assets/create/models/block/cyan_valve_handle.json @@ -736,47 +709,6 @@ d13df8a5920c5778d98081fb0e97f045e2fd46a2 assets/create/models/block/framed_glass a5938ddd48109f067a19a90a0f9abab655c18821 assets/create/models/block/framed_glass_pane_post.json 41645919ece236df5804a5a73ef682720194de34 assets/create/models/block/framed_glass_pane_side.json 8bc0abaabdc62d0c27730dba7eb6da54607b7e96 assets/create/models/block/framed_glass_pane_side_alt.json -<<<<<<< HEAD -894518bf911d73cece24d4557ab29829829d70c0 assets/create/models/block/gabbro.json -d84f558506d4a399f72d86b15f318b234ce67e58 assets/create/models/block/gabbro_bricks.json -6ca3de3137526e3e103b9759c9f79edcaec3bab3 assets/create/models/block/gabbro_bricks_slab.json -fd6102766ba2567a70c86e7613992a23a5a3e7c6 assets/create/models/block/gabbro_bricks_slab_top.json -ae26c480f3d9d51c8b9d2e20427ec9234a0db8d5 assets/create/models/block/gabbro_bricks_stairs.json -8a19d9f9f8f1d0f0ea9311cb8b2488c5027fba25 assets/create/models/block/gabbro_bricks_stairs_inner.json -78d2189693c37ff41751cc5f0464f88c36482d77 assets/create/models/block/gabbro_bricks_stairs_outer.json -79e4fcf540e86a4d5910d57d9d9045ce181b0070 assets/create/models/block/gabbro_bricks_wall_post.json -49398d10642388e8301159505dde8b0c25ab2edc assets/create/models/block/gabbro_bricks_wall_side.json -23854558036ea469c6d78880d0f5244b64fdb418 assets/create/models/block/gabbro_bricks_wall_side_tall.json -c50dddabd9be06f251f6bedcf7e122eb79bb9400 assets/create/models/block/gabbro_cobblestone.json -19f29ac6c463b21311629ef277ddb6dc0673caa1 assets/create/models/block/gabbro_cobblestone_slab.json -3eaa34ce53980d6340547445536444f5fcfd4e2c assets/create/models/block/gabbro_cobblestone_slab_top.json -ca94584799cbc0861e783dee631ea70e154a0898 assets/create/models/block/gabbro_cobblestone_stairs.json -47ea92c04b31fc43a2123d418ac2142f7104d780 assets/create/models/block/gabbro_cobblestone_stairs_inner.json -dc099cc48208c776cb561fb0cf20142fe1f905a4 assets/create/models/block/gabbro_cobblestone_stairs_outer.json -acb516b2ecb4bbb8dc9c7c4a8b4ef8f7347af0f7 assets/create/models/block/gabbro_cobblestone_wall_post.json -a66072ee1cd164a10935417c036f4f55772769b1 assets/create/models/block/gabbro_cobblestone_wall_side.json -b8f5a5d25a3e3731670b4a7f7c83fd22f72ebd1d assets/create/models/block/gabbro_cobblestone_wall_side_tall.json -4f8ee4ea7f0a79f7da29414397d8829c1969b7b5 assets/create/models/block/gabbro_pillar.json -adf7ef2d029fb6b26a445de79c62b710e6832c06 assets/create/models/block/granite_bricks.json -47765dd5359ab0a1d76cbc503d621250224063fd assets/create/models/block/granite_bricks_slab.json -80d7b25ff3782fc7e5cd419e275300fe3722892d assets/create/models/block/granite_bricks_slab_top.json -a56aa126a5a4a88914e62926630f5548b24c62e0 assets/create/models/block/granite_bricks_stairs.json -cdafe87bed3980b6109a2d85dd85a207967382da assets/create/models/block/granite_bricks_stairs_inner.json -b15b4ef4354b189b678fa944cf3ad456480fd30a assets/create/models/block/granite_bricks_stairs_outer.json -45999378195baa93e1eec5e58c0065a3d255490b assets/create/models/block/granite_bricks_wall_post.json -c1c86afd629d16387627d1f136e5ab6f846e072e assets/create/models/block/granite_bricks_wall_side.json -44df8fb0bcf2bb17aa0c70ae3829d01c3452e4be assets/create/models/block/granite_bricks_wall_side_tall.json -8804fa93deed01d2c488894ae0f4e35ceed0218c assets/create/models/block/granite_cobblestone.json -ea28ac79636a92779066ab43d727cc0dd99f12a5 assets/create/models/block/granite_cobblestone_slab.json -0425978f192f8dbaa6e077739f4ef77443b03b7f assets/create/models/block/granite_cobblestone_slab_top.json -9f1243adc9affaaaa43355a73570d8b8cc0b76ab assets/create/models/block/granite_cobblestone_stairs.json -ddc8bf8dc62464d424ab812f801dd7a1f68072d0 assets/create/models/block/granite_cobblestone_stairs_inner.json -2ed22800ed503bd0b903b2b7ed86209861833fcd assets/create/models/block/granite_cobblestone_stairs_outer.json -01236266fd0d5057e97dea0fbb114de702fe2c48 assets/create/models/block/granite_cobblestone_wall_post.json -87f6b4e30f2cdd0ddb3b48e43f15317b386597e6 assets/create/models/block/granite_cobblestone_wall_side.json -5c7340740d822deae7aa32c15c36531476862fbb assets/create/models/block/granite_cobblestone_wall_side_tall.json -f55c5825c63f345a95e822a2113e76b5a62d8f7c assets/create/models/block/granite_pillar.json -======= af8bceaa94d714ab377ab9cef1a46ec8cd2b6382 assets/create/models/block/gabbro.json d21fdbd5ae4013fed068e6ae015d68880d4d3d5c assets/create/models/block/gabbro_bricks.json acdb20098521f67a530dd809190b1c024464749d assets/create/models/block/gabbro_bricks_slab.json @@ -813,7 +745,6 @@ cf267628d47aa424bc20977e69e255ceda3ddfe4 assets/create/models/block/granite_cobb a4f50b75a3186829fc5d62ee4e33997cd202dbd5 assets/create/models/block/granite_cobblestone_wall_side.json 349a58ac4e4535d0fe9ea467632ed904da2c6098 assets/create/models/block/granite_pillar.json a68cd40ffb769b195437107f4a2c2188b222b74a assets/create/models/block/gray_sail.json ->>>>>>> mc1.15/dev 6eb5e59e803e1055968b90f3099cd0a17a1d3fd5 assets/create/models/block/gray_seat.json 7e213be39cc928363bf2b096f055439211050b8d assets/create/models/block/gray_valve_handle.json 17b651233c62b928f0228562a7f6e7a2b7b2d6b7 assets/create/models/block/green_sail.json @@ -825,23 +756,6 @@ d13df8a5920c5778d98081fb0e97f045e2fd46a2 assets/create/models/block/horizontal_f a5938ddd48109f067a19a90a0f9abab655c18821 assets/create/models/block/horizontal_framed_glass_pane_post.json 41645919ece236df5804a5a73ef682720194de34 assets/create/models/block/horizontal_framed_glass_pane_side.json 8bc0abaabdc62d0c27730dba7eb6da54607b7e96 assets/create/models/block/horizontal_framed_glass_pane_side_alt.json -<<<<<<< HEAD -35253c91ed72c7c2ce981c384d334c1113851469 assets/create/models/block/jungle_window.json -65da656d412d973865f50ab7f02e278fe5398bea assets/create/models/block/jungle_window_pane_noside.json -9f4144df2e6b35c1fad04e594be5adb3b107bdb8 assets/create/models/block/jungle_window_pane_noside_alt.json -2e8cec84ae0fe8933a3e2e39721937673c4941d1 assets/create/models/block/jungle_window_pane_post.json -4e3cc8764a8e5cefd2dfb415e66e75c4059cb804 assets/create/models/block/jungle_window_pane_side.json -b233d493ec57204f7527c6ccf803580c1131b2ae assets/create/models/block/jungle_window_pane_side_alt.json -6abd1f7dd176b861e2335f65c8f8cdc50c90aaac assets/create/models/block/layered_andesite.json -be3a70d4f88abeb9321bdef6629790cb4220b688 assets/create/models/block/layered_dark_scoria.json -936e118bb2275fa468bc0d0e934a14e3a6c768ee assets/create/models/block/layered_diorite.json -e1add9f62cf886a7989f7ebb545906da16ad7a41 assets/create/models/block/layered_dolomite.json -3ed6faede6762dd9b44139d137ff081797189300 assets/create/models/block/layered_gabbro.json -650f878e71110f84abaa44c076b0c0023425be45 assets/create/models/block/layered_granite.json -cecf946818c65370b685dfeaade50819183acb41 assets/create/models/block/layered_limestone.json -258fb9644d396872719c56ae1ca89f50667a1077 assets/create/models/block/layered_scoria.json -60b05926e706d5dd27f3cb4997120c948797f2f4 assets/create/models/block/layered_weathered_limestone.json -======= 2536b29d5d87ba7da1d0f29c791572f67d1bd951 assets/create/models/block/jungle_window.json 50ad1922e3fcc045c9ea9fc085fdeeb53ab95c7a assets/create/models/block/jungle_window_pane_noside.json 38e4df0859d04d1a2dd4973b530748eb39c9f6c9 assets/create/models/block/jungle_window_pane_noside_alt.json @@ -858,7 +772,6 @@ ff78465839cbd36a356cd4153c721c88b1f0b297 assets/create/models/block/layered_gabb 9408ce7ba29a96053c9333b15a05d716752392c6 assets/create/models/block/layered_scoria.json da71aca99ac5cf3731896be47e15d774397a3330 assets/create/models/block/layered_weathered_limestone.json 19bd08ad6ac351e6eee2131f7b4c11a768bf8f08 assets/create/models/block/light_blue_sail.json ->>>>>>> mc1.15/dev 1a28b07da68d1461cd04c971ae548d94165e0cf3 assets/create/models/block/light_blue_seat.json 68e01f8d8a31f07f236383e19b49ae1be4cbe3f4 assets/create/models/block/light_blue_valve_handle.json 73f14b905d5fdb433751a33b963852de6491722a assets/create/models/block/light_gray_sail.json @@ -867,33 +780,6 @@ da71aca99ac5cf3731896be47e15d774397a3330 assets/create/models/block/layered_weat 8292d043ebfe280340526a6a0f96d4160099e213 assets/create/models/block/lime_sail.json 31c9474210d8535c5417021fe042d4cc31e17328 assets/create/models/block/lime_seat.json 74008bd0d775b0e2e96b43be2e51d0f3c3abdf21 assets/create/models/block/lime_valve_handle.json -<<<<<<< HEAD -fccac0de94fff5f4e180fc9dbddeb0f8ddf3baab assets/create/models/block/limesand.json -3c49d63386b3f5326051edbf6e2f0f8f0e2ff4f3 assets/create/models/block/limestone.json -84920646b4df506f94e64611ee231f3af51b5379 assets/create/models/block/limestone_bricks.json -34a6379261b13f0b5b856bdcbecac1aa8de98ec8 assets/create/models/block/limestone_bricks_slab.json -a4eb94d59365c854b205c22b98c03742a3e45007 assets/create/models/block/limestone_bricks_slab_top.json -6030ff8209edb3ef04e6dcf83cf181ee4cad13fa assets/create/models/block/limestone_bricks_stairs.json -0e830acdd0e39b099d0d0b3f2b9326af0c182633 assets/create/models/block/limestone_bricks_stairs_inner.json -38c3bc0412baa9ed842c6436874c528e4a27fe00 assets/create/models/block/limestone_bricks_stairs_outer.json -d36db8a76c0abf8f42798fb2d8914d4aad0cb7b9 assets/create/models/block/limestone_bricks_wall_post.json -628493255ec16d79455bc54497c6a4b8207e0649 assets/create/models/block/limestone_bricks_wall_side.json -9c4cbf01802a59919c284bc616ae4d390b34d917 assets/create/models/block/limestone_bricks_wall_side_tall.json -93d3ca6df1c824a6f8b54d917bc61e48675f5ff5 assets/create/models/block/limestone_cobblestone.json -7786068e25079538528bf717e473d5c4e2266f7c assets/create/models/block/limestone_cobblestone_slab.json -454f09c5eb4c92bfa0e0b81c0b28c88caa78a907 assets/create/models/block/limestone_cobblestone_slab_top.json -213e897e2e2df5647e6c2df23691e52e92eaccab assets/create/models/block/limestone_cobblestone_stairs.json -c54e5a17495f88fa21b3488e8da32a365452c36c assets/create/models/block/limestone_cobblestone_stairs_inner.json -17cd5d20df9a8a16ad8993bcf5fc273ca80933dc assets/create/models/block/limestone_cobblestone_stairs_outer.json -464053d2fad1f398662a0878e6891a0dc613061d assets/create/models/block/limestone_cobblestone_wall_post.json -9d2826391999f3d65b948f560c91bc178dbe8846 assets/create/models/block/limestone_cobblestone_wall_side.json -6d4fb04b155e1460c6f8019491310707ed5cca28 assets/create/models/block/limestone_cobblestone_wall_side_tall.json -7527b3f1274744a64f7eb4bc94f7bc125dcbcf28 assets/create/models/block/limestone_pillar.json -0766a12c95977dfb8f3a8ea453d45c9832e7e824 assets/create/models/block/linear_chassis.json -7991d6620d2225b1a026e2b62dc076cf0a33613d assets/create/models/block/linear_chassis_bottom.json -56e585805c6235552ce5e15ff2f125ff8ec0fa2d assets/create/models/block/linear_chassis_top.json -12b35c916e3ee83ee4fd1e309c73403dec9a7297 assets/create/models/block/linear_chassis_top_bottom.json -======= ce6fb36a386c895486e021823eb008b0fa4862c3 assets/create/models/block/limesand.json a2cbc86d24fdd70c5f33c8b30ba52a8928dde63f assets/create/models/block/limestone.json 447686a6861773e03c5c18f2de4bc11d06c65f78 assets/create/models/block/limestone_bricks.json @@ -918,7 +804,6 @@ eee8ae85daa99fcd594da3d4af393726af69493b assets/create/models/block/limestone_co 999ce855842170f47db9d1e8e8636c24f7d3ad3d assets/create/models/block/linear_chassis_top.json b9abbd1dcf71e0a1416fd998a82a560c06cef5a3 assets/create/models/block/linear_chassis_top_bottom.json ec6b5f636e163ff5e361d486cf628ca1af4849a1 assets/create/models/block/magenta_sail.json ->>>>>>> mc1.15/dev cbee001cd1bb1125a97d1bb2d1e6e5a68f129303 assets/create/models/block/magenta_seat.json bc5a03a5552eb4a518abefe5e8615f14ee13ca29 assets/create/models/block/magenta_valve_handle.json 2e67f27a895c9163a5d1be62897d5e66b119767a assets/create/models/block/mechanical_bearing.json @@ -931,15 +816,6 @@ f2f7cda5de21279ff8e359142c523e07a3377477 assets/create/models/block/mossy_granit de9b0f933881cc735ae0acf2bd71e6eafa732ff8 assets/create/models/block/mossy_limestone.json f88a9558a20033d4955e7b6de4f8aa23b1a11b9f assets/create/models/block/mossy_scoria.json 8c3296378aa7e5dc1bc7dfdde2f0a436b8bb8b78 assets/create/models/block/mossy_weathered_limestone.json -<<<<<<< HEAD -50f28bf7a7de95caf12b4f040994f0f3da72a55a assets/create/models/block/natural_scoria.json -e3cd8b33b8c5f0543e4f6728a5b3e05642f9efe1 assets/create/models/block/oak_window.json -54a3b3158f8c914788812aa44515b798b2a9e2f3 assets/create/models/block/oak_window_pane_noside.json -b9c27f90d4d258e3fdcd713aaa42142f5d46a79e assets/create/models/block/oak_window_pane_noside_alt.json -8c3fdc51742897d110641ba9127f857297300edb assets/create/models/block/oak_window_pane_post.json -8f77db5a66b165d2ca85f9119666907dcf65105f assets/create/models/block/oak_window_pane_side.json -b3e056a176e86660fc2d3a51f9ba8b01eebb56c5 assets/create/models/block/oak_window_pane_side_alt.json -======= 24cbd7e60a7769a8fc9f530978ef7094ae65a9eb assets/create/models/block/natural_scoria.json 269ec2c32ba22a216b1c6831e6284ef98e78ee75 assets/create/models/block/oak_window.json f324403f578d724c118055ca04e6bec23607ea90 assets/create/models/block/oak_window_pane_noside.json @@ -948,7 +824,6 @@ e55363147cc27fba84590c7e24460603988118e3 assets/create/models/block/oak_window_p aa12818d00d1995e5b8a218cb613215ec0161d23 assets/create/models/block/oak_window_pane_side.json 488dfd3f4bd82ab1b5b751b4a46881befb8d6819 assets/create/models/block/oak_window_pane_side_alt.json ff9b51fcaffe54e321b9479f035f4ea7b278bfec assets/create/models/block/orange_sail.json ->>>>>>> mc1.15/dev fda0628a09ef726e3e8323b2f38b6a3e612dc2ca assets/create/models/block/orange_seat.json 3b07f3f1985495051d173725b01ddd52b5f70ac4 assets/create/models/block/orange_valve_handle.json de5ecd753303b2c5dc3819299b9a316f0d7035f6 assets/create/models/block/ornate_iron_window.json @@ -966,130 +841,6 @@ ca08c15006d65701d72bb88852df884236822522 assets/create/models/block/overgrown_di 3368bbdf335c81b9e84adc30afeab9261256279c assets/create/models/block/overgrown_limestone.json c21c58e982ec0eb1c88948ac53b570b26bf1c9bc assets/create/models/block/overgrown_scoria.json 6d7842c5c0f58a3cb3150e54bee2b51e7138df45 assets/create/models/block/overgrown_weathered_limestone.json -<<<<<<< HEAD -8dfe5334887c09375f2571aa3835f2dd9de76875 assets/create/models/block/oxidized/copper_block_0.json -3f5af8864db20346df2463066265d7f6709a5e65 assets/create/models/block/oxidized/copper_block_1.json -ee0f11c96fafc164fd9ac64fde0f89cfd527a65a assets/create/models/block/oxidized/copper_block_2.json -060743439c0f0e991a7ccfcc9053ee9741e73805 assets/create/models/block/oxidized/copper_block_3.json -131b2a2b3c883deeb6af544f15fcc0d88a3ff5fe assets/create/models/block/oxidized/copper_block_4.json -4e0fbfc3b61f04f68c6022d6a9a9eabdffdd8673 assets/create/models/block/oxidized/copper_block_5.json -e3d374a2e5ceac212bed21b6ec964b4593aa847a assets/create/models/block/oxidized/copper_block_6.json -125966d6e25b601779e3bff4a9da84d85e3984ff assets/create/models/block/oxidized/copper_block_7.json -8f2b2d983c1a0d128dbb1d6465a4eb3a7f98e34c assets/create/models/block/oxidized/copper_ore_0.json -4fd860b564a98869c6450e21446e0e41a8303206 assets/create/models/block/oxidized/copper_ore_1.json -430a115e26a2e95b7a6c04746b10f617212a3091 assets/create/models/block/oxidized/copper_ore_2.json -596fb93cc5f59ccff8e84c07a99398f5ec20d169 assets/create/models/block/oxidized/copper_ore_3.json -d7e94d32a8c739fe8ccfc51b3bf5c1dff038b47f assets/create/models/block/oxidized/copper_ore_4.json -895d3ce98dc576b7396fa309dce69eaeba419c95 assets/create/models/block/oxidized/copper_ore_5.json -578ee4b7b0aaf4f5fbdecc7800f1d8b0d9ea6576 assets/create/models/block/oxidized/copper_ore_6.json -7c4e54d05a8e76e390044099ad02c5dd082f2460 assets/create/models/block/oxidized/copper_ore_7.json -2091e38299cd736320de736b9450e9b5209106cd assets/create/models/block/oxidized/copper_shingles_0.json -3614bcea228962535a048b68b3069a9058156a16 assets/create/models/block/oxidized/copper_shingles_1.json -3d2219e127df9e14109c876ef2e3499a21268209 assets/create/models/block/oxidized/copper_shingles_2.json -6f9461d372dbd9561460649a9325c62cd3f3ef36 assets/create/models/block/oxidized/copper_shingles_3.json -d9867c3574ecd484ea179a8ffc2d3b562a389bc2 assets/create/models/block/oxidized/copper_shingles_4.json -649cf546f5f4535f0936dedf0074aeb878829129 assets/create/models/block/oxidized/copper_shingles_5.json -c3bb01e750f02312c62990d71bd113df41f0746c assets/create/models/block/oxidized/copper_shingles_6.json -cde13928d8643fe28f891b4ed6358971b6eb49f7 assets/create/models/block/oxidized/copper_shingles_7.json -a223e5ddcd9c0f282a0193434189ae91b67e1571 assets/create/models/block/oxidized/copper_tiles_0.json -590c75f1c1a9013c8adb5b90f05e8578a75a140f assets/create/models/block/oxidized/copper_tiles_1.json -66af247eac88396e9c26b61443e2d324f250a160 assets/create/models/block/oxidized/copper_tiles_2.json -3fc4e85ed7115e4b3289739268b4366f8d8777c5 assets/create/models/block/oxidized/copper_tiles_3.json -abdcf49a3ad1a25b37653c1c6eccd24b9a97c87f assets/create/models/block/oxidized/copper_tiles_4.json -99580c32742505b9a2eb64185f9529a5388d2751 assets/create/models/block/oxidized/copper_tiles_5.json -be9ac7815d4bbf0c42dc40d20d34212250ac86a7 assets/create/models/block/oxidized/copper_tiles_6.json -a4e5715d04bd13860e2d5981c2122fbc6b435e80 assets/create/models/block/oxidized/copper_tiles_7.json -44abcee4d7f0d63d2f91b42a6e223cb8211597df assets/create/models/block/paved_andesite.json -afcf525fd574ebd6918d0357442d2f8099276079 assets/create/models/block/paved_andesite_covered.json -ee19b3143803e4d41639dbd564f84bf86b01d77d assets/create/models/block/paved_andesite_slab.json -39da471b29a69b94dd481b8a7d6aad2b8efcc993 assets/create/models/block/paved_andesite_slab_top.json -7f61f36812ec6f1a684bfc06e7058114dbe4c7d4 assets/create/models/block/paved_andesite_stairs.json -91a169ff2d8463520d419738d2341afdc4cf1f0f assets/create/models/block/paved_andesite_stairs_inner.json -7c7d1081ce8c4cf8c247afeafed434172c8ccd00 assets/create/models/block/paved_andesite_stairs_outer.json -b14d753208e48c3a2780d258bec6e0d20ccbafc1 assets/create/models/block/paved_andesite_wall_post.json -1edd248747a0db1381115b3ecc40f7fa24ae845d assets/create/models/block/paved_andesite_wall_side.json -5bfc3655067f7ac2e80dee3ccc1c4a9b387316a0 assets/create/models/block/paved_andesite_wall_side_tall.json -516936f48542723e9ea19fe06412348d36d4461b assets/create/models/block/paved_dark_scoria.json -5a9c0029ac5c10a65709bdf59a4f3dd778369370 assets/create/models/block/paved_dark_scoria_covered.json -4dfbc6beec27bf266b03a7fc9c9ddd8dc2d24745 assets/create/models/block/paved_dark_scoria_slab.json -9657df68fa3903ddef2aa49b88ec66a7e91ebb7e assets/create/models/block/paved_dark_scoria_slab_top.json -8c6fcbe10e4287e39b7f5161d677b628b933cb17 assets/create/models/block/paved_dark_scoria_stairs.json -fb5bd6499bf17d861d5f504b45d2caf9a734ff77 assets/create/models/block/paved_dark_scoria_stairs_inner.json -bc58687ad19f3a12b8c730dd2c7284b3baff370c assets/create/models/block/paved_dark_scoria_stairs_outer.json -346b7db2932c5f32a26e35bf0383b33c6109ee3c assets/create/models/block/paved_dark_scoria_wall_post.json -695b167aa884c3c827bf3f743233d7c5f0d220d3 assets/create/models/block/paved_dark_scoria_wall_side.json -75870726f58f388244ffbbde1676a9f66c52120c assets/create/models/block/paved_dark_scoria_wall_side_tall.json -ad5ecc000e088252a9aa144250f1be3324dac366 assets/create/models/block/paved_diorite.json -171351fbd56ea8a19ba6c9b0fd82bf88ee176528 assets/create/models/block/paved_diorite_covered.json -bc66da45a57ac338c066aa26427c3c55d78d798c assets/create/models/block/paved_diorite_slab.json -c3e7a4cc76ea1cf2511f6921ed715540dcb200df assets/create/models/block/paved_diorite_slab_top.json -dfd06d83473b0cf8855fbd0ed89831567bcc6212 assets/create/models/block/paved_diorite_stairs.json -6f852f3f90c24cfebbfc603f11803e039ea9a0c0 assets/create/models/block/paved_diorite_stairs_inner.json -cd32a4355eed1eadfdd133a2acc135c0836011a7 assets/create/models/block/paved_diorite_stairs_outer.json -6c52f7f025f56dcd45fcdef87c76263318ffbee5 assets/create/models/block/paved_diorite_wall_post.json -5ee12e7349d48986ff245512764defbf18d03a45 assets/create/models/block/paved_diorite_wall_side.json -1584f34af51c9ee584d7e6c528d68a7ff2a9b5a0 assets/create/models/block/paved_diorite_wall_side_tall.json -e763ba96670e52800dfadb96cc402ef50bc23c21 assets/create/models/block/paved_dolomite.json -1ea5247d696ab136f8e323f68e2918a9e871ce1c assets/create/models/block/paved_dolomite_covered.json -dba94cd61f0672829bbab3ace3409dce589bef62 assets/create/models/block/paved_dolomite_slab.json -74e8a30e8e14e4f4bb05f53159928544e99006ec assets/create/models/block/paved_dolomite_slab_top.json -c282fd047907899c439f022203aee6a1491070b4 assets/create/models/block/paved_dolomite_stairs.json -88f4e3af8e0a7fd38adc300e49f8f0efb19ee8a9 assets/create/models/block/paved_dolomite_stairs_inner.json -91b6be901eb9a18518585c679757c1baec16c7c5 assets/create/models/block/paved_dolomite_stairs_outer.json -8b9309e098b6066dff8cd206e80938e33b692c8e assets/create/models/block/paved_dolomite_wall_post.json -378609052c8daa9a38259b54a0a0d995c4636396 assets/create/models/block/paved_dolomite_wall_side.json -47b5f4d682d041008c8256fc3df1be25130fa10a assets/create/models/block/paved_dolomite_wall_side_tall.json -f90897992da49371e405088756b9077113a5c7dd assets/create/models/block/paved_gabbro.json -7ab1400fe9c2968fbe276bf70325ae6d159d37c3 assets/create/models/block/paved_gabbro_covered.json -fa1ed152122fee3a8bce34157159964b5fd8d79a assets/create/models/block/paved_gabbro_slab.json -8cd07e28885661fedca14b976dcd48b7042cee2a assets/create/models/block/paved_gabbro_slab_top.json -460a95cf5fc13f037902b6794a7e8c54a091b3cc assets/create/models/block/paved_gabbro_stairs.json -ce9c4a0cc7168b2fbe094b40a9a13c5fc5368426 assets/create/models/block/paved_gabbro_stairs_inner.json -f51b8fe5408d80ecf79b45fd2e758b947bd89d12 assets/create/models/block/paved_gabbro_stairs_outer.json -3113c182a4ff13adbc156b70a31c80b0e7de064a assets/create/models/block/paved_gabbro_wall_post.json -39a7a337bdca36263fb998c22a02b698b3e9ef06 assets/create/models/block/paved_gabbro_wall_side.json -8bce3c1a2d05e3d1897670c4768883b7a02e5159 assets/create/models/block/paved_gabbro_wall_side_tall.json -12ddeae599606fa0aaee5539f9cea99003220dd3 assets/create/models/block/paved_granite.json -528f2d902f402260d7d7670ef0f0b01b5367cb7b assets/create/models/block/paved_granite_covered.json -053fcddd1f3705dc47f2be515470d6cd006cea04 assets/create/models/block/paved_granite_slab.json -23329b2e8aaf3adddc50aba4ad8e2204db6677af assets/create/models/block/paved_granite_slab_top.json -1f39a935603bd49a76721cccafe49ca56ad616b9 assets/create/models/block/paved_granite_stairs.json -e9a6d727123642bc7db48f1f7e6024f08fa389c5 assets/create/models/block/paved_granite_stairs_inner.json -f7fddf3184dc69b095c432f3f2dfe9204b36ce21 assets/create/models/block/paved_granite_stairs_outer.json -2897b4cc6610e9cbb57582e84913f613903eda2d assets/create/models/block/paved_granite_wall_post.json -7292a674884325407786551a47f42ddc751b8e38 assets/create/models/block/paved_granite_wall_side.json -eec5d2ea68490b4b377bc8d8ae8dcc168e450174 assets/create/models/block/paved_granite_wall_side_tall.json -fd47f060b2d9686414d771fa79f73b0d7d18d1cf assets/create/models/block/paved_limestone.json -a02a16fcd7157e6e7485526673ba6fb30d228501 assets/create/models/block/paved_limestone_covered.json -3af3115c9d46fbf5ff9fb0c2c315292b2932601f assets/create/models/block/paved_limestone_slab.json -73873290e35c04be5e373593c5ab8555d045f239 assets/create/models/block/paved_limestone_slab_top.json -77d83f143597871e51450a370a4c3bf9a21d2d9f assets/create/models/block/paved_limestone_stairs.json -a95e3d5f34c0c8b03bd2a995a2811f3f63f91378 assets/create/models/block/paved_limestone_stairs_inner.json -825770b522f098d39c20850b7e8c887f429cdce1 assets/create/models/block/paved_limestone_stairs_outer.json -7462e8f922b26eacfe28ef5bc56fd1ed2ffdfb0a assets/create/models/block/paved_limestone_wall_post.json -1b3f725c75a524fe9e8039e03f8db84a1b252a96 assets/create/models/block/paved_limestone_wall_side.json -3a5f1bbca22ba53520138c192de22fa05c36fbfd assets/create/models/block/paved_limestone_wall_side_tall.json -2ad932c3a89dd2faa2f6d82c97f32242b092f7d2 assets/create/models/block/paved_scoria.json -a24a73544adbd4dc8afdcb42f42fe95e401a40c0 assets/create/models/block/paved_scoria_covered.json -f737e38308efcf68537505069cf60dba6d1c3658 assets/create/models/block/paved_scoria_slab.json -c6dab2f8010a5d75b1b145ea9c7e30329d099243 assets/create/models/block/paved_scoria_slab_top.json -ffdb9bb5e7072576a9db048fdb6375a27ad6df51 assets/create/models/block/paved_scoria_stairs.json -de95cca903aea66a0fd33e5629b1014fe33e6211 assets/create/models/block/paved_scoria_stairs_inner.json -f70d47a341a352ce53c39c272ef0556e8d6f62b5 assets/create/models/block/paved_scoria_stairs_outer.json -060b7c9b493c172916e99310663636376192eedf assets/create/models/block/paved_scoria_wall_post.json -308450fd3a19195364d268e29bef8afc7f9ca733 assets/create/models/block/paved_scoria_wall_side.json -100b1a1142953a107d283eab42000664c356c214 assets/create/models/block/paved_scoria_wall_side_tall.json -af309a5dd825509e64e3f2dc4db749e7d416cd71 assets/create/models/block/paved_weathered_limestone.json -04f8ab203f904371d9075d601dbb467931a75a50 assets/create/models/block/paved_weathered_limestone_covered.json -2d3700ea734cc2805fff93e1e7c63d8b716b3f43 assets/create/models/block/paved_weathered_limestone_slab.json -38177158a119e703e4e99b47eb12733e232ae768 assets/create/models/block/paved_weathered_limestone_slab_top.json -7aac84ea55c52494e5d9d61f53dc6f9a794afec4 assets/create/models/block/paved_weathered_limestone_stairs.json -db56f592a9ce027f33264d381b29830592b7d42e assets/create/models/block/paved_weathered_limestone_stairs_inner.json -f924c6104378768a3a645f5e77f9ed80d2c31e5a assets/create/models/block/paved_weathered_limestone_stairs_outer.json -46e3eeeefd47f7e6007e53bb1b22de2c6c2a5923 assets/create/models/block/paved_weathered_limestone_wall_post.json -c7941c0bcbdf7ec7e2d34679afac744cf81b7489 assets/create/models/block/paved_weathered_limestone_wall_side.json -39aaea370e31fa032e471d3b8f0ebf0586ee1a03 assets/create/models/block/paved_weathered_limestone_wall_side_tall.json -======= e151c82942df13d7f4296b6b717b12036c4c47fe assets/create/models/block/oxidized/copper_block_0.json 35cb12fe13b6f39d2baad9b5a1638b6c5b364513 assets/create/models/block/oxidized/copper_block_1.json a7ea046b36c810816dd749727fcc3f1008807c4c assets/create/models/block/oxidized/copper_block_2.json @@ -1204,7 +955,6 @@ cc36e21013b80b1dfa041b55047096db127ffa51 assets/create/models/block/paved_weathe 34ba32e570e0a54501db071b9f8c38513edea93d assets/create/models/block/paved_weathered_limestone_wall_post.json daf65510d95730bcf0373d746f2a2dbfe6b44fc0 assets/create/models/block/paved_weathered_limestone_wall_side.json 1b5f9e819cd4b5f5fe6e8c24920b916e8d93c95e assets/create/models/block/pink_sail.json ->>>>>>> mc1.15/dev ecc60ce7ee6b753073a99c597db95d6d9df3d438 assets/create/models/block/pink_seat.json 7ada61878d3a3c1d3cc33bcf9a80c21b8f9aaff2 assets/create/models/block/pink_valve_handle.json 84fdb35acc12ae9580496f458def3e49aa0551ea assets/create/models/block/polished_dark_scoria.json @@ -1272,12 +1022,8 @@ c934df1cfe097bcc0f0c21d1b1a3f3b53e50e831 assets/create/models/block/polished_wea f22d7d8263dcabd726aa04784031ae9062633579 assets/create/models/block/powered_toggle_latch_off_powered.json e6097d9ab9dc9954cbc750020bc33c7a423b73c6 assets/create/models/block/powered_toggle_latch_on_powered.json 622239a3a09fcac7235b9670eb395a530839a59b assets/create/models/block/pulse_repeater_powered.json -<<<<<<< HEAD -d469dce70d15759baed35025b8c7fa403c8b3b26 assets/create/models/block/pulse_repeater_pulsing.json -======= 0102e253c941904f12de7acdd46b0079ee3ccf69 assets/create/models/block/pulse_repeater_pulsing.json b56fad63b82434564bc41ae9c01e3b427203fb5b assets/create/models/block/purple_sail.json ->>>>>>> mc1.15/dev 96adc7865ebe64b43865bc2fe914830c11258856 assets/create/models/block/purple_seat.json 062406aacf25e099f9b28a3bf7cacfcaa1da4ef6 assets/create/models/block/purple_valve_handle.json 27d64a828607f94296c0b86cdb35fad996bc5d23 assets/create/models/block/radial_chassis_side_x.json @@ -1416,13 +1162,8 @@ afd697168c9786eb80e54eccdc6a23afa6c7fb0e assets/create/models/item/chiseled_gabb a47fbe5f2da79080d99ef0975bfa8da4d08f8be4 assets/create/models/item/chiseled_scoria.json 70232ce9b88119fb383717e2c1ad113f7aad6a99 assets/create/models/item/chiseled_weathered_limestone.json fe67c3f380d17735a9436a4579a8be1a02b8e4a0 assets/create/models/item/chute.json -<<<<<<< HEAD -6680a68526576ded5dac2aa3bc9fb9de3e744146 assets/create/models/item/cinder_flour.json -b1531a7bd3f7f27b9587d13e818a93dc2d088bc8 assets/create/models/item/clockwork_bearing.json -======= d418205c83d3e57c830755ee8c09e2962353e493 assets/create/models/item/cinder_flour.json c1da21be9f1af4f7a2ef4ec9cd92195d65ada316 assets/create/models/item/clockwork_bearing.json ->>>>>>> mc1.15/dev 0a2a0f0aafeab0088172f77afd40c1fa2cc1f2b8 assets/create/models/item/clutch.json dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json 7717e3b21cff39f497f07687c70c1fa40eaa756d assets/create/models/item/content_observer.json @@ -1437,6 +1178,7 @@ f56bf22324faf8958eaef4d94b958f1108d52e5a assets/create/models/item/copper_tiles. 5583368909c319acfcf0f7a419bedf23272fe613 assets/create/models/item/copper_valve_handle.json 4e253e7c0626dfd76e2d39786ce1a34e0baaa62d assets/create/models/item/crafter_slot_cover.json 7b333dea353afaa27b182aedc647c9e9e34e92ef assets/create/models/item/creative_crate.json +f7d06c52c3ca8c22ad67f5741471f06ac22e7fcb assets/create/models/item/creative_fluid_tank.json 5b39403f6c81f05e566b621b62e267267de47c41 assets/create/models/item/creative_motor.json 6281a7439c92459761893835f91fde25467fae76 assets/create/models/item/crushed_brass.json cd148cb7e881091ecce2390dac0d9f545573c91c assets/create/models/item/crushed_copper_ore.json @@ -1563,8 +1305,10 @@ cfab82a2cf7495d21778c1de9730a26afbdd523d assets/create/models/item/handheld_bloc dee43bf1a9c211a752fac2c07aeba123f7f0c914 assets/create/models/item/handheld_worldshaper.json 955e8accadb47f9b360e5fd48cd959c507b00f2d assets/create/models/item/horizontal_framed_glass.json f0e3b2b8a553b6e61746c922c27302dabfff71b6 assets/create/models/item/horizontal_framed_glass_pane.json -d9f222e963f8f8910ca9dbc3c31842ef149f7a1f assets/create/models/item/integrated_circuit.json -9d605ce0da83a73b535bce45c107e604364e2b20 assets/create/models/item/iron_sheet.json +ff92f6a9dfb73a6ee1eaaed3279c89390ff04a80 assets/create/models/item/hose_pulley.json +771d439eac70b52f593fa7381f2c48729fbdaec7 assets/create/models/item/integrated_circuit.json +d254f47bc185f2a2f01608a875aa63ed2c4ceb0f assets/create/models/item/iron_sheet.json +52e435014cb03e93411666c4799ebff206e55fc9 assets/create/models/item/item_drain.json 83fa8699318e51f838b483b40b3e897c34ed53d1 assets/create/models/item/jungle_window.json 766323f6026c3505a75db2dee2996d342370d9c2 assets/create/models/item/jungle_window_pane.json fe89522b2bd9b4393b8afa2a97f6db4277a8a4b4 assets/create/models/item/lapis_sheet.json @@ -1724,16 +1468,10 @@ ef52b3734a47e96c5f83d60da73110e925737933 assets/create/models/item/refined_radia 6daff6b82b33374d7add65e352e05ecb2fd9ebdd assets/create/models/item/rope_pulley.json 0817505d2d3ee516424100b985ca3fe2d2e7f01e assets/create/models/item/rose_quartz.json acfbf487ee65c2c58d89cb2644e33fda75751fde assets/create/models/item/rotation_speed_controller.json -<<<<<<< HEAD -5fa0bfe8642e2614a7e97d27af1a95dd2e012097 assets/create/models/item/sand_paper.json -3202829de06e9c532dc8a61c955458648b70d645 assets/create/models/item/schematic.json -3f07bc7d4587d78de463ae2ce236e4f363b923cd assets/create/models/item/schematic_and_quill.json -======= 171c343f7f536008f79ea1d63e0a443d064e9ef1 assets/create/models/item/sail_frame.json be86c8156d55d2f128feb66abd70923b3be765cc assets/create/models/item/sand_paper.json 69196df5122a27573112dad49b334dea96aafed0 assets/create/models/item/schematic.json 533483999f61e3b091af567a473875247edaedb3 assets/create/models/item/schematic_and_quill.json ->>>>>>> mc1.15/dev 8dd5caa4d7a0ee45bd9b39e09c4503159933d089 assets/create/models/item/schematic_table.json 0a1c4080ca572106c19a0ba6e2df4baba5f45d35 assets/create/models/item/schematicannon.json 22a6dfdc3cbb1b6ac20ec123b490e15c72dfbfcf assets/create/models/item/scoria.json @@ -1779,14 +1517,9 @@ f2cd30c585a25e336868ee4f8dd80799ecb986c6 assets/create/models/item/weathered_lim 3d26cb5616182ba6926d0bf703119ebfbeacbe31 assets/create/models/item/weathered_limestone_cobblestone_stairs.json ea1d735b557a71bbb2b35e5f03ba571d54c38dbe assets/create/models/item/weathered_limestone_cobblestone_wall.json 40bed7f5e9e97da45c5d9cebc3fcf87b2b13a808 assets/create/models/item/weathered_limestone_pillar.json -<<<<<<< HEAD -30c449f637e8d56b7670b81ec2a90942e2972739 assets/create/models/item/wheat_flour.json -9502a51ed2f6a110b6d41731a5948be4d70c8af8 assets/create/models/item/whisk.json -======= 8914910270736f8f15364c623cd08d4638383cc5 assets/create/models/item/wheat_flour.json 0cc80844db689404d4722c93f1002b0bed05edcd assets/create/models/item/whisk.json c6253e0f8db3c3992d3f78fe5045e276d39d5b22 assets/create/models/item/white_sail.json ->>>>>>> mc1.15/dev 69328eb4f91c4407fbcad5e3c4b88363f1a9572c assets/create/models/item/white_seat.json be7a2d59d43083d7f2427193dcb9d68004224dd3 assets/create/models/item/white_valve_handle.json d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bearing.json @@ -1890,6 +1623,7 @@ c023b9221d7983487d21e5ecc7d92246cfc7e791 data/create/advancements/recipes/create 2ba23f019a110a3e035a49e56ee8156fc11d74c0 data/create/advancements/recipes/create.base/crafting/kinetics/green_seat_from_other_seat.json 9af3d92d11c3f520df3e22f3069042bf34585010 data/create/advancements/recipes/create.base/crafting/kinetics/green_valve_handle_from_other_valve_handle.json dbb96a4db4ef8172af73a626bed9727278d804bd data/create/advancements/recipes/create.base/crafting/kinetics/hand_crank.json +21cd686e1f3a4004d8e9bd3d92675bd61fb2b4db data/create/advancements/recipes/create.base/crafting/kinetics/hose_pulley.json a71b626b6ee58a4eabee56f67c48f041a1323506 data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel.json eb007bb079bbe6b6aaad2ca90f5af84261e3f8ea data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat.json 571da50fbf5f2fcd3363b3dab91e7233e0ebffa0 data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat_from_other_seat.json @@ -2471,6 +2205,7 @@ a5a7ba88a1d38da83b37bbe842dc7cc0544f37be data/create/loot_tables/blocks/copper_s c013613df278f6e8b4c9dad5f16e0ec6c3e992e3 data/create/loot_tables/blocks/copper_tiles.json 5c15f22db359a2af8efa18561e080cdf361a0100 data/create/loot_tables/blocks/copper_valve_handle.json b160899aa785dc54d8c6cc095337f70b81f3e44f data/create/loot_tables/blocks/creative_crate.json +51d66e32581b87beb871d99b93cb45d45eada8dd data/create/loot_tables/blocks/creative_fluid_tank.json d8f2f8921b9200b1d9476a77ee1be32c25308ac3 data/create/loot_tables/blocks/creative_motor.json c28fa42746a4d5ca2f824001b67e58673810169e data/create/loot_tables/blocks/crushing_wheel.json 205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/crushing_wheel_controller.json @@ -2589,6 +2324,8 @@ a71599eecd3f1179e3d0367623460e798828aa6d data/create/loot_tables/blocks/green_se 9bdc47ea3ffc52f037f12f40f387e6b72a352c4e data/create/loot_tables/blocks/hand_crank.json 22012e7759f1dbccbb06bcaf0311a54190270825 data/create/loot_tables/blocks/horizontal_framed_glass.json 5d3f585539942f13bbc458a0a002849c1f034fc1 data/create/loot_tables/blocks/horizontal_framed_glass_pane.json +1b28cc5e1e535aa0c62d4a75ad76fcb40bf6232c data/create/loot_tables/blocks/hose_pulley.json +ef3890c4fa262959cf31a0063fd21919da86eda1 data/create/loot_tables/blocks/item_drain.json cf2bfae903e7f8510962e672b6266c0e74176aae data/create/loot_tables/blocks/jungle_window.json 1a3a19517f95fc632286d3cc693bfee4a59dfa0a data/create/loot_tables/blocks/jungle_window_pane.json 4d948f80fb7a8b6b99897544681f43fe3d2058f0 data/create/loot_tables/blocks/large_cogwheel.json @@ -2891,6 +2628,7 @@ b7fa20d10c0e0e7270b1c0d6f3881b8e25b39bea data/create/recipes/crafting/kinetics/g 6f65a84e00f25d956a6ae834678ff781569b243a data/create/recipes/crafting/kinetics/green_seat_from_other_seat.json 63edaccace961a65aa7bd406d36894c7ca4816b8 data/create/recipes/crafting/kinetics/green_valve_handle_from_other_valve_handle.json 9f08bdaeec88e04a43c2dc103869f9648deee079 data/create/recipes/crafting/kinetics/hand_crank.json +d10639b0c3999481531fe0a9383a1bb4af60225e data/create/recipes/crafting/kinetics/hose_pulley.json 237541c1c318b8426734c1c43be31fbd01413d39 data/create/recipes/crafting/kinetics/large_cogwheel.json a33e3301fc6d3a446e61a1c4b8a93aff079baeba data/create/recipes/crafting/kinetics/light_blue_seat.json 958bb5d3aeb8d8e5dbf5d97cf5fd9ff5151575dc data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json @@ -3527,20 +3265,11 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone 11667414f73bc2d00bda7c5c1a7d2934bf6e9165 data/create/recipes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json f9ecec40e11a87de73c9dc7c2963c1cb10b1a180 data/create/tags/blocks/brittle.json 246ee2ec4e778e38a362f319506564886d4e0e76 data/create/tags/blocks/fan_heaters.json -<<<<<<< HEAD -798ef82869dbe22682121504a372e95607a785dc data/create/tags/blocks/fan_transparent.json -74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/non_movable.json -6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json -50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json -7fa13854a216ee49c0ae3b1e0e23c4cd1fbc4859 data/create/tags/blocks/windmill_sails.json -74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/windowable.json -======= 551299f2f784435859bef13057c2b033eaefc784 data/create/tags/blocks/fan_transparent.json c9ac7e3e5ec18554e7184168d65e9b8e44ef5610 data/create/tags/blocks/sails.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json 50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails.json ->>>>>>> mc1.15/dev 081f5aa35602fc27af2ca01ea9f2fd5e7eb284dc data/create/tags/items/create_ingots.json d2dc4ff179ef7b2aa9276455c196e15d44aa95a8 data/create/tags/items/crushed_ores.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/items/seats.json diff --git a/src/generated/resources/assets/create/blockstates/creative_fluid_tank.json b/src/generated/resources/assets/create/blockstates/creative_fluid_tank.json new file mode 100644 index 000000000..45118d24e --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/creative_fluid_tank.json @@ -0,0 +1,76 @@ +{ + "variants": { + "bottom=false,shape=plain,top=false": { + "model": "create:block/creative_middle" + }, + "bottom=true,shape=plain,top=false": { + "model": "create:block/creative_bottom" + }, + "bottom=false,shape=window,top=false": { + "model": "create:block/creative_middle_window" + }, + "bottom=true,shape=window,top=false": { + "model": "create:block/creative_bottom_window" + }, + "bottom=false,shape=window_nw,top=false": { + "model": "create:block/creative_middle_window_nw" + }, + "bottom=true,shape=window_nw,top=false": { + "model": "create:block/creative_bottom_window_nw" + }, + "bottom=false,shape=window_sw,top=false": { + "model": "create:block/creative_middle_window_sw" + }, + "bottom=true,shape=window_sw,top=false": { + "model": "create:block/creative_bottom_window_sw" + }, + "bottom=false,shape=window_ne,top=false": { + "model": "create:block/creative_middle_window_ne" + }, + "bottom=true,shape=window_ne,top=false": { + "model": "create:block/creative_bottom_window_ne" + }, + "bottom=false,shape=window_se,top=false": { + "model": "create:block/creative_middle_window_se" + }, + "bottom=true,shape=window_se,top=false": { + "model": "create:block/creative_bottom_window_se" + }, + "bottom=false,shape=plain,top=true": { + "model": "create:block/creative_top" + }, + "bottom=true,shape=plain,top=true": { + "model": "create:block/creative_single" + }, + "bottom=false,shape=window,top=true": { + "model": "create:block/creative_top_window" + }, + "bottom=true,shape=window,top=true": { + "model": "create:block/creative_single_window" + }, + "bottom=false,shape=window_nw,top=true": { + "model": "create:block/creative_top_window_nw" + }, + "bottom=true,shape=window_nw,top=true": { + "model": "create:block/creative_single_window_nw" + }, + "bottom=false,shape=window_sw,top=true": { + "model": "create:block/creative_top_window_sw" + }, + "bottom=true,shape=window_sw,top=true": { + "model": "create:block/creative_single_window_sw" + }, + "bottom=false,shape=window_ne,top=true": { + "model": "create:block/creative_top_window_ne" + }, + "bottom=true,shape=window_ne,top=true": { + "model": "create:block/creative_single_window_ne" + }, + "bottom=false,shape=window_se,top=true": { + "model": "create:block/creative_top_window_se" + }, + "bottom=true,shape=window_se,top=true": { + "model": "create:block/creative_single_window_se" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/hose_pulley.json b/src/generated/resources/assets/create/blockstates/hose_pulley.json new file mode 100644 index 000000000..b69e3b7db --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/hose_pulley.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "create:block/hose_pulley/block" + }, + "facing=south": { + "model": "create:block/hose_pulley/block", + "y": 180 + }, + "facing=west": { + "model": "create:block/hose_pulley/block", + "y": 270 + }, + "facing=east": { + "model": "create:block/hose_pulley/block", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/item_drain.json b/src/generated/resources/assets/create/blockstates/item_drain.json new file mode 100644 index 000000000..139085ae4 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/item_drain.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "create:block/item_drain" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 337d05b48..bd2daac3a 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -57,6 +57,7 @@ "block.create.copper_tiles": "s\u01DD\u05DF\u0131\u27D8 \u0279\u01DDddo\u0186", "block.create.copper_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u0279\u01DDddo\u0186", "block.create.creative_crate": "\u01DD\u0287\u0250\u0279\u0186 \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", + "block.create.creative_fluid_tank": "\u029Eu\u0250\u27D8 p\u0131n\u05DF\u2132 \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", "block.create.creative_motor": "\u0279o\u0287oW \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", "block.create.crushing_wheel": "\u05DF\u01DD\u01DD\u0265M bu\u0131\u0265sn\u0279\u0186", "block.create.crushing_wheel_controller": "\u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186 \u05DF\u01DD\u01DD\u0265M bu\u0131\u0265sn\u0279\u0186", @@ -175,6 +176,8 @@ "block.create.hand_crank": "\u029Eu\u0250\u0279\u0186 pu\u0250H", "block.create.horizontal_framed_glass": "ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132 \u05DF\u0250\u0287uoz\u0131\u0279oH", "block.create.horizontal_framed_glass_pane": "\u01DDu\u0250\u0500 ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132 \u05DF\u0250\u0287uoz\u0131\u0279oH", + "block.create.hose_pulley": "\u028E\u01DD\u05DF\u05DFn\u0500 \u01DDsoH", + "block.create.item_drain": "u\u0131\u0250\u0279\u15E1 \u026F\u01DD\u0287I", "block.create.jungle_window": "\u028Dopu\u0131M \u01DD\u05DFbun\u017F", "block.create.jungle_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u01DD\u05DFbun\u017F", "block.create.large_cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186 \u01DDb\u0279\u0250\uA780", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 059d2b99f..371acaa8d 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -60,6 +60,7 @@ "block.create.copper_tiles": "Copper Tiles", "block.create.copper_valve_handle": "Copper Valve Handle", "block.create.creative_crate": "Creative Crate", + "block.create.creative_fluid_tank": "Creative Fluid Tank", "block.create.creative_motor": "Creative Motor", "block.create.crushing_wheel": "Crushing Wheel", "block.create.crushing_wheel_controller": "Crushing Wheel Controller", @@ -178,6 +179,8 @@ "block.create.hand_crank": "Hand Crank", "block.create.horizontal_framed_glass": "Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "Horizontal Framed Glass Pane", + "block.create.hose_pulley": "Hose Pulley", + "block.create.item_drain": "Item Drain", "block.create.jungle_window": "Jungle Window", "block.create.jungle_window_pane": "Jungle Window Pane", "block.create.large_cogwheel": "Large Cogwheel", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 237637680..3983b7fa6 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1021", + "_": "Missing Localizations: 1024", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Bauplankanonenmacher", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Mahlwerkrad", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "UNLOCALIZED: Hand Crank", "block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "Großes Zahnrad", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 58317000e..8e8f1a140 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 650", + "_": "Missing Localizations: 653", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Créateur de schémacanon", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "Moteur", "block.create.crushing_wheel": "Roue de concassage", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "Manivelle", "block.create.horizontal_framed_glass": "Fenêtre en verre horizontale", "block.create.horizontal_framed_glass_pane": "Vitre encadrée horizontale", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "Grande roue dentée", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index cb9b93d62..826981954 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 634", + "_": "Missing Localizations: 637", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Creatore Cannoneschematico", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "Motore", "block.create.crushing_wheel": "Ruota di Frantumazione", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "Manovella", "block.create.horizontal_framed_glass": "Finestra Orizzontale Vetro", "block.create.horizontal_framed_glass_pane": "Pannello di Finestra Orizzontale Vetro", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "Ruota Dentata Grande", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index c26b4361c..e3ac8dfe3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 633", + "_": "Missing Localizations: 636", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "概略図砲クリエティフィアー", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "モーター", "block.create.crushing_wheel": "破砕ホイール", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "ハンドクランク", "block.create.horizontal_framed_glass": "横型ガラス窓", "block.create.horizontal_framed_glass_pane": "横型ガラス窓板", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "大きな歯車", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 8e7131853..a2f0c077e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 634", + "_": "Missing Localizations: 637", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "청사진 대포 지원기", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "모터", "block.create.crushing_wheel": "분쇄 휠", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "핸드 크랭크", "block.create.horizontal_framed_glass": "수평 유리", "block.create.horizontal_framed_glass_pane": "수평 유리판", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "큰 톱니바퀴", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 7cea32d18..634c6597a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 962", + "_": "Missing Localizations: 965", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Bouwtekeningkannon Creatiefeerder", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Verpulveraar", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "UNLOCALIZED: Hand Crank", "block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "Groot Tandwiel", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 75331efd4..cc6f316b1 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1028", + "_": "Missing Localizations: 1031", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Criativador Esquemaannon", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Roda de Moer", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", @@ -179,6 +180,8 @@ "block.create.hand_crank": "UNLOCALIZED: Hand Crank", "block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "Roda Dentada Grande", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index b421ad0f6..2a67cb74f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 303", + "_": "Missing Localizations: 306", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Творческий ящик", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "Творческий мотор", "block.create.crushing_wheel": "Колесо дробления", "block.create.crushing_wheel_controller": "Контроллер колеса дробления", @@ -179,6 +180,8 @@ "block.create.hand_crank": "Рукоятка", "block.create.horizontal_framed_glass": "Горизонтальное обрамлённое стекло", "block.create.horizontal_framed_glass_pane": "Горизонтальная обрамлённая стеклянная панель", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "Окно из тропического дерева", "block.create.jungle_window_pane": "Панель окна из тропического дерева", "block.create.large_cogwheel": "Большая шестерня", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 0370fa797..76108fbca 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 316", + "_": "Missing Localizations: 319", "_": "->------------------------] Game Elements [------------------------<-", @@ -61,6 +61,7 @@ "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "创造板条箱", + "block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank", "block.create.creative_motor": "创造马达", "block.create.crushing_wheel": "粉碎轮", "block.create.crushing_wheel_controller": "粉碎轮控制器", @@ -179,6 +180,8 @@ "block.create.hand_crank": "手摇曲柄", "block.create.horizontal_framed_glass": "竖直边框玻璃", "block.create.horizontal_framed_glass_pane": "竖直边框玻璃板", + "block.create.hose_pulley": "UNLOCALIZED: Hose Pulley", + "block.create.item_drain": "UNLOCALIZED: Item Drain", "block.create.jungle_window": "丛林窗户", "block.create.jungle_window_pane": "丛林窗户板", "block.create.large_cogwheel": "大齿轮", diff --git a/src/generated/resources/assets/create/models/block/creative_bottom.json b/src/generated/resources/assets/create/models/block/creative_bottom.json new file mode 100644 index 000000000..f78fb4955 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_bottom_window.json b/src/generated/resources/assets/create/models/block/creative_bottom_window.json new file mode 100644 index 000000000..2e1ca750d --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom_window.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom_window", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_bottom_window_ne.json b/src/generated/resources/assets/create/models/block/creative_bottom_window_ne.json new file mode 100644 index 000000000..2deff3002 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom_window_ne.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom_window_ne", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_bottom_window_nw.json b/src/generated/resources/assets/create/models/block/creative_bottom_window_nw.json new file mode 100644 index 000000000..0731ad052 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom_window_nw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom_window_nw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_bottom_window_se.json b/src/generated/resources/assets/create/models/block/creative_bottom_window_se.json new file mode 100644 index 000000000..d96fd2319 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom_window_se.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom_window_se", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_bottom_window_sw.json b/src/generated/resources/assets/create/models/block/creative_bottom_window_sw.json new file mode 100644 index 000000000..5dc3463d8 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_bottom_window_sw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_bottom_window_sw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle.json b/src/generated/resources/assets/create/models/block/creative_middle.json new file mode 100644 index 000000000..71eca1c08 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle_window.json b/src/generated/resources/assets/create/models/block/creative_middle_window.json new file mode 100644 index 000000000..21ce237ea --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle_window.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle_window", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle_window_ne.json b/src/generated/resources/assets/create/models/block/creative_middle_window_ne.json new file mode 100644 index 000000000..9e320a620 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle_window_ne.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle_window_ne", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle_window_nw.json b/src/generated/resources/assets/create/models/block/creative_middle_window_nw.json new file mode 100644 index 000000000..020d67af6 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle_window_nw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle_window_nw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle_window_se.json b/src/generated/resources/assets/create/models/block/creative_middle_window_se.json new file mode 100644 index 000000000..d93c8f60b --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle_window_se.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle_window_se", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_middle_window_sw.json b/src/generated/resources/assets/create/models/block/creative_middle_window_sw.json new file mode 100644 index 000000000..b1616aea4 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_middle_window_sw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_middle_window_sw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single.json b/src/generated/resources/assets/create/models/block/creative_single.json new file mode 100644 index 000000000..e4ddf2442 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single_window.json b/src/generated/resources/assets/create/models/block/creative_single_window.json new file mode 100644 index 000000000..48f6d55f6 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single_window.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single_window", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single_window_ne.json b/src/generated/resources/assets/create/models/block/creative_single_window_ne.json new file mode 100644 index 000000000..04e396d6d --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single_window_ne.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single_window_ne", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single_window_nw.json b/src/generated/resources/assets/create/models/block/creative_single_window_nw.json new file mode 100644 index 000000000..95627be45 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single_window_nw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single_window_nw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single_window_se.json b/src/generated/resources/assets/create/models/block/creative_single_window_se.json new file mode 100644 index 000000000..6298b347c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single_window_se.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single_window_se", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_single_window_sw.json b/src/generated/resources/assets/create/models/block/creative_single_window_sw.json new file mode 100644 index 000000000..2922d5194 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_single_window_sw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_single_window_sw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top.json b/src/generated/resources/assets/create/models/block/creative_top.json new file mode 100644 index 000000000..df3680697 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top_window.json b/src/generated/resources/assets/create/models/block/creative_top_window.json new file mode 100644 index 000000000..a04004a03 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top_window.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top_window", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top_window_ne.json b/src/generated/resources/assets/create/models/block/creative_top_window_ne.json new file mode 100644 index 000000000..9d23dea7c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top_window_ne.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top_window_ne", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top_window_nw.json b/src/generated/resources/assets/create/models/block/creative_top_window_nw.json new file mode 100644 index 000000000..adbfc257c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top_window_nw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top_window_nw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top_window_se.json b/src/generated/resources/assets/create/models/block/creative_top_window_se.json new file mode 100644 index 000000000..01f3e593c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top_window_se.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top_window_se", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/creative_top_window_sw.json b/src/generated/resources/assets/create/models/block/creative_top_window_sw.json new file mode 100644 index 000000000..cc741f226 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/creative_top_window_sw.json @@ -0,0 +1,10 @@ +{ + "parent": "create:block/fluid_tank/block_top_window_sw", + "textures": { + "0": "create:block/creative_casing", + "1": "create:block/creative_fluid_tank", + "3": "create:block/creative_fluid_tank_window", + "4": "create:block/creative_fluid_tank_window_single", + "particle": "create:block/creative_fluid_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/creative_fluid_tank.json b/src/generated/resources/assets/create/models/item/creative_fluid_tank.json new file mode 100644 index 000000000..d021bc2a6 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/creative_fluid_tank.json @@ -0,0 +1,8 @@ +{ + "parent": "create:block/fluid_tank/block_single_window", + "textures": { + "5": "create:block/creative_fluid_tank_window_single", + "1": "create:block/creative_fluid_tank", + "0": "create:block/creative_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/hose_pulley.json b/src/generated/resources/assets/create/models/item/hose_pulley.json new file mode 100644 index 000000000..234080247 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/hose_pulley.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/hose_pulley/item" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/item_drain.json b/src/generated/resources/assets/create/models/item/item_drain.json new file mode 100644 index 000000000..9490da25f --- /dev/null +++ b/src/generated/resources/assets/create/models/item/item_drain.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/item_drain" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/hose_pulley.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/hose_pulley.json new file mode 100644 index 000000000..bf53aa381 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/hose_pulley.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/hose_pulley" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/hose_pulley" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/creative_fluid_tank.json b/src/generated/resources/data/create/loot_tables/blocks/creative_fluid_tank.json new file mode 100644 index 000000000..0135c3367 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/creative_fluid_tank.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:creative_fluid_tank" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/hose_pulley.json b/src/generated/resources/data/create/loot_tables/blocks/hose_pulley.json new file mode 100644 index 000000000..7be8a0b31 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/hose_pulley.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:hose_pulley" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/item_drain.json b/src/generated/resources/data/create/loot_tables/blocks/item_drain.json new file mode 100644 index 000000000..08949a5af --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/item_drain.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:item_drain" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/hose_pulley.json b/src/generated/resources/data/create/recipes/crafting/kinetics/hose_pulley.json new file mode 100644 index 000000000..ae6b27994 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/hose_pulley.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCP", + " I " + ], + "key": { + "S": { + "item": "create:shaft" + }, + "P": { + "item": "create:fluid_pipe" + }, + "B": { + "item": "create:copper_casing" + }, + "C": { + "item": "minecraft:dried_kelp" + }, + "I": { + "tag": "forge:plates/copper" + } + }, + "result": { + "item": "create:hose_pulley" + } +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index f35fc8d1f..159010d12 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -68,8 +68,18 @@ public class AllBlockPartials { 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"), + 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"), + + HOSE_COIL = get("hose_pulley/rope_coil"), + HOSE = get("hose_pulley/rope"), + HOSE_MAGNET = get("hose_pulley/pulley_magnet"), + HOSE_HALF = get("hose_pulley/rope_half"), + HOSE_HALF_MAGNET = get("hose_pulley/rope_half_magnet"), + MILLSTONE_COG = get("millstone/inner"), SYMMETRY_PLANE = get("symmetry_effect/plane"), SYMMETRY_CROSSPLANE = get("symmetry_effect/crossplane"), diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 0ab09f703..ccf1bf833 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -65,6 +65,8 @@ import com.simibubi.create.content.contraptions.components.turntable.TurntableBl import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock; import com.simibubi.create.content.contraptions.fluids.PipeAttachmentModel; import com.simibubi.create.content.contraptions.fluids.PumpBlock; +import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyBlock; +import com.simibubi.create.content.contraptions.fluids.actors.ItemDrainBlock; import com.simibubi.create.content.contraptions.fluids.actors.SpoutBlock; import com.simibubi.create.content.contraptions.fluids.pipes.EncasedPipeBlock; import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; @@ -549,17 +551,49 @@ public class AllBlocks { } } - public static final BlockEntry FLUID_TANK = REGISTRATE.block("fluid_tank", FluidTankBlock::new) + public static final BlockEntry FLUID_TANK = REGISTRATE.block("fluid_tank", FluidTankBlock::regular) .initialProperties(SharedProperties::softMetal) .properties(AbstractBlock.Properties::nonOpaque) .blockstate(new FluidTankGenerator()::generate) - .onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::new)) + .onRegister(CreateRegistrate + .blockModel(() -> m -> new FluidTankModel(m, AllSpriteShifts.FLUID_TANK, AllSpriteShifts.COPPER_CASING))) .addLayer(() -> RenderType::getCutoutMipped) .item(FluidTankItem::new) .model(AssetLookup.customItemModel("_", "block_single_window")) .build() .register(); + public static final BlockEntry CREATIVE_FLUID_TANK = + REGISTRATE.block("creative_fluid_tank", FluidTankBlock::creative) + .initialProperties(SharedProperties::softMetal) + .properties(Block.Properties::nonOpaque) + .blockstate(new FluidTankGenerator("creative_")::generate) + .onRegister(CreateRegistrate.blockModel( + () -> m -> new FluidTankModel(m, AllSpriteShifts.CREATIVE_FLUID_TANK, AllSpriteShifts.CREATIVE_CASING))) + .addLayer(() -> RenderType::getCutoutMipped) + .item(FluidTankItem::new) + .model((c, p) -> p.withExistingParent(c.getName(), p.modLoc("block/fluid_tank/block_single_window")) + .texture("5", p.modLoc("block/creative_fluid_tank_window_single")) + .texture("1", p.modLoc("block/creative_fluid_tank")) + .texture("0", p.modLoc("block/creative_casing"))) + .build() + .register(); + + public static final BlockEntry HOSE_PULLEY = REGISTRATE.block("hose_pulley", HosePulleyBlock::new) + .initialProperties(SharedProperties::softMetal) + .blockstate(BlockStateGen.horizontalBlockProvider(true)) + .transform(StressConfigDefaults.setImpact(4.0)) + .item() + .transform(customItemModel()) + .register(); + + public static final BlockEntry ITEM_DRAIN = REGISTRATE.block("item_drain", ItemDrainBlock::new) + .initialProperties(SharedProperties::softMetal) + .addLayer(() -> RenderType::getCutoutMipped) + .blockstate((c, p) -> p.simpleBlock(c.get(), AssetLookup.standardModel(c, p))) + .simpleItem() + .register(); + public static final BlockEntry SPOUT = REGISTRATE.block("spout", SpoutBlock::new) .initialProperties(SharedProperties::softMetal) .blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.partialBaseModel(ctx, prov))) diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 186426e85..60f71a3e8 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -25,6 +25,7 @@ public class AllShapes { public static final VoxelShaper CASING_14PX = shape(0, 0, 0, 16, 14, 16).forDirectional(), + CASING_13PX = shape(0, 0, 0, 16, 13, 16).forDirectional(), CASING_12PX = shape(0, 0, 0, 16, 12, 16).forDirectional(), CASING_11PX = shape(0, 0, 0, 16, 11, 16).forDirectional(), MOTOR_BLOCK = shape(3, 0, 3, 13, 14, 13).forDirectional(), @@ -34,11 +35,12 @@ public class AllShapes { .forHorizontal(Direction.SOUTH), PORTABLE_STORAGE_INTERFACE = shape(0, 0, 0, 16, 14, 16).forDirectional(), PULLEY = shape(0, 0, 0, 16, 16, 2).add(1, 1, 2, 15, 15, 14) + .add(2, 13, 2, 14, 16, 14) .add(0, 0, 14, 16, 16, 16) .forHorizontalAxis(), - SAIL_FRAME_COLLISION = shape(0, 5, 0, 16, 9, 16).erase(2, 0, 2, 14, 16, 14).forDirectional(), - SAIL_FRAME = shape(0, 5, 0, 16, 9, 16).forDirectional(), - SAIL = shape(0, 5, 0, 16, 10, 16).forDirectional(), + SAIL_FRAME_COLLISION = shape(0, 5, 0, 16, 9, 16).erase(2, 0, 2, 14, 16, 14) + .forDirectional(), + SAIL_FRAME = shape(0, 5, 0, 16, 9, 16).forDirectional(), SAIL = shape(0, 5, 0, 16, 10, 16).forDirectional(), SPEED_CONTROLLER = shape(0, 0, 0, 16, 2, 16).add(1, 1, 1, 15, 15, 15) .erase(0, 8, 5, 16, 16, 11) .add(2, 9, 2, 14, 14, 14) @@ -121,9 +123,6 @@ public class AllShapes { LOGISTICS_TABLE_SLOPE = shape(0, 10, 15, 16, 14, 10.667).add(0, 12, 10.667, 16, 16, 6.333) .add(0, 14, 6.333, 16, 18, 2) .build(), - SCHEMATICS_TABLE_SLOPE = shape(0, 10, 16, 16, 14, 11).add(0, 12, 11, 16, 16, 6) - .add(0, 14, 6, 16, 18, 1) - .build(), TANK_BOTTOM_LID = shape(0, 0, 0, 16, 4, 16).build(), TANK_TOP_LID = shape(0, 12, 0, 16, 16, 16).build() ; @@ -196,7 +195,7 @@ public class AllShapes { .withVerticalShapes(LOGISTICAL_CONTROLLER.get(UP)), LOGISTICS_TABLE = shape(TABLE_POLE_SHAPE).add(LOGISTICS_TABLE_SLOPE) .forHorizontal(SOUTH), - SCHEMATICS_TABLE = shape(TABLE_POLE_SHAPE).add(SCHEMATICS_TABLE_SLOPE) + SCHEMATICS_TABLE = shape(4, 0, 4, 12, 12, 12).add(0, 11, 2, 16, 14, 14) .forDirectional(SOUTH), CHUTE_SLOPE = shape(ChuteShapes.createSlope()).forHorizontal(SOUTH) diff --git a/src/main/java/com/simibubi/create/AllSpriteShifts.java b/src/main/java/com/simibubi/create/AllSpriteShifts.java index 5fa92ea72..9d8fee9b0 100644 --- a/src/main/java/com/simibubi/create/AllSpriteShifts.java +++ b/src/main/java/com/simibubi/create/AllSpriteShifts.java @@ -42,7 +42,8 @@ public class AllSpriteShifts { BRASS_CASING = omni("brass_casing"), COPPER_CASING = omni("copper_casing"), SHADOW_STEEL_CASING = omni("shadow_steel_casing"), - REFINED_RADIANCE_CASING = omni("refined_radiance_casing"); + REFINED_RADIANCE_CASING = omni("refined_radiance_casing"), + CREATIVE_CASING = getCT(CTType.CROSS, "creative_casing"); public static final CTSpriteShiftEntry CHASSIS = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_end"), @@ -50,7 +51,8 @@ public class AllSpriteShifts { public static final CTSpriteShiftEntry BRASS_TUNNEL_TOP = vertical("brass_tunnel_top"), - FLUID_TANK = getCT(CTType.CROSS, "fluid_tank"); + FLUID_TANK = getCT(CTType.CROSS, "fluid_tank"), + CREATIVE_FLUID_TANK = getCT(CTType.CROSS, "creative_fluid_tank"); public static final SpriteShiftEntry BELT = SpriteShifter.get("block/belt", "block/belt_animated"), diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index f4eb24b27..e9fe27c1f 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -48,6 +48,8 @@ import com.simibubi.create.content.contraptions.components.turntable.TurntableTi import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelTileEntity; import com.simibubi.create.content.contraptions.fluids.PumpRenderer; import com.simibubi.create.content.contraptions.fluids.PumpTileEntity; +import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyRenderer; +import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyTileEntity; import com.simibubi.create.content.contraptions.fluids.actors.SpoutRenderer; import com.simibubi.create.content.contraptions.fluids.actors.SpoutTileEntity; import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeTileEntity; @@ -56,6 +58,7 @@ import com.simibubi.create.content.contraptions.fluids.pipes.FluidValveTileEntit import com.simibubi.create.content.contraptions.fluids.pipes.SmartFluidPipeTileEntity; import com.simibubi.create.content.contraptions.fluids.pipes.StraightPipeTileEntity; import com.simibubi.create.content.contraptions.fluids.pipes.TransparentStraightPipeRenderer; +import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankTileEntity; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankRenderer; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity; import com.simibubi.create.content.contraptions.processing.BasinRenderer; @@ -120,7 +123,6 @@ public class AllTileEntities { public static final TileEntityEntry SCHEMATIC_TABLE = Create.registrate() .tileEntity("schematic_table", SchematicTableTileEntity::new) .validBlocks(AllBlocks.SCHEMATIC_TABLE) - // .renderer(() -> renderer) .register(); // Kinetics @@ -202,7 +204,7 @@ public class AllTileEntities { .validBlocks(AllBlocks.MECHANICAL_PUMP) .renderer(() -> PumpRenderer::new) .register(); - + public static final TileEntityEntry SMART_FLUID_PIPE = Create.registrate() .tileEntity("smart_fluid_pipe", SmartFluidPipeTileEntity::new) .validBlocks(AllBlocks.SMART_FLUID_PIPE) @@ -224,7 +226,7 @@ public class AllTileEntities { .validBlocks(AllBlocks.GLASS_FLUID_PIPE) .renderer(() -> TransparentStraightPipeRenderer::new) .register(); - + public static final TileEntityEntry FLUID_VALVE = Create.registrate() .tileEntity("fluid_valve", FluidValveTileEntity::new) .validBlocks(AllBlocks.FLUID_VALVE) @@ -237,6 +239,18 @@ public class AllTileEntities { .renderer(() -> FluidTankRenderer::new) .register(); + public static final TileEntityEntry CREATIVE_FLUID_TANK = Create.registrate() + .tileEntity("creative_fluid_tank", CreativeFluidTankTileEntity::new) + .validBlocks(AllBlocks.CREATIVE_FLUID_TANK) + .renderer(() -> FluidTankRenderer::new) + .register(); + + public static final TileEntityEntry HOSE_PULLEY = Create.registrate() + .tileEntity("hose_pulley", HosePulleyTileEntity::new) + .validBlocks(AllBlocks.HOSE_PULLEY) + .renderer(() -> HosePulleyRenderer::new) + .register(); + public static final TileEntityEntry SPOUT = Create.registrate() .tileEntity("spout", SpoutTileEntity::new) .validBlocks(AllBlocks.SPOUT) @@ -284,7 +298,7 @@ public class AllTileEntities { .validBlocks(AllBlocks.WINDMILL_BEARING) .renderer(() -> BearingRenderer::new) .register(); - + public static final TileEntityEntry MECHANICAL_BEARING = Create.registrate() .tileEntity("mechanical_bearing", MechanicalBearingTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_BEARING) diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java index 71d0ea54f..e763f9f03 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java @@ -1,5 +1,7 @@ package com.simibubi.create.content.contraptions.base; +import com.simibubi.create.foundation.utility.Iterate; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.item.BlockItemUseContext; @@ -26,18 +28,20 @@ public abstract class HorizontalKineticBlock extends KineticBlock { @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return this.getDefaultState().with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing().getOpposite()); + return this.getDefaultState() + .with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing() + .getOpposite()); } public Direction getPreferredHorizontalFacing(BlockItemUseContext context) { Direction prefferedSide = null; - for (Direction side : Direction.values()) { - if (side.getAxis().isVertical()) - continue; - BlockState blockState = context.getWorld().getBlockState(context.getPos().offset(side)); + for (Direction side : Iterate.horizontalDirections) { + BlockState blockState = context.getWorld() + .getBlockState(context.getPos() + .offset(side)); if (blockState.getBlock() instanceof IRotate) { - if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getWorld(), context.getPos().offset(side), - blockState, side.getOpposite())) + if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getWorld(), context.getPos() + .offset(side), blockState, side.getOpposite())) if (prefferedSide != null && prefferedSide.getAxis() != side.getAxis()) { prefferedSide = null; break; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java index d560f6608..1ea35f6c3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java @@ -1046,5 +1046,5 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD public boolean isOnePlayerRiding() { return false; } - + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java index 21dd4c4e8..9258090b4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java @@ -72,8 +72,11 @@ public class SailBlock extends ProperDirectionalBlock { BlockPos offsetPos = pos.offset(offset); if (!world.isRemote && world.getBlockState(offsetPos) .getMaterial() - .isReplaceable()) + .isReplaceable()) { world.setBlockState(offsetPos, blockState); + if (!player.isCreative()) + heldItem.shrink(1); + } return ActionResultType.SUCCESS; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java index 6365ac1ae..7fb9d23a4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java @@ -20,6 +20,7 @@ import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.IWorld; +import net.minecraft.world.World; public class PulleyRenderer extends KineticTileEntityRenderer { @@ -38,6 +39,7 @@ public class PulleyRenderer extends KineticTileEntityRenderer { super.renderSafe(te, partialTicks, ms, buffer, light, overlay); PulleyTileEntity pulley = (PulleyTileEntity) te; + World world = te.getWorld(); BlockState blockState = te.getBlockState(); BlockPos pos = te.getPos(); @@ -46,7 +48,8 @@ public class PulleyRenderer extends KineticTileEntityRenderer { SuperByteBuffer magnet = CreateClient.bufferCache.renderBlock(AllBlocks.PULLEY_MAGNET.getDefaultState()); SuperByteBuffer rope = CreateClient.bufferCache.renderBlock(AllBlocks.ROPE.getDefaultState()); - boolean moving = pulley.running && (pulley.movedContraption == null || !pulley.movedContraption.isStalled()); + boolean running = pulley.running; + boolean moving = running && (pulley.movedContraption == null || !pulley.movedContraption.isStalled()); float offset = pulley.getInterpolatedOffset(moving ? partialTicks : 0.5f); if (pulley.movedContraption != null) { @@ -56,23 +59,28 @@ public class PulleyRenderer extends KineticTileEntityRenderer { offset = (float) -(entityPos - c.getAnchor().getY() - c.initialOffset); } + renderPulleyRope(ms, buffer, world, pos, halfMagnet, halfRope, magnet, rope, running, offset); + } + + public static void renderPulleyRope(MatrixStack ms, IRenderTypeBuffer buffer, World world, BlockPos pos, + SuperByteBuffer halfMagnet, SuperByteBuffer halfRope, SuperByteBuffer magnet, SuperByteBuffer rope, + boolean running, float offset) { IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); - - if (pulley.running || pulley.offset == 0) - renderAt(te.getWorld(), offset > .25f ? magnet : halfMagnet, offset, pos, ms, vb); + if (running || offset == 0) + renderAt(world, offset > .25f ? magnet : halfMagnet, offset, pos, ms, vb); float f = offset % 1; if (offset > .75f && (f < .25f || f > .75f)) - renderAt(te.getWorld(), halfRope, f > .75f ? f - 1 : f, pos, ms, vb); + renderAt(world, halfRope, f > .75f ? f - 1 : f, pos, ms, vb); - if (!pulley.running) + if (!running) return; for (int i = 0; i < offset - 1.25f; i++) - renderAt(te.getWorld(), rope, offset - i - 1, pos, ms, vb); + renderAt(world, rope, offset - i - 1, pos, ms, vb); } - public void renderAt(IWorld world, SuperByteBuffer partial, float offset, BlockPos pulleyPos, + public static void renderAt(IWorld world, SuperByteBuffer partial, float offset, BlockPos pulleyPos, MatrixStack ms, IVertexBuilder buffer) { BlockPos actualPos = pulleyPos.down((int) offset); int light = WorldRenderer.getLightmapCoordinates(world, world.getBlockState(actualPos), actualPos); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidFX.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidFX.java new file mode 100644 index 000000000..f6554fbc7 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidFX.java @@ -0,0 +1,51 @@ +package com.simibubi.create.content.contraptions.fluids; + +import java.util.Random; + +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.client.Minecraft; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; +import net.minecraft.fluid.Fluids; +import net.minecraft.particles.BlockParticleData; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +public class FluidFX { + + static Random r = new Random(); + + public static void splash(BlockPos pos, FluidStack fluidStack) { + Fluid fluid = fluidStack.getFluid(); + if (fluid == Fluids.EMPTY) + return; + + FluidState defaultState = fluid.getDefaultState(); + if (defaultState == null || defaultState.isEmpty()) { + return; + } + + BlockParticleData blockParticleData = new BlockParticleData(ParticleTypes.BLOCK, defaultState.getBlockState()); + Vector3d center = VecHelper.getCenterOf(pos); + + for (int i = 0; i < 20; i++) { + Vector3d v = VecHelper.offsetRandomly(Vector3d.ZERO, r, .25f); + particle(blockParticleData, center.add(v), v); + } + + } + + private static void particle(IParticleData data, Vector3d pos, Vector3d motion) { + world().addParticle(data, pos.x, pos.y, pos.z, motion.x, motion.y, motion.z); + } + + private static World world() { + return Minecraft.getInstance().world; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java index cf477c172..0fc2d89a9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.fluids; +import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; @@ -24,7 +25,8 @@ public class FluidPipeAttachmentBehaviour extends TileEntityBehaviour { .getAxis() == direction.getAxis()) return AttachmentTypes.NONE; - if (FluidPropagator.hasFluidCapability(facingState, world, offsetPos, direction)) + if (FluidPropagator.hasFluidCapability(facingState, world, offsetPos, direction) + && !AllBlocks.HOSE_PULLEY.has(facingState)) return AttachmentTypes.DRAIN; return AttachmentTypes.RIM; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java new file mode 100644 index 000000000..e129f52f6 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidDrainingBehaviour.java @@ -0,0 +1,333 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import javax.annotation.Nullable; + +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; + +import it.unimi.dsi.fastutil.PriorityQueue; +import it.unimi.dsi.fastutil.objects.ObjectHeapPriorityQueue; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.FlowingFluidBlock; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +public class FluidDrainingBehaviour extends FluidManipulationBehaviour { + + Fluid fluid; + + // Execution + Set validationSet; + PriorityQueue queue; + boolean isValid; + + // Validation + List validationFrontier; + Set validationVisited; + Set newValidationSet; + + public FluidDrainingBehaviour(SmartTileEntity te) { + super(te); + validationVisited = new HashSet<>(); + validationFrontier = new ArrayList<>(); + validationSet = new HashSet<>(); + newValidationSet = new HashSet<>(); + queue = new ObjectHeapPriorityQueue<>(this::comparePositions); + } + + @Nullable + public boolean pullNext(BlockPos root, boolean simulate) { + if (!frontier.isEmpty()) + return false; + if (!Objects.equals(root, rootPos)) { + rebuildContext(root); + return false; + } + + if (counterpartActed) { + counterpartActed = false; + softReset(root); + return false; + } + + if (affectedArea == null) + affectedArea = new MutableBoundingBox(root, root); + + World world = getWorld(); + if (!queue.isEmpty() && !isValid) { + rebuildContext(root); + return false; + } + + if (validationFrontier.isEmpty() && !queue.isEmpty() && !simulate && revalidateIn == 0) + revalidate(root); + + while (!queue.isEmpty()) { + // Dont dequeue here, so we can decide not to dequeue a valid entry when + // simulating + BlockPos currentPos = queue.first().pos; + BlockState blockState = world.getBlockState(currentPos); + BlockState emptied = blockState; + Fluid fluid = Fluids.EMPTY; + + if (blockState.contains(BlockStateProperties.WATERLOGGED) && blockState.get(BlockStateProperties.WATERLOGGED)) { + emptied = blockState.with(BlockStateProperties.WATERLOGGED, Boolean.valueOf(false)); + fluid = Fluids.WATER; + } else if (blockState.getBlock() instanceof FlowingFluidBlock) { + FlowingFluidBlock flowingFluid = (FlowingFluidBlock) blockState.getBlock(); + emptied = Blocks.AIR.getDefaultState(); + if (blockState.get(FlowingFluidBlock.LEVEL) == 0) + fluid = flowingFluid.getFluid(); + else { + affectedArea.expandTo(new MutableBoundingBox(currentPos, currentPos)); + world.setBlockState(currentPos, emptied, 2 | 16); + queue.dequeue(); + if (queue.isEmpty()) { + isValid = checkValid(world, rootPos); + reset(); + } + continue; + } + } else if (blockState.getFluidState() + .getFluid() != Fluids.EMPTY + && blockState.getCollisionShape(world, currentPos, ISelectionContext.dummy()) + .isEmpty()) { + fluid = blockState.getFluidState() + .getFluid(); + emptied = Blocks.AIR.getDefaultState(); + } + + if (this.fluid == null) + this.fluid = fluid; + + if (!this.fluid.isEquivalentTo(fluid)) { + queue.dequeue(); + if (queue.isEmpty()) { + isValid = checkValid(world, rootPos); + reset(); + } + continue; + } + + if (simulate) + return true; + + playEffect(world, currentPos, fluid, true); + + if (infinite) + return true; + + world.setBlockState(currentPos, emptied, 2 | 16); + affectedArea.expandTo(new MutableBoundingBox(currentPos, currentPos)); + + queue.dequeue(); + if (queue.isEmpty()) { + isValid = checkValid(world, rootPos); + reset(); + } else if (!validationSet.contains(currentPos)) { + reset(); + } + return true; + } + + if (rootPos == null) + return false; + + if (isValid) + rebuildContext(root); + + return false; + } + + protected void softReset(BlockPos root) { + queue.clear(); + validationSet.clear(); + newValidationSet.clear(); + validationFrontier.clear(); + validationVisited.clear(); + visited.clear(); + infinite = false; + setValidationTimer(); + frontier.add(new BlockPosEntry(root, 0)); + } + + protected boolean checkValid(World world, BlockPos root) { + BlockPos currentPos = root; + for (int timeout = 1000; timeout > 0 && !root.equals(tileEntity.getPos()); timeout--) { + FluidBlockType canPullFluidsFrom = canPullFluidsFrom(world.getBlockState(currentPos), currentPos); + if (canPullFluidsFrom == FluidBlockType.FLOWING) { + currentPos = currentPos.up(); + continue; + } + if (canPullFluidsFrom == FluidBlockType.SOURCE) + return true; + break; + } + return false; + } + + enum FluidBlockType { + NONE, SOURCE, FLOWING; + } + + @Override + public void read(CompoundNBT nbt, boolean clientPacket) { + super.read(nbt, clientPacket); + if (!clientPacket && affectedArea != null) + frontier.add(new BlockPosEntry(rootPos, 0)); + } + + protected FluidBlockType canPullFluidsFrom(BlockState blockState, BlockPos pos) { + if (blockState.contains(BlockStateProperties.WATERLOGGED) && blockState.get(BlockStateProperties.WATERLOGGED)) + return FluidBlockType.SOURCE; + if (blockState.getBlock() instanceof FlowingFluidBlock) + return blockState.get(FlowingFluidBlock.LEVEL) == 0 ? FluidBlockType.SOURCE : FluidBlockType.FLOWING; + if (blockState.getFluidState() + .getFluid() != Fluids.EMPTY && blockState.getCollisionShape(getWorld(), pos, ISelectionContext.dummy()) + .isEmpty()) + return FluidBlockType.SOURCE; + return FluidBlockType.NONE; + } + + @Override + public void tick() { + super.tick(); + if (rootPos != null) + isValid = checkValid(getWorld(), rootPos); + if (!frontier.isEmpty()) { + continueSearch(); + return; + } + if (!validationFrontier.isEmpty()) { + continueValidation(); + return; + } + if (revalidateIn > 0) + revalidateIn--; + } + + @Override + public void lazyTick() { + super.lazyTick(); + } + + public void rebuildContext(BlockPos root) { + reset(); + rootPos = root; + affectedArea = new MutableBoundingBox(rootPos, rootPos); + if (isValid) + frontier.add(new BlockPosEntry(root, 0)); + } + + public void revalidate(BlockPos root) { + validationFrontier.clear(); + validationVisited.clear(); + newValidationSet.clear(); + validationFrontier.add(new BlockPosEntry(root, 0)); + setValidationTimer(); + } + + private void continueSearch() { + search(fluid, frontier, visited, (e, d) -> { + queue.enqueue(new BlockPosEntry(e, d)); + validationSet.add(e); + }, false); + + World world = getWorld(); + int maxBlocks = maxBlocks(); + if (visited.size() > maxBlocks) { + infinite = true; + // Find first block with valid fluid + while (true) { + BlockPos first = queue.first().pos; + if (canPullFluidsFrom(world.getBlockState(first), first) != FluidBlockType.SOURCE) { + queue.dequeue(); + continue; + } + break; + } + BlockPos firstValid = queue.first().pos; + frontier.clear(); + visited.clear(); + queue.clear(); + queue.enqueue(new BlockPosEntry(firstValid, 0)); + tileEntity.sendData(); + return; + } + + if (!frontier.isEmpty()) + return; + + tileEntity.sendData(); + visited.clear(); + } + + private void continueValidation() { + search(fluid, validationFrontier, validationVisited, (e, d) -> newValidationSet.add(e), false); + + int maxBlocks = maxBlocks(); + if (validationVisited.size() > maxBlocks) { + if (!infinite) { + reset(); + } + validationFrontier.clear(); + setLongValidationTimer(); + return; + } + + if (!validationFrontier.isEmpty()) + return; + if (infinite) { + reset(); + return; + } + + validationSet = newValidationSet; + newValidationSet = new HashSet<>(); + validationVisited.clear(); + } + + @Override + public void reset() { + super.reset(); + + fluid = null; + rootPos = null; + queue.clear(); + validationSet.clear(); + newValidationSet.clear(); + validationFrontier.clear(); + validationVisited.clear(); + } + + public static BehaviourType TYPE = new BehaviourType<>(); + + @Override + public BehaviourType getType() { + return TYPE; + } + + protected boolean isSearching() { + return !frontier.isEmpty(); + } + + public FluidStack getDrainableFluid(BlockPos rootPos) { + return fluid == null || isSearching() || !pullNext(rootPos, true) ? FluidStack.EMPTY + : new FluidStack(fluid, 1000); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java new file mode 100644 index 000000000..c046edf3e --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java @@ -0,0 +1,259 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; +import com.simibubi.create.foundation.utility.Iterate; + +import it.unimi.dsi.fastutil.PriorityQueue; +import it.unimi.dsi.fastutil.objects.ObjectHeapPriorityQueue; +import net.minecraft.block.BlockState; +import net.minecraft.block.FlowingFluidBlock; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; +import net.minecraft.fluid.Fluids; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.world.ITickList; +import net.minecraft.world.NextTickListEntry; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerTickList; + +public class FluidFillingBehaviour extends FluidManipulationBehaviour { + + PriorityQueue queue; + + List infinityCheckFrontier; + Set infinityCheckVisited; + + public FluidFillingBehaviour(SmartTileEntity te) { + super(te); + queue = new ObjectHeapPriorityQueue<>((p, p2) -> -comparePositions(p, p2)); + revalidateIn = 1; + infinityCheckFrontier = new ArrayList<>(); + infinityCheckVisited = new HashSet<>(); + } + + @Override + public void tick() { + super.tick(); + if (!infinityCheckFrontier.isEmpty() && rootPos != null) { + Fluid fluid = getWorld().getFluidState(rootPos) + .getFluid(); + if (fluid != Fluids.EMPTY) + continueValidation(fluid); + } + if (revalidateIn > 0) + revalidateIn--; + } + + protected void continueValidation(Fluid fluid) { + search(fluid, infinityCheckFrontier, infinityCheckVisited, + (p, d) -> infinityCheckFrontier.add(new BlockPosEntry(p, d)), true); + int maxBlocks = maxBlocks(); + + if (infinityCheckVisited.size() > maxBlocks) { + if (!infinite) { + reset(); + infinite = true; + } + infinityCheckFrontier.clear(); + setLongValidationTimer(); + return; + } + + if (!infinityCheckFrontier.isEmpty()) + return; + if (infinite) { + reset(); + return; + } + + infinityCheckVisited.clear(); + } + + public boolean tryDeposit(Fluid fluid, BlockPos root, boolean simulate) { + if (!Objects.equals(root, rootPos)) { + reset(); + rootPos = root; + queue.enqueue(new BlockPosEntry(root, 0)); + affectedArea = new MutableBoundingBox(rootPos, rootPos); + return false; + } + + if (counterpartActed) { + counterpartActed = false; + softReset(root); + return false; + } + + if (affectedArea == null) + affectedArea = new MutableBoundingBox(root, root); + + if (revalidateIn == 0) { + visited.clear(); + infinityCheckFrontier.clear(); + infinityCheckVisited.clear(); + infinityCheckFrontier.add(new BlockPosEntry(root, 0)); + setValidationTimer(); + softReset(root); + } + + World world = getWorld(); + int maxRange = maxRange(); + int maxRangeSq = maxRange * maxRange; + int maxBlocks = maxBlocks(); + + if (infinite) { + FluidState fluidState = world.getFluidState(rootPos); + boolean equivalentTo = fluidState.getFluid() + .isEquivalentTo(fluid); + if (!equivalentTo) + return false; + if (simulate) + return true; + playEffect(world, BlockPos.ZERO, fluid, false); + return true; + } + + boolean success = false; + for (int i = 0; !success && !queue.isEmpty() && i < searchedPerTick; i++) { + BlockPosEntry entry = queue.first(); + BlockPos currentPos = entry.pos; + + if (visited.contains(currentPos)) { + queue.dequeue(); + continue; + } + + if (!simulate) + visited.add(currentPos); + + if (visited.size() >= maxBlocks) { + infinite = true; + visited.clear(); + queue.clear(); + return false; + } + + SpaceType spaceType = getAtPos(world, currentPos, fluid); + if (spaceType == SpaceType.BLOCKING) + continue; + if (spaceType == SpaceType.FILLABLE) { + success = true; + if (!simulate) { + playEffect(world, currentPos, fluid, false); + + BlockState blockState = world.getBlockState(currentPos); + if (blockState.contains(BlockStateProperties.WATERLOGGED) && fluid.isEquivalentTo(Fluids.WATER)) { + world.setBlockState(currentPos, blockState.with(BlockStateProperties.WATERLOGGED, true), + 2 | 16); + } else { + world.setBlockState(currentPos, fluid.getDefaultState() + .getBlockState(), 2 | 16); + } + + ITickList pendingFluidTicks = world.getPendingFluidTicks(); + if (pendingFluidTicks instanceof ServerTickList) { + ServerTickList serverTickList = (ServerTickList) pendingFluidTicks; + NextTickListEntry removedEntry = null; + for (NextTickListEntry nextTickListEntry : serverTickList.pendingTickListEntriesHashSet) { + if (nextTickListEntry.position.equals(currentPos)) { + removedEntry = nextTickListEntry; + break; + } + } + if (removedEntry != null) { + serverTickList.pendingTickListEntriesHashSet.remove(removedEntry); + serverTickList.pendingTickListEntriesTreeSet.remove(removedEntry); + } + } + + affectedArea.expandTo(new MutableBoundingBox(currentPos, currentPos)); + } + } + + if (simulate && success) + return true; + + visited.add(currentPos); + queue.dequeue(); + + for (Direction side : Iterate.directions) { + if (side == Direction.UP) + continue; + + BlockPos offsetPos = currentPos.offset(side); + if (visited.contains(offsetPos)) + continue; + if (offsetPos.distanceSq(rootPos) > maxRangeSq) + continue; + + SpaceType nextSpaceType = getAtPos(world, offsetPos, fluid); + if (nextSpaceType != SpaceType.BLOCKING) + queue.enqueue(new BlockPosEntry(offsetPos, entry.distance + 1)); + } + } + + return success; + } + + protected void softReset(BlockPos root) { + visited.clear(); + queue.clear(); + queue.enqueue(new BlockPosEntry(root, 0)); + infinite = false; + setValidationTimer(); + } + + enum SpaceType { + FILLABLE, FILLED, BLOCKING + } + + protected SpaceType getAtPos(World world, BlockPos pos, Fluid toFill) { + BlockState blockState = world.getBlockState(pos); + FluidState fluidState = blockState.getFluidState(); + + if (blockState.contains(BlockStateProperties.WATERLOGGED)) + return toFill.isEquivalentTo(Fluids.WATER) + ? blockState.get(BlockStateProperties.WATERLOGGED) ? SpaceType.FILLED : SpaceType.FILLABLE + : SpaceType.BLOCKING; + + if (blockState.getBlock() instanceof FlowingFluidBlock) + return blockState.get(FlowingFluidBlock.LEVEL) == 0 + ? toFill.isEquivalentTo(fluidState.getFluid()) ? SpaceType.FILLED : SpaceType.BLOCKING + : SpaceType.FILLABLE; + + if (fluidState.getFluid() != Fluids.EMPTY + && blockState.getCollisionShape(getWorld(), pos, ISelectionContext.dummy()) + .isEmpty()) + return toFill.isEquivalentTo(fluidState.getFluid()) ? SpaceType.FILLED : SpaceType.BLOCKING; + + return blockState.getMaterial() + .isReplaceable() ? SpaceType.FILLABLE : SpaceType.BLOCKING; + } + + @Override + public void reset() { + super.reset(); + queue.clear(); + infinityCheckFrontier.clear(); + infinityCheckVisited.clear(); + } + + public static BehaviourType TYPE = new BehaviourType<>(); + + @Override + public BehaviourType getType() { + return TYPE; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java new file mode 100644 index 000000000..8f93da9b6 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java @@ -0,0 +1,220 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.function.BiConsumer; + +import com.simibubi.create.foundation.fluid.FluidHelper; +import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.FluidState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.fluids.FluidStack; + +public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { + + protected static class BlockPosEntry { + public BlockPos pos; + public int distance; + + public BlockPosEntry(BlockPos pos, int distance) { + this.pos = pos; + this.distance = distance; + } + } + + MutableBoundingBox affectedArea; + BlockPos rootPos; + boolean infinite; + protected boolean counterpartActed; + + // Search + static final int searchedPerTick = 256; + List frontier; + Set visited; + + static final int validationTimer = 160; + int revalidateIn; + + public FluidManipulationBehaviour(SmartTileEntity te) { + super(te); + setValidationTimer(); + infinite = false; + visited = new HashSet<>(); + frontier = new ArrayList<>(); + } + + public void counterpartActed() { + counterpartActed = true; + } + + protected int setValidationTimer() { + return revalidateIn = validationTimer; + } + + protected int setLongValidationTimer() { + return revalidateIn = validationTimer * 2; + } + + protected int maxRange() { + return 128; + } + + protected int maxBlocks() { + return 10000; + } + + public void reset() { + if (affectedArea != null) + scheduleUpdatesInAffectedArea(); + affectedArea = null; + setValidationTimer(); + frontier.clear(); + visited.clear(); + infinite = false; + } + + @Override + public void destroy() { + reset(); + super.destroy(); + } + + protected void scheduleUpdatesInAffectedArea() { + World world = getWorld(); + BlockPos.getAllInBox(new BlockPos(affectedArea.minX - 1, affectedArea.minY - 1, affectedArea.minZ - 1), new BlockPos(affectedArea.maxX + 1, affectedArea.maxY + 1, affectedArea.maxZ + 1)) + .forEach(pos -> { + FluidState nextFluidState = world.getFluidState(pos); + if (nextFluidState.isEmpty()) + return; + world.getPendingFluidTicks() + .scheduleTick(pos, nextFluidState.getFluid(), world.getRandom() + .nextInt(5)); + }); + } + + protected int comparePositions(BlockPosEntry e1, BlockPosEntry e2) { + Vector3d centerOfRoot = VecHelper.getCenterOf(rootPos); + BlockPos pos2 = e2.pos; + BlockPos pos1 = e1.pos; + if (pos1.getY() != pos2.getY()) + return Integer.compare(pos2.getY(), pos1.getY()); + int compareDistance = Integer.compare(e2.distance, e1.distance); + if (compareDistance != 0) + return compareDistance; + return Double.compare(VecHelper.getCenterOf(pos2) + .squareDistanceTo(centerOfRoot), + VecHelper.getCenterOf(pos1) + .squareDistanceTo(centerOfRoot)); + } + + protected void search(Fluid fluid, List frontier, Set visited, + BiConsumer add, boolean searchDownward) { + World world = getWorld(); + int maxBlocks = maxBlocks(); + int maxRange = maxRange(); + int maxRangeSq = maxRange * maxRange; + int i; + + for (i = 0; i < searchedPerTick && !frontier.isEmpty() && visited.size() <= maxBlocks; i++) { + BlockPosEntry entry = frontier.remove(0); + BlockPos currentPos = entry.pos; + if (visited.contains(currentPos)) + continue; + visited.add(currentPos); + + FluidState fluidState = world.getFluidState(currentPos); + if (fluidState.isEmpty()) + continue; + + Fluid currentFluid = FluidHelper.convertToStill(fluidState.getFluid()); + if (fluid == null) + fluid = currentFluid; + if (!currentFluid.isEquivalentTo(fluid)) + continue; + + add.accept(currentPos, entry.distance); + + for (Direction side : Iterate.directions) { + if (!searchDownward && side == Direction.DOWN) + continue; + + BlockPos offsetPos = currentPos.offset(side); + if (visited.contains(offsetPos)) + continue; + if (offsetPos.distanceSq(rootPos) > maxRangeSq) + continue; + + FluidState nextFluidState = world.getFluidState(offsetPos); + if (nextFluidState.isEmpty()) + continue; + Fluid nextFluid = nextFluidState.getFluid(); + if (nextFluid == FluidHelper.convertToFlowing(nextFluid) && side == Direction.UP + && !VecHelper.onSameAxis(rootPos, offsetPos, Axis.Y)) + continue; + + frontier.add(new BlockPosEntry(offsetPos, entry.distance + 1)); + } + } + } + + protected void playEffect(World world, BlockPos pos, Fluid fluid, boolean fillSound) { + BlockPos splooshPos = infinite ? tileEntity.getPos() : pos; + + SoundEvent soundevent = fillSound ? fluid.getAttributes() + .getFillSound() + : fluid.getAttributes() + .getEmptySound(); + if (soundevent == null) + soundevent = fluid.isIn(FluidTags.LAVA) + ? fillSound ? SoundEvents.ITEM_BUCKET_FILL_LAVA : SoundEvents.ITEM_BUCKET_EMPTY_LAVA + : fillSound ? SoundEvents.ITEM_BUCKET_FILL : SoundEvents.ITEM_BUCKET_EMPTY; + + world.playSound(null, splooshPos, soundevent, SoundCategory.BLOCKS, 0.3F, 1.0F); + if (world instanceof ServerWorld) + AllPackets.sendToNear(world, splooshPos, 10, new FluidSplashPacket(splooshPos, new FluidStack(fluid, 1))); + } + + @Override + public void write(CompoundNBT nbt, boolean clientPacket) { + if (rootPos != null) + nbt.put("LastPos", NBTUtil.writeBlockPos(rootPos)); + if (affectedArea != null) { + nbt.put("AffectedAreaFrom", + NBTUtil.writeBlockPos(new BlockPos(affectedArea.minX, affectedArea.minY, affectedArea.minZ))); + nbt.put("AffectedAreaTo", + NBTUtil.writeBlockPos(new BlockPos(affectedArea.maxX, affectedArea.maxY, affectedArea.maxZ))); + } + super.write(nbt, clientPacket); + } + + @Override + public void read(CompoundNBT nbt, boolean clientPacket) { + if (nbt.contains("LastPos")) + rootPos = NBTUtil.readBlockPos(nbt.getCompound("LastPos")); + if (nbt.contains("AffectedAreaFrom") && nbt.contains("AffectedAreaTo")) + affectedArea = new MutableBoundingBox(NBTUtil.readBlockPos(nbt.getCompound("AffectedAreaFrom")), + NBTUtil.readBlockPos(nbt.getCompound("AffectedAreaTo"))); + super.read(nbt, clientPacket); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidSplashPacket.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidSplashPacket.java new file mode 100644 index 000000000..3e46f91ce --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidSplashPacket.java @@ -0,0 +1,49 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.function.Supplier; + +import com.simibubi.create.content.contraptions.fluids.FluidFX; +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.client.Minecraft; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.network.NetworkEvent.Context; + +public class FluidSplashPacket extends SimplePacketBase { + + private BlockPos pos; + private FluidStack fluid; + + public FluidSplashPacket(BlockPos pos, FluidStack fluid) { + this.pos = pos; + this.fluid = fluid; + } + + public FluidSplashPacket(PacketBuffer buffer) { + pos = buffer.readBlockPos(); + fluid = buffer.readFluidStack(); + } + + public void write(PacketBuffer buffer) { + buffer.writeBlockPos(pos); + buffer.writeFluidStack(fluid); + } + + public void handle(Supplier ctx) { + ctx.get() + .enqueueWork(() -> DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { + if (Minecraft.getInstance().player.getPositionVec() + .distanceTo(new Vector3d(pos.getX(), pos.getY(), pos.getZ())) > 100) + return; + FluidFX.splash(pos, fluid); + })); + ctx.get() + .setPacketHandled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java new file mode 100644 index 000000000..7ec814a63 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java @@ -0,0 +1,107 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import com.simibubi.create.AllShapes; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; +import com.simibubi.create.foundation.block.ITE; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.Iterate; + +import net.minecraft.block.BlockState; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; + +public class HosePulleyBlock extends HorizontalKineticBlock implements ITE { + + public HosePulleyBlock(Properties properties) { + super(properties); + } + + @Override + public Axis getRotationAxis(BlockState state) { + return state.get(HORIZONTAL_FACING) + .rotateY() + .getAxis(); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + Direction preferredHorizontalFacing = getPreferredHorizontalFacing(context); + return this.getDefaultState() + .with(HORIZONTAL_FACING, + preferredHorizontalFacing != null ? preferredHorizontalFacing.rotateYCCW() + : context.getPlacementHorizontalFacing() + .getOpposite()); + } + + @Override + public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { + return state.get(HORIZONTAL_FACING) + .rotateY() == face; + } + + public static boolean hasPipeTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { + return state.get(HORIZONTAL_FACING) + .rotateYCCW() == face; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.HOSE_PULLEY.create(); + } + + @Override + public Direction getPreferredHorizontalFacing(BlockItemUseContext context) { + Direction fromParent = super.getPreferredHorizontalFacing(context); + if (fromParent != null) + return fromParent; + + Direction prefferedSide = null; + for (Direction facing : Iterate.horizontalDirections) { + BlockPos pos = context.getPos() + .offset(facing); + BlockState blockState = context.getWorld() + .getBlockState(pos); + if (FluidPipeBlock.canConnectTo(context.getWorld(), pos, blockState, facing)) + if (prefferedSide != null && prefferedSide.getAxis() != facing.getAxis()) { + prefferedSide = null; + break; + } else + prefferedSide = facing; + } + return prefferedSide == null ? null : prefferedSide.getOpposite(); + } + + @Override + public void onReplaced(BlockState p_196243_1_, World world, BlockPos pos, BlockState p_196243_4_, + boolean p_196243_5_) { + if (p_196243_1_.hasTileEntity() + && (p_196243_1_.getBlock() != p_196243_4_.getBlock() || !p_196243_4_.hasTileEntity())) { + TileEntityBehaviour.destroy(world, pos, FluidDrainingBehaviour.TYPE); + TileEntityBehaviour.destroy(world, pos, FluidFillingBehaviour.TYPE); + world.removeTileEntity(pos); + } + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { + return AllShapes.PULLEY.get(state.get(HORIZONTAL_FACING) + .rotateY() + .getAxis()); + } + + @Override + public Class getTileEntityClass() { + return HosePulleyTileEntity.class; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyFluidHandler.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyFluidHandler.java new file mode 100644 index 000000000..043c23985 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyFluidHandler.java @@ -0,0 +1,123 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.function.Supplier; + +import javax.annotation.Nullable; + +import com.simibubi.create.foundation.fluid.SmartFluidTank; + +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public class HosePulleyFluidHandler implements IFluidHandler { + + // The dynamic interface + + @Override + public int fill(FluidStack resource, FluidAction action) { + if (!internalTank.isEmpty() && !resource.isFluidEqual(internalTank.getFluid())) + return 0; + + int diff = resource.getAmount(); + int totalAmountAfterFill = diff + internalTank.getFluidAmount(); + FluidStack remaining = resource.copy(); + + if (predicate.get() && totalAmountAfterFill >= 1000) { + if (filler.tryDeposit(resource.getFluid(), rootPosGetter.get(), action.simulate())) { + drainer.counterpartActed(); + remaining.shrink(1000); + diff -= 1000; + } + } + + if (action.simulate()) + return diff <= 0 ? resource.getAmount() : internalTank.fill(remaining, action); + if (diff <= 0) { + internalTank.drain(-diff, FluidAction.EXECUTE); + return resource.getAmount(); + } + + return internalTank.fill(remaining, action); + } + + @Override + public FluidStack getFluidInTank(int tank) { + if (internalTank.isEmpty()) + return drainer.getDrainableFluid(rootPosGetter.get()); + return internalTank.getFluidInTank(tank); + } + + @Override + public FluidStack drain(FluidStack resource, FluidAction action) { + return drainInternal(resource.getAmount(), resource, action); + } + + @Override + public FluidStack drain(int maxDrain, FluidAction action) { + return drainInternal(maxDrain, null, action); + } + + private FluidStack drainInternal(int maxDrain, @Nullable FluidStack resource, FluidAction action) { + if (resource != null && !internalTank.isEmpty() && !resource.isFluidEqual(internalTank.getFluid())) + return FluidStack.EMPTY; + if (internalTank.getFluidAmount() >= 1000) + return internalTank.drain(maxDrain, action); + BlockPos pos = rootPosGetter.get(); + FluidStack returned = drainer.getDrainableFluid(pos); + if (!predicate.get() || !drainer.pullNext(pos, action.simulate())) + return internalTank.drain(maxDrain, action); + + filler.counterpartActed(); + FluidStack leftover = returned.copy(); + int available = 1000 + internalTank.getFluidAmount(); + int drained; + + if (!internalTank.isEmpty() && !internalTank.getFluid() + .isFluidEqual(returned) || returned.isEmpty()) + return internalTank.drain(maxDrain, action); + + if (resource != null && !returned.isFluidEqual(resource)) + return FluidStack.EMPTY; + + drained = Math.min(maxDrain, available); + returned.setAmount(drained); + leftover.setAmount(available - drained); + if (action.execute() && !leftover.isEmpty()) + internalTank.setFluid(leftover); + return returned; + } + + // + + private SmartFluidTank internalTank; + private FluidFillingBehaviour filler; + private FluidDrainingBehaviour drainer; + private Supplier rootPosGetter; + private Supplier predicate; + + public HosePulleyFluidHandler(SmartFluidTank internalTank, FluidFillingBehaviour filler, + FluidDrainingBehaviour drainer, Supplier rootPosGetter, Supplier predicate) { + this.internalTank = internalTank; + this.filler = filler; + this.drainer = drainer; + this.rootPosGetter = rootPosGetter; + this.predicate = predicate; + } + + @Override + public int getTanks() { + return internalTank.getTanks(); + } + + @Override + public int getTankCapacity(int tank) { + return internalTank.getTankCapacity(tank); + } + + @Override + public boolean isFluidValid(int tank, FluidStack stack) { + return internalTank.isFluidValid(tank, stack); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyRenderer.java new file mode 100644 index 000000000..2fc5797bf --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyRenderer.java @@ -0,0 +1,70 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.content.contraptions.base.IRotate; +import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; +import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyRenderer; +import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.SuperByteBuffer; + +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class HosePulleyRenderer extends KineticTileEntityRenderer { + + public HosePulleyRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + @Override + public boolean isGlobalRenderer(KineticTileEntity p_188185_1_) { + return true; + } + + @Override + protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, + int light, int overlay) { + super.renderSafe(te, partialTicks, ms, buffer, light, overlay); + HosePulleyTileEntity pulley = (HosePulleyTileEntity) te; + float offset = pulley.getInterpolatedOffset(partialTicks); + + Axis rotationAxis = ((IRotate) te.getBlockState() + .getBlock()).getRotationAxis(te.getBlockState()); + kineticRotationTransform(getRotatedCoil(te), te, rotationAxis, AngleHelper.rad(offset * 180), light).renderInto(ms, + buffer.getBuffer(RenderType.getSolid())); + + World world = te.getWorld(); + BlockState blockState = te.getBlockState(); + BlockPos pos = te.getPos(); + + SuperByteBuffer halfMagnet = AllBlockPartials.HOSE_HALF_MAGNET.renderOn(blockState); + SuperByteBuffer halfRope = AllBlockPartials.HOSE_HALF.renderOn(blockState); + SuperByteBuffer magnet = AllBlockPartials.HOSE_MAGNET.renderOn(blockState); + SuperByteBuffer rope = AllBlockPartials.HOSE.renderOn(blockState); + + PulleyRenderer.renderPulleyRope(ms, buffer, world, pos, halfMagnet, halfRope, magnet, rope, true, offset); + } + + @Override + protected BlockState getRenderedBlockState(KineticTileEntity te) { + return shaft(te.getBlockState() + .get(HosePulleyBlock.HORIZONTAL_FACING) + .rotateY() + .getAxis()); + } + + protected SuperByteBuffer getRotatedCoil(KineticTileEntity te) { + BlockState blockState = te.getBlockState(); + return AllBlockPartials.HOSE_COIL.renderOnDirectionalSouth(blockState, + blockState.get(HosePulleyBlock.HORIZONTAL_FACING) + .rotateY()); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyTileEntity.java new file mode 100644 index 000000000..3b3129494 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyTileEntity.java @@ -0,0 +1,172 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import java.util.List; + +import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.foundation.fluid.SmartFluidTank; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.LerpedFloat; +import com.simibubi.create.foundation.utility.ServerSpeedProvider; + +import net.minecraft.block.BlockState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public class HosePulleyTileEntity extends KineticTileEntity { + + LerpedFloat offset; + boolean isMoving; + + private SmartFluidTank internalTank; + private LazyOptional capability; + private FluidDrainingBehaviour drainer; + private FluidFillingBehaviour filler; + + public HosePulleyTileEntity(TileEntityType typeIn) { + super(typeIn); + offset = LerpedFloat.linear() + .startWithValue(0); + isMoving = true; + internalTank = new SmartFluidTank(1500, this::onTankContentsChanged); + IFluidHandler handler = new HosePulleyFluidHandler(internalTank, filler, drainer, + () -> pos.down((int) Math.ceil(offset.getValue())), () -> !this.isMoving); + capability = LazyOptional.of(() -> handler); + } + + @Override + public void addBehaviours(List behaviours) { + drainer = new FluidDrainingBehaviour(this); + filler = new FluidFillingBehaviour(this); + behaviours.add(drainer); + behaviours.add(filler); + super.addBehaviours(behaviours); + } + + protected void onTankContentsChanged(FluidStack contents) {} + + @Override + public void onSpeedChanged(float previousSpeed) { + isMoving = true; + if (getSpeed() == 0) { + offset.forceNextSync(); + offset.setValue(Math.round(offset.getValue())); + isMoving = false; + } + + if (isMoving) { + float newOffset = offset.getValue() + getMovementSpeed(); + if (newOffset < 0) + isMoving = false; + if (!world.getBlockState(pos.down((int) Math.ceil(newOffset))) + .getMaterial() + .isReplaceable()) { + isMoving = false; + } + if (isMoving) { + drainer.reset(); + filler.reset(); + } + } + + super.onSpeedChanged(previousSpeed); + } + + @Override + @OnlyIn(Dist.CLIENT) + public AxisAlignedBB getRenderBoundingBox() { + return super.getRenderBoundingBox().expand(0, -offset.getValue(), 0); + } + + @Override + @OnlyIn(Dist.CLIENT) + public double getMaxRenderDistanceSquared() { + return super.getMaxRenderDistanceSquared() + offset.getValue() * offset.getValue(); + } + + @Override + public void tick() { + super.tick(); + float newOffset = offset.getValue() + getMovementSpeed(); + if (newOffset < 0) { + newOffset = 0; + isMoving = false; + } + if (!world.getBlockState(pos.down((int) Math.ceil(newOffset))) + .getMaterial() + .isReplaceable()) { + newOffset = (int) newOffset; + isMoving = false; + } + if (getSpeed() == 0) + isMoving = false; + + offset.setValue(newOffset); + } + + @Override + public void lazyTick() { + super.lazyTick(); + if (world.isRemote) + return; + if (isMoving) + return; + + int ceil = (int) Math.ceil(offset.getValue() + getMovementSpeed()); + if (getMovementSpeed() > 0 && world.getBlockState(pos.down(ceil)) + .getMaterial() + .isReplaceable()) { + isMoving = true; + drainer.reset(); + filler.reset(); + return; + } + } + + @Override + protected void write(CompoundNBT compound, boolean clientPacket) { + compound.put("Offset", offset.writeNBT()); + compound.put("Tank", internalTank.writeToNBT(new CompoundNBT())); + super.write(compound, clientPacket); + } + + @Override + protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { + offset.readNBT(compound.getCompound("Offset"), clientPacket); + internalTank.readFromNBT(compound.getCompound("Tank")); + super.fromTag(state, compound, clientPacket); + } + + @Override + public void remove() { + super.remove(); + capability.invalidate(); + } + + public float getMovementSpeed() { + float movementSpeed = getSpeed() / 512f; + if (world.isRemote) + movementSpeed *= ServerSpeedProvider.get(); + return movementSpeed; + } + + public float getInterpolatedOffset(float pt) { + return offset.getValue(pt); + } + + @Override + public LazyOptional getCapability(Capability cap, Direction side) { + if (isFluidHandlerCap(cap) + && (side == null || HosePulleyBlock.hasPipeTowards(world, pos, getBlockState(), side))) + return this.capability.cast(); + return super.getCapability(cap, side); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java new file mode 100644 index 000000000..9ea0ab495 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java @@ -0,0 +1,31 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import com.simibubi.create.AllShapes; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Direction; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; + +public class ItemDrainBlock extends Block { + + public ItemDrainBlock(Properties p_i48440_1_) { + super(p_i48440_1_); + } + + @Override + public VoxelShape getShape(BlockState p_220053_1_, IBlockReader p_220053_2_, BlockPos p_220053_3_, + ISelectionContext p_220053_4_) { + return AllShapes.CASING_13PX.get(Direction.UP); + } + + @Override + public void fillItemGroup(ItemGroup p_149666_1_, NonNullList p_149666_2_) {} + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java new file mode 100644 index 000000000..aeb03c5f5 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java @@ -0,0 +1,56 @@ +package com.simibubi.create.content.contraptions.fluids.tank; + +import java.util.function.Consumer; + +import com.simibubi.create.foundation.fluid.SmartFluidTank; + +import net.minecraft.tileentity.TileEntityType; +import net.minecraftforge.fluids.FluidStack; + +public class CreativeFluidTankTileEntity extends FluidTankTileEntity { + + public CreativeFluidTankTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + } + + @Override + protected SmartFluidTank createInventory() { + return new CreativeSmartFluidTank(getCapacityMultiplier(), this::onFluidStackChanged); + } + + class CreativeSmartFluidTank extends SmartFluidTank { + + public CreativeSmartFluidTank(int capacity, Consumer updateCallback) { + super(capacity, updateCallback); + } + + @Override + public int getFluidAmount() { + return getFluid().isEmpty() ? 0 : getTankCapacity(0); + } + + public void setContainedFluid(FluidStack fluidStack) { + fluid = fluidStack.copy(); + if (!fluidStack.isEmpty()) + fluid.setAmount(getTankCapacity(0)); + notifyUpdate(); + } + + @Override + public int fill(FluidStack resource, FluidAction action) { + return resource.getAmount(); + } + + @Override + public FluidStack drain(FluidStack resource, FluidAction action) { + return super.drain(resource, FluidAction.SIMULATE); + } + + @Override + public FluidStack drain(int maxDrain, FluidAction action) { + return super.drain(maxDrain, FluidAction.SIMULATE); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java index d54609102..a154e5e9f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java @@ -1,6 +1,9 @@ package com.simibubi.create.content.contraptions.fluids.tank; import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.fluids.actors.GenericItemFilling; +import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankTileEntity.CreativeSmartFluidTank; +import com.simibubi.create.content.contraptions.processing.EmptyingByBasin; import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.fluid.FluidHelper; @@ -38,9 +41,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandlerItem; public class FluidTankBlock extends Block implements IWrenchable, ITE { @@ -48,8 +49,19 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE SHAPE = EnumProperty.create("shape", Shape.class); - public FluidTankBlock(Properties p_i48440_1_) { + private boolean creative; + + public static FluidTankBlock regular(Properties p_i48440_1_) { + return new FluidTankBlock(p_i48440_1_, false); + } + + public static FluidTankBlock creative(Properties p_i48440_1_) { + return new FluidTankBlock(p_i48440_1_, true); + } + + protected FluidTankBlock(Properties p_i48440_1_, boolean creative) { super(p_i48440_1_); + this.creative = creative; setDefaultState(getDefaultState().with(TOP, true) .with(BOTTOM, true) .with(SHAPE, Shape.WINDOW)); @@ -73,7 +85,7 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE capability = - copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); - if (!capability.isPresent()) - return ActionResultType.PASS; - - if (!player.isCreative()) - return ActionResultType.FAIL; - - TileEntity te = world.getTileEntity(pos); - LazyOptional tankCapability = - te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, ray.getFace()); - if (!tankCapability.isPresent()) - return ActionResultType.PASS; boolean onClient = world.isRemote; - IFluidHandlerItem fluidItem = capability.orElse(null); + if (heldItem.isEmpty()) + return ActionResultType.PASS; + if (!player.isCreative()) + return ActionResultType.PASS; + + FluidExchange exchange = null; + FluidTankTileEntity te = FluidTankConnectivityHandler.anyTankAt(world, pos); + if (te == null) + return ActionResultType.FAIL; + + LazyOptional tankCapability = te.fluidCapability; + if (!tankCapability.isPresent()) + return ActionResultType.PASS; IFluidHandler fluidTank = tankCapability.orElse(null); FluidStack prevFluidInTank = fluidTank.getFluidInTank(0) .copy(); - FluidExchange exchange = FluidHelper.exchange(fluidTank, fluidItem, FluidExchange.TANK_TO_ITEM, 1000); + if (FluidHelper.tryEmptyItemIntoTE(world, player, hand, heldItem, te)) + exchange = FluidExchange.ITEM_TO_TANK; + else if (FluidHelper.tryFillItemFromTE(world, player, hand, heldItem, te)) + exchange = FluidExchange.TANK_TO_ITEM; - FluidStack fluidInTank = fluidTank.getFluidInTank(0); - if (!player.isCreative() && !onClient) { - if (heldItem.getCount() > 1) { - heldItem.shrink(1); - player.addItemStackToInventory(fluidItem.getContainer()); - } else { - player.setHeldItem(hand, fluidItem.getContainer()); - } + if (exchange == null) { + if (EmptyingByBasin.canItemBeEmptied(world, heldItem) + || GenericItemFilling.canItemBeFilled(world, heldItem)) + return ActionResultType.SUCCESS; + return ActionResultType.PASS; } SoundEvent soundevent = null; BlockState fluidState = null; + FluidStack fluidInTank = tankCapability.map(fh -> fh.getFluidInTank(0)) + .orElse(FluidStack.EMPTY); if (exchange == FluidExchange.ITEM_TO_TANK) { + if (creative && !onClient) { + FluidStack fluidInItem = EmptyingByBasin.emptyItem(world, heldItem, true).getFirst(); + if (!fluidInItem.isEmpty() && fluidTank instanceof CreativeSmartFluidTank) + ((CreativeSmartFluidTank) fluidTank).setContainedFluid(fluidInItem); + } + Fluid fluid = fluidInTank.getFluid(); fluidState = fluid.getDefaultState() .getBlockState(); @@ -141,6 +157,10 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE frontier = new ArrayList<>(); frontier.add(te); - formTanks(te.getWorld(), cache, frontier); + formTanks(te.getType(), te.getWorld(), cache, frontier); } - private static void formTanks(IBlockReader world, TankSearchCache cache, List frontier) { + private static void formTanks(TileEntityType type, IBlockReader world, TankSearchCache cache, + List frontier) { PriorityQueue> creationQueue = makeCreationQueue(); Set visited = new HashSet<>(); @@ -70,7 +72,7 @@ public class FluidTankConnectivityHandler { continue; if (visited.contains(next)) continue; - FluidTankTileEntity nextTank = tankAt(world, next); + FluidTankTileEntity nextTank = tankAt(type, world, next); if (nextTank == null) continue; if (nextTank.isRemoved()) @@ -142,6 +144,7 @@ public class FluidTankConnectivityHandler { boolean simulate) { int amount = 0; int height = 0; + TileEntityType type = te.getType(); World world = te.getWorld(); BlockPos origin = te.getPos(); FluidStack fluid = te.getTankInventory() @@ -154,7 +157,7 @@ public class FluidTankConnectivityHandler { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = origin.add(xOffset, yOffset, zOffset); - Optional tank = cache.getOrCache(world, pos); + Optional tank = cache.getOrCache(type, world, pos); if (!tank.isPresent()) break Search; @@ -194,15 +197,15 @@ public class FluidTankConnectivityHandler { for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = origin.add(xOffset, yOffset, zOffset); - FluidTankTileEntity tank = tankAt(world, pos); + FluidTankTileEntity tank = tankAt(type, world, pos); if (tank == te) continue; - + if (tank.isController()) { te.tankInventory.fill(tank.tankInventory.getFluid(), FluidAction.EXECUTE); tank.tankInventory.setFluid(FluidStack.EMPTY); } - + splitTankAndInvalidate(tank, cache, false); tank.setController(origin); tank.updateConnectivity = false; @@ -248,7 +251,7 @@ public class FluidTankConnectivityHandler { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = origin.add(xOffset, yOffset, zOffset); - FluidTankTileEntity tankAt = tankAt(world, pos); + FluidTankTileEntity tankAt = tankAt(te.getType(), world, pos); if (tankAt == null) continue; if (!tankAt.getController() @@ -278,7 +281,7 @@ public class FluidTankConnectivityHandler { te.fluidCapability.invalidate(); if (tryReconnect) - formTanks(world, cache == null ? new TankSearchCache() : cache, frontier); + formTanks(te.getType(), world, cache == null ? new TankSearchCache() : cache, frontier); } private static PriorityQueue> makeCreationQueue() { @@ -291,7 +294,15 @@ public class FluidTankConnectivityHandler { } @Nullable - public static FluidTankTileEntity tankAt(IBlockReader world, BlockPos pos) { + public static FluidTankTileEntity tankAt(TileEntityType type, IBlockReader world, BlockPos pos) { + TileEntity te = world.getTileEntity(pos); + if (te instanceof FluidTankTileEntity && te.getType() == type) + return (FluidTankTileEntity) te; + return null; + } + + @Nullable + public static FluidTankTileEntity anyTankAt(IBlockReader world, BlockPos pos) { TileEntity te = world.getTileEntity(pos); if (te instanceof FluidTankTileEntity) return (FluidTankTileEntity) te; @@ -317,10 +328,10 @@ public class FluidTankConnectivityHandler { return controllerMap.containsKey(pos); } - Optional getOrCache(IBlockReader world, BlockPos pos) { + Optional getOrCache(TileEntityType type, IBlockReader world, BlockPos pos) { if (hasVisited(pos)) return controllerMap.get(pos); - FluidTankTileEntity tankAt = tankAt(world, pos); + FluidTankTileEntity tankAt = tankAt(type, world, pos); if (tankAt == null) { putEmpty(pos); return Optional.empty(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java index 77a4f61ad..3262e88af 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java @@ -12,6 +12,16 @@ import net.minecraftforge.client.model.generators.ModelFile; public class FluidTankGenerator extends SpecialBlockStateGen { + private String prefix; + + public FluidTankGenerator() { + this(""); + } + + public FluidTankGenerator(String prefix) { + this.prefix = prefix; + } + @Override protected int getXRotation(BlockState state) { return 0; @@ -37,8 +47,18 @@ public class FluidTankGenerator extends SpecialBlockStateGen { else if (bottom) shapeName = "bottom"; - return AssetLookup.partialBaseModel(ctx, prov, - shapeName + (shape == Shape.PLAIN ? "" : "_" + shape.getString())); + String modelName = shapeName + (shape == Shape.PLAIN ? "" : "_" + shape.name()); + + if (!prefix.isEmpty()) + return prov.models() + .withExistingParent(prefix + modelName, prov.modLoc("block/fluid_tank/block_" + modelName)) + .texture("0", prov.modLoc("block/" + prefix + "casing")) + .texture("1", prov.modLoc("block/" + prefix + "fluid_tank")) + .texture("3", prov.modLoc("block/" + prefix + "fluid_tank_window")) + .texture("4", prov.modLoc("block/" + prefix + "fluid_tank_window_single")) + .texture("particle", prov.modLoc("block/" + prefix + "fluid_tank")); + + return AssetLookup.partialBaseModel(ctx, prov, modelName); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java index 9205c1be9..9dfc502dc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java @@ -44,7 +44,7 @@ public class FluidTankItem extends BlockItem { if (!FluidTankBlock.isTank(placedOnState)) return; - FluidTankTileEntity tankAt = FluidTankConnectivityHandler.tankAt(world, placedOnPos); + FluidTankTileEntity tankAt = FluidTankConnectivityHandler.anyTankAt(world, placedOnPos); if (tankAt == null) return; FluidTankTileEntity controllerTE = tankAt.getControllerTE(); @@ -60,7 +60,7 @@ public class FluidTankItem extends BlockItem { .down() : controllerTE.getPos() .up(controllerTE.height); - + if (startPos.getY() != pos.getY()) return; @@ -87,9 +87,11 @@ public class FluidTankItem extends BlockItem { if (FluidTankBlock.isTank(blockState)) continue; BlockItemUseContext context = BlockItemUseContext.func_221536_a(ctx, offsetPos, face); - player.getPersistentData().putBoolean("SilenceTankSound", true); + player.getPersistentData() + .putBoolean("SilenceTankSound", true); super.tryPlace(context); - player.getPersistentData().remove("SilenceTankSound"); + player.getPersistentData() + .remove("SilenceTankSound"); } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java index 3ff4e7d2d..741b79a49 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java @@ -6,9 +6,8 @@ import java.util.Collections; import java.util.List; import java.util.Random; -import com.simibubi.create.AllSpriteShifts; import com.simibubi.create.foundation.block.connected.CTModel; -import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour; +import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.block.BlockState; @@ -23,11 +22,9 @@ import net.minecraftforge.client.model.data.ModelProperty; public class FluidTankModel extends CTModel { protected static ModelProperty CULL_PROPERTY = new ModelProperty<>(); - static ConnectedTextureBehaviour CT_BEHAVIOUR = - new FluidTankCTBehaviour(AllSpriteShifts.FLUID_TANK, AllSpriteShifts.COPPER_CASING); - public FluidTankModel(IBakedModel originalModel) { - super(originalModel, CT_BEHAVIOUR); + public FluidTankModel(IBakedModel originalModel, CTSpriteShiftEntry side, CTSpriteShiftEntry top) { + super(originalModel, new FluidTankCTBehaviour(side, top)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java index f5f35b886..25531875b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java @@ -42,6 +42,9 @@ public class FluidTankRenderer extends SafeTileEntityRenderer tileEntityTypeIn) { super(tileEntityTypeIn); - tankInventory = new SmartFluidTank(getCapacityMultiplier(), this::onFluidStackChanged); + tankInventory = createInventory(); fluidCapability = LazyOptional.of(() -> tankInventory); forceFluidLevelUpdate = true; updateConnectivity = false; @@ -67,6 +67,10 @@ public class FluidTankTileEntity extends SmartTileEntity { refreshCapability(); } + protected SmartFluidTank createInventory() { + return new SmartFluidTank(getCapacityMultiplier(), this::onFluidStackChanged); + } + protected void updateConnectivity() { updateConnectivity = false; if (world.isRemote) @@ -117,7 +121,7 @@ public class FluidTankTileEntity extends SmartTileEntity { for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { BlockPos pos = this.pos.add(xOffset, yOffset, zOffset); - FluidTankTileEntity tankAt = FluidTankConnectivityHandler.tankAt(world, pos); + FluidTankTileEntity tankAt = FluidTankConnectivityHandler.anyTankAt(world, pos); if (tankAt == null) continue; if (tankAt.luminosity == actualLuminosity) @@ -284,7 +288,7 @@ public class FluidTankTileEntity extends SmartTileEntity { int prevSize = width; int prevHeight = height; int prevLum = luminosity; - + updateConnectivity = compound.contains("Uninitialized"); luminosity = compound.getInt("Luminosity"); controller = null; @@ -305,10 +309,10 @@ public class FluidTankTileEntity extends SmartTileEntity { if (compound.contains("ForceFluidLevel") || fluidLevel == null) fluidLevel = new InterpolatedChasingValue().start(getFillState()) .withSpeed(1 / 2f); - + if (!clientPacket) return; - + boolean changeOfController = controllerBefore == null ? controller != null : !controllerBefore.equals(controller); if (changeOfController || prevSize != width || prevHeight != height) { @@ -325,9 +329,9 @@ public class FluidTankTileEntity extends SmartTileEntity { } if (luminosity != prevLum && hasWorld()) world.getChunkProvider() - .getLightManager() - .checkBlock(pos); - + .getLightManager() + .checkBlock(pos); + if (compound.contains("LazySync")) fluidLevel.withSpeed(compound.contains("LazySync") ? 1 / 8f : 1 / 2f); } @@ -350,7 +354,7 @@ public class FluidTankTileEntity extends SmartTileEntity { } compound.putInt("Luminosity", luminosity); super.write(compound, clientPacket); - + if (!clientPacket) return; if (forceFluidLevelUpdate) @@ -365,7 +369,7 @@ public class FluidTankTileEntity extends SmartTileEntity { public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { if (!fluidCapability.isPresent()) refreshCapability(); - if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) return fluidCapability.cast(); return super.getCapability(cap, side); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java index 6c3cc445c..fb46ac494 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java @@ -7,11 +7,11 @@ import com.simibubi.create.content.contraptions.fluids.actors.GenericItemFilling import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.block.ITE; +import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.utility.Iterate; -import com.simibubi.create.foundation.utility.Pair; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -34,11 +34,6 @@ import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; @@ -80,9 +75,9 @@ public class BasinBlock extends Block implements ITE, IWrenchab try { BasinTileEntity te = getTileEntity(worldIn, pos); if (!heldItem.isEmpty()) { - if (tryEmptyItemIntoBasin(worldIn, player, handIn, heldItem, te)) + if (FluidHelper.tryEmptyItemIntoTE(worldIn, player, handIn, heldItem, te)) return ActionResultType.SUCCESS; - if (tryFillItemFromBasin(worldIn, player, handIn, heldItem, te)) + if (FluidHelper.tryFillItemFromTE(worldIn, player, handIn, heldItem, te)) return ActionResultType.SUCCESS; if (EmptyingByBasin.canItemBeEmptied(worldIn, heldItem) @@ -103,77 +98,6 @@ public class BasinBlock extends Block implements ITE, IWrenchab return ActionResultType.SUCCESS; } - protected boolean tryEmptyItemIntoBasin(World worldIn, PlayerEntity player, Hand handIn, ItemStack heldItem, - BasinTileEntity te) { - if (!EmptyingByBasin.canItemBeEmptied(worldIn, heldItem)) - return false; - - Pair emptyingResult = EmptyingByBasin.emptyItem(worldIn, heldItem, true); - LazyOptional capability = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY); - IFluidHandler tank = capability.orElse(null); - FluidStack fluidStack = emptyingResult.getFirst(); - - if (tank == null || fluidStack.getAmount() != tank.fill(fluidStack, FluidAction.SIMULATE)) - return false; - if (worldIn.isRemote) - return true; - - ItemStack copyOfHeld = heldItem.copy(); - emptyingResult = EmptyingByBasin.emptyItem(worldIn, copyOfHeld, false); - tank.fill(fluidStack, FluidAction.EXECUTE); - - if (!player.isCreative()) { - if (copyOfHeld.isEmpty()) - player.setHeldItem(handIn, emptyingResult.getSecond()); - else { - player.setHeldItem(handIn, copyOfHeld); - player.inventory.placeItemBackInInventory(worldIn, emptyingResult.getSecond()); - } - } - return true; - } - - protected boolean tryFillItemFromBasin(World world, PlayerEntity player, Hand handIn, ItemStack heldItem, - BasinTileEntity te) { - if (!GenericItemFilling.canItemBeFilled(world, heldItem)) - return false; - - LazyOptional capability = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY); - IFluidHandler tank = capability.orElse(null); - - if (tank == null) - return false; - - for (int i = 0; i < tank.getTanks(); i++) { - FluidStack fluid = tank.getFluidInTank(i); - if (fluid.isEmpty()) - continue; - int requiredAmountForItem = GenericItemFilling.getRequiredAmountForItem(world, heldItem, fluid.copy()); - if (requiredAmountForItem == -1) - continue; - if (requiredAmountForItem > fluid.getAmount()) - continue; - - if (world.isRemote) - return true; - - if (player.isCreative()) - heldItem = heldItem.copy(); - ItemStack out = GenericItemFilling.fillItem(world, requiredAmountForItem, heldItem, fluid.copy()); - - FluidStack copy = fluid.copy(); - copy.setAmount(requiredAmountForItem); - tank.drain(copy, FluidAction.EXECUTE); - - if (!player.isCreative()) - player.inventory.placeItemBackInInventory(world, out); - te.notifyUpdate(); - return true; - } - - return false; - } - @Override public void onLanded(IBlockReader worldIn, Entity entityIn) { super.onLanded(worldIn, entityIn); @@ -203,7 +127,7 @@ public class BasinBlock extends Block implements ITE, IWrenchab public VoxelShape getRaytraceShape(BlockState p_199600_1_, IBlockReader p_199600_2_, BlockPos p_199600_3_) { return AllShapes.BASIN_RAYTRACE_SHAPE; } - + @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { return AllShapes.BASIN_BLOCK_SHAPE; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index a7b2f99e4..38222adf4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -171,7 +171,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE 0) { - beltMovementPositive = !beltMovementPositive; - Collections.reverse(items); - belt.markDirty(); - belt.sendData(); - } - // Added/Removed items from previous cycle if (!toInsert.isEmpty() || !toRemove.isEmpty()) { toInsert.forEach(this::insert); @@ -67,6 +59,17 @@ public class BeltInventory { belt.markDirty(); belt.sendData(); } + + if (belt.getSpeed() == 0) + return; + + // Reverse item collection if belt just reversed + if (beltMovementPositive != belt.getDirectionAwareBeltMovementSpeed() > 0) { + beltMovementPositive = !beltMovementPositive; + Collections.reverse(items); + belt.markDirty(); + belt.sendData(); + } // Assuming the first entry is furthest on the belt TransportedItemStack stackInFront = null; diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index fefb87396..251a38d72 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -492,6 +492,17 @@ public class StandardRecipeGen extends CreateRecipeProvider { .patternLine("SCS") .patternLine(" I ")), + HOSE_PULLEY = create(AllBlocks.HOSE_PULLEY).unlockedByTag(I::copper) + .viaShaped(b -> b + .key('S', I.shaft()) + .key('P', AllBlocks.FLUID_PIPE.get()) + .key('B', I.copperCasing()) + .key('C', Items.DRIED_KELP) + .key('I', I.copperSheet()) + .patternLine(" B ") + .patternLine("SCP") + .patternLine(" I ")), + EMPTY_BLAZE_BURNER = create(AllItems.EMPTY_BLAZE_BURNER).unlockedByTag(I::iron) .viaShaped(b -> b.key('A', Blocks.IRON_BARS) .key('I', I.ironSheet()) diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java index 581e9c087..d740798a3 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java @@ -7,14 +7,24 @@ import com.google.gson.JsonObject; import com.google.gson.JsonSyntaxException; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.fluids.actors.GenericItemFilling; +import com.simibubi.create.content.contraptions.processing.EmptyingByBasin; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.utility.Pair; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.JsonToNBT; +import net.minecraft.util.Hand; import net.minecraft.util.JSONUtils; import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import net.minecraftforge.fluids.capability.IFluidHandlerItem; @@ -74,9 +84,9 @@ public class FluidHelper { int amount = JSONUtils.getInt(json, "amount"); FluidStack stack = new FluidStack(fluid, amount); - if (!json.has("nbt")) + if (!json.has("nbt")) return stack; - + try { JsonElement element = json.get("nbt"); stack.setTag(JsonToNBT.getTagFromJson( @@ -89,6 +99,77 @@ public class FluidHelper { return stack; } + public static boolean tryEmptyItemIntoTE(World worldIn, PlayerEntity player, Hand handIn, ItemStack heldItem, + SmartTileEntity te) { + if (!EmptyingByBasin.canItemBeEmptied(worldIn, heldItem)) + return false; + + Pair emptyingResult = EmptyingByBasin.emptyItem(worldIn, heldItem, true); + LazyOptional capability = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY); + IFluidHandler tank = capability.orElse(null); + FluidStack fluidStack = emptyingResult.getFirst(); + + if (tank == null || fluidStack.getAmount() != tank.fill(fluidStack, FluidAction.SIMULATE)) + return false; + if (worldIn.isRemote) + return true; + + ItemStack copyOfHeld = heldItem.copy(); + emptyingResult = EmptyingByBasin.emptyItem(worldIn, copyOfHeld, false); + tank.fill(fluidStack, FluidAction.EXECUTE); + + if (!player.isCreative()) { + if (copyOfHeld.isEmpty()) + player.setHeldItem(handIn, emptyingResult.getSecond()); + else { + player.setHeldItem(handIn, copyOfHeld); + player.inventory.placeItemBackInInventory(worldIn, emptyingResult.getSecond()); + } + } + return true; + } + + public static boolean tryFillItemFromTE(World world, PlayerEntity player, Hand handIn, ItemStack heldItem, + SmartTileEntity te) { + if (!GenericItemFilling.canItemBeFilled(world, heldItem)) + return false; + + LazyOptional capability = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY); + IFluidHandler tank = capability.orElse(null); + + if (tank == null) + return false; + + for (int i = 0; i < tank.getTanks(); i++) { + FluidStack fluid = tank.getFluidInTank(i); + if (fluid.isEmpty()) + continue; + int requiredAmountForItem = GenericItemFilling.getRequiredAmountForItem(world, heldItem, fluid.copy()); + if (requiredAmountForItem == -1) + continue; + if (requiredAmountForItem > fluid.getAmount()) + continue; + + if (world.isRemote) + return true; + + if (player.isCreative()) + heldItem = heldItem.copy(); + ItemStack out = GenericItemFilling.fillItem(world, requiredAmountForItem, heldItem, fluid.copy()); + + FluidStack copy = fluid.copy(); + copy.setAmount(requiredAmountForItem); + tank.drain(copy, FluidAction.EXECUTE); + + if (!player.isCreative()) + player.inventory.placeItemBackInInventory(world, out); + te.notifyUpdate(); + return true; + } + + return false; + } + @Nullable public static FluidExchange exchange(IFluidHandler fluidTank, IFluidHandlerItem fluidItem, FluidExchange preferred, int maxAmount) { diff --git a/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java b/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java index d7b35eced..0f98c050b 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java @@ -7,11 +7,10 @@ import com.mojang.blaze3d.platform.GlStateManager.SourceFactor; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllBlockPartials; -import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.fluid.FluidRenderer; import com.simibubi.create.foundation.utility.ColorHelper; -import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.VecHelper; -import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld; + import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.FireBlock; @@ -22,21 +21,16 @@ import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.texture.AtlasTexture; import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.client.world.ClientWorld; import net.minecraft.fluid.Fluid; import net.minecraft.inventory.container.PlayerContainer; import net.minecraft.item.ItemStack; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.IItemProvider; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.math.vector.Vector3f; -import net.minecraft.world.LightType; -import net.minecraft.world.World; import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.fluids.FluidStack; -import javax.annotation.Nonnull; import javax.annotation.Nullable; public class GuiGameElement { @@ -236,36 +230,13 @@ public class GuiGameElement { .isEmpty()) return; - for (RenderType type : RenderType.getBlockLayers()) { - if (!RenderTypeLookup.canRenderInLayer(blockState.getFluidState(), type)) - continue; - - ms.push(); - RenderHelper.disableStandardItemLighting(); - - ClientWorld world = Minecraft.getInstance().world; - if (renderWorld == null || renderWorld.getWrappedWorld() != world) - renderWorld = new FluidRenderWorld(world); - - for (Direction d : Iterate.directions) { - vb = buffer.getBuffer(type); - if (d.getAxisDirection() == AxisDirection.POSITIVE) - continue; - - ms.push(); - ms.translate(.5, .5, .5); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(AngleHelper.horizontalAngle(d))); - ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(AngleHelper.verticalAngle(d) - 90)); - ms.translate(-.5, -.5, -.5); - blockRenderer.renderFluid(new BlockPos(0, 1, 0), renderWorld, vb, blockState.getFluidState()); - buffer.draw(type); - ms.pop(); - } - - RenderHelper.enable(); - ms.pop(); - break; - } + RenderSystem.pushMatrix(); + RenderHelper.disableStandardItemLighting(); + FluidRenderer.renderTiledFluidBB(new FluidStack(blockState.getFluidState() + .getFluid(), 1000), 0, 0, 0, 1.0001f, 1.0001f, 1.0001f, buffer, ms, 0xf000f0, true); + buffer.draw(RenderType.getTranslucent()); + RenderHelper.enable(); + RenderSystem.popMatrix(); } } @@ -297,6 +268,18 @@ public class GuiGameElement { renderItemIntoGUI(matrixStack, stack); cleanUpMatrix(matrixStack); } + /* + public void render() { + prepare(); + transform(); + RenderSystem.scaled(1, -1, 1); + RenderSystem.translated(0, 0, -75); + Minecraft.getInstance() + .getItemRenderer() + .renderItemIntoGUI(stack, 0, 0); + cleanUp(); + } + */ public static void renderItemIntoGUI(MatrixStack matrixStack, ItemStack stack) { ItemRenderer renderer = Minecraft.getInstance() @@ -340,24 +323,4 @@ public class GuiGameElement { } - private static FluidRenderWorld renderWorld; - - private static class FluidRenderWorld extends WrappedWorld { - - public FluidRenderWorld(World world) { - super(world); - } - - @Override - public int getLightLevel(@Nullable LightType p_226658_1_, @Nullable BlockPos p_226658_2_) { - return 15; - } - - @Override - @Nonnull - public BlockState getBlockState(BlockPos pos) { - return Blocks.AIR.getDefaultState(); - } - - } } diff --git a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java index 6f59dd299..d6fefa8a8 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java +++ b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java @@ -13,6 +13,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.syn import com.simibubi.create.content.contraptions.components.structureMovement.sync.LimbSwingUpdatePacket; import com.simibubi.create.content.contraptions.components.structureMovement.train.CouplingCreationPacket; import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.MinecartControllerUpdatePacket; +import com.simibubi.create.content.contraptions.fluids.actors.FluidSplashPacket; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.ConfigureSequencedGearshiftPacket; import com.simibubi.create.content.curiosities.symmetry.SymmetryEffectPacket; import com.simibubi.create.content.curiosities.tools.ExtendoGripInteractionPacket; @@ -32,8 +33,12 @@ import com.simibubi.create.foundation.utility.ServerSpeedProvider; import net.minecraft.network.PacketBuffer; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.minecraftforge.fml.network.NetworkEvent.Context; import net.minecraftforge.fml.network.NetworkRegistry; +import net.minecraftforge.fml.network.PacketDistributor; +import net.minecraftforge.fml.network.PacketDistributor.TargetPoint; import net.minecraftforge.fml.network.simple.SimpleChannel; public enum AllPackets { @@ -66,7 +71,8 @@ public enum AllPackets { CONTRAPTION_SEAT_MAPPING(ContraptionSeatMappingPacket.class, ContraptionSeatMappingPacket::new), LIMBSWING_UPDATE(LimbSwingUpdatePacket.class, LimbSwingUpdatePacket::new), MINECART_CONTROLLER(MinecartControllerUpdatePacket.class, MinecartControllerUpdatePacket::new), - + FLUID_SPLASH(FluidSplashPacket.class, FluidSplashPacket::new), + ; public static final ResourceLocation CHANNEL_NAME = new ResourceLocation(Create.ID, "network"); @@ -80,11 +86,19 @@ public enum AllPackets { } public static void registerPackets() { - channel = NetworkRegistry.ChannelBuilder.named(CHANNEL_NAME).serverAcceptedVersions(s -> true) - .clientAcceptedVersions(s -> true).networkProtocolVersion(() -> NETWORK_VERSION).simpleChannel(); + channel = NetworkRegistry.ChannelBuilder.named(CHANNEL_NAME) + .serverAcceptedVersions(s -> true) + .clientAcceptedVersions(s -> true) + .networkProtocolVersion(() -> NETWORK_VERSION) + .simpleChannel(); for (AllPackets packet : values()) packet.packet.register(); + } + public static void sendToNear(World world, BlockPos pos, int range, Object message) { + channel.send( + PacketDistributor.NEAR.with(TargetPoint.p(pos.getX(), pos.getY(), pos.getZ(), range, world.getRegistryKey())), + message); } private static class LoadedPacket { @@ -102,7 +116,11 @@ public enum AllPackets { } private void register() { - channel.messageBuilder(type, index++).encoder(encoder).decoder(decoder).consumer(handler).add(); + channel.messageBuilder(type, index++) + .encoder(encoder) + .decoder(decoder) + .consumer(handler) + .add(); } } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index ddb675d04..1906ce900 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -27,3 +27,7 @@ public net.minecraft.client.renderer.ItemRenderer field_175057_n # textureManage # Beacon public net.minecraft.tileentity.BeaconTileEntity field_174909_f # beamSegments + +# Server Tick List (For stopping placed fluids from spilling) +public net.minecraft.world.server.ServerTickList field_205374_d # pendingTickListEntriesHashSet +public net.minecraft.world.server.ServerTickList field_205375_e # pendingTickListEntriesTreeSet \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_tank/block_single_window.json b/src/main/resources/assets/create/models/block/fluid_tank/block_single_window.json index 10732b44a..fb5f533ee 100644 --- a/src/main/resources/assets/create/models/block/fluid_tank/block_single_window.json +++ b/src/main/resources/assets/create/models/block/fluid_tank/block_single_window.json @@ -5,7 +5,7 @@ "0": "create:block/copper_casing", "1": "create:block/fluid_tank", "5": "create:block/fluid_tank_window_single", - "particle": "create:block/fluid_tank" + "particle": "#1" }, "elements": [ { diff --git a/src/main/resources/assets/create/models/block/hose_pulley/block.json b/src/main/resources/assets/create/models/block/hose_pulley/block.json new file mode 100644 index 000000000..4e251b554 --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/block.json @@ -0,0 +1,271 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "4": "create:block/copper_gearbox", + "8": "create:block/oxidized/copper_block_0", + "9": "create:block/fluid_pipe", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "side", + "from": [14, 2, 2], + "to": [15, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "east": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "west": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "down": {"uv": [2, 11, 14, 12], "rotation": 90, "texture": "#4"} + } + }, + { + "name": "side", + "from": [1, 2, 2], + "to": [2, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "east": {"uv": [14, 2, 2, 14], "texture": "#8"}, + "west": {"uv": [14, 2, 2, 14], "texture": "#8"}, + "down": {"uv": [2, 12, 14, 11], "rotation": 90, "texture": "#4"} + } + }, + { + "name": "side", + "from": [-1.1, 2.9, 2.9], + "to": [1, 13.1, 13.1], + "rotation": {"angle": 0, "axis": "y", "origin": [7, -7, 7]}, + "faces": { + "north": {"uv": [11, 5, 6, 6], "rotation": 90, "texture": "#9"}, + "south": {"uv": [11, 5, 6, 6], "rotation": 270, "texture": "#9"}, + "west": {"uv": [11, 0, 6, 5], "texture": "#9"}, + "up": {"uv": [11, 5, 6, 6], "rotation": 270, "texture": "#9"}, + "down": {"uv": [11, 5, 6, 6], "rotation": 270, "texture": "#9"} + } + }, + { + "name": "side_frame", + "from": [14, 2, 14], + "to": [16, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [0, 2, 2, 14], "texture": "#8"}, + "east": {"uv": [14, 2, 16, 14], "rotation": 180, "texture": "#8"}, + "south": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "west": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "up": {"uv": [0, 14, 2, 16], "rotation": 270, "texture": "#8"}, + "down": {"uv": [0, 0, 2, 2], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 2, 14], + "to": [2, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [2, 2, 0, 14], "texture": "#8"}, + "east": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "south": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "west": {"uv": [16, 2, 14, 14], "rotation": 180, "texture": "#8"}, + "up": {"uv": [0, 16, 2, 14], "rotation": 270, "texture": "#8"}, + "down": {"uv": [0, 2, 2, 0], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [14, 2, 0], + "to": [16, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "east": {"uv": [16, 2, 14, 14], "rotation": 180, "texture": "#8"}, + "south": {"uv": [2, 2, 0, 14], "texture": "#8"}, + "west": {"uv": [2, 2, 0, 14], "rotation": 180, "texture": "#8"}, + "up": {"uv": [2, 14, 0, 16], "rotation": 270, "texture": "#8"}, + "down": {"uv": [2, 0, 0, 2], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 2, 0], + "to": [2, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "east": {"uv": [0, 2, 2, 14], "rotation": 180, "texture": "#8"}, + "south": {"uv": [0, 2, 2, 14], "texture": "#8"}, + "west": {"uv": [14, 2, 16, 14], "rotation": 180, "texture": "#8"}, + "up": {"uv": [2, 16, 0, 14], "rotation": 270, "texture": "#8"}, + "down": {"uv": [2, 2, 0, 0], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [14, 0, 0], + "to": [16, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [0, 14, 2, 16], "texture": "#8"}, + "east": {"uv": [0, 14, 16, 16], "texture": "#8"}, + "south": {"uv": [14, 14, 16, 16], "texture": "#8"}, + "west": {"uv": [0, 14, 16, 16], "texture": "#8"}, + "up": {"uv": [0, 14, 16, 16], "rotation": 90, "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "rotation": 270, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [14, 14, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 16, 2, 14], "texture": "#8"}, + "east": {"uv": [0, 16, 16, 14], "texture": "#8"}, + "south": {"uv": [14, 16, 16, 14], "texture": "#8"}, + "west": {"uv": [0, 16, 16, 14], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "rotation": 90, "texture": "#8"}, + "down": {"uv": [0, 16, 16, 14], "rotation": 270, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 0, 0], + "to": [2, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [2, 14, 0, 16], "texture": "#8"}, + "east": {"uv": [16, 14, 0, 16], "texture": "#8"}, + "south": {"uv": [16, 14, 14, 16], "texture": "#8"}, + "west": {"uv": [16, 14, 0, 16], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "rotation": 90, "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 14, 0], + "to": [2, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [2, 16, 0, 14], "texture": "#8"}, + "east": {"uv": [16, 16, 0, 14], "texture": "#8"}, + "south": {"uv": [16, 16, 14, 14], "texture": "#8"}, + "west": {"uv": [16, 16, 0, 14], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "rotation": 270, "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "rotation": 270, "texture": "#8"} + } + }, + { + "name": "front", + "from": [2, 1, 13], + "to": [14, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#8"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "south": {"uv": [2, 14, 14, 16], "texture": "#8"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "up": {"uv": [2, 0, 14, 2], "rotation": 180, "texture": "#8"}, + "down": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "front", + "from": [2, 1, 1], + "to": [14, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [14, 14, 2, 16], "texture": "#8"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "south": {"uv": [14, 14, 2, 16], "rotation": 180, "texture": "#8"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "up": {"uv": [2, 2, 14, 0], "texture": "#8"}, + "down": {"uv": [2, 16, 14, 14], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "front", + "from": [2, 13, 1], + "to": [14, 15, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [14, 16, 2, 14], "texture": "#8"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "south": {"uv": [14, 2, 2, 0], "texture": "#8"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "up": {"uv": [14, 15, 2, 13], "texture": "#8"}, + "down": {"uv": [14, 2, 2, 0], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "front", + "from": [2, 13, 13], + "to": [14, 15, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [2, 2, 14, 0], "texture": "#8"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "south": {"uv": [2, 16, 14, 14], "texture": "#8"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "up": {"uv": [14, 13, 2, 15], "texture": "#8"}, + "down": {"uv": [14, 0, 2, 2], "texture": "#8"} + } + }, + { + "name": "top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [2, 1, 14, 3], "rotation": 180, "texture": "#8"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "south": {"uv": [2, 13, 14, 15], "texture": "#8"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#8"}, + "down": {"uv": [2, 2, 14, 14], "rotation": 180, "texture": "#8"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + { + "name": "shaft", + "origin": [8, 8, 8], + "children": [] + }, + { + "name": "rope_half_magnet", + "origin": [8, 8, 8], + "children": [] + }, 15] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley.bbmodel b/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley.bbmodel new file mode 100644 index 000000000..341190326 --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"item","parent":"block/block","ambientocclusion":true,"resolution":{"width":16,"height":16},"elements":[{"name":"coil","from":[4,4,2],"to":[12,12,14],"autouv":0,"color":6,"rotation":[0,0,-45],"origin":[8,8,-10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[2,1,14,9],"texture":3},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[2,1,14,9],"rotation":180,"texture":3},"up":{"uv":[2,1,14,9],"rotation":270,"texture":3},"down":{"uv":[2,1,14,9],"rotation":90,"texture":3}},"uuid":"c6880831-d683-f703-04a3-fd39148ebb5c"},{"name":"coil","from":[3.5,3.5,3],"to":[12.5,12.5,7],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8,8,-10],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,3,4,12],"rotation":180,"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,3,4,12],"texture":3},"up":{"uv":[0,3,4,12],"rotation":90,"texture":3},"down":{"uv":[0,3,4,12],"rotation":270,"texture":3}},"uuid":"d93793b9-dd62-5818-2564-da40eed87601"},{"name":"side","from":[2,2,14],"to":[14,14,15],"autouv":0,"color":2,"origin":[8,-8,8],"faces":{"north":{"uv":[2,2,14,14],"texture":2},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[2,2,14,14],"texture":2},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,1,12],"rotation":270},"down":{"uv":[2,11,14,12],"texture":2}},"uuid":"50235661-64a5-c971-c6e6-0975baa71d99"},{"name":"side","from":[2,2,1],"to":[14,14,2],"autouv":0,"color":3,"origin":[8,-8,8],"faces":{"north":{"uv":[14,2,2,14],"texture":5},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[14,2,2,14],"texture":5},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[1,0,0,12],"rotation":270},"down":{"uv":[2,12,14,11],"texture":2}},"uuid":"f16b6f4f-7c00-62c6-e29b-a9d790a92d84"},{"name":"side_frame","from":[0,2,14],"to":[2,14,16],"autouv":0,"color":3,"origin":[8,1,8],"faces":{"north":{"uv":[14,2,16,14],"texture":5},"east":{"uv":[0,2,2,14],"texture":5},"south":{"uv":[14,2,16,14],"rotation":180,"texture":5},"west":{"uv":[14,2,16,14],"texture":5},"up":{"uv":[0,14,2,16],"texture":5},"down":{"uv":[0,0,2,2],"texture":5}},"uuid":"8e0b92f4-fea1-c76e-eec7-fa197247034b"},{"name":"side_frame","from":[0,2,0],"to":[2,14,2],"autouv":0,"color":6,"origin":[8,1,8],"faces":{"north":{"uv":[16,2,14,14],"rotation":180,"texture":5},"east":{"uv":[2,2,0,14],"texture":5},"south":{"uv":[16,2,14,14],"texture":5},"west":{"uv":[16,2,14,14],"texture":5},"up":{"uv":[0,16,2,14],"texture":5},"down":{"uv":[0,2,2,0],"texture":5}},"uuid":"c6e4de46-37af-8304-d04a-e3a06202a6d1"},{"name":"side_frame","from":[14,2,14],"to":[16,14,16],"autouv":0,"color":7,"origin":[8,1,8],"faces":{"north":{"uv":[2,2,0,14],"rotation":180,"texture":5},"east":{"uv":[16,2,14,14],"texture":5},"south":{"uv":[16,2,14,14],"rotation":180,"texture":5},"west":{"uv":[2,2,0,14],"texture":5},"up":{"uv":[2,14,0,16],"texture":5},"down":{"uv":[2,0,0,2],"texture":5}},"uuid":"22157158-613c-9abb-d3b9-2a2d576e1f98"},{"name":"side_frame","from":[14,2,0],"to":[16,14,2],"autouv":0,"color":5,"origin":[8,1,8],"faces":{"north":{"uv":[14,2,16,14],"rotation":180,"texture":5},"east":{"uv":[14,2,16,14],"texture":5},"south":{"uv":[0,2,2,14],"rotation":180,"texture":5},"west":{"uv":[0,2,2,14],"texture":5},"up":{"uv":[2,16,0,14],"texture":5},"down":{"uv":[2,2,0,0],"texture":5}},"uuid":"82c9a138-92db-c34a-f8e7-45283db7413d"},{"name":"side_frame","from":[0,0,14],"to":[16,2,16],"autouv":0,"color":3,"origin":[8,1,8],"faces":{"north":{"uv":[0,14,16,16],"texture":5},"east":{"uv":[0,14,2,16],"texture":5},"south":{"uv":[0,14,16,16],"texture":5},"west":{"uv":[14,14,16,16],"texture":5},"up":{"uv":[0,14,16,16],"rotation":180,"texture":5},"down":{"uv":[0,14,16,16],"rotation":180,"texture":5}},"uuid":"6965d55e-49aa-ab6d-4568-5de4c1501c57"},{"name":"side_frame","from":[0,14,14],"to":[16,16,16],"autouv":0,"color":2,"origin":[8,15,8],"faces":{"north":{"uv":[0,16,16,14],"texture":5},"east":{"uv":[0,16,2,14],"texture":5},"south":{"uv":[0,16,16,14],"texture":5},"west":{"uv":[14,16,16,14],"texture":5},"up":{"uv":[0,16,16,14],"rotation":180,"texture":5},"down":{"uv":[0,16,16,14],"rotation":180,"texture":5}},"uuid":"639134c9-125c-c945-7ece-ee0b946543c7"},{"name":"side_frame","from":[0,0,0],"to":[16,2,2],"autouv":0,"color":2,"origin":[8,1,8],"faces":{"north":{"uv":[16,14,0,16],"texture":5},"east":{"uv":[2,14,0,16],"texture":5},"south":{"uv":[16,14,0,16],"texture":5},"west":{"uv":[16,14,14,16],"texture":5},"up":{"uv":[0,16,16,14],"rotation":180,"texture":5},"down":{"uv":[0,14,16,16],"texture":5}},"uuid":"b27e1c88-26b6-190b-f005-a259810655a1"},{"name":"side_frame","from":[0,14,0],"to":[16,16,2],"autouv":0,"color":6,"origin":[8,15,8],"faces":{"north":{"uv":[16,16,0,14],"texture":5},"east":{"uv":[2,16,0,14],"texture":5},"south":{"uv":[16,16,0,14],"texture":5},"west":{"uv":[16,16,14,14],"texture":5},"up":{"uv":[0,16,16,14],"texture":5},"down":{"uv":[0,14,16,16],"rotation":180,"texture":5}},"uuid":"e06d0f90-92de-1302-190a-fbd10c267e74"},{"name":"front","from":[1,1,2],"to":[3,3,14],"autouv":0,"color":1,"origin":[8,-8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":5},"east":{"uv":[2,14,14,16],"rotation":180,"texture":5},"south":{"uv":[0,0,0,0],"texture":5},"west":{"uv":[2,14,14,16],"texture":5},"up":{"uv":[2,0,14,2],"rotation":270,"texture":5},"down":{"uv":[2,14,14,16],"rotation":90,"texture":5}},"uuid":"8f39075d-3ce3-b4f6-6ef0-6bb131af4333"},{"name":"front","from":[13,1,2],"to":[15,3,14],"autouv":0,"color":1,"origin":[8,-8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":5},"east":{"uv":[14,14,2,16],"texture":5},"south":{"uv":[0,0,0,0],"texture":5},"west":{"uv":[14,14,2,16],"rotation":180,"texture":5},"up":{"uv":[2,2,14,0],"rotation":90,"texture":5},"down":{"uv":[2,16,14,14],"rotation":90,"texture":5}},"uuid":"4af7b711-49e2-96cc-804f-025c079ee52f"},{"name":"front","from":[13,13,2],"to":[15,15,14],"autouv":0,"color":1,"origin":[8,10,8],"faces":{"north":{"uv":[0,0,0,0],"texture":5},"east":{"uv":[14,16,2,14],"texture":5},"south":{"uv":[0,0,0,0],"texture":5},"west":{"uv":[14,2,2,0],"texture":5},"up":{"uv":[14,15,2,13],"rotation":90,"texture":5},"down":{"uv":[14,2,2,0],"rotation":90,"texture":5}},"uuid":"ecde023c-1297-0247-44c2-571ac0de9df1"},{"name":"front","from":[1,13,2],"to":[3,15,14],"autouv":0,"color":0,"origin":[8,10,8],"faces":{"north":{"uv":[0,0,0,0],"texture":5},"east":{"uv":[2,2,14,0],"texture":5},"south":{"uv":[0,0,0,0],"texture":5},"west":{"uv":[2,16,14,14],"texture":5},"up":{"uv":[14,13,2,15],"rotation":90,"texture":5},"down":{"uv":[14,0,2,2],"rotation":270,"texture":5}},"uuid":"b062f25c-f8f3-548b-2f46-fc6bb96083b3"},{"name":"Axis","from":[6,6,8],"to":[10,10,16],"autouv":0,"color":5,"origin":[8,1,16],"faces":{"north":{"uv":[0,0,0,0],"rotation":180,"texture":null},"east":{"uv":[6,8,10,16],"rotation":90,"texture":0},"south":{"uv":[6,6,10,10],"texture":1},"west":{"uv":[6,8,10,16],"rotation":270,"texture":0},"up":{"uv":[6,8,10,16],"texture":0},"down":{"uv":[6,8,10,16],"rotation":180,"texture":0}},"uuid":"e3b9c976-9f92-23c7-9744-b6d5f4bca3b8"},{"name":"rope","from":[6,2,6],"to":[10,8,10],"autouv":0,"color":6,"origin":[7.75,13,8],"faces":{"north":{"uv":[12,10,16,16],"texture":4},"east":{"uv":[12,10,16,16],"texture":4},"south":{"uv":[12,10,16,16],"texture":4},"west":{"uv":[12,10,16,16],"texture":4},"up":{"uv":[12,0,16,4],"rotation":90,"texture":4},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"ffe805a0-fba3-54be-ff6f-ea4d1c3bd848"},{"name":"top","from":[2,14,2],"to":[14,16,14],"autouv":0,"color":6,"origin":[8,10,8],"faces":{"north":{"uv":[0,0,0,0],"texture":5},"east":{"uv":[2,1,14,3],"rotation":180,"texture":5},"south":{"uv":[0,0,0,0],"texture":5},"west":{"uv":[2,13,14,15],"texture":5},"up":{"uv":[2,2,14,14],"rotation":90,"texture":5},"down":{"uv":[2,2,14,14],"rotation":90,"texture":5}},"uuid":"06ae5406-365f-7935-e0d8-7832b0a3aaf9"},{"name":"coil","from":[3.5,3.5,9],"to":[12.5,12.5,13],"autouv":0,"color":6,"rotation":[0,0,45],"origin":[8,8,-4],"faces":{"north":{"uv":[0,0,1,1],"texture":3},"east":{"uv":[0,3,4,12],"rotation":180,"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,3,4,12],"texture":3},"up":{"uv":[0,3,4,12],"rotation":90,"texture":3},"down":{"uv":[0,3,4,12],"rotation":270,"texture":3}},"uuid":"4a787d9b-a04d-eafd-9dc3-ae1b61869b56"},{"name":"side","from":[3,3,-1],"to":[13,13,1],"autouv":0,"color":3,"origin":[9,-7,7],"faces":{"north":{"uv":[11,0,6,5],"texture":6},"east":{"uv":[11,5,6,6],"rotation":90,"texture":6},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[11,5,6,6],"rotation":270,"texture":6},"up":{"uv":[11,5,6,6],"texture":6},"down":{"uv":[11,5,6,6],"rotation":180,"texture":6}},"uuid":"79d24535-547d-b692-62e2-bcb231a40b02"},{"name":"drain 1","from":[4.5,0,4.5],"to":[11.5,2,11.5],"autouv":0,"color":6,"origin":[6.75,14,6],"faces":{"north":{"uv":[0,0,7,2],"texture":4},"east":{"uv":[0,0,7,2],"texture":4},"south":{"uv":[0,0,7,2],"texture":4},"west":{"uv":[0,0,7,2],"texture":4},"up":{"uv":[0,0,0,0],"rotation":90,"texture":null},"down":{"uv":[0,2,7,9],"texture":4}},"uuid":"6bb4086f-6bf3-c374-3149-743ee69bfa01"},{"name":"drain 2","from":[4.5,2,4.5],"to":[11.5,3,11.5],"autouv":0,"color":6,"origin":[6.75,16,6],"faces":{"north":{"uv":[0,1,7,2],"texture":4},"east":{"uv":[0,1,7,2],"texture":4},"south":{"uv":[0,1,7,2],"texture":4},"west":{"uv":[0,1,7,2],"texture":4},"up":{"uv":[0,2,7,9],"rotation":90,"texture":4},"down":{"uv":[0,9,7,16],"texture":4}},"uuid":"fb8d9297-4cd4-2fe4-bca4-663c7a4bdb9d"},{"name":"drain 3","from":[5.5,2,5.5],"to":[10.5,5,10.5],"autouv":0,"color":6,"origin":[7.75,16,7],"faces":{"north":{"uv":[7,2,10,7],"rotation":270,"texture":4},"east":{"uv":[7,2,10,7],"rotation":270,"texture":4},"south":{"uv":[7,2,10,7],"rotation":270,"texture":4},"west":{"uv":[7,2,10,7],"rotation":270,"texture":4},"up":{"uv":[1,3,6,8],"rotation":90,"texture":4},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"f725e5f1-25eb-7f7a-da81-22f68d165e4b"}],"outliner":["c6880831-d683-f703-04a3-fd39148ebb5c","d93793b9-dd62-5818-2564-da40eed87601","4a787d9b-a04d-eafd-9dc3-ae1b61869b56","50235661-64a5-c971-c6e6-0975baa71d99","f16b6f4f-7c00-62c6-e29b-a9d790a92d84","79d24535-547d-b692-62e2-bcb231a40b02","8e0b92f4-fea1-c76e-eec7-fa197247034b","c6e4de46-37af-8304-d04a-e3a06202a6d1","22157158-613c-9abb-d3b9-2a2d576e1f98","82c9a138-92db-c34a-f8e7-45283db7413d","6965d55e-49aa-ab6d-4568-5de4c1501c57","639134c9-125c-c945-7ece-ee0b946543c7","b27e1c88-26b6-190b-f005-a259810655a1","e06d0f90-92de-1302-190a-fbd10c267e74","8f39075d-3ce3-b4f6-6ef0-6bb131af4333","4af7b711-49e2-96cc-804f-025c079ee52f","ecde023c-1297-0247-44c2-571ac0de9df1","b062f25c-f8f3-548b-2f46-fc6bb96083b3",{"name":"shaft","uuid":"93605e08-38e8-a8a7-4837-dba968998c73","export":true,"isOpen":false,"visibility":true,"autouv":0,"origin":[8,8,8],"children":["e3b9c976-9f92-23c7-9744-b6d5f4bca3b8"]},{"name":"rope_half_magnet","uuid":"4fe97f9a-28c6-d38d-a405-2cdf8eca9b88","export":true,"isOpen":true,"visibility":true,"autouv":0,"origin":[8,8,8],"children":["ffe805a0-fba3-54be-ff6f-ea4d1c3bd848","6bb4086f-6bf3-c374-3149-743ee69bfa01","fb8d9297-4cd4-2fe4-bca4-663c7a4bdb9d","f725e5f1-25eb-7f7a-da81-22f68d165e4b"]},"06ae5406-365f-7935-e0d8-7832b0a3aaf9"],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\axis.png","name":"axis.png","folder":"block","namespace":"create","id":"0","particle":false,"mode":"bitmap","saved":true,"uuid":"3faf49c5-68db-fed3-b4ca-030214e86e3e","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAo0lEQVQ4T6WTIQ4EIQxFO4IRIECAgLshMBwKO+fCggWDZVOSSVbMJjulkpTH/+X3gB/lvZ/WWhhjQO8drus6nlofD7ExhDCFEOsOGcAYA+cc5JzfK4gxTnxdKQW1VhrgPE/QWu8pQAulFEgpvRvit4XWGg2AFjjnQAJgDqSUawYkC3eQUAEJgEEyxiwLpBxsA/AXMERYW0FCCyTAvUxkwL/r/AGRGnYRGJZooQAAAABJRU5ErkJggg=="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\axis_top.png","name":"axis_top.png","folder":"block","namespace":"create","id":"1","particle":false,"mode":"bitmap","saved":true,"uuid":"8065816d-f585-f9e5-bf22-5659e0bd657b","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAaklEQVQ4T+2SMQ4AERBFv16h5W5atcohVGrXJBOhmL3A2rBa089L/ssTODxx+I8LwNyBc46VUui9g4iQc371NZXovWdjDFprqLUixrgHCCGwlBJjDJRSkFLaA1hrWWv9f8JqYDekj5BWJT4NbygR50R18wAAAABJRU5ErkJggg=="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\copper_gearbox.png","name":"copper_gearbox.png","folder":"block","namespace":"create","id":"4","particle":false,"mode":"bitmap","saved":true,"uuid":"374c5dbd-5856-5c1a-324e-d8464907f61e","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB/0lEQVQ4T42TQWsTQRTH/7PpbjRxd000TVYaIghWWSjSetBDLdSoICzaDyPevflJ/AA59eihkiiIRCSoBLu6dtNsm6VJU7JJN5GZYbKbhoBzmXnvzfzm/+bNI29flieIjeBsjGRKmnqoTUfcJ4I0Rt483Z7sWGtxBlufDLozvvA4YHbiWpLNnd8+9hpdDth+chOVXRurGYXfphA2B0MuTtiCWD8M2N5Gux8B7C8tFm96gzk1wkHTWEnzSyh8CthaN+D88dnhfj9E08ih5bpQFAWaroMQgkQigVuuh2xOxt2iCudvgF/HpyCvy48nz+8XpoDq0iV28GOthsN2m92WX16GUSiw9YtcBvdWdQawu0EEaHfO0Ng/wR6R8bVex4HrzqRywzBgmiY2pTEDHLUG+O4P5xV8TmmoVCoIw3AGQFOwLAsPcYoHd/JoNjscIKrg/vSZgv8FfPvh8xQEgFbB6Q9RJSpq1erCFMpXwBRQAHvEi4BPS1dx4DjYt+2ZR1zf2MCR52HHUOcBooxUQccb4f35ALIsI5PNQpIkVsbRaATT76GUT8O8nYkU0DJaz0oQH4lCxFAl/mniQ78MrBRjAJoCVfDug43NogY1m4SeTi38jTRA965d16KPVNJ4g/TG0e3Ujiu4GKOd2AvOQV5tPWId05vwtmUHCW/nuG+RpH+o0xp0yccJugAAAABJRU5ErkJggg=="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\hose_pulley_rope.png","name":"hose_pulley_rope.png","folder":"block","namespace":"create","id":"5","particle":false,"mode":"bitmap","saved":true,"uuid":"36d79924-56fb-920d-44b5-79ac193e75bc","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAX0lEQVQ4T2M00tP4z8fLwfDp8w+GX7//MLCxsjCQwmfU0VT5r6IgwfDh0xe4IaTwGUddwEB5GLS1tf2Xl5dn0NDQYLhx4wbDw4cPGUjhMy5duvQ/uZpBlo2mgz/DIQwAKD7WmGK5ZIUAAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\hose_pulley_magnet.png","name":"hose_pulley_magnet.png","folder":"block","namespace":"create","id":"6","particle":false,"mode":"bitmap","saved":true,"uuid":"e708a585-d298-4e3f-e1a3-6fe62e93581b","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABTElEQVQ4T2NkYGBgSLC2+r/g6DFGdBokhw6M9DT+8/FyMHz6/IPh1+8/DIwHK6L/f/z6jYGfm4uBWZid4e/bnwwwvn3HUkZ0A3Q0Vf6rKEgwfPj0BWwIXgNABl46/oJBVISdIXTWerBhGC7YlBv4/8nTnwwczP8Z2NkYGX7++s/w4y8jg4w0O4OQnCDYABDbbzLEAKwuuHv3HYOyshDcCzA+SAOILSLBATcAwwVHupP+P7zwgkHeQIKBn4OP4f6thwyf3/0E80HhATMMFh54XQALPHQXgFwHM4CkMID5GzkmSIoFbNFI/XQAisYLNz8yLD95CO7SSHM7BgN1fnjII3sBqwsypq/ESLIzMsPhAYcs2dbW9l9eXp5BQ0OD4caNGwyMoGhMbVmEYcDsmjgGm9J5GEl56dKl/2GaHz58CEnKpLgAIxaoEgaU5EYA9eFAmHAG4o8AAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\oxidized\\copper_block_0.png","name":"copper_block_0.png","folder":"block/oxidized","namespace":"create","id":"8","particle":true,"mode":"bitmap","saved":true,"uuid":"7dd1a067-4a71-cdfe-245e-baad08910bcc","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB9ElEQVQ4T22TXUsbURCG31VIaswmTRS/SKqInxRikF4UwQ9sqlAQWuhfKb3vXf+GNyJ4pwiCiFD0SsEWNK0aNDGtaRqzJtss2dQYmTk9m93EuTl75uw8552ZM8rnt7EabGYa93B7WiwP7cnsPnlIZ8qnhfnau6WIncHfhXLR4avemLxv7XDzmk9p2IsXBWD+9QDWt5IYDbjEbS6FV7MixMm9JH77bfK/8WypDkgeZfg88afcpEY6KI1Qu7iE4BZgdrIX6SuNgyd6vA5Au8fJO8wYGA+rSP80cXHzF8rH2Kvamxc9DsDZrYHpaBB6VqhRu57gy1Ee72PPsLxxieionwHJolkHZPMG4pcFTA16OaB6+w9GpcrfQ9Fe6Gkdv841bH8vMCCXKeOHVmlWQACPq9UK7u704vwkZ/kohZdj3Ugk8gIgu3B9prECqgHlTZC+oQC+HuR4T0oItrqTYsDxqSZSkADqQrpUwZjPwwFkJQOOYPLZAVzExwBUxOGnAiRvXttOcREfBcg2koK5SJClcvVDqqOHVMjN3QyejwQ4BauNS4v9kA+JINLUFvFo7OZvA0JhG4BSIAUr+0lMh31Qg274G19PA4T+jXT66gr6fWJA9Pv67ZyCTUHjGU2ibt5B+TA7wxOj18TYcqAixtnua8rlv+MBPoIXdEHcqvMAAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Forge 15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\fluid_pipe.png","name":"fluid_pipe.png","folder":"block","namespace":"create","id":"9","particle":false,"mode":"bitmap","saved":true,"uuid":"e238433b-c06e-b068-b8f7-ba0f778775f1","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAE+ElEQVRYR5VX32scVRT+NunubHa7s9lJtj/MtrEGk0o1KkitaCu0WjAPIkKRUuiDoNT+A30pPkgffBdUFAQLoRSxfRAUFPpgHqxvsiBitPRHNk3MZnfNrpNkdpOMfHd6pncn093Z+3KzM3fu+c4533fOSeyjk8ddeysGrnSfq3ZZ8lx+b7VaeK6wE4m0oR4Z3oZsOqX2peqq2pu2g5U1IDvw8C7+Pn/te8+QtmIEUMgaMBKxtosdx7uIiwYbtXX8sWTj8MSQMmztz6l3mxXvDFf/kIHqvRrk28kj4yjenIXsZ6YfAWAsn8RtewM3654HiUTc86TZUvsRM4UD6R34rfSfArD3yRxu/HQHV379uc2b0y8ew/HXH8fCXzUFPmMZKM07KIwYaFQddARw+V4V6fQAjHgcZsZEvVFXlzutFmx7DWf3W5iZq2Pq2bwK+bnPrgajqX5/efGsH4XysoPJl/ag+Msi8sMGTn1xPTwFjMCVhToy6RSq/9bx/NNPobbSwJ25EqxBEw17FVODJorL0QEQDL0XAIzCm5+EALjw2gl3creBbytryvvRwggcp4lBM4M1x8Hd0rwCcHqv6UeA+X/v0uXQCHz+wTtYsb1ULi+uY2zMwq1bVQzvSYYDOHfsFffEwTy+/ruMYSsHI2Egl82oCDhNB47j+ADIgaOTQ4qA3QAwTTQsALi/+vH09hQQwOHdGVyrNNpSsFhexsI/ZT8F7x/KY6ZYUSQ8+Mworn9X7EjCXVZEAEzBRC6Bq4s1xOM7lAKYCiEgldBqbfgkZLQowwPjo6jOl335ZZMmVtbrPgEJ4PfZms+BQ+O58AgQwAtPmPhzycZMxWM+gXDRMNfLAymQqFTB0X2mqgsEQb3rxYiFSGoHv4skQ4lAKKO0h/dbmyhVV3sCEKkQkQPdjOvvC1YKVp8XIZZap+l9vr4ZQ7LfVXt1a0OdiVSKP317yuWHmVyyDQdLLy8L1u/pM1NulF4QVvXCHFW9oC/leSSe0QOurdUNfPjjjW3S6SVi3c7Geo1Atwt7fa8AsE6TzdJWeQkZzVoe1kJ7NdLpfOyrU2+4bMWUjN5iowKQFDJ9TN1j8X7fHjnERY7JEpJKin0AJBaLhzWSx+3Zu0rjUSIQNk+IMdYEUYlOcnlOaSsA/IDNgingUMF+zkUlvPvNDx1JSAAsUoygkuaD6UgakjzjvRxe5DnnA05JoRxg+GmcqxuAIIdoKGyxVEvpJgiJsALAglHYl1Pey4jFThYFACPI8DJ9QeM0ysUewXv194wyndwGgB/wcFQShgHQjYlDNC4NS+73AVCGQkC9o0UhoZ4CURGdkOGUf4vEBQRTIQ4qEjKEeovVc9StDgQBCNFkMqYKgikiOE5LlKRPQk66QhRRgsz3uo51PSuGD3hju3BAQi4eyvlgLZDnbQAk/4o4D5hKEDSga1r/HyIYYrmjNFdTMpNCpH8jd/kR0FWgE0WACFpqnMBk13XPv4XljIIOgPezTujf+XXg0lsn3Yld6TYZ6fIJapqXs1qKtHTDQZaTxFzBXtNWB3QSSiXUjYqkJLdiXD8T1LsY4JjH3iAk1KPnk5AR4L9deimVg+IdWauHWy/XusREftwlxEJUPQWiEFWKCYAoSRIuIZxMPeKpPmzKM5FY2Bm+Y7NhlwxOXG0k7NRO9TBLaw3KSp8F5Z0+UQ3v9Ea9R8nwf4KEhTJhQYO9AAAAAElFTkSuQmCC"}],"display":{"thirdperson_righthand":{"rotation":[75,45,0],"translation":[0,2.5,0],"scale":[0.375,0.375,0.375]},"thirdperson_lefthand":{"rotation":[75,45,0],"translation":[0,2.5,0],"scale":[0.375,0.375,0.375]},"firstperson_righthand":{"rotation":[0,45,0],"scale":[0.4,0.4,0.4]},"firstperson_lefthand":{"rotation":[0,225,0],"scale":[0.4,0.4,0.4]},"ground":{"translation":[0,3,0],"scale":[0.25,0.25,0.25]},"gui":{"rotation":[30,225,0],"scale":[0.625,0.625,0.625]},"fixed":{"scale":[0.5,0.5,0.5]}}} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley_rope.bbmodel b/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley_rope.bbmodel new file mode 100644 index 000000000..38a0b1b92 --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/copper_pulley_rope.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"rope","parent":"block/block","ambientocclusion":true,"front_gui_light":false,"resolution":{"width":16,"height":16},"elements":[{"name":"rope","from":[6,0,6],"to":[10,16,10],"autouv":0,"color":6,"locked":false,"origin":[7.75,0,8],"faces":{"north":{"uv":[0,0,4,16],"texture":0},"east":{"uv":[0,0,4,16],"texture":0},"south":{"uv":[0,0,4,16],"texture":0},"west":{"uv":[0,0,4,16],"texture":0},"up":{"uv":[0,0,4,4],"rotation":90,"texture":0},"down":{"uv":[0,0,4,4],"texture":0}},"uuid":"3f245b42-dde8-d34f-9f25-ae6eb2f322ae"}],"outliner":["3f245b42-dde8-d34f-9f25-ae6eb2f322ae"],"textures":[{"path":"C:\\Users\\krypp\\Documents\\Pixel Art\\Create Mod\\Pulley Pump\\copper_pulley_rope.png","name":"copper_pulley_rope.png","folder":"Pulley Pump","namespace":"create","id":"5","particle":true,"mode":"bitmap","saved":true,"uuid":"8ffc2f62-b5b6-1af9-ecc1-e22a9ae075aa","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAX0lEQVQ4T2M00tP4z8fLwfDp8w+GX7//MLCxsjCQwmfU0VT5r6IgwfDh0xe4IaTwGUddwEB5GLS1tf2Xl5dn0NDQYLhx4wbDw4cPGUjhMy5duvQ/uZpBlo2mgz/DIQwAKD7WmGK5ZIUAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/item.json b/src/main/resources/assets/create/models/block/hose_pulley/item.json new file mode 100644 index 000000000..b8c30a0cd --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/item.json @@ -0,0 +1,381 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/axis", + "1": "create:block/axis_top", + "4": "create:block/copper_gearbox", + "5": "create:block/hose_pulley_rope", + "6": "create:block/hose_pulley_magnet", + "8": "create:block/oxidized/copper_block_0", + "9": "create:block/fluid_pipe", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "coil", + "from": [4, 4, 2], + "to": [12, 12, 14], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, -10]}, + "faces": { + "east": {"uv": [2, 1, 14, 9], "texture": "#5"}, + "west": {"uv": [2, 1, 14, 9], "rotation": 180, "texture": "#5"}, + "up": {"uv": [2, 1, 14, 9], "rotation": 270, "texture": "#5"}, + "down": {"uv": [2, 1, 14, 9], "rotation": 90, "texture": "#5"} + } + }, + { + "name": "coil", + "from": [3.5, 3.5, 3], + "to": [12.5, 12.5, 7], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, -10]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "east": {"uv": [0, 3, 4, 12], "rotation": 180, "texture": "#5"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "west": {"uv": [0, 3, 4, 12], "texture": "#5"}, + "up": {"uv": [0, 3, 4, 12], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 3, 4, 12], "rotation": 270, "texture": "#5"} + } + }, + { + "name": "coil", + "from": [3.5, 3.5, 9], + "to": [12.5, 12.5, 13], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, -4]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "east": {"uv": [0, 3, 4, 12], "rotation": 180, "texture": "#5"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "west": {"uv": [0, 3, 4, 12], "texture": "#5"}, + "up": {"uv": [0, 3, 4, 12], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 3, 4, 12], "rotation": 270, "texture": "#5"} + } + }, + { + "name": "side", + "from": [2, 2, 14], + "to": [14, 14, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "south": {"uv": [2, 2, 14, 14], "texture": "#4"}, + "down": {"uv": [2, 11, 14, 12], "texture": "#4"} + } + }, + { + "name": "side", + "from": [2, 2, 1], + "to": [14, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [14, 2, 2, 14], "texture": "#8"}, + "south": {"uv": [14, 2, 2, 14], "texture": "#8"}, + "down": {"uv": [2, 12, 14, 11], "texture": "#4"} + } + }, + { + "name": "side", + "from": [3, 3, -1], + "to": [13, 13, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [9, -7, 7]}, + "faces": { + "north": {"uv": [11, 0, 6, 5], "texture": "#9"}, + "east": {"uv": [11, 5, 6, 6], "rotation": 90, "texture": "#9"}, + "west": {"uv": [11, 5, 6, 6], "rotation": 270, "texture": "#9"}, + "up": {"uv": [11, 5, 6, 6], "texture": "#9"}, + "down": {"uv": [11, 5, 6, 6], "rotation": 180, "texture": "#9"} + } + }, + { + "name": "side_frame", + "from": [0, 2, 14], + "to": [2, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "east": {"uv": [0, 2, 2, 14], "texture": "#8"}, + "south": {"uv": [14, 2, 16, 14], "rotation": 180, "texture": "#8"}, + "west": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "up": {"uv": [0, 14, 2, 16], "texture": "#8"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 2, 0], + "to": [2, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [16, 2, 14, 14], "rotation": 180, "texture": "#8"}, + "east": {"uv": [2, 2, 0, 14], "texture": "#8"}, + "south": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "west": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "up": {"uv": [0, 16, 2, 14], "texture": "#8"}, + "down": {"uv": [0, 2, 2, 0], "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [14, 2, 14], + "to": [16, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [2, 2, 0, 14], "rotation": 180, "texture": "#8"}, + "east": {"uv": [16, 2, 14, 14], "texture": "#8"}, + "south": {"uv": [16, 2, 14, 14], "rotation": 180, "texture": "#8"}, + "west": {"uv": [2, 2, 0, 14], "texture": "#8"}, + "up": {"uv": [2, 14, 0, 16], "texture": "#8"}, + "down": {"uv": [2, 0, 0, 2], "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [14, 2, 0], + "to": [16, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [14, 2, 16, 14], "rotation": 180, "texture": "#8"}, + "east": {"uv": [14, 2, 16, 14], "texture": "#8"}, + "south": {"uv": [0, 2, 2, 14], "rotation": 180, "texture": "#8"}, + "west": {"uv": [0, 2, 2, 14], "texture": "#8"}, + "up": {"uv": [2, 16, 0, 14], "texture": "#8"}, + "down": {"uv": [2, 2, 0, 0], "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 0, 14], + "to": [16, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [0, 14, 16, 16], "texture": "#8"}, + "east": {"uv": [0, 14, 2, 16], "texture": "#8"}, + "south": {"uv": [0, 14, 16, 16], "texture": "#8"}, + "west": {"uv": [14, 14, 16, 16], "texture": "#8"}, + "up": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 14, 14], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 16, 16, 14], "texture": "#8"}, + "east": {"uv": [0, 16, 2, 14], "texture": "#8"}, + "south": {"uv": [0, 16, 16, 14], "texture": "#8"}, + "west": {"uv": [14, 16, 16, 14], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "rotation": 180, "texture": "#8"}, + "down": {"uv": [0, 16, 16, 14], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 0, 0], + "to": [16, 2, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 8]}, + "faces": { + "north": {"uv": [16, 14, 0, 16], "texture": "#8"}, + "east": {"uv": [2, 14, 0, 16], "texture": "#8"}, + "south": {"uv": [16, 14, 0, 16], "texture": "#8"}, + "west": {"uv": [16, 14, 14, 16], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "rotation": 180, "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "texture": "#8"} + } + }, + { + "name": "side_frame", + "from": [0, 14, 0], + "to": [16, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [16, 16, 0, 14], "texture": "#8"}, + "east": {"uv": [2, 16, 0, 14], "texture": "#8"}, + "south": {"uv": [16, 16, 0, 14], "texture": "#8"}, + "west": {"uv": [16, 16, 14, 14], "texture": "#8"}, + "up": {"uv": [0, 16, 16, 14], "texture": "#8"}, + "down": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#8"} + } + }, + { + "name": "front", + "from": [1, 1, 2], + "to": [3, 3, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "east": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#8"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "west": {"uv": [2, 14, 14, 16], "texture": "#8"}, + "up": {"uv": [2, 0, 14, 2], "rotation": 270, "texture": "#8"}, + "down": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "front", + "from": [13, 1, 2], + "to": [15, 3, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "east": {"uv": [14, 14, 2, 16], "texture": "#8"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "west": {"uv": [14, 14, 2, 16], "rotation": 180, "texture": "#8"}, + "up": {"uv": [2, 2, 14, 0], "rotation": 90, "texture": "#8"}, + "down": {"uv": [2, 16, 14, 14], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "front", + "from": [13, 13, 2], + "to": [15, 15, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "east": {"uv": [14, 16, 2, 14], "texture": "#8"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "west": {"uv": [14, 2, 2, 0], "texture": "#8"}, + "up": {"uv": [14, 15, 2, 13], "rotation": 90, "texture": "#8"}, + "down": {"uv": [14, 2, 2, 0], "rotation": 90, "texture": "#8"} + } + }, + { + "name": "front", + "from": [1, 13, 2], + "to": [3, 15, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "east": {"uv": [2, 2, 14, 0], "texture": "#8"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "west": {"uv": [2, 16, 14, 14], "texture": "#8"}, + "up": {"uv": [14, 13, 2, 15], "rotation": 90, "texture": "#8"}, + "down": {"uv": [14, 0, 2, 2], "rotation": 270, "texture": "#8"} + } + }, + { + "name": "Axis", + "from": [6, 6, 8], + "to": [10, 10, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 16]}, + "faces": { + "east": {"uv": [6, 8, 10, 16], "rotation": 90, "texture": "#0"}, + "south": {"uv": [6, 6, 10, 10], "texture": "#1"}, + "west": {"uv": [6, 8, 10, 16], "rotation": 270, "texture": "#0"}, + "up": {"uv": [6, 8, 10, 16], "texture": "#0"}, + "down": {"uv": [6, 8, 10, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "rope", + "from": [6, 2, 6], + "to": [10, 8, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 13, 8]}, + "faces": { + "north": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "east": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "south": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "west": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "up": {"uv": [12, 0, 16, 4], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "drain 1", + "from": [4.5, 0, 4.5], + "to": [11.5, 2, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 14, 6]}, + "faces": { + "north": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "down": {"uv": [0, 2, 7, 9], "texture": "#6"} + } + }, + { + "name": "drain 2", + "from": [4.5, 2, 4.5], + "to": [11.5, 3, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 16, 6]}, + "faces": { + "north": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "up": {"uv": [0, 2, 7, 9], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 9, 7, 16], "texture": "#6"} + } + }, + { + "name": "drain 3", + "from": [5.5, 2, 5.5], + "to": [10.5, 5, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 16, 7]}, + "faces": { + "north": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "east": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "south": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "west": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "up": {"uv": [1, 3, 6, 8], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "top", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "east": {"uv": [2, 1, 14, 3], "rotation": 180, "texture": "#8"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#8"}, + "west": {"uv": [2, 13, 14, 15], "texture": "#8"}, + "up": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#8"}, + "down": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#8"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + { + "name": "shaft", + "origin": [8, 8, 8], + "children": [18] + }, + { + "name": "rope_half_magnet", + "origin": [8, 8, 8], + "children": [19, 20, 21, 22] + }, 23] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/pulley_magnet.json b/src/main/resources/assets/create/models/block/hose_pulley/pulley_magnet.json new file mode 100644 index 000000000..65a249d9c --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/pulley_magnet.json @@ -0,0 +1,101 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "6": "create:block/hose_pulley_magnet", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "rope", + "from": [6, 2, 6], + "to": [10, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 13, 8]}, + "faces": { + "north": {"uv": [12, 2, 16, 16], "texture": "#6"}, + "east": {"uv": [12, 2, 16, 16], "texture": "#6"}, + "south": {"uv": [12, 2, 16, 16], "texture": "#6"}, + "west": {"uv": [12, 2, 16, 16], "texture": "#6"}, + "up": {"uv": [12, 0, 16, 4], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "drain 1", + "from": [4.5, 0, 4.5], + "to": [11.5, 2, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 14, 6]}, + "faces": { + "north": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "down": {"uv": [0, 2, 7, 9], "texture": "#6"} + } + }, + { + "name": "drain 2", + "from": [4.5, 2, 4.5], + "to": [11.5, 3, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 16, 6]}, + "faces": { + "north": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "up": {"uv": [0, 2, 7, 9], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 9, 7, 16], "texture": "#6"} + } + }, + { + "name": "drain 3", + "from": [5.5, 2, 5.5], + "to": [10.5, 5, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 16, 7]}, + "faces": { + "north": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "east": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "south": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "west": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "up": {"uv": [1, 3, 6, 8], "rotation": 90, "texture": "#6"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "rope_half_magnet", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/rope.json b/src/main/resources/assets/create/models/block/hose_pulley/rope.json new file mode 100644 index 000000000..2995519fd --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/rope.json @@ -0,0 +1,7 @@ +{ + "parent": "create:block/rope_pulley/rope", + "textures": { + "5": "create:block/hose_pulley_rope", + "particle": "create:block/hose_pulley_rope" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/rope_coil.json b/src/main/resources/assets/create/models/block/hose_pulley/rope_coil.json new file mode 100644 index 000000000..f4d01993a --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/rope_coil.json @@ -0,0 +1,49 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "5": "create:block/hose_pulley_rope" + }, + "elements": [ + { + "name": "coil", + "from": [4, 4, 2], + "to": [12, 12, 14], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, -10]}, + "faces": { + "east": {"uv": [2, 1, 14, 9], "texture": "#5"}, + "west": {"uv": [2, 1, 14, 9], "rotation": 180, "texture": "#5"}, + "up": {"uv": [2, 1, 14, 9], "rotation": 270, "texture": "#5"}, + "down": {"uv": [2, 1, 14, 9], "rotation": 90, "texture": "#5"} + } + }, + { + "name": "coil", + "from": [3.5, 3.5, 3], + "to": [12.5, 12.5, 7], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, -10]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "east": {"uv": [0, 3, 4, 12], "rotation": 180, "texture": "#5"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "west": {"uv": [0, 3, 4, 12], "texture": "#5"}, + "up": {"uv": [0, 3, 4, 12], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 3, 4, 12], "rotation": 270, "texture": "#5"} + } + }, + { + "name": "coil", + "from": [3.5, 3.5, 9], + "to": [12.5, 12.5, 13], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, -4]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "east": {"uv": [0, 3, 4, 12], "rotation": 180, "texture": "#5"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#5"}, + "west": {"uv": [0, 3, 4, 12], "texture": "#5"}, + "up": {"uv": [0, 3, 4, 12], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 3, 4, 12], "rotation": 270, "texture": "#5"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/rope_half.json b/src/main/resources/assets/create/models/block/hose_pulley/rope_half.json new file mode 100644 index 000000000..facd4b8b8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/rope_half.json @@ -0,0 +1,7 @@ +{ + "parent": "create:block/rope_pulley/rope_half", + "textures": { + "5": "create:block/hose_pulley_rope", + "particle": "create:block/hose_pulley_rope" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/hose_pulley/rope_half_magnet.json b/src/main/resources/assets/create/models/block/hose_pulley/rope_half_magnet.json new file mode 100644 index 000000000..665d0ab7e --- /dev/null +++ b/src/main/resources/assets/create/models/block/hose_pulley/rope_half_magnet.json @@ -0,0 +1,101 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "6": "create:block/hose_pulley_magnet", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "rope", + "from": [6, 2, 6], + "to": [10, 8, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 13, 8]}, + "faces": { + "north": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "east": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "south": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "west": {"uv": [12, 10, 16, 16], "texture": "#6"}, + "up": {"uv": [12, 0, 16, 4], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "drain 1", + "from": [4.5, 0, 4.5], + "to": [11.5, 2, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 14, 6]}, + "faces": { + "north": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 0, 7, 2], "texture": "#6"}, + "down": {"uv": [0, 2, 7, 9], "texture": "#6"} + } + }, + { + "name": "drain 2", + "from": [4.5, 2, 4.5], + "to": [11.5, 3, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [6.75, 16, 6]}, + "faces": { + "north": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "east": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "south": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "west": {"uv": [0, 1, 7, 2], "texture": "#6"}, + "up": {"uv": [0, 2, 7, 9], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 9, 7, 16], "texture": "#6"} + } + }, + { + "name": "drain 3", + "from": [5.5, 2, 5.5], + "to": [10.5, 5, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [7.75, 16, 7]}, + "faces": { + "north": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "east": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "south": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "west": {"uv": [7, 2, 10, 7], "rotation": 270, "texture": "#6"}, + "up": {"uv": [1, 3, 6, 8], "rotation": 90, "texture": "#6"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "rope_half_magnet", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/item_drain.json b/src/main/resources/assets/create/models/block/item_drain.json new file mode 100644 index 000000000..60751792d --- /dev/null +++ b/src/main/resources/assets/create/models/block/item_drain.json @@ -0,0 +1,79 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/item_drain_side", + "1": "create:block/item_drain_top", + "2": "create:block/copper_casing", + "3": "create:block/pump", + "particle": "create:block/item_drain_side" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 16, 16], "texture": "#0"}, + "east": {"uv": [0, 14, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 14, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 14, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + } + }, + { + "from": [0, 2, 0], + "to": [16, 13, 2], + "faces": { + "north": {"uv": [0, 3, 16, 14], "texture": "#0"}, + "east": {"uv": [14, 3, 16, 14], "texture": "#0"}, + "south": {"uv": [0, 3, 16, 14], "texture": "#0"}, + "west": {"uv": [0, 3, 2, 14], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 2], "texture": "#1"} + } + }, + { + "from": [0, 2, 14], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 3, 16, 14], "texture": "#0"}, + "east": {"uv": [0, 3, 2, 14], "texture": "#0"}, + "south": {"uv": [0, 3, 16, 14], "texture": "#0"}, + "west": {"uv": [14, 3, 16, 14], "texture": "#0"}, + "up": {"uv": [0, 14, 16, 16], "texture": "#1"} + } + }, + { + "from": [14, 2, 2], + "to": [16, 13, 14], + "faces": { + "east": {"uv": [2, 3, 14, 14], "texture": "#0"}, + "west": {"uv": [2, 3, 14, 14], "texture": "#0"}, + "up": {"uv": [14, 2, 16, 14], "texture": "#1"} + } + }, + { + "from": [0, 2, 2], + "to": [2, 13, 14], + "faces": { + "east": {"uv": [2, 3, 14, 14], "texture": "#0"}, + "west": {"uv": [2, 3, 14, 14], "texture": "#0"}, + "up": {"uv": [0, 2, 2, 14], "texture": "#1"} + } + }, + { + "from": [2, 12, 2], + "to": [14, 13, 14], + "faces": { + "up": {"uv": [2, 2, 14, 14], "texture": "#1"} + } + }, + { + "from": [2, 4, 2], + "to": [14, 5, 14], + "faces": { + "up": {"uv": [0, 0, 12, 12], "texture": "#3"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/rope_pulley/block.json b/src/main/resources/assets/create/models/block/rope_pulley/block.json index 11317a92c..a7d302af7 100644 --- a/src/main/resources/assets/create/models/block/rope_pulley/block.json +++ b/src/main/resources/assets/create/models/block/rope_pulley/block.json @@ -4,7 +4,7 @@ "textures": { "3": "create:block/gearbox_top", "4": "create:block/gearbox", - "5": "create:block/andesite_casing_short", + "6": "create:block/andesite_casing", "particle": "create:block/pulley_rope" }, "elements": [ @@ -194,14 +194,14 @@ }, { "name": "top", - "from": [3, 14, 2], - "to": [13, 16, 14], + "from": [2, 14, 2], + "to": [14, 16, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, "faces": { - "east": {"uv": [2, 14, 14, 16], "texture": "#3"}, - "west": {"uv": [2, 14, 14, 16], "texture": "#3"}, - "up": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#5"}, - "down": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#5"} + "east": {"uv": [2, 1, 14, 3], "rotation": 180, "texture": "#6"}, + "west": {"uv": [2, 13, 14, 15], "texture": "#6"}, + "up": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#6"}, + "down": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#6"} } } ] diff --git a/src/main/resources/assets/create/models/block/rope_pulley/item.json b/src/main/resources/assets/create/models/block/rope_pulley/item.json index 0127c7ca6..d0d9994c9 100644 --- a/src/main/resources/assets/create/models/block/rope_pulley/item.json +++ b/src/main/resources/assets/create/models/block/rope_pulley/item.json @@ -8,8 +8,8 @@ "4": "create:block/gearbox", "5": "create:block/pulley_rope", "6": "create:block/pulley_magnet", - "7": "create:block/andesite_casing_short", - "particle": "create:block/pulley_magnet" + "8": "create:block/andesite_casing", + "particle": "create:block/andesite_casing" }, "elements": [ { @@ -279,16 +279,14 @@ }, { "name": "top", - "from": [3, 14, 2], - "to": [13, 16, 14], + "from": [2, 14, 2], + "to": [14, 16, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#7"}, - "east": {"uv": [2, 14, 14, 16], "texture": "#7"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#7"}, - "west": {"uv": [2, 14, 14, 16], "texture": "#7"}, - "up": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#7"}, - "down": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#7"} + "east": {"uv": [2, 1, 14, 3], "rotation": 180, "texture": "#8"}, + "west": {"uv": [2, 13, 14, 15], "texture": "#8"}, + "up": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#8"}, + "down": {"uv": [2, 2, 14, 14], "rotation": 90, "texture": "#8"} } } ], diff --git a/src/main/resources/assets/create/models/block/schematic_table.json b/src/main/resources/assets/create/models/block/schematic_table.json index 70f25af30..e41f18686 100644 --- a/src/main/resources/assets/create/models/block/schematic_table.json +++ b/src/main/resources/assets/create/models/block/schematic_table.json @@ -1,77 +1,60 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", + "credit": "Made with Blockbench", "parent": "block/block", - "textures": { - "0": "create:block/schematic_table_side", - "1": "create:block/schematic_table_top", + "textures": { + "0": "create:block/schematic_table_side", + "1": "create:block/schematic_table_top", "particle": "create:block/schematic_table_side" - }, - "elements": [ - { - "name": "base", - "from": [ 5.0, 0.0, 5.0 ], - "to": [ 11.0, 12.0, 11.0 ], - "faces": { - "north": { "texture": "#0", "uv": [ 5.0, 4.0, 11.0, 16.0 ] }, - "east": { "texture": "#0", "uv": [ 5.0, 4.0, 11.0, 16.0 ] }, - "south": { "texture": "#0", "uv": [ 5.0, 4.0, 11.0, 16.0 ] }, - "west": { "texture": "#0", "uv": [ 5.0, 4.0, 11.0, 16.0 ] }, - "up": { "texture": "#0", "uv": [ 0.0, 0.0, 6.0, 6.0 ] }, - "down": { "texture": "#0", "uv": [ 5.0, 6.0, 11.0, 12.0 ] } - } - }, - { - "name": "Top", - "from": [ 0.0, 12.0, -2.0 ], - "to": [ 16.0, 15.0, 14.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "x", "angle": 22.5 }, - "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "west": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } - } - }, - { - "name": "Cube", - "from": [ 4.0, 11.0, 4.0 ], - "to": [ 12.0, 14.0, 11.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 4.0, 1.0, 12.0, 4.0 ] }, - "east": { "texture": "#1", "uv": [ 4.0, 1.0, 11.0, 4.0 ] }, - "south": { "texture": "#1", "uv": [ 4.0, 1.0, 12.0, 4.0 ] }, - "west": { "texture": "#1", "uv": [ 4.0, 1.0, 11.0, 4.0 ] }, - "down": { "texture": "#1", "uv": [ 4.0, 4.0, 12.0, 11.0 ] } - } - }, - { - "name": "Cube", - "from": [ 1.0, 12.0, 15.0 ], - "to": [ 15.0, 13.0, 16.0 ], - "rotation": { "origin": [ 8.0, 14.0, 16.0 ], "axis": "x", "angle": 22.5 }, - "faces": { - "north": { "texture": "#0", "uv": [ 1.0, 12.0, 15.0, 13.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 14.0, 7.0, 15.0 ] }, - "south": { "texture": "#0", "uv": [ 1.0, 14.0, 15.0, 15.0 ] }, - "west": { "texture": "#0", "uv": [ 7.0, 14.0, 8.0, 15.0 ] }, - "up": { "texture": "#0", "uv": [ 1.0, 13.0, 15.0, 14.0 ] }, - "down": { "texture": "#0", "uv": [ 1.0, 14.0, 15.0, 15.0 ] } - } - }, - { - "name": "Cube", - "from": [ 4.0, 0.0, 4.0 ], - "to": [ 12.0, 2.0, 12.0 ], - "faces": { - "north": { "texture": "#0", "uv": [ 5.0, 14.0, 13.0, 16.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 14.0, 14.0, 16.0 ] }, - "south": { "texture": "#0", "uv": [ 1.0, 14.0, 9.0, 16.0 ] }, - "west": { "texture": "#0", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, - "up": { "texture": "#0", "uv": [ 0.0, 5.0, 8.0, 13.0 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 5.0, 12.0, 13.0 ] } - } - } - ] + }, + "elements": [ + { + "name": "base", + "from": [5, 0, 5], + "to": [11, 12, 11], + "faces": { + "north": {"uv": [0, 3, 6, 15], "texture": "#0"}, + "east": {"uv": [0, 3, 6, 15], "texture": "#0"}, + "south": {"uv": [0, 3, 6, 15], "texture": "#0"}, + "west": {"uv": [0, 3, 6, 15], "texture": "#0"} + } + }, + { + "name": "Top", + "from": [0, 11, 2], + "to": [16, 14, 14], + "faces": { + "north": {"uv": [0, 0, 16, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 12, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 16, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 12, 3], "texture": "#0"}, + "up": {"uv": [0, 2, 16, 14], "texture": "#1"}, + "down": {"uv": [0, 2, 16, 14], "texture": "#1"} + } + }, + { + "name": "Cube", + "from": [4, 9, 4], + "to": [12, 11, 12], + "faces": { + "north": {"uv": [4, 2, 12, 4], "texture": "#1"}, + "east": {"uv": [4, 2, 12, 4], "texture": "#1"}, + "south": {"uv": [4, 2, 12, 4], "texture": "#1"}, + "west": {"uv": [4, 2, 12, 4], "texture": "#1"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#1"} + } + }, + { + "name": "Cube", + "from": [4, 0, 4], + "to": [12, 2, 12], + "faces": { + "north": {"uv": [5, 14, 13, 16], "texture": "#0"}, + "east": {"uv": [6, 14, 14, 16], "texture": "#0"}, + "south": {"uv": [1, 14, 9, 16], "texture": "#0"}, + "west": {"uv": [4, 14, 12, 16], "texture": "#0"}, + "up": {"uv": [6, 5, 14, 13], "texture": "#0"}, + "down": {"uv": [6, 5, 14, 13], "texture": "#0"} + } + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/copper_gearbox.png b/src/main/resources/assets/create/textures/block/copper_gearbox.png new file mode 100644 index 000000000..458265dd3 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/copper_gearbox.png differ diff --git a/src/main/resources/assets/create/textures/block/crate_creative.png b/src/main/resources/assets/create/textures/block/crate_creative.png index 18803da26..45bf70fcb 100644 Binary files a/src/main/resources/assets/create/textures/block/crate_creative.png and b/src/main/resources/assets/create/textures/block/crate_creative.png differ diff --git a/src/main/resources/assets/create/textures/block/crate_creative_side.png b/src/main/resources/assets/create/textures/block/crate_creative_side.png index ba4103477..00018a60d 100644 Binary files a/src/main/resources/assets/create/textures/block/crate_creative_side.png and b/src/main/resources/assets/create/textures/block/crate_creative_side.png differ diff --git a/src/main/resources/assets/create/textures/block/creative_casing.png b/src/main/resources/assets/create/textures/block/creative_casing.png index 7ce4d7a74..30257a61c 100644 Binary files a/src/main/resources/assets/create/textures/block/creative_casing.png and b/src/main/resources/assets/create/textures/block/creative_casing.png differ diff --git a/src/main/resources/assets/create/textures/block/creative_casing_connected.png b/src/main/resources/assets/create/textures/block/creative_casing_connected.png new file mode 100644 index 000000000..6c9e526b5 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/creative_casing_connected.png differ diff --git a/src/main/resources/assets/create/textures/block/creative_fluid_tank.png b/src/main/resources/assets/create/textures/block/creative_fluid_tank.png new file mode 100644 index 000000000..10e0a6f2e Binary files /dev/null and b/src/main/resources/assets/create/textures/block/creative_fluid_tank.png differ diff --git a/src/main/resources/assets/create/textures/block/creative_fluid_tank_connected.png b/src/main/resources/assets/create/textures/block/creative_fluid_tank_connected.png new file mode 100644 index 000000000..1b6877624 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/creative_fluid_tank_connected.png differ diff --git a/src/main/resources/assets/create/textures/block/creative_fluid_tank_window.png b/src/main/resources/assets/create/textures/block/creative_fluid_tank_window.png new file mode 100644 index 000000000..7b46b7237 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/creative_fluid_tank_window.png differ diff --git a/src/main/resources/assets/create/textures/block/creative_fluid_tank_window_single.png b/src/main/resources/assets/create/textures/block/creative_fluid_tank_window_single.png new file mode 100644 index 000000000..7aab4d7ad Binary files /dev/null and b/src/main/resources/assets/create/textures/block/creative_fluid_tank_window_single.png differ diff --git a/src/main/resources/assets/create/textures/block/creative_motor.png b/src/main/resources/assets/create/textures/block/creative_motor.png index 897bf9e1d..dcb6c401a 100644 Binary files a/src/main/resources/assets/create/textures/block/creative_motor.png and b/src/main/resources/assets/create/textures/block/creative_motor.png differ diff --git a/src/main/resources/assets/create/textures/block/hose_pulley_magnet.png b/src/main/resources/assets/create/textures/block/hose_pulley_magnet.png new file mode 100644 index 000000000..34bed613c Binary files /dev/null and b/src/main/resources/assets/create/textures/block/hose_pulley_magnet.png differ diff --git a/src/main/resources/assets/create/textures/block/hose_pulley_rope.png b/src/main/resources/assets/create/textures/block/hose_pulley_rope.png new file mode 100644 index 000000000..de48b69a9 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/hose_pulley_rope.png differ diff --git a/src/main/resources/assets/create/textures/block/item_drain_side.png b/src/main/resources/assets/create/textures/block/item_drain_side.png new file mode 100644 index 000000000..bd768538d Binary files /dev/null and b/src/main/resources/assets/create/textures/block/item_drain_side.png differ diff --git a/src/main/resources/assets/create/textures/block/item_drain_top.png b/src/main/resources/assets/create/textures/block/item_drain_top.png new file mode 100644 index 000000000..d40ba75dd Binary files /dev/null and b/src/main/resources/assets/create/textures/block/item_drain_top.png differ diff --git a/src/main/resources/assets/create/textures/block/schematic_table_side.png b/src/main/resources/assets/create/textures/block/schematic_table_side.png index 08468449c..739e96a14 100644 Binary files a/src/main/resources/assets/create/textures/block/schematic_table_side.png and b/src/main/resources/assets/create/textures/block/schematic_table_side.png differ diff --git a/src/main/resources/assets/create/textures/block/schematic_table_top.png b/src/main/resources/assets/create/textures/block/schematic_table_top.png index d5d97ad23..1b2fe1b8f 100644 Binary files a/src/main/resources/assets/create/textures/block/schematic_table_top.png and b/src/main/resources/assets/create/textures/block/schematic_table_top.png differ diff --git a/src/main/resources/assets/create/textures/item/blaze_cake.png b/src/main/resources/assets/create/textures/item/blaze_cake.png index 91a6e3d4a..14c6ab057 100644 Binary files a/src/main/resources/assets/create/textures/item/blaze_cake.png and b/src/main/resources/assets/create/textures/item/blaze_cake.png differ diff --git a/src/main/resources/assets/create/textures/item/cinder_flour.png b/src/main/resources/assets/create/textures/item/cinder_flour.png index 9ad4c920a..ed2e5d297 100644 Binary files a/src/main/resources/assets/create/textures/item/cinder_flour.png and b/src/main/resources/assets/create/textures/item/cinder_flour.png differ