mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-14 05:52:41 +01:00
Merge pull request #496 from wchen1990/mc1.16/dev
Merged mc1.15/dev changes to mc1.16/dev
This commit is contained in:
commit
18c4402cf2
116 changed files with 3498 additions and 675 deletions
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "create:block/item_drain"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "大きな歯車",
|
||||
|
|
|
@ -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": "큰 톱니바퀴",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "Большая шестерня",
|
||||
|
|
|
@ -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": "大齿轮",
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "create:block/hose_pulley/item"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "create:block/item_drain"
|
||||
}
|
|
@ -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"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:creative_fluid_tank"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:hose_pulley"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:item_drain"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"),
|
||||
|
|
|
@ -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<FluidTankBlock> FLUID_TANK = REGISTRATE.block("fluid_tank", FluidTankBlock::new)
|
||||
public static final BlockEntry<FluidTankBlock> 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.<FluidTankItem>customItemModel("_", "block_single_window"))
|
||||
.build()
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<FluidTankBlock> 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<HosePulleyBlock> 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<ItemDrainBlock> 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<SpoutBlock> SPOUT = REGISTRATE.block("spout", SpoutBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.partialBaseModel(ctx, prov)))
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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"),
|
||||
|
|
|
@ -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<SchematicTableTileEntity> 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<SmartFluidPipeTileEntity> 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<FluidValveTileEntity> 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<CreativeFluidTankTileEntity> CREATIVE_FLUID_TANK = Create.registrate()
|
||||
.tileEntity("creative_fluid_tank", CreativeFluidTankTileEntity::new)
|
||||
.validBlocks(AllBlocks.CREATIVE_FLUID_TANK)
|
||||
.renderer(() -> FluidTankRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<HosePulleyTileEntity> HOSE_PULLEY = Create.registrate()
|
||||
.tileEntity("hose_pulley", HosePulleyTileEntity::new)
|
||||
.validBlocks(AllBlocks.HOSE_PULLEY)
|
||||
.renderer(() -> HosePulleyRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<SpoutTileEntity> 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<MechanicalBearingTileEntity> MECHANICAL_BEARING = Create.registrate()
|
||||
.tileEntity("mechanical_bearing", MechanicalBearingTileEntity::new)
|
||||
.validBlocks(AllBlocks.MECHANICAL_BEARING)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1046,5 +1046,5 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD
|
|||
public boolean isOnePlayerRiding() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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<BlockPos> validationSet;
|
||||
PriorityQueue<BlockPosEntry> queue;
|
||||
boolean isValid;
|
||||
|
||||
// Validation
|
||||
List<BlockPosEntry> validationFrontier;
|
||||
Set<BlockPos> validationVisited;
|
||||
Set<BlockPos> 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<FluidDrainingBehaviour> 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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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<BlockPosEntry> queue;
|
||||
|
||||
List<BlockPosEntry> infinityCheckFrontier;
|
||||
Set<BlockPos> 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<Fluid> pendingFluidTicks = world.getPendingFluidTicks();
|
||||
if (pendingFluidTicks instanceof ServerTickList) {
|
||||
ServerTickList<Fluid> serverTickList = (ServerTickList<Fluid>) pendingFluidTicks;
|
||||
NextTickListEntry<Fluid> removedEntry = null;
|
||||
for (NextTickListEntry<Fluid> 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<FluidFillingBehaviour> TYPE = new BehaviourType<>();
|
||||
|
||||
@Override
|
||||
public BehaviourType<?> getType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
}
|
|
@ -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<BlockPosEntry> frontier;
|
||||
Set<BlockPos> 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<BlockPosEntry> frontier, Set<BlockPos> visited,
|
||||
BiConsumer<BlockPos, Integer> 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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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<Context> 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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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<HosePulleyTileEntity> {
|
||||
|
||||
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<HosePulleyTileEntity> getTileEntityClass() {
|
||||
return HosePulleyTileEntity.class;
|
||||
}
|
||||
|
||||
}
|
|
@ -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<BlockPos> rootPosGetter;
|
||||
private Supplier<Boolean> predicate;
|
||||
|
||||
public HosePulleyFluidHandler(SmartFluidTank internalTank, FluidFillingBehaviour filler,
|
||||
FluidDrainingBehaviour drainer, Supplier<BlockPos> rootPosGetter, Supplier<Boolean> 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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
|
@ -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<IFluidHandler> 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<TileEntityBehaviour> 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 <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
|
||||
if (isFluidHandlerCap(cap)
|
||||
&& (side == null || HosePulleyBlock.hasPipeTowards(world, pos, getBlockState(), side)))
|
||||
return this.capability.cast();
|
||||
return super.getCapability(cap, side);
|
||||
}
|
||||
|
||||
}
|
|
@ -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<ItemStack> p_149666_2_) {}
|
||||
|
||||
}
|
|
@ -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<FluidStack> 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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<FluidTankTileEntity> {
|
||||
|
||||
|
@ -48,8 +49,19 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE<FluidTankT
|
|||
public static final BooleanProperty BOTTOM = BooleanProperty.create("bottom");
|
||||
public static final EnumProperty<Shape> 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<FluidTankT
|
|||
|
||||
@Override
|
||||
public int getLightValue(BlockState state, IBlockReader world, BlockPos pos) {
|
||||
FluidTankTileEntity tankAt = FluidTankConnectivityHandler.tankAt(world, pos);
|
||||
FluidTankTileEntity tankAt = FluidTankConnectivityHandler.anyTankAt(world, pos);
|
||||
if (tankAt == null)
|
||||
return 0;
|
||||
FluidTankTileEntity controllerTE = tankAt.getControllerTE();
|
||||
|
@ -92,45 +104,49 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE<FluidTankT
|
|||
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand,
|
||||
BlockRayTraceResult ray) {
|
||||
ItemStack heldItem = player.getHeldItem(hand);
|
||||
|
||||
ItemStack copy = heldItem.copy();
|
||||
copy.setCount(1);
|
||||
LazyOptional<IFluidHandlerItem> 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<IFluidHandler> 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<IFluidHandler> 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<FluidTankT
|
|||
fluid.isIn(FluidTags.LAVA) ? SoundEvents.ITEM_BUCKET_EMPTY_LAVA : SoundEvents.ITEM_BUCKET_EMPTY;
|
||||
}
|
||||
if (exchange == FluidExchange.TANK_TO_ITEM) {
|
||||
if (creative && !onClient)
|
||||
if (fluidTank instanceof CreativeSmartFluidTank)
|
||||
((CreativeSmartFluidTank) fluidTank).setContainedFluid(FluidStack.EMPTY);
|
||||
|
||||
Fluid fluid = prevFluidInTank.getFluid();
|
||||
fluidState = fluid.getDefaultState()
|
||||
.getBlockState();
|
||||
|
@ -213,7 +233,7 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE<FluidTankT
|
|||
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return AllTileEntities.FLUID_TANK.create();
|
||||
return creative ? AllTileEntities.CREATIVE_FLUID_TANK.create() : AllTileEntities.FLUID_TANK.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -18,6 +18,7 @@ import com.simibubi.create.foundation.utility.Iterate;
|
|||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.Direction.AxisDirection;
|
||||
|
@ -33,10 +34,11 @@ public class FluidTankConnectivityHandler {
|
|||
TankSearchCache cache = new TankSearchCache();
|
||||
List<FluidTankTileEntity> 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<FluidTankTileEntity> frontier) {
|
||||
private static void formTanks(TileEntityType<?> type, IBlockReader world, TankSearchCache cache,
|
||||
List<FluidTankTileEntity> frontier) {
|
||||
PriorityQueue<Pair<Integer, FluidTankTileEntity>> creationQueue = makeCreationQueue();
|
||||
Set<BlockPos> 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<FluidTankTileEntity> tank = cache.getOrCache(world, pos);
|
||||
Optional<FluidTankTileEntity> 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<Pair<Integer, FluidTankTileEntity>> 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<FluidTankTileEntity> getOrCache(IBlockReader world, BlockPos pos) {
|
||||
Optional<FluidTankTileEntity> 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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<CullData> 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
|
||||
|
|
|
@ -42,6 +42,9 @@ public class FluidTankRenderer extends SafeTileEntityRenderer<FluidTankTileEntit
|
|||
FluidTank tank = te.tankInventory;
|
||||
FluidStack fluidStack = tank.getFluid();
|
||||
|
||||
if (fluidStack.isEmpty())
|
||||
return;
|
||||
|
||||
boolean top = fluidStack.getFluid()
|
||||
.getAttributes()
|
||||
.isLighterThanAir();
|
||||
|
|
|
@ -57,7 +57,7 @@ public class FluidTankTileEntity extends SmartTileEntity {
|
|||
|
||||
public FluidTankTileEntity(TileEntityType<?> 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 <T> LazyOptional<T> getCapability(@Nonnull Capability<T> 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);
|
||||
}
|
||||
|
|
|
@ -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<BasinTileEntity>, 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<BasinTileEntity>, 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<FluidStack, ItemStack> emptyingResult = EmptyingByBasin.emptyItem(worldIn, heldItem, true);
|
||||
LazyOptional<IFluidHandler> 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<IFluidHandler> 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<BasinTileEntity>, 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;
|
||||
|
|
|
@ -171,7 +171,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
|
|||
}
|
||||
|
||||
BeltTileEntity belt = BeltHelper.getSegmentTE(worldIn, pos);
|
||||
if (belt == null || belt.getSpeed() == 0)
|
||||
if (belt == null)
|
||||
return;
|
||||
if (entityIn instanceof ItemEntity && entityIn.isAlive()) {
|
||||
if (worldIn.isRemote)
|
||||
|
|
|
@ -95,8 +95,6 @@ public class BeltTileEntity extends KineticTileEntity {
|
|||
BeltBlock.initBelt(world, pos);
|
||||
if (!AllBlocks.BELT.has(world.getBlockState(pos)))
|
||||
return;
|
||||
if (getSpeed() == 0)
|
||||
return;
|
||||
|
||||
initializeItemHandler();
|
||||
|
||||
|
@ -104,6 +102,9 @@ public class BeltTileEntity extends KineticTileEntity {
|
|||
if (!isController())
|
||||
return;
|
||||
getInventory().tick();
|
||||
|
||||
if (getSpeed() == 0)
|
||||
return;
|
||||
|
||||
// Move Entities
|
||||
if (passengers == null)
|
||||
|
|
|
@ -50,14 +50,6 @@ public class BeltInventory {
|
|||
|
||||
public void tick() {
|
||||
|
||||
// Reverse item collection if belt just reversed
|
||||
if (beltMovementPositive != belt.getDirectionAwareBeltMovementSpeed() > 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;
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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<FluidStack, ItemStack> emptyingResult = EmptyingByBasin.emptyItem(worldIn, heldItem, true);
|
||||
LazyOptional<IFluidHandler> 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<IFluidHandler> 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) {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<T extends SimplePacketBase> {
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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": [
|
||||
{
|
||||
|
|
|
@ -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]
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -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="}]}
|
|
@ -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]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "create:block/rope_pulley/rope",
|
||||
"textures": {
|
||||
"5": "create:block/hose_pulley_rope",
|
||||
"particle": "create:block/hose_pulley_rope"
|
||||
}
|
||||
}
|
|
@ -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"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "create:block/rope_pulley/rope_half",
|
||||
"textures": {
|
||||
"5": "create:block/hose_pulley_rope",
|
||||
"particle": "create:block/hose_pulley_rope"
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"}
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
}
|
||||
],
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 367 B |
Binary file not shown.
Before Width: | Height: | Size: 1,004 B After Width: | Height: | Size: 821 B |
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue