diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index ae9b7cc9f..9d81a8792 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -20,18 +20,20 @@ a92c395c57209141d4cf78ad62facbaf3878a120 assets/create/blockstates/andesite_cobb 1d2d8081581e07d9be4b382aede4f2de4401cc6b assets/create/blockstates/andesite_tunnel.json f9fa6aa530eb0891a74eadfbebc663172a57147a assets/create/blockstates/basin.json f25693a9429f6337149ff24f27900dc4eb82a7c2 assets/create/blockstates/belt.json -40d10934934ea142d71fc6ce598b1455c3ad47b4 assets/create/blockstates/belt_observer.json cf9045eb16e5299a1d917c4cb536289f49411276 assets/create/blockstates/birch_window.json 94a1a91403eb4b035fec48071e7fcae57a8a6abd assets/create/blockstates/birch_window_pane.json 58b07d2af6030342f0354f6d3fd0ee128d2d74b4 assets/create/blockstates/black_seat.json +a71ddf3291bd13d7877f2fe32c42f50407f99afb assets/create/blockstates/black_valve_handle.json 923aeb2a556f67bc0526f237dd97af2d37b4c9f1 assets/create/blockstates/blaze_burner.json 4854d1ef52130a7887aecc60bcaffbd66f0871a8 assets/create/blockstates/blue_seat.json +9d7341a5cae5d47788c595167946dfb6441cebd1 assets/create/blockstates/blue_valve_handle.json fba967b1f6e44b34a9d9662e2fedfc13aad7f36c assets/create/blockstates/brass_belt_funnel.json 8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets/create/blockstates/brass_block.json b8dd6e505943e06706d0718ece620ab3cf943650 assets/create/blockstates/brass_casing.json 3057e1121117c0cd651c288cd8e2d46bdf64afb1 assets/create/blockstates/brass_funnel.json 672eedcd3520c6d39603449165a23be9c612c620 assets/create/blockstates/brass_tunnel.json e81608346d43406ee72cae0f78b8bcfb37ba2d75 assets/create/blockstates/brown_seat.json +322289524c058fac66bbe76b4924c3b0c0c33b84 assets/create/blockstates/brown_valve_handle.json 26f3b6a8f8249e4e622ab200057d75e228762817 assets/create/blockstates/cart_assembler.json 7299cea212d879d6d5611bd139b24768b9af236f assets/create/blockstates/chiseled_dark_scoria.json 0f01f813388d3e6907c1cfd992e4b21c914e267e assets/create/blockstates/chiseled_dolomite.json @@ -43,17 +45,20 @@ b59324f051f21d8ce1a48a08f4721a61a3c414d6 assets/create/blockstates/chute.json 4947c261310445fa55b92038326ac82967d192dd assets/create/blockstates/clockwork_bearing.json 1f33834c685e3243882acfe20183fe64dfa872be assets/create/blockstates/clutch.json e5e3757e99c139d67b2a70288466d8a74d818841 assets/create/blockstates/cogwheel.json +36f54136a7756c97f71bc6b47ef4e8e575e72879 assets/create/blockstates/content_observer.json f8eff64c75fc599e9a44a003f54ae9931cd8ce7c assets/create/blockstates/copper_block.json cabf6b8c59eb0e3d56a0a5a856ca058bb3200882 assets/create/blockstates/copper_casing.json 3355a852cdc717e257ca19b3db836068964733e3 assets/create/blockstates/copper_ore.json dc76bca1fdd41c8e6ada27fd59a2b73d7adc9596 assets/create/blockstates/copper_shingles.json ecf4a72411870bfdbf8a59469b114cd77621c343 assets/create/blockstates/copper_tiles.json +890be245b914c1a9f29f48a8c5d325640b5be160 assets/create/blockstates/copper_valve_handle.json 3df0d5d5170a2f6cbab0f8a9bc8f2d64229589af assets/create/blockstates/creative_crate.json f0031f5e970b3d5695472ed384950b8631b015ed assets/create/blockstates/creative_motor.json fe2f78b94c20944399101e7369e2d43324297fb6 assets/create/blockstates/crushing_wheel.json a1dd6cb3daa97ea871290ef7b178d28b564ee2a2 assets/create/blockstates/crushing_wheel_controller.json b1126c191877cff86b4e2de83e1fcbd151451cb7 assets/create/blockstates/cuckoo_clock.json 4de72f65bff4e5d9c8153fa3adeee6b61d6f912b assets/create/blockstates/cyan_seat.json +2c04d57e56849f243aec8a1e769574d24daac1e9 assets/create/blockstates/cyan_valve_handle.json 1726b1b9e04a0634e7e1fdcf1cf4cc898efc5c2f assets/create/blockstates/dark_oak_window.json 50d4627d8e8b5adade12de764ab528ddacfa9ea5 assets/create/blockstates/dark_oak_window_pane.json 21e435ad3baf69970446b0acd3db0d6d02dc9fcb assets/create/blockstates/dark_scoria.json @@ -126,9 +131,15 @@ fc652317e03b57c76e23a805da16a28d15254029 assets/create/blockstates/fancy_scoria_ 5864daf839e54789a0dc8a44505f070bf3e184bc assets/create/blockstates/fancy_weathered_limestone_bricks.json fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json +<<<<<<< HEAD 8e532856c3c2b4e4e59c65a2a81a694e35d14658 assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json ac78d52c946f9d426fa214d7323c1ae4f0d76f5c assets/create/blockstates/fluid_pipe.json +======= +6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json +4c3e0500f9382d2e426e823fe876f57f4d7ee3b4 assets/create/blockstates/fluid_pipe.json +>>>>>>> mc1.15/dev f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json +5408d92ab02af86539ac42971d4033545970bb3a assets/create/blockstates/fluid_valve.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json 61df7769fa61f6dd2868a4377e54320fdd473b4e assets/create/blockstates/framed_glass_pane.json @@ -156,7 +167,9 @@ d97fdea02187e63f6b63913357c79a18660d676d assets/create/blockstates/granite_cobbl 2f29568407970ea0e3807e0553e0584d127a9014 assets/create/blockstates/granite_cobblestone_wall.json f8659e81cd2a623475a6a9aca59149e82de56b1c assets/create/blockstates/granite_pillar.json a5ec5401ba9f3e102a2e1b35837f643847afbca4 assets/create/blockstates/gray_seat.json +5f17a5868616b33eb157965a661046cab7a1427f assets/create/blockstates/gray_valve_handle.json 13059309684db0cc7a0f1f4fce2407cf06cce80a assets/create/blockstates/green_seat.json +f4a0fc68e8daaa0a47cdc951ced4310057a874b0 assets/create/blockstates/green_valve_handle.json 6ab675fa06317e6d07c0c1a453e7bb43e3f46b3b assets/create/blockstates/hand_crank.json be3bef7e091d8b50bfc1c6b7275946d1f636aefd assets/create/blockstates/horizontal_framed_glass.json 18d9fdaa1352a7e2ec91135e46dae5c02ccd8f8f assets/create/blockstates/horizontal_framed_glass_pane.json @@ -173,8 +186,11 @@ a4cfcdc038af0f93a58d88ea8860b34d73632ff4 assets/create/blockstates/layered_dolom 8535d628f8834be62cdf62ef4b60c2ce3a7af99f assets/create/blockstates/layered_scoria.json 419d7fffc5cbd392f10211afa8d17e3eb8df8380 assets/create/blockstates/layered_weathered_limestone.json 2a0a8b1715700bf1e284ee57ef9f7f163c12f3ee assets/create/blockstates/light_blue_seat.json +9bee040558a6b24e21f837fc808e17fae1883e71 assets/create/blockstates/light_blue_valve_handle.json d9a2551e001bb315d071bb9f1f013323a66a5d09 assets/create/blockstates/light_gray_seat.json +8bea8c86de8c218c8932eef140f0ed439e173156 assets/create/blockstates/light_gray_valve_handle.json 1de3a88c003df03f5006e1bbaa0236589aba08ad assets/create/blockstates/lime_seat.json +179a3e68b9f2e289eafe0e98e768befbbf91c5c2 assets/create/blockstates/lime_valve_handle.json c4dcb169bd1dffe8501bff455e3eb6ba979f60ab assets/create/blockstates/limesand.json e7cb0b25e511610b46dfd219e0cc5ea60a79d56b assets/create/blockstates/limestone.json e7c7b952137c4cb615988ea59b9f14303c9a4dfe assets/create/blockstates/limestone_bricks.json @@ -188,6 +204,7 @@ e7c7b952137c4cb615988ea59b9f14303c9a4dfe assets/create/blockstates/limestone_bri b7506b862d13b3f915c60d38bb7a20afc935f70a assets/create/blockstates/limestone_pillar.json 69790737767e06f000c7824749c46664a123160e assets/create/blockstates/linear_chassis.json 84c494d24cc58af274fdd054896c680e8095d2d0 assets/create/blockstates/magenta_seat.json +3bfce5016e5c929b74368dc2d734e62ae34587a4 assets/create/blockstates/magenta_valve_handle.json 3b3250d6e209403a93d025604a8081087965016e assets/create/blockstates/mechanical_arm.json ddcf4bb281e046fbb1026b8f46a2cf12448598df assets/create/blockstates/mechanical_bearing.json 5586beef2d9183dc34d8e8d2723620c0569592ae assets/create/blockstates/mechanical_crafter.json @@ -218,6 +235,7 @@ b1126c191877cff86b4e2de83e1fcbd151451cb7 assets/create/blockstates/mysterious_cu cf60989f63f02067fc4e4ad25033ac83167cdeb0 assets/create/blockstates/oak_window.json 4a796509c3953171f04f957351282205840b3760 assets/create/blockstates/oak_window_pane.json 5764a24f6c4fa552b61d2a02135adfc7d93c2e10 assets/create/blockstates/orange_seat.json +1445074ec21a3735ea912b624c0f9f18a450d2d3 assets/create/blockstates/orange_valve_handle.json 8e2028e1a0450a592eed5e10276ba19b1195a206 assets/create/blockstates/ornate_iron_window.json f59198fd966927e21e9bf76e64de533d05ea893b assets/create/blockstates/ornate_iron_window_pane.json c46f0b62967cf483ec0720a9297c8ccc97f5547d assets/create/blockstates/overgrown_andesite.json @@ -266,6 +284,7 @@ cb23aef25f3106b06c8fa8f152c638bb0d2185d8 assets/create/blockstates/paved_weather d62b0992cec1de45dad1f2c273132225f4ef33a0 assets/create/blockstates/paved_weathered_limestone_stairs.json e29e245d06c46dac94fcd0e01a9bf7fa8e02fb87 assets/create/blockstates/paved_weathered_limestone_wall.json 919a79e4a4a5fab0aac3ef48e1c786017d6aa001 assets/create/blockstates/pink_seat.json +471a3bb474a0ae0453143888d561256cce894e3f assets/create/blockstates/pink_valve_handle.json 975c97018e9e2419943eaab43aed0970e96feaf7 assets/create/blockstates/piston_extension_pole.json 2f764f460aa1d75ba995da180bc6f8d2bd9db385 assets/create/blockstates/polished_dark_scoria.json 262b22dcf3e151e63f58710f6b6fe4fc4fc2a70c assets/create/blockstates/polished_dark_scoria_slab.json @@ -290,15 +309,26 @@ a452650af5c929675b0a3c8e8bf23c6cac67152e assets/create/blockstates/polished_scor c8467d55bc22d2e2256b8b732c06c9fdc64d336f assets/create/blockstates/polished_weathered_limestone.json 5d811eab3c5e8411f98e2ea98d93d35955ce18fc assets/create/blockstates/polished_weathered_limestone_slab.json acec6cdebe772ca72de94a85d98199e827495acb assets/create/blockstates/polished_weathered_limestone_stairs.json +<<<<<<< HEAD ad721e3911f48c61c3639edac1896680a31451ff assets/create/blockstates/polished_weathered_limestone_wall.json b7829c2ef2c47188713f8cab21b2c9bc7f9c5b79 assets/create/blockstates/portable_storage_interface.json +======= +f42ad32aefcfa7ccc6287f57ee1a5f092b65126f assets/create/blockstates/polished_weathered_limestone_wall.json +1b70b4e5792dccd2110b84e209016ac258005e28 assets/create/blockstates/portable_storage_interface.json +>>>>>>> mc1.15/dev 8296d43d5f1c2113012d127038fb319af83aaee4 assets/create/blockstates/powered_latch.json e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggle_latch.json 3a739f9d4276828d83f2d2750bf3227c87bcd438 assets/create/blockstates/pulley_magnet.json 469e430d96cb0a5e1aaf6b7cc5d401d488c9e600 assets/create/blockstates/pulse_repeater.json 92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json +<<<<<<< HEAD 5c1df061eb5efe49beee7219e113206fc31a4733 assets/create/blockstates/radial_chassis.json +======= +61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json +bdd56f32ce0a148b6e466a55ab2777f69fc08cfc assets/create/blockstates/radial_chassis.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 c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets/create/blockstates/redstone_link.json b76ed5f6d271349b2509708c11e713bb299a57b6 assets/create/blockstates/refined_radiance_casing.json @@ -346,9 +376,12 @@ fd7a9c7095372485081436c91489cadb2b0c514e assets/create/blockstates/weathered_lim dfa5662bfd5a70bcd87673b1c40bf9106d5e2365 assets/create/blockstates/weathered_limestone_cobblestone_wall.json c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_limestone_pillar.json 4647010162eb4c350fad236d860317eaa1884c77 assets/create/blockstates/white_seat.json +89000903d0ab8139e919abea7aa0361b34c24e55 assets/create/blockstates/white_valve_handle.json a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json +6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json +<<<<<<< HEAD c87674f2935327f78657f1bb44b3b10b6697a548 assets/create/lang/en_ud.json 62a4c9e5454fd6e899495c95d6fddd020d472bc7 assets/create/lang/en_us.json db80f0a19e3327b0b7267763644d3d8b85fe4ea0 assets/create/lang/unfinished/de_de.json @@ -366,6 +399,25 @@ b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_windo 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 +======= +c113d0a180880243538e9b1c3019c863df3fbdc1 assets/create/lang/en_ud.json +a4cd12907a1ddfd60883077b2d11c5459d436016 assets/create/lang/en_us.json +063195daed96a4420588e6d6d13f4a9b1f099ff4 assets/create/lang/unfinished/de_de.json +30da89bafac8a5ea4d82903928ba4d2a63385117 assets/create/lang/unfinished/fr_fr.json +faddc5022cc10c8fca1649d66427e910cfa28286 assets/create/lang/unfinished/it_it.json +7f448e863397725c11ab083d39af68d205d579d7 assets/create/lang/unfinished/ja_jp.json +48d61d21ee096513f2b9e06df38882cf6ace96db assets/create/lang/unfinished/ko_kr.json +a908ecd03bd7ede95b5e5f0698157353ae2bec6c assets/create/lang/unfinished/nl_nl.json +ffa305b619c58bdff92d2e69b2bbc81ad5b8dcb6 assets/create/lang/unfinished/pt_br.json +6588d559aaafb4f036ba47ba2414caaa9d2f6f6a assets/create/lang/unfinished/ru_ru.json +4593a6013875039a6a30ac64d45bb4f140190fe1 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 @@ -411,6 +463,7 @@ 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 @@ -439,8 +492,24 @@ a5f0ed76e27d2ca706445f7f7c5f9270f98e34f9 assets/create/models/block/birch_window 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 +c9aec5c30e6821c8f125202cad236afa48f6c358 assets/create/models/block/andesite_tunnel/t_left.json +1dcb8fe81a275ef8a49c04db021ad29abe8b38ae assets/create/models/block/andesite_tunnel/t_right.json +e2801a0c3fe8e1c2485291485b977f581fdc8b7c assets/create/models/block/andesite_tunnel/window.json +87f90e8256060683b834d57d3c11248d5ea84e34 assets/create/models/block/birch_window.json +94317904054cbf651846716d8af3bca618d3130f assets/create/models/block/birch_window_pane_noside.json +7a4cae5b075c4ac96a3113afafa391d024fc117f assets/create/models/block/birch_window_pane_noside_alt.json +3905ced5892afa60009bf26279f9fa4756c273d4 assets/create/models/block/birch_window_pane_post.json +62b3f2edc5ef5d7dabbcff19220921b0e3582376 assets/create/models/block/birch_window_pane_side.json +95d4230eb366f5e7684820c9337e3956ed34042a assets/create/models/block/birch_window_pane_side_alt.json +>>>>>>> mc1.15/dev 97d79ab99c0fb278a9b5dc54e1c6563868f87b76 assets/create/models/block/black_seat.json +02747ea1a0e5d4a1cd466bf26878885a89d347fa assets/create/models/block/black_valve_handle.json e58b00a7222152d7facbe0e82f00933b974df747 assets/create/models/block/blue_seat.json +c7f91468b196fbda137e6b31764870b3bbfda6b6 assets/create/models/block/blue_valve_handle.json 24dff9a8d22c9a88286d2b7d08384ac9f281a512 assets/create/models/block/brass_belt_funnel_pull_extended.json c9c5f53c9d4f6cf6f509452e91cab1ba5b57f807 assets/create/models/block/brass_belt_funnel_pull_powered_extended.json addcf821a2348c0985bf9a72229355cfab818069 assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json @@ -459,6 +528,7 @@ a959e03ca339badb49fe58ba53d86a84352e91f3 assets/create/models/block/brass_tunnel 0585fbe58da3a8ed0dc98cc7ed79ac067312078d assets/create/models/block/brass_tunnel/t_right.json a0612a633756433e1b37ddc6d290aa1fc07839ef assets/create/models/block/brass_tunnel/window.json 4eed0ad902f5e84f2b6c160f3283e8028640e77d assets/create/models/block/brown_seat.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 @@ -467,6 +537,18 @@ db7279f05c1d89e21da8887a15d3a1cfff4a9cf2 assets/create/models/block/chiseled_dar 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 +======= +6c39677f8c3a84280835c717ea1ef569b7c76a1b assets/create/models/block/brown_valve_handle.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 +d2e195aa2e90c712e51d855a9a4a334b52f62a69 assets/create/models/block/chiseled_limestone.json +ac07568fa7b2d3fa84d0fe89a498514d30514291 assets/create/models/block/chiseled_scoria.json +ecb2b85ee210dce329d2be66b98d0f0d4e6fc223 assets/create/models/block/chiseled_weathered_limestone.json +f9a3f0939ea43b404eb2826b94211a25fca5ebc2 assets/create/models/block/clockwork_bearing.json +70406933cc4fa5471af6e562fd84a397347dba17 assets/create/models/block/copper_casing.json +b2c528cfd24a5cb0cb96c45d0a914f1090f8c32b assets/create/models/block/copper_valve_handle.json +>>>>>>> mc1.15/dev 1ef7060b0ca7e9c0bfc8151f98ca08da31862cda assets/create/models/block/crate/brass/bottom.json 4ef2c7c3018f2d219f159a3ce58ceb00610b9c5d assets/create/models/block/crate/brass/left.json c76cfec1279d307c52f9502fdba3425f38219168 assets/create/models/block/crate/brass/right.json @@ -478,6 +560,7 @@ a09f639bde4c61d68592eb06c807e7a6791ff950 assets/create/models/block/crate/brass/ a123e3c8a9e2ea1665f268cf3991aa7e4b3119c6 assets/create/models/block/crate/creative/single.json 29ab5cfe7aed1271ede125e91bf78c1372b5f96e assets/create/models/block/crate/creative/top.json 6704782830b3d872321e895b6903709c18e3778f assets/create/models/block/cyan_seat.json +<<<<<<< HEAD f5ac5007454cb04490e36f39e9047cc90501b2f6 assets/create/models/block/dark_oak_window.json d1914f0b453d360221b14ff128f5a5040441a0c6 assets/create/models/block/dark_oak_window_pane_noside.json ebee7c581235fb4166862c238469bf7c81bf0b8c assets/create/models/block/dark_oak_window_pane_noside_alt.json @@ -625,6 +708,141 @@ c395d4be2554efec583dc940e540f235d459e1c6 assets/create/models/block/fancy_weathe eaedc072f8ae70db3ffb34b0a71ffc2d40387dfe assets/create/models/block/fancy_weathered_limestone_bricks_wall_post.json fb5797cc9cbe457b7b435164d6a1622e26cf1eac assets/create/models/block/fancy_weathered_limestone_bricks_wall_side.json dd4011acc0f15444da84461387501a2ee02ad075 assets/create/models/block/fancy_weathered_limestone_bricks_wall_side_tall.json +======= +f45ef4a5f0aa8482d493661673b1c0ab6d061157 assets/create/models/block/cyan_valve_handle.json +57e70af1da4e971eca075616b787b70104189d60 assets/create/models/block/dark_oak_window.json +c7b06bc1688f3f9417d38c492d83069f493df78e assets/create/models/block/dark_oak_window_pane_noside.json +3cf8adcb5d1c8f53d2144e1a85bebe593522a34e assets/create/models/block/dark_oak_window_pane_noside_alt.json +6060e8256251807871046edb701ae9af057c6b25 assets/create/models/block/dark_oak_window_pane_post.json +6b548c48245d3f9d0cc8340495f0218c8c76968d assets/create/models/block/dark_oak_window_pane_side.json +a021dc24e218a0d12af8c1defd6eb994f3cd52ef assets/create/models/block/dark_oak_window_pane_side_alt.json +e12bf7ec94790c1fef9db1e0a209ba55b026f39e assets/create/models/block/dark_scoria.json +acbf07b2b9518dd10b03f34a46115432b6e9bf18 assets/create/models/block/dark_scoria_bricks.json +04c07c1c83371d21e79e2f54b89bed840b0b373c assets/create/models/block/dark_scoria_bricks_slab.json +b51e13fa3704c6b731062758e1bb0fdbb8d3b501 assets/create/models/block/dark_scoria_bricks_slab_top.json +f054596722c031e05403d1dfa0ebb873549364f3 assets/create/models/block/dark_scoria_bricks_stairs.json +955b30a1010ae5d1923f9759af86dee1a881d061 assets/create/models/block/dark_scoria_bricks_stairs_inner.json +f4ae0b386bdf3173a8cd30c11993395c5ff6557e assets/create/models/block/dark_scoria_bricks_stairs_outer.json +024df9c96f8004418529cfc2558f4f066eeac21a assets/create/models/block/dark_scoria_bricks_wall_post.json +3cdcc41c6b833d14a00942504c49ff2261aada88 assets/create/models/block/dark_scoria_bricks_wall_side.json +4b0850fdf9ace0f10250692c93196d5620b800ba assets/create/models/block/dark_scoria_cobblestone.json +02a39b76219bb3a52d1947cf7f72cbc1df2fd673 assets/create/models/block/dark_scoria_cobblestone_slab.json +87119cdd2e5a5793e83c534128c1da15e5ea639f assets/create/models/block/dark_scoria_cobblestone_slab_top.json +203f4fd2cfaba624620a352f6d65ba58f0412a40 assets/create/models/block/dark_scoria_cobblestone_stairs.json +4a78513a157ee7c5ed7ccaadd2bf8954268c203b assets/create/models/block/dark_scoria_cobblestone_stairs_inner.json +868362ffc0331d24e35407a27b65cbfa94c538af assets/create/models/block/dark_scoria_cobblestone_stairs_outer.json +310c6ec1d83a7731ca4baac0ebddf1b508ce1c70 assets/create/models/block/dark_scoria_cobblestone_wall_post.json +fe7666edd1e5117384c4ff032cc25cd06175df24 assets/create/models/block/dark_scoria_cobblestone_wall_side.json +b29e7589789628ddc180e146aab70ad70a461ccf assets/create/models/block/dark_scoria_pillar.json +b021c62e9c164d37bee0af97a75a0fb91dd1c9ef assets/create/models/block/diorite_bricks.json +2820f2976d73deed740356fcd19cfb4f4f493f9f assets/create/models/block/diorite_bricks_slab.json +5fb8e28b42b803199c6347f27fb06480f2d637bf assets/create/models/block/diorite_bricks_slab_top.json +70fe07eb3b04286b165d5f2e9b5fe1e75e85ad1e assets/create/models/block/diorite_bricks_stairs.json +aa23e5c6f5f3be1e7cb57f03fe044b2c6a4cfea5 assets/create/models/block/diorite_bricks_stairs_inner.json +e8dfebbc0d53bc707daafff42461fa58f4d568c4 assets/create/models/block/diorite_bricks_stairs_outer.json +5b749343983f90edcdfb07412b41014840c2b485 assets/create/models/block/diorite_bricks_wall_post.json +aed9793db091577ca75bfaf496cc9967204cb27a assets/create/models/block/diorite_bricks_wall_side.json +4a1cbe7266099a0433bc341ca5b0f750568b2355 assets/create/models/block/diorite_cobblestone.json +2ad5210a878dbe4b31c6ce5e1962fb3c0fd7f450 assets/create/models/block/diorite_cobblestone_slab.json +0587d7c549648ebd8796ad39b1887497842bbfb9 assets/create/models/block/diorite_cobblestone_slab_top.json +3e959e30e67820f14c2b5afcdd5e710025d60341 assets/create/models/block/diorite_cobblestone_stairs.json +77906d654b5601e58b1485abb4d91b10bee6d665 assets/create/models/block/diorite_cobblestone_stairs_inner.json +7e4c4297dd55ee374ed5b3599c9b86ca2001d952 assets/create/models/block/diorite_cobblestone_stairs_outer.json +98738523c2aaf9ded7f0a23edd3df05d0a1684dd assets/create/models/block/diorite_cobblestone_wall_post.json +0907ef0284c7b8624d627fca66a3bb58d0f8dbb3 assets/create/models/block/diorite_cobblestone_wall_side.json +fc589cad1cee51965d4015404ecfd3c5be7bf9e9 assets/create/models/block/diorite_pillar.json +bc70a14ba2410586e8df5df2f5f367d1160b99ca assets/create/models/block/dolomite.json +bf5a698cb710b7eea9f34224be963fd949e48fd1 assets/create/models/block/dolomite_bricks.json +6fcecec93ca2d956908e3f24e9f9c2b1a9cf6866 assets/create/models/block/dolomite_bricks_slab.json +6f0cee5268aba5a54619c51fd703fcdb5abef317 assets/create/models/block/dolomite_bricks_slab_top.json +e83a06bffddbbc901246c18451057385bbeb4368 assets/create/models/block/dolomite_bricks_stairs.json +3a77383e573704b77952cc757653347edfbea4e2 assets/create/models/block/dolomite_bricks_stairs_inner.json +92f359fa78c7a923c6093abe0e2054364c17ff4a assets/create/models/block/dolomite_bricks_stairs_outer.json +f12601207b1cf723ed84ad07b6fdc54305707689 assets/create/models/block/dolomite_bricks_wall_post.json +227729855743169df83e5795ca98af45cf7ce193 assets/create/models/block/dolomite_bricks_wall_side.json +8dfeac10f0e994714f8528608ec01f165e024e12 assets/create/models/block/dolomite_cobblestone.json +38a7bdd45f3cd806f229ae4f21df45e981c5044a assets/create/models/block/dolomite_cobblestone_slab.json +e0bc8a3e14cdab30f0304d59200392858aac6753 assets/create/models/block/dolomite_cobblestone_slab_top.json +eb3f33f313beb57f05172a60259efbb39b99b64c assets/create/models/block/dolomite_cobblestone_stairs.json +c9f925ee5d38173873e3885d34d9f2a41fb355d4 assets/create/models/block/dolomite_cobblestone_stairs_inner.json +cc6d9300cd26f2323c653dbcc61b7a885be8fa3b assets/create/models/block/dolomite_cobblestone_stairs_outer.json +a101974d906487326dc38916f828d12a278a49ae assets/create/models/block/dolomite_cobblestone_wall_post.json +9c497140dfe73abe1964479eaf1af8f1892de290 assets/create/models/block/dolomite_cobblestone_wall_side.json +999a7cd79a9dc80c47fd6103b65f006b55187402 assets/create/models/block/dolomite_pillar.json +1a8bac1e97a2a6c3cc362081568d2a7fce815ad5 assets/create/models/block/encased_fluid_pipe.json +17dae5fdc1a551d8ab1ab8a68cabf7a8c3848d86 assets/create/models/block/fancy_andesite_bricks.json +cfb2cd84a1cbd9226a77ebc1f6c29e8eaa9c577f assets/create/models/block/fancy_andesite_bricks_slab.json +8ee27601996ab577991b6a0f7e9df27db0282cad assets/create/models/block/fancy_andesite_bricks_slab_top.json +07562e409b89e641c65884e52299d01bc7bb5d4c assets/create/models/block/fancy_andesite_bricks_stairs.json +8f4ff7a0dbc504555aa4aa4034a58dac58bfddc8 assets/create/models/block/fancy_andesite_bricks_stairs_inner.json +c1e49595d1608099bbf6be79c277b37ee83cb4d1 assets/create/models/block/fancy_andesite_bricks_stairs_outer.json +ad10259e6b2afe96cf7420f53813dea061654271 assets/create/models/block/fancy_andesite_bricks_wall_post.json +a69dd114a8c6889a8cf84b3c818ec68c823d45a4 assets/create/models/block/fancy_andesite_bricks_wall_side.json +e02e5d3049e414ba2bebcbe0c9e98a7a6f668044 assets/create/models/block/fancy_dark_scoria_bricks.json +8aafa8dcba2f77ffa044d2a1a708ccb7ee9ad150 assets/create/models/block/fancy_dark_scoria_bricks_slab.json +e0349402a5d1ba7ce787cc516568aac0fe6e3a77 assets/create/models/block/fancy_dark_scoria_bricks_slab_top.json +0b70f03aa9d520826bd95848dcc50d42497c2962 assets/create/models/block/fancy_dark_scoria_bricks_stairs.json +0efa7fc5b325be824f314424273ff693eb9c1c5d assets/create/models/block/fancy_dark_scoria_bricks_stairs_inner.json +d6d1354ed26cf6b08f3f1a8d624abcd0a38c88d7 assets/create/models/block/fancy_dark_scoria_bricks_stairs_outer.json +9f622e86a49954e3ec3ad30186e2782595306786 assets/create/models/block/fancy_dark_scoria_bricks_wall_post.json +fce2c713cf10bcf22e5d67a2992e9b2cc6361fa9 assets/create/models/block/fancy_dark_scoria_bricks_wall_side.json +b5262f179a7e16a4ea38e610ad0cb5f542c3ce23 assets/create/models/block/fancy_diorite_bricks.json +613531115eb9da3e62c8f29f7bda070b9636d21d assets/create/models/block/fancy_diorite_bricks_slab.json +5b5e0ffb6dbee224e0b113e28a28cec0400fccc0 assets/create/models/block/fancy_diorite_bricks_slab_top.json +56d4280cdd32d0084891731e77719ae5b12c1343 assets/create/models/block/fancy_diorite_bricks_stairs.json +63f6a321bc330d394b0f4504e43a381ab27052f4 assets/create/models/block/fancy_diorite_bricks_stairs_inner.json +a35cf29224543bea9e410633156c6e7eb9b2cd33 assets/create/models/block/fancy_diorite_bricks_stairs_outer.json +e9c641ee32689729d020a9ec3cdf8b6f323c5d68 assets/create/models/block/fancy_diorite_bricks_wall_post.json +7aea79798d3a28172cfd5dbccbcc1bc27d6e1858 assets/create/models/block/fancy_diorite_bricks_wall_side.json +8d2d5e999618ac31fdece4a629a676e8dc123d92 assets/create/models/block/fancy_dolomite_bricks.json +a619df1e34763ba4c5d07ae09646626b47ec20ea assets/create/models/block/fancy_dolomite_bricks_slab.json +28f7c18f1a991f6ac2feb232c4d8dfacda1147c0 assets/create/models/block/fancy_dolomite_bricks_slab_top.json +76e8f44ed6c65f05e95fa092507a59b0b4ec06a9 assets/create/models/block/fancy_dolomite_bricks_stairs.json +b53c77095b44821e89199e7c060b9b51eeee08fa assets/create/models/block/fancy_dolomite_bricks_stairs_inner.json +7f3a5b2beb22180cc3eeb4c180132f3e909501be assets/create/models/block/fancy_dolomite_bricks_stairs_outer.json +0bb02cea3f7e4835503edaa6d3fb63d22750ebd9 assets/create/models/block/fancy_dolomite_bricks_wall_post.json +dc3433b852df03964bf65e7d1e2f4475741bc35c assets/create/models/block/fancy_dolomite_bricks_wall_side.json +31f49733e5fca173547c6fdb10f76b896fcc5995 assets/create/models/block/fancy_gabbro_bricks.json +b7f39739146673062d537399d3afc82c724b5487 assets/create/models/block/fancy_gabbro_bricks_slab.json +4ff85261739e4252b7d15fd35e87a7a39ba618d6 assets/create/models/block/fancy_gabbro_bricks_slab_top.json +02a8dc9079d62a138343df963c951e5a24be4967 assets/create/models/block/fancy_gabbro_bricks_stairs.json +907c443b1deb4aa1e852d038fbbbccf43439a00c assets/create/models/block/fancy_gabbro_bricks_stairs_inner.json +f573f3310f05385536c4eb285e83844faa8f97ce assets/create/models/block/fancy_gabbro_bricks_stairs_outer.json +16edcdd0330034cc27c34bf4b7962a12a9758584 assets/create/models/block/fancy_gabbro_bricks_wall_post.json +75dc73daac8c47bf032313cc2234bcd6cb1570ce assets/create/models/block/fancy_gabbro_bricks_wall_side.json +4b2759734096cbe5219d62d2f8506aecc19697af assets/create/models/block/fancy_granite_bricks.json +9dbb77b7bab451db81db5d1f4f241c710f186117 assets/create/models/block/fancy_granite_bricks_slab.json +bcface0b5cad3c2498c9bd774676d5d2ad3a7fcb assets/create/models/block/fancy_granite_bricks_slab_top.json +bfd6c7779ab9fa23fae2e3a55924d0831a3e49ca assets/create/models/block/fancy_granite_bricks_stairs.json +bbb97a95452efbc20545d9a275c3d7d45494fb41 assets/create/models/block/fancy_granite_bricks_stairs_inner.json +cfbb7d33ec6313c56731385f8321a3aac9cb0455 assets/create/models/block/fancy_granite_bricks_stairs_outer.json +1a1a92f776c558173bff0e88e736fc8c89d49603 assets/create/models/block/fancy_granite_bricks_wall_post.json +13a94c47fe855532882e22ab3c7e96c4ad101df4 assets/create/models/block/fancy_granite_bricks_wall_side.json +d2c78c1efc32154b5cb7b6994e237b12b11995c7 assets/create/models/block/fancy_limestone_bricks.json +62d3c6f4cbc5e3fb21e8b8ac1a4b6b7d13c71f4f assets/create/models/block/fancy_limestone_bricks_slab.json +c194a63f4c4759c907fdfdeefbc61a7e52b0d98c assets/create/models/block/fancy_limestone_bricks_slab_top.json +2a3524c64c9703f12f713cbb2ac629eeb7387dd7 assets/create/models/block/fancy_limestone_bricks_stairs.json +92e3cc9b274cb1cad33fc0b9a47e220030cfeab4 assets/create/models/block/fancy_limestone_bricks_stairs_inner.json +6c9ac7b68f8d0716ce6929ed4a513b00daa0ec41 assets/create/models/block/fancy_limestone_bricks_stairs_outer.json +b2f3ff1718bd599ceff121b6afa3e4b4a7121c20 assets/create/models/block/fancy_limestone_bricks_wall_post.json +28c828ae08f3a84d65b5d7a28864ea9911cc3cf1 assets/create/models/block/fancy_limestone_bricks_wall_side.json +6da75b5353a49f8c68ebc8e760a1ea9c1bd72cbb assets/create/models/block/fancy_scoria_bricks.json +aa752c7269ee79f584f2fd53b69f38ee407c5b83 assets/create/models/block/fancy_scoria_bricks_slab.json +616215efa32da630dca0e768fd2b2c4f3587ee3b assets/create/models/block/fancy_scoria_bricks_slab_top.json +0d1e864a85aee0a4e0b734d2c6fe7298195e056b assets/create/models/block/fancy_scoria_bricks_stairs.json +2910394962403031789e07ff7ce6cff411ee0d85 assets/create/models/block/fancy_scoria_bricks_stairs_inner.json +fb318bb52c43acfc0f371b69905ba4d286f85754 assets/create/models/block/fancy_scoria_bricks_stairs_outer.json +1888c192a0e765dbd264f64ae658ccbe1aa04a15 assets/create/models/block/fancy_scoria_bricks_wall_post.json +46351521c89870d27c8ed12937f5fdf8f4a234b2 assets/create/models/block/fancy_scoria_bricks_wall_side.json +daa7dca22c363d09a81f01716c80f09b22c65226 assets/create/models/block/fancy_weathered_limestone_bricks.json +857392d468416cdb55fdfa090e2c321c3fdf7024 assets/create/models/block/fancy_weathered_limestone_bricks_slab.json +8a63a56cf3ece060b1804ededdf103376691baa7 assets/create/models/block/fancy_weathered_limestone_bricks_slab_top.json +852a1dbcae18274080f6fe14483c21b8134bf56e assets/create/models/block/fancy_weathered_limestone_bricks_stairs.json +fff01c45f01d2b1c4c0555f2ab4d66442c90148e assets/create/models/block/fancy_weathered_limestone_bricks_stairs_inner.json +1ea72b0ca54c8237351b4be0a7b44b94a8b0bb87 assets/create/models/block/fancy_weathered_limestone_bricks_stairs_outer.json +d7385af6e7c8124fda4d391c2e7fba55cdc9977e assets/create/models/block/fancy_weathered_limestone_bricks_wall_post.json +215671ac8e468015e8d52054c863110465c33fc9 assets/create/models/block/fancy_weathered_limestone_bricks_wall_side.json +>>>>>>> mc1.15/dev 71f74388319567d4ab13c508bf3b4d59f1a19b2f assets/create/models/block/fluid_pipe/ld_x.json bd6b0c6d773e3996d949de55873d20b0e192499d assets/create/models/block/fluid_pipe/ld_y.json ddba92d010016a0147ceecc30a30c9c1622d3daa assets/create/models/block/fluid_pipe/ld_z.json @@ -692,8 +910,14 @@ ddc8bf8dc62464d424ab812f801dd7a1f68072d0 assets/create/models/block/granite_cobb 5c7340740d822deae7aa32c15c36531476862fbb assets/create/models/block/granite_cobblestone_wall_side_tall.json f55c5825c63f345a95e822a2113e76b5a62d8f7c assets/create/models/block/granite_pillar.json 6eb5e59e803e1055968b90f3099cd0a17a1d3fd5 assets/create/models/block/gray_seat.json +7e213be39cc928363bf2b096f055439211050b8d assets/create/models/block/gray_valve_handle.json 1438b8ce54ac5557b8f10dcef94f3525eae19461 assets/create/models/block/green_seat.json +<<<<<<< HEAD b1e94d2858c3a8807def6c5131b6f63fe586fb91 assets/create/models/block/horizontal_framed_glass.json +======= +cc7ce9b6bc687ad5027a67c3bf22bdf5bcd71674 assets/create/models/block/green_valve_handle.json +9730fcb02f679087e81e24c836751e625be6a298 assets/create/models/block/horizontal_framed_glass.json +>>>>>>> mc1.15/dev d13df8a5920c5778d98081fb0e97f045e2fd46a2 assets/create/models/block/horizontal_framed_glass_pane_noside.json 3e975bec02e2670ce2b1868cebcbd780a5ebf3f8 assets/create/models/block/horizontal_framed_glass_pane_noside_alt.json a5938ddd48109f067a19a90a0f9abab655c18821 assets/create/models/block/horizontal_framed_glass_pane_post.json @@ -715,8 +939,11 @@ cecf946818c65370b685dfeaade50819183acb41 assets/create/models/block/layered_lime 258fb9644d396872719c56ae1ca89f50667a1077 assets/create/models/block/layered_scoria.json 60b05926e706d5dd27f3cb4997120c948797f2f4 assets/create/models/block/layered_weathered_limestone.json 1a28b07da68d1461cd04c971ae548d94165e0cf3 assets/create/models/block/light_blue_seat.json +68e01f8d8a31f07f236383e19b49ae1be4cbe3f4 assets/create/models/block/light_blue_valve_handle.json 292bec1b9f962b17b29147d982a9b177618b7eb9 assets/create/models/block/light_gray_seat.json +42338c4965da63962ea08077dc9e899aaf4c3c65 assets/create/models/block/light_gray_valve_handle.json 31c9474210d8535c5417021fe042d4cc31e17328 assets/create/models/block/lime_seat.json +<<<<<<< HEAD fccac0de94fff5f4e180fc9dbddeb0f8ddf3baab assets/create/models/block/limesand.json 3c49d63386b3f5326051edbf6e2f0f8f0e2ff4f3 assets/create/models/block/limestone.json 84920646b4df506f94e64611ee231f3af51b5379 assets/create/models/block/limestone_bricks.json @@ -742,7 +969,34 @@ c54e5a17495f88fa21b3488e8da32a365452c36c assets/create/models/block/limestone_co 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 +======= +74008bd0d775b0e2e96b43be2e51d0f3c3abdf21 assets/create/models/block/lime_valve_handle.json +ce6fb36a386c895486e021823eb008b0fa4862c3 assets/create/models/block/limesand.json +a2cbc86d24fdd70c5f33c8b30ba52a8928dde63f assets/create/models/block/limestone.json +447686a6861773e03c5c18f2de4bc11d06c65f78 assets/create/models/block/limestone_bricks.json +4aa8f22c5c48b20170f7050ad7ecf65d08c1a6fe assets/create/models/block/limestone_bricks_slab.json +7a890ab6513ead1b4d20b023e7a04a4d4d8b8c3d assets/create/models/block/limestone_bricks_slab_top.json +180c37c3ecec8e036a12840b1440c6b9d7b21cef assets/create/models/block/limestone_bricks_stairs.json +a30fc3563f85b189a16cb4b2af6cbb587b33b354 assets/create/models/block/limestone_bricks_stairs_inner.json +cb8d4ba5a0e1372520f55ddd659ed8f944700730 assets/create/models/block/limestone_bricks_stairs_outer.json +bd46a9a9650fc893b0403a4427dace9fc2c0002a assets/create/models/block/limestone_bricks_wall_post.json +774de72109796d55c5548e4194461ce27083a20d assets/create/models/block/limestone_bricks_wall_side.json +59202c99e39fc26497cd7c27b2e5edc9b1310457 assets/create/models/block/limestone_cobblestone.json +fe6a5228bf9ca394b234afd82467efe65544afc2 assets/create/models/block/limestone_cobblestone_slab.json +d1718b257af8f892a6ed28638399a57cc6c3d8dd assets/create/models/block/limestone_cobblestone_slab_top.json +3a15866b7c6df7e035afcc4b32321d8dad07d5f8 assets/create/models/block/limestone_cobblestone_stairs.json +fd0a970c68c7025040bede0a07fef46c9047f611 assets/create/models/block/limestone_cobblestone_stairs_inner.json +abef3f97c28321ded3bafc90918377981038d7b2 assets/create/models/block/limestone_cobblestone_stairs_outer.json +eee8ae85daa99fcd594da3d4af393726af69493b assets/create/models/block/limestone_cobblestone_wall_post.json +0effd13c1ff224f4c2d7017c6505f48d31815934 assets/create/models/block/limestone_cobblestone_wall_side.json +7336e008b3af80e054c9f15be381b7fe307e97d4 assets/create/models/block/limestone_pillar.json +20432687c62402a4bc0f2415113e7470231cdf03 assets/create/models/block/linear_chassis.json +595bfec2293c44deae49147016cb7971bdd721df assets/create/models/block/linear_chassis_bottom.json +999ce855842170f47db9d1e8e8636c24f7d3ad3d assets/create/models/block/linear_chassis_top.json +b9abbd1dcf71e0a1416fd998a82a560c06cef5a3 assets/create/models/block/linear_chassis_top_bottom.json +>>>>>>> mc1.15/dev cbee001cd1bb1125a97d1bb2d1e6e5a68f129303 assets/create/models/block/magenta_seat.json +bc5a03a5552eb4a518abefe5e8615f14ee13ca29 assets/create/models/block/magenta_valve_handle.json 0492070642fda75b943080022368505f2d065730 assets/create/models/block/mechanical_bearing.json edf6ee4e590ebf162c00aa952d992f1bee2cad8a assets/create/models/block/mossy_andesite.json 55256e4df0038a619d80d3e6c50b0f3e3682e90a assets/create/models/block/mossy_dark_scoria.json @@ -761,7 +1015,12 @@ b9c27f90d4d258e3fdcd713aaa42142f5d46a79e assets/create/models/block/oak_window_p 8f77db5a66b165d2ca85f9119666907dcf65105f assets/create/models/block/oak_window_pane_side.json b3e056a176e86660fc2d3a51f9ba8b01eebb56c5 assets/create/models/block/oak_window_pane_side_alt.json fda0628a09ef726e3e8323b2f38b6a3e612dc2ca assets/create/models/block/orange_seat.json +<<<<<<< HEAD de5ecd753303b2c5dc3819299b9a316f0d7035f6 assets/create/models/block/ornate_iron_window.json +======= +3b07f3f1985495051d173725b01ddd52b5f70ac4 assets/create/models/block/orange_valve_handle.json +006115bf8e36367c0c409effdeab939a54c20776 assets/create/models/block/ornate_iron_window.json +>>>>>>> mc1.15/dev cc9614e892b12c6053d45a35d534eddf36285cf1 assets/create/models/block/ornate_iron_window_pane_noside.json 6b935d54de7c37f835df48f7b6e5e614a0d12b6e assets/create/models/block/ornate_iron_window_pane_noside_alt.json 19942331411716035d79adabe6d2daadd6025e90 assets/create/models/block/ornate_iron_window_pane_post.json @@ -899,6 +1158,7 @@ f924c6104378768a3a645f5e77f9ed80d2c31e5a assets/create/models/block/paved_weathe c7941c0bcbdf7ec7e2d34679afac744cf81b7489 assets/create/models/block/paved_weathered_limestone_wall_side.json 39aaea370e31fa032e471d3b8f0ebf0586ee1a03 assets/create/models/block/paved_weathered_limestone_wall_side_tall.json ecc60ce7ee6b753073a99c597db95d6d9df3d438 assets/create/models/block/pink_seat.json +<<<<<<< HEAD 84fdb35acc12ae9580496f458def3e49aa0551ea assets/create/models/block/polished_dark_scoria.json 5ca3d6cbbf1fdd6437d9951b9d2937838ec480f1 assets/create/models/block/polished_dark_scoria_slab.json 737cbe0048415e9e5c5c112fbad541ef17eab94c assets/create/models/block/polished_dark_scoria_slab_double.json @@ -959,6 +1219,63 @@ a25db26c0639a9d07219ff6e4e4cc0576bec8913 assets/create/models/block/polished_wea 96b3a50bb338484a88c448bb9a412b47e6faf45a assets/create/models/block/polished_weathered_limestone_wall_post.json d31088540cd68cf1156d9ebd328129aef36e17ca assets/create/models/block/polished_weathered_limestone_wall_side.json c934df1cfe097bcc0f0c21d1b1a3f3b53e50e831 assets/create/models/block/polished_weathered_limestone_wall_side_tall.json +======= +7ada61878d3a3c1d3cc33bcf9a80c21b8f9aaff2 assets/create/models/block/pink_valve_handle.json +83a4922d5799a5a1391a2675e9273caa24cde192 assets/create/models/block/polished_dark_scoria.json +3fcab24848791fcd591bf4a2a73147c3391e24b8 assets/create/models/block/polished_dark_scoria_slab.json +7c1b4b3b22c711224a54d55d7c49429c4238d5a7 assets/create/models/block/polished_dark_scoria_slab_double.json +3ea396a641bb21c15badaff996be3bca3076f73d assets/create/models/block/polished_dark_scoria_slab_top.json +9bbd768f40e839ac73f58f8cb5d53ae01c3fdf70 assets/create/models/block/polished_dark_scoria_stairs.json +9d1d2165a7c802518add0defccf6ae97e2d3b3d1 assets/create/models/block/polished_dark_scoria_stairs_inner.json +7b4401d6edb395052d409605a9d475e6345bd001 assets/create/models/block/polished_dark_scoria_stairs_outer.json +bc8ee0c03f6894b38bfa778fe5874d46fc2b6931 assets/create/models/block/polished_dark_scoria_wall_post.json +e2ba5f686d9bd400073073d40f571e7f780f60e9 assets/create/models/block/polished_dark_scoria_wall_side.json +3467c7239bcd6122ce8636f249e29f04dc3bec21 assets/create/models/block/polished_dolomite.json +69307691e26a042a769d9d9d223707083e42efab assets/create/models/block/polished_dolomite_slab.json +b6dadea740a2dec5edd6322994102d5014886d6f assets/create/models/block/polished_dolomite_slab_double.json +1085bcf23b13a587d620cce624546fa287104526 assets/create/models/block/polished_dolomite_slab_top.json +640ad613dce98a4fb37bf1c896fc12bf44762a8b assets/create/models/block/polished_dolomite_stairs.json +2d14ccf702b3d0074d12c04f84cea8a61d122ea3 assets/create/models/block/polished_dolomite_stairs_inner.json +0590c2b945abb66adb859cc85ebe22092f262180 assets/create/models/block/polished_dolomite_stairs_outer.json +298fa4cafd59612cac9cf9f2e8fe20228c02d28d assets/create/models/block/polished_dolomite_wall_post.json +7c52b561d00133ef0ed81036ad5552fbbe10285b assets/create/models/block/polished_dolomite_wall_side.json +ab65a7a8f0c12a441c8653043c59385b834ef71e assets/create/models/block/polished_gabbro.json +2931c767a92c642c7c0d296e38af8f08217263da assets/create/models/block/polished_gabbro_slab.json +f50506b204f2245893df223c86a9245af5ee7cc4 assets/create/models/block/polished_gabbro_slab_double.json +052969eeefba6fd97feb520bcfda97c994dad91d assets/create/models/block/polished_gabbro_slab_top.json +353ab3fa0c2250bff91efd7827f12af5d89f8ad9 assets/create/models/block/polished_gabbro_stairs.json +4c7796d26f3d0bda10244c3243d3e11691a90083 assets/create/models/block/polished_gabbro_stairs_inner.json +fa9f24ab6291189812c5697323c7b66bc960b23a assets/create/models/block/polished_gabbro_stairs_outer.json +bce13297eea7998073f998dffb5dfbd858f3c4ab assets/create/models/block/polished_gabbro_wall_post.json +04b2e4985401f484dfcd226ecb332247773b2f8a assets/create/models/block/polished_gabbro_wall_side.json +77cc6a327584ca4cef6ec3bab9eb1df1053a3fac assets/create/models/block/polished_limestone.json +78b4bc45cb2a89f07d7d012859aae4a995788ec4 assets/create/models/block/polished_limestone_slab.json +d4d74fcd6d6cb63d44392796bd7d8818dd117b57 assets/create/models/block/polished_limestone_slab_double.json +f1204df2a6e31679375045ea57cd07dff1d783ca assets/create/models/block/polished_limestone_slab_top.json +378038e958728919a2239eb0dd65ca5d72112b7f assets/create/models/block/polished_limestone_stairs.json +270091da3f63a2fb2af45ec0cc9200ecb45f5844 assets/create/models/block/polished_limestone_stairs_inner.json +4a7764d8e3aca090ccf34ab53b49941addd30523 assets/create/models/block/polished_limestone_stairs_outer.json +58620d0d6ac6bf70c5cf89951f6de84cf033ad7f assets/create/models/block/polished_limestone_wall_post.json +50b1a7510912db50bca9df368a7f1aade846cee8 assets/create/models/block/polished_limestone_wall_side.json +714126588c571fb7e56eab01b0a638de20f45270 assets/create/models/block/polished_scoria.json +d45780fed06163c231393bfff4ccd70a99e6ff4c assets/create/models/block/polished_scoria_slab.json +f7b96f804379f377038d07af4f1fbf6890ba7f7a assets/create/models/block/polished_scoria_slab_double.json +73d5e1cd975a506f2b07139d0506d5fa1021af75 assets/create/models/block/polished_scoria_slab_top.json +4eb1e9b1235141a2a1c529ca09a3353ee4be5cf8 assets/create/models/block/polished_scoria_stairs.json +0316333eddde04727d7def7c5b7555df6a4a8900 assets/create/models/block/polished_scoria_stairs_inner.json +e4e00e01fa479c6fc9aa450a2e7999ce94504987 assets/create/models/block/polished_scoria_stairs_outer.json +1b9e41ac5b2a89557613c2c8c2cd2c8abcf11af0 assets/create/models/block/polished_scoria_wall_post.json +46227ab60086f0978ba12b8c071b295060e775c2 assets/create/models/block/polished_scoria_wall_side.json +0975a5158ea64238f78c7db8e2a1ddbb4c49d9e6 assets/create/models/block/polished_weathered_limestone.json +8fdfd28ea7b9053b956a93c09d90129ba94baab9 assets/create/models/block/polished_weathered_limestone_slab.json +9243b6fa9210da0fed582b802d0ffc2e1923789a assets/create/models/block/polished_weathered_limestone_slab_double.json +9f3ff426e79bb446a3e913cb7fca0056bed57f0f assets/create/models/block/polished_weathered_limestone_slab_top.json +39bd43b67badad90e1377142facec0ef3e3cbbbb assets/create/models/block/polished_weathered_limestone_stairs.json +1eedeb1b66b7c48c848c66d3ed2d99f4d9e58966 assets/create/models/block/polished_weathered_limestone_stairs_inner.json +97c066d14c3ee37ce4f580d25d3c29ac94a6adf4 assets/create/models/block/polished_weathered_limestone_stairs_outer.json +6d690b231f60496f9b3103e71adda09f8e649158 assets/create/models/block/polished_weathered_limestone_wall_post.json +ba4e86079668f2c03070c99b8d8ef642b60fd634 assets/create/models/block/polished_weathered_limestone_wall_side.json +>>>>>>> mc1.15/dev 1c5e97ce8e5b3f5b320873120a4f3084915c0af7 assets/create/models/block/powered_latch.json 3e414b053b973729577a61bb1d73b9a2c2eb56a4 assets/create/models/block/powered_latch_powered.json f22d7d8263dcabd726aa04784031ae9062633579 assets/create/models/block/powered_toggle_latch_off_powered.json @@ -966,6 +1283,7 @@ e6097d9ab9dc9954cbc750020bc33c7a423b73c6 assets/create/models/block/powered_togg 622239a3a09fcac7235b9670eb395a530839a59b assets/create/models/block/pulse_repeater_powered.json d469dce70d15759baed35025b8c7fa403c8b3b26 assets/create/models/block/pulse_repeater_pulsing.json 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 7d1439a0b06e4014e396d498a9e42168f67773a5 assets/create/models/block/radial_chassis_side_x_sticky.json a9885a3f69e3e2a2812c33bafd9140fcc5cc7c25 assets/create/models/block/radial_chassis_side_y.json @@ -973,6 +1291,7 @@ a9885a3f69e3e2a2812c33bafd9140fcc5cc7c25 assets/create/models/block/radial_chass 522f4733118d6fba172696e9478c8f9fe88b236e assets/create/models/block/radial_chassis_side_z.json bffca231a146a6ac49e028f3790cdcbf375e98b0 assets/create/models/block/radial_chassis_side_z_sticky.json 12d4f4119b994c5d71c96ab3aa09beb89dad1e10 assets/create/models/block/red_seat.json +<<<<<<< HEAD 61ce6e1ba7fee30683c86b09ec35da4fbff8f9cb assets/create/models/block/refined_radiance_casing.json 0fa50139aa2ff171feaecf3062b2037fab10b786 assets/create/models/block/scoria.json 055249d2dec8b94abb919cfb834767c9fbfb89ee assets/create/models/block/scoria_bricks.json @@ -1005,6 +1324,39 @@ f6096d529b8f97f0bfdec75c13e4b31958346c58 assets/create/models/block/spruce_windo ea7952f49c78f0d7b95f3ed34df35a44a921ce15 assets/create/models/block/spruce_window_pane_post.json 04b92ecb2aea4264c58e2d3df0d77ab9fcdcf2d7 assets/create/models/block/spruce_window_pane_side.json a5bb90cb3f5353bbfe767b3d42f4d1dbac3b498a assets/create/models/block/spruce_window_pane_side_alt.json +======= +0064825ee3c1702c524d34abb6adb66906586851 assets/create/models/block/red_valve_handle.json +c4bb40ed2bddabff154a34f4eff7a485bf6488a0 assets/create/models/block/refined_radiance_casing.json +c145d8e0d7f8f41afa80b9727a107b2ad2f0c3c9 assets/create/models/block/scoria.json +59c6f6a4ffe43485244a8561d7e8341f796e268b assets/create/models/block/scoria_bricks.json +d86ca38a0c1bac89e545916c59f23f6f0c9f7d7a assets/create/models/block/scoria_bricks_slab.json +ac0731b633bf1d1af38fcb6b5c17dea405a017c8 assets/create/models/block/scoria_bricks_slab_top.json +aefdd0cf03f7b07ecbd20aa9743d8b0c1ac01c7b assets/create/models/block/scoria_bricks_stairs.json +fd93d2aa5e2e1646ddf12c3ca8c011eb0791653d assets/create/models/block/scoria_bricks_stairs_inner.json +54e43e6e17dd9df3696005cfb803fc20d403c1ae assets/create/models/block/scoria_bricks_stairs_outer.json +6e01226f5586ff2885b001a020386dcd9da4cea5 assets/create/models/block/scoria_bricks_wall_post.json +eb72b9a4daf4a045a7583d8187107edbad9d7856 assets/create/models/block/scoria_bricks_wall_side.json +a5feba461b74c57a9583ef855b779142a618a844 assets/create/models/block/scoria_cobblestone.json +b5de7b127d49a69ae57e4be6fa6a0299d9df357b assets/create/models/block/scoria_cobblestone_slab.json +7e5a50dbafa8f3b8e285fa6efb995ad234377242 assets/create/models/block/scoria_cobblestone_slab_top.json +0da9d63d95f0cc05e764c0db65dc9f05d9f6b803 assets/create/models/block/scoria_cobblestone_stairs.json +6fb83d3bfb13d62822fbab12bb991e7fc595c8ad assets/create/models/block/scoria_cobblestone_stairs_inner.json +de66b504054f37eca6e5eeee6245fb8f9db2e1bf assets/create/models/block/scoria_cobblestone_stairs_outer.json +34aa3f34fce851ac6f87be0c276e074dacd9bbf4 assets/create/models/block/scoria_cobblestone_wall_post.json +43cd43cc26ba06f953c52c3fb67841141a99da6e assets/create/models/block/scoria_cobblestone_wall_side.json +0e70dc21ac625a0796ded99c734087c97fa5966b assets/create/models/block/scoria_pillar.json +74cd7c13043f6a5c680a7c73ed46a44a7507b8bf assets/create/models/block/secondary_linear_chassis.json +fbe57e52b0234c2c379d82d6cc425d6ce9492454 assets/create/models/block/secondary_linear_chassis_bottom.json +e439d642f3c2049dce444b7b4bea8532eb22699c assets/create/models/block/secondary_linear_chassis_top.json +5fc7d8839c6de9363d22fd22be7f440aab853121 assets/create/models/block/secondary_linear_chassis_top_bottom.json +3020d66d33996dd4b203905a54538d3dd5f01330 assets/create/models/block/shadow_steel_casing.json +3fc9a7ae552095d0f45f8e632e2bf04d1378946f assets/create/models/block/spruce_window.json +f39904a8a73a25e440d6a35fad931f8ce7ef165e assets/create/models/block/spruce_window_pane_noside.json +7446e12a5ba91c008b17fd70484468caa36500b9 assets/create/models/block/spruce_window_pane_noside_alt.json +f15dfc9e4e6b991ee9fe10e8af3d9c98cb3d7e47 assets/create/models/block/spruce_window_pane_post.json +0e8be4d143d1fd8300c00ce709139a0e577cdec3 assets/create/models/block/spruce_window_pane_side.json +aea7061aed39bc8c9ab51c8d7d0d86b11fc9e6b4 assets/create/models/block/spruce_window_pane_side_alt.json +>>>>>>> mc1.15/dev 3bda065e24a71b82b92b9c805790ba6d1791ef6a assets/create/models/block/stockpile_switch_0.json 335d6bc2b19d3cdbc9ed8b344142e2e3aa397994 assets/create/models/block/stockpile_switch_1.json 655d5cd249291a550bb3508c97f5a7a3606a7848 assets/create/models/block/stockpile_switch_2.json @@ -1045,9 +1397,16 @@ acf3900465101f9dd78d2301eab1063cdb461582 assets/create/models/block/weathered_li 3235d3148535283e9e9b4ee336b92055e7c6bf01 assets/create/models/block/weathered_limestone_cobblestone_wall_side_tall.json 8c6feec0411e95f9aae18f9f38b4e045156857e8 assets/create/models/block/weathered_limestone_pillar.json 1377e12f56dce1466ce44078d7154870c5cf7b2a assets/create/models/block/white_seat.json +899f33d51cf36cb1c283bc7e6363f9d451e5736e assets/create/models/block/white_valve_handle.json 0a0e2cc973e35586ae00ed17b919383868e992e8 assets/create/models/block/yellow_seat.json +<<<<<<< HEAD 36c27bad342c82aa8dc097da87637dca042cce17 assets/create/models/block/zinc_block.json f3059145a84ddbd54d08167e984112c7baf5ef4a assets/create/models/block/zinc_ore.json +======= +55edee7b0833ab19b98694fab21ae0c8e91f76fd assets/create/models/block/yellow_valve_handle.json +c94c60d1d77404af7d74a29a094c7bdf7501b385 assets/create/models/block/zinc_block.json +a3ff06384fff574ac4cd6c253259f0734b025cab assets/create/models/block/zinc_ore.json +>>>>>>> mc1.15/dev 67ef6fd6ec26fc216fa5319b8538beb223da1530 assets/create/models/item/acacia_window.json c695dab3964186a857767b2b4975aebffa86dcf9 assets/create/models/item/acacia_window_pane.json 06d8b6e8f050b8ec0bef88b7633f3741baad4571 assets/create/models/item/adjustable_crate.json @@ -1069,13 +1428,19 @@ b0f664dd6de3d0ee9afcb6223fbcd53b97fa0d65 assets/create/models/item/andesite_cobb 75b8b00c2418b9660d35a7fabd0774925cf1c02f assets/create/models/item/andesite_pillar.json 795541cf7205d90531a23cd5b388f93a03bbf925 assets/create/models/item/andesite_tunnel.json bf1fc6bdf7fca6f1958a2d3e96202c1cecb50669 assets/create/models/item/basin.json +<<<<<<< HEAD ffdb36349fa2e50451c208585162b6a8386ec494 assets/create/models/item/belt_connector.json 695a69d5854e2eb134b55d855bd2b7b18808a01d assets/create/models/item/belt_observer.json +======= +1da382e7e58eaa9788f5b1d92221ccac573e068f assets/create/models/item/belt_connector.json +>>>>>>> mc1.15/dev 9044243882cfd49a2827e1b910a4c9b0e46daa47 assets/create/models/item/birch_window.json d537fffaede521efa525fb2a7f9863fe6a80054e assets/create/models/item/birch_window_pane.json 22632bd681c8a605f0845f7549770389a741156a assets/create/models/item/black_seat.json +56a6baedc608792cd6ab72a1c4fd53046cbda070 assets/create/models/item/black_valve_handle.json 80a6e8b00709fe0521aca5b789ae17485ed9c56d assets/create/models/item/blaze_burner.json 0e1977585128fc0ecef640f72e5fc5e9fb47ef92 assets/create/models/item/blue_seat.json +bec96ebf3369d3cffa9bb1b8bf9f2a5cd5d0ef96 assets/create/models/item/blue_valve_handle.json 17d340c3678bd24cb085ba49490b2b4cb341a9e7 assets/create/models/item/brass_block.json f5a18f4279c2e845a5967b1c2f9e807c2bb77afb assets/create/models/item/brass_casing.json 099961ca4a75b6ecfddd1db6dd29909276759f3b assets/create/models/item/brass_funnel.json @@ -1085,6 +1450,7 @@ d5e8b577aee56671e117a4a2ac93e58680b51949 assets/create/models/item/brass_ingot.j f7aca6aff65e1de269a99cf2a280d9841b7a0076 assets/create/models/item/brass_sheet.json 427bef12405e2a99fbf49e27ea5944add244252a assets/create/models/item/brass_tunnel.json 24df6f8391d8ba09cef46e69d65d32ea770745cd assets/create/models/item/brown_seat.json +54211d3bdbeba2ea4dbaed43daa740ae3331640f assets/create/models/item/brown_valve_handle.json 3e232a103f7f916fc11edb4d541ca99fe7b44181 assets/create/models/item/cart_assembler.json 99d64b76b3baa84c3bd4b96ccd3376ca12425950 assets/create/models/item/chiseled_dark_scoria.json 83d3571eacde52568786802b268f24c6578c1e5d assets/create/models/item/chiseled_dolomite.json @@ -1096,6 +1462,7 @@ fe67c3f380d17735a9436a4579a8be1a02b8e4a0 assets/create/models/item/chute.json b1531a7bd3f7f27b9587d13e818a93dc2d088bc8 assets/create/models/item/clockwork_bearing.json 0a2a0f0aafeab0088172f77afd40c1fa2cc1f2b8 assets/create/models/item/clutch.json dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json +7717e3b21cff39f497f07687c70c1fa40eaa756d assets/create/models/item/content_observer.json 965a90a882d85dba93b30af9bce7ecf8e68ce747 assets/create/models/item/copper_block.json 759bcb5fe7dfdd628716f9b4ff19a5ab00393381 assets/create/models/item/copper_casing.json c2a320162daa2d24cef969d1d14a0cbd55eb574f assets/create/models/item/copper_ingot.json @@ -1104,7 +1471,12 @@ c2a320162daa2d24cef969d1d14a0cbd55eb574f assets/create/models/item/copper_ingot. 177dafb51d70c55ec62036332868efed4e01f353 assets/create/models/item/copper_sheet.json d7cb2f7bac8fae893fc5179af8140786a908f3f5 assets/create/models/item/copper_shingles.json f56bf22324faf8958eaef4d94b958f1108d52e5a assets/create/models/item/copper_tiles.json +<<<<<<< HEAD 4e253e7c0626dfd76e2d39786ce1a34e0baaa62d assets/create/models/item/crafter_slot_cover.json +======= +5583368909c319acfcf0f7a419bedf23272fe613 assets/create/models/item/copper_valve_handle.json +4e9126b349d55c65aa5407f05700579e52101c1f assets/create/models/item/crafter_slot_cover.json +>>>>>>> mc1.15/dev 7b333dea353afaa27b182aedc647c9e9e34e92ef assets/create/models/item/creative_crate.json 5b39403f6c81f05e566b621b62e267267de47c41 assets/create/models/item/creative_motor.json 6281a7439c92459761893835f91fde25467fae76 assets/create/models/item/crushed_brass.json @@ -1115,6 +1487,7 @@ cd148cb7e881091ecce2390dac0d9f545573c91c assets/create/models/item/crushed_coppe 823c91f63565db54ec3944a1e90e7aee18e41062 assets/create/models/item/crushing_wheel.json dae5cffa4e1263d6a113469f79fba8695fa8232a assets/create/models/item/cuckoo_clock.json 3e3edc9ccded444496d3336926b93bbf1234cd84 assets/create/models/item/cyan_seat.json +523cd531eadaadc45fb356ca58b99a8fe206c3a7 assets/create/models/item/cyan_valve_handle.json f786a43e296d9f10d7c302fe3ae9cddf4ba9984e assets/create/models/item/dark_oak_window.json 515d55b1ce18543fdb44b194901040fd29e75818 assets/create/models/item/dark_oak_window_pane.json f0e98871e4bb68c29954f2de24566a6404f21d9c assets/create/models/item/dark_scoria.json @@ -1194,6 +1567,7 @@ fcb036f9bd424152670acb324cc38069426c005e assets/create/models/item/fancy_scoria_ 2be26b4e13f5388f92834d390c2819e902efe781 assets/create/models/item/fancy_weathered_limestone_bricks_wall.json e5e6fb6eb182b85b977e1025a7fe84d46de59320 assets/create/models/item/fluid_pipe.json e7d2097256fed545064a37d233e7b810b04c26a4 assets/create/models/item/fluid_tank.json +f4727119b75ab632c3ad295be4d398b1919d782f assets/create/models/item/fluid_valve.json 8707332c0cb6ee123e7962d08536a60725c64ce8 assets/create/models/item/flywheel.json f2496d3b16e5b5415474bcfb7d6c6a6c3b28ed60 assets/create/models/item/framed_glass.json 1041d462c6e856f7f3f2365c299c0599703d1ed7 assets/create/models/item/framed_glass_pane.json @@ -1223,7 +1597,9 @@ c1bb87fdbbefaf74e1ead186c43417a051ab3965 assets/create/models/item/granite_cobbl 55d1257e4ff2e505c941975f51736eb43e53860b assets/create/models/item/granite_cobblestone_wall.json b84a947a1b297513c85bb8d2dbbb780304c95e43 assets/create/models/item/granite_pillar.json e7daa31c1fc445d542bad476dfe1d6a8811f2070 assets/create/models/item/gray_seat.json +0f4981408b08a736ff3eb5bdf1823cd7019ae9fe assets/create/models/item/gray_valve_handle.json 1c9c9157a06108bf58967bfc4fb069c35d20e90a assets/create/models/item/green_seat.json +ecb9f32f62d3fa43fb226ab85adc2eb229fdfb77 assets/create/models/item/green_valve_handle.json 398b1a7c76c7bdb6a23b1248fdce98f6d835467f assets/create/models/item/hand_crank.json cfab82a2cf7495d21778c1de9730a26afbdd523d assets/create/models/item/handheld_blockzapper.json dee43bf1a9c211a752fac2c07aeba123f7f0c914 assets/create/models/item/handheld_worldshaper.json @@ -1245,8 +1621,11 @@ ad40f8eb28bea731131aeaffee55abecb8bc6a56 assets/create/models/item/layered_limes e7585210cf4754c89b4ba3dc95827b75029f0523 assets/create/models/item/layered_scoria.json 2df30e7f8cacc1efd6e025564d495f782e0dc697 assets/create/models/item/layered_weathered_limestone.json be2b6d54afc515d93d6d5b3023c506c53cc946f8 assets/create/models/item/light_blue_seat.json +34c308977750da24db80bf2ea2dd6cfc22ea1db6 assets/create/models/item/light_blue_valve_handle.json 1b36382eae41b35585e5659cda019310731000fc assets/create/models/item/light_gray_seat.json +a89d397ac14482a973f7937f046dbf8e42d017bc assets/create/models/item/light_gray_valve_handle.json 2127f20dca4421802812e249b3caca6230a37eee assets/create/models/item/lime_seat.json +785b008d703728497f5f941e3211d6e10389f1b5 assets/create/models/item/lime_valve_handle.json a29733a916141abf84492a288fe9ac4ed531f47d assets/create/models/item/limesand.json e0a1c6102acc10a36de5ae87da629dd3d676e204 assets/create/models/item/limestone.json 1c2b99db54863eac4947824f4169e51c25d05bde assets/create/models/item/limestone_bricks.json @@ -1260,6 +1639,7 @@ ebdf23b99b7895e347c29057c8070a6e16e56beb assets/create/models/item/limestone_cob 8065de871ad2fbaed711735561b8ed91a2ce0004 assets/create/models/item/limestone_pillar.json d245aa4994ff197b1ffeb7980d05f96bd20cdeb3 assets/create/models/item/linear_chassis.json d912be3e87f2beaa8e22747f867739139667241b assets/create/models/item/magenta_seat.json +928c5e3747fb758d2610475258cc168b0d4ee7b6 assets/create/models/item/magenta_valve_handle.json 932facf4bf93b471e8630f4132a4284a9f4d0d39 assets/create/models/item/mechanical_arm.json 49dcc373c33f6fc3760add10eb51bd96cd4fd028 assets/create/models/item/mechanical_bearing.json 65ac4f19973ddeb1bb4d672f57319130e736e116 assets/create/models/item/mechanical_crafter.json @@ -1290,6 +1670,7 @@ bafe601f186e868819da3d29f7be7dc96f9ba790 assets/create/models/item/nixie_tube.js 7a336a340f3e4927d7a35f9d79e8a03693b802aa assets/create/models/item/oak_window.json d0a6219860420f910300e86cbec1b08d4b47f436 assets/create/models/item/oak_window_pane.json 25dfcc8b6f085722f6b2a0c686b77d437e61542e assets/create/models/item/orange_seat.json +62ac36250e2505f23ea4d2c3b4630239c049f276 assets/create/models/item/orange_valve_handle.json 0ffe242e3165d9a0e3fe16ad4c4ca91c7e9828b2 assets/create/models/item/ornate_iron_window.json 7d7da05da6248abc177e89988ed5c2aff1151767 assets/create/models/item/ornate_iron_window_pane.json db23dec78b3355fc0de3485b8e9d915a20dc1f93 assets/create/models/item/overgrown_andesite.json @@ -1338,6 +1719,7 @@ d60c4fb6e0e68d8f6c137a0c601145c342236c18 assets/create/models/item/paved_limesto d81f85aea5e683539a0f3c805c154b76a9d88a9d assets/create/models/item/paved_weathered_limestone_stairs.json 910eaf2f571bae883b888d13f305bd848d278577 assets/create/models/item/paved_weathered_limestone_wall.json 9664f171c7856661776c5c4ef0b6880a77db648e assets/create/models/item/pink_seat.json +7d12cc24b86fcb3f0ca6fee650d1dee683859c0d assets/create/models/item/pink_valve_handle.json 04ce23dc141bedccc75b4512263da8b498f13205 assets/create/models/item/piston_extension_pole.json 1f7846aa06c3c22614c98cbec9112cc8632fa1b8 assets/create/models/item/polished_dark_scoria.json c46f1191cfa225fa76973208646e7bd86d7fcb5f assets/create/models/item/polished_dark_scoria_slab.json @@ -1363,17 +1745,30 @@ e95125318055b8557afd7d108488cf0bdd81fe49 assets/create/models/item/polished_scor 8197d4494ff1d8d81be8fac9285246cc1c6bcf54 assets/create/models/item/polished_weathered_limestone.json 68fb04f7a89c8117bb641e347df9bfc1f1248335 assets/create/models/item/polished_weathered_limestone_slab.json 6d92ee7112aa20e8a1adfe73d8933031c299bed1 assets/create/models/item/polished_weathered_limestone_stairs.json +<<<<<<< HEAD d98a1d479dff88d7a6f084f2c9de8fbbf80961ef assets/create/models/item/polished_weathered_limestone_wall.json ef2c9dcd5f6385a0f0cdc2e9120c984827863100 assets/create/models/item/portable_storage_interface.json 417c301eb7e54f14c564975570f59d048cc88987 assets/create/models/item/powdered_obsidian.json +======= +b4995fb4799f33508cd6bf2ded80c0b3e866ad43 assets/create/models/item/polished_weathered_limestone_wall.json +3bc60b0d9884c2ee0f1dd530e90fceb699eea737 assets/create/models/item/portable_storage_interface.json +d3cfc1a1137c4bc98848947d425d2972df144c95 assets/create/models/item/powdered_obsidian.json +>>>>>>> mc1.15/dev 1e501c1f2e9250aaaadcf17db62646d08177d4e1 assets/create/models/item/powered_latch.json 3a6dfc7f36e31ebfcd650c3144a7f2210e8a4f9f assets/create/models/item/powered_toggle_latch.json 4a3c3d81097d56bbd3aefeeb9eb7db87f514b5b4 assets/create/models/item/propeller.json 4b8a27ff05ed5331889dfc4b0b4562f3e94b0dfe assets/create/models/item/pulse_repeater.json a598b2f5eb34b061e81efb8a55267a02f8e08a61 assets/create/models/item/purple_seat.json +<<<<<<< HEAD efbda15b53084acdac2d36b8e0a764a9ab34d723 assets/create/models/item/radial_chassis.json fc05c4492da3d17add7e410323a47456c0d21e0e assets/create/models/item/red_sand_paper.json +======= +e5138f9e37ca4d24cda2eb7b24a021eb7c8ae21c assets/create/models/item/purple_valve_handle.json +469652eb5baa92008dbfc4deec232c3381684af6 assets/create/models/item/radial_chassis.json +ba99e2fdb64892f4f479a8ac51c226cb5f71f659 assets/create/models/item/red_sand_paper.json +>>>>>>> mc1.15/dev 3e251514aa698076b73fdbfef720b78b21d3bd93 assets/create/models/item/red_seat.json +b959a1b35105c2c21933418bd29ce12a090716f8 assets/create/models/item/red_valve_handle.json b9a4ac219a27e60a82f55129f2df5ae6183981e2 assets/create/models/item/redstone_contact.json 52e561abeb954d0349e640566de92ef80ccbf919 assets/create/models/item/redstone_link.json 81c7f4381cbda69aebcb07700cb998f49c38c8c1 assets/create/models/item/refined_radiance.json @@ -1432,8 +1827,10 @@ ea1d735b557a71bbb2b35e5f03ba571d54c38dbe assets/create/models/item/weathered_lim 30c449f637e8d56b7670b81ec2a90942e2972739 assets/create/models/item/wheat_flour.json 9502a51ed2f6a110b6d41731a5948be4d70c8af8 assets/create/models/item/whisk.json 69328eb4f91c4407fbcad5e3c4b88363f1a9572c assets/create/models/item/white_seat.json +be7a2d59d43083d7f2427193dcb9d68004224dd3 assets/create/models/item/white_valve_handle.json 2527b52413965a3e84b4718e08a9b8bb30a741ea assets/create/models/item/wrench.json 4b49bc2418410cded5f0b7da3430f1a22e049f18 assets/create/models/item/yellow_seat.json +790daf016f980801e7587b548a325082c65f6f03 assets/create/models/item/yellow_valve_handle.json 9365b5cf29e35d070d077c54520f6cc780aeb842 assets/create/models/item/zinc_block.json 866fbb0ce2878a73e0440d1caf6534c8bd7c384f assets/create/models/item/zinc_ingot.json a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json @@ -1582,9 +1979,9 @@ afc74c4dda92c4976703a1c488182188c3482839 data/create/advancements/recipes/create 4793d335955c9d6c293e1358dc227eac93a5fe61 data/create/advancements/recipes/create.base/crafting/logistics/adjustable_repeater.json bbcf2a888e12c41aedf7b44a1b0d92b7b9fe853b data/create/advancements/recipes/create.base/crafting/logistics/andesite_funnel.json b53ed0a286512d2695caf0430433483bdeeeef95 data/create/advancements/recipes/create.base/crafting/logistics/andesite_tunnel.json -678bdd68437274edf4630af1440525764be35dc6 data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json 66dbb3486c5d38d309dd480e3f2ab0eb5ff9e559 data/create/advancements/recipes/create.base/crafting/logistics/brass_funnel.json 2127c0f1d822cc88a24d98ebb9eead9de5837ffe data/create/advancements/recipes/create.base/crafting/logistics/brass_tunnel.json +ca9ad1e9129745c3d21af86bc795b5a65ba086a2 data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json b9b0a8bfff61a89149d4fcadf679f753385212d0 data/create/advancements/recipes/create.base/crafting/logistics/powered_latch.json 9951f2d35f7444c98c022142119b18b1289ca734 data/create/advancements/recipes/create.base/crafting/logistics/powered_toggle_latch.json 76d4c5f04d0a3e6817127a828594388b18f210c4 data/create/advancements/recipes/create.base/crafting/logistics/pulse_repeater.json @@ -2052,18 +2449,20 @@ d3202a337c15c8b8ec41fa5879bb94327bb75057 data/create/loot_tables/blocks/andesite 317aa99086127c649981b7b2fc85e66774a30f58 data/create/loot_tables/blocks/andesite_tunnel.json 14bf1764b9313893b6a6f57094f9506ac9fa71a8 data/create/loot_tables/blocks/basin.json c7f81e30c31837a287d6d6040cdb02c7dec11441 data/create/loot_tables/blocks/belt.json -1104e323abb2a8c25769c47dc5d1154965113cc9 data/create/loot_tables/blocks/belt_observer.json 67a8e2513c3cb09e6fe80279fda94f79d5018c37 data/create/loot_tables/blocks/birch_window.json bf1d5843f93533f84bc4adec5b77da2114fa2025 data/create/loot_tables/blocks/birch_window_pane.json cccc209d172cc7bac76f1b4ac79085ee90742ab2 data/create/loot_tables/blocks/black_seat.json +f3573f47b8a914aa222633893e158f84fcd6f3d8 data/create/loot_tables/blocks/black_valve_handle.json a2313c9b7d114396fca3c86a740d23fce3873679 data/create/loot_tables/blocks/blaze_burner.json 3834f7ac2bbc42cead02d4973842adb9ad97e6bf data/create/loot_tables/blocks/blue_seat.json +fcddccd1bf45c2f4ad5f1520e209a4f04487274a data/create/loot_tables/blocks/blue_valve_handle.json 1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_belt_funnel.json 70d9d4def43d5b31fa7cdc5ca5002c71cf4a90b0 data/create/loot_tables/blocks/brass_block.json 8a14258ad5d79d9e4dc5a318905644b446196420 data/create/loot_tables/blocks/brass_casing.json 1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_funnel.json 6c8e784677d1a843b6c707484c79751acdb46ebc data/create/loot_tables/blocks/brass_tunnel.json d415862a0abe20e8c5c2c8125bb672065330a9bc data/create/loot_tables/blocks/brown_seat.json +fedfe922f568c06adc2dfdd641b9abc90ba5af8a data/create/loot_tables/blocks/brown_valve_handle.json 0be542fef3bc0e1a0d556883568a1400a8b97df1 data/create/loot_tables/blocks/cart_assembler.json ab820bbaaf67c6697dfbab33c05fb73b18c70bfb data/create/loot_tables/blocks/chiseled_dark_scoria.json 1f907058afd7d8dbe628c9ab315b8ddbdccfbfda data/create/loot_tables/blocks/chiseled_dolomite.json @@ -2075,17 +2474,20 @@ adde89e46b12de1eee6fd0c5cb98c5f45feefc15 data/create/loot_tables/blocks/chiseled 778b53c36d73b6e9c78fd6c091c9c3535c3c18f7 data/create/loot_tables/blocks/clockwork_bearing.json d76113310fc56eca6382d44df174096f2210d416 data/create/loot_tables/blocks/clutch.json 673ba3a5deae9133b917d16c9eb87fe4c2873c8a data/create/loot_tables/blocks/cogwheel.json +096af6b5df6e87d36cb936eea9b00982a554f4af data/create/loot_tables/blocks/content_observer.json f38802b919c49f162f102d6e5d94113f05bf4ab1 data/create/loot_tables/blocks/copper_block.json 5a65a18ea787130ac7b8f5652bfa5ed187446649 data/create/loot_tables/blocks/copper_casing.json 31a51237763c374b7cdf39b9b62c14e965871047 data/create/loot_tables/blocks/copper_ore.json a5a7ba88a1d38da83b37bbe842dc7cc0544f37be data/create/loot_tables/blocks/copper_shingles.json 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 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 d370ee874b5b6b98e9a8c368218fe61f644d956d data/create/loot_tables/blocks/cuckoo_clock.json 49a14b9e93abdf02a7aef9c0c4085ac89617fae4 data/create/loot_tables/blocks/cyan_seat.json +fe24fd296812fea3f838defa2ca6270523d9d48e data/create/loot_tables/blocks/cyan_valve_handle.json fd309e1d39dcbcb25c3361edecd8c9afa0f847d0 data/create/loot_tables/blocks/dark_oak_window.json 58e6307ba0efa65a0715662a391fe7dc6fba0c68 data/create/loot_tables/blocks/dark_oak_window_pane.json 7a40002e4c05f6456b52558b9ee9607cfc868a69 data/create/loot_tables/blocks/dark_scoria.json @@ -2161,6 +2563,7 @@ e4d0fe35d3441a5815bd4e1357329b284e63ecd8 data/create/loot_tables/blocks/fancy_we 6bb505bad78cbb01a5cb5a069435bf4ed0e62adf data/create/loot_tables/blocks/fancy_weathered_limestone_bricks_wall.json c8aa9bbed8fd703eb1853de0b7c9e04dffb7a511 data/create/loot_tables/blocks/fluid_pipe.json 108d27b697d2ea0719d74a704c6e344a8d63375b data/create/loot_tables/blocks/fluid_tank.json +40dbf1f193787f3c6437de8c0a828ba4e37f10fc data/create/loot_tables/blocks/fluid_valve.json f37526c092c645045c22674dea6c7b1ec503c9c3 data/create/loot_tables/blocks/flywheel.json ce0bb978b11935bc2d1218445f8ab18099af6b8a data/create/loot_tables/blocks/framed_glass.json 89bd90ecd7a1ce1f75bd873989cc58a84c8dcef9 data/create/loot_tables/blocks/framed_glass_pane.json @@ -2188,7 +2591,9 @@ feca8a1f62e0e13fcb2252d5f782d74938b84431 data/create/loot_tables/blocks/granite_ 1d225a68b09d6f389aa7ed48aa05979bdaa482a9 data/create/loot_tables/blocks/granite_cobblestone_wall.json 87a4ac3db5ec80613b940abccc72fc4b37cee0ba data/create/loot_tables/blocks/granite_pillar.json d014357b3a467b23473c8223f32471a04a9ff94c data/create/loot_tables/blocks/gray_seat.json +35f916fd0f8465a070270615dbddd716ff68d5bb data/create/loot_tables/blocks/gray_valve_handle.json a71599eecd3f1179e3d0367623460e798828aa6d data/create/loot_tables/blocks/green_seat.json +865ebead9601b29e6326dc9e1d4c1ca92f3b7a3b data/create/loot_tables/blocks/green_valve_handle.json 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 @@ -2205,8 +2610,11 @@ fa8a5922f7346a15a80b5c7e5dfc26d24ea98728 data/create/loot_tables/blocks/layered_ 0ec9e366708637a01e600a2a12cc267d81b3f69b data/create/loot_tables/blocks/layered_scoria.json 54816065cd735dfe53b1eb551110ba18c6e3746a data/create/loot_tables/blocks/layered_weathered_limestone.json b403848d3a4b4ad7a048e70c21e200e40d0c67e3 data/create/loot_tables/blocks/light_blue_seat.json +32afe3fff74ccda4151567961fa6c0b8e3735358 data/create/loot_tables/blocks/light_blue_valve_handle.json 0cc2b20cb6e2dae6cf9d759c85926663f6066c99 data/create/loot_tables/blocks/light_gray_seat.json +8cc64a1dfb7ce7be2c063248d912c68ad2fe999c data/create/loot_tables/blocks/light_gray_valve_handle.json f7893090c6ecb4862c90c408b7f9ce8316f8b608 data/create/loot_tables/blocks/lime_seat.json +cae6d16c8967164698efbce3b91018a8e79a81e9 data/create/loot_tables/blocks/lime_valve_handle.json 7dfd638cc6f0d22bbc8fcbdb7212a3bfc8c85223 data/create/loot_tables/blocks/limesand.json 9d585f677a32a2336df5f17b5b389cdee867939f data/create/loot_tables/blocks/limestone.json 57134f7d3d32fc1c48f2a20c4be84388587092bc data/create/loot_tables/blocks/limestone_bricks.json @@ -2220,6 +2628,7 @@ cb315814960850b5080598b89ee94c833b5048f7 data/create/loot_tables/blocks/limeston 371115e5ceb08c07a9ab2371509960c31e0baa8a data/create/loot_tables/blocks/limestone_pillar.json aa751d2e8a7889907c08c4bec6f6ca266230b6d7 data/create/loot_tables/blocks/linear_chassis.json 9e5e017cd3b4f544f487a5ca22ef610a4addc8ec data/create/loot_tables/blocks/magenta_seat.json +517e983d7387ec0d86845d4cf3deaa6d68c71170 data/create/loot_tables/blocks/magenta_valve_handle.json e64c32da44b7e92dbef36fcb448c42b9bd9ae47c data/create/loot_tables/blocks/mechanical_arm.json 90ddf7b5c3b61758a4ad12a1e6ef16fe6ebf7794 data/create/loot_tables/blocks/mechanical_bearing.json e93872a90e4f4642a003539e7db28fdacfdcd114 data/create/loot_tables/blocks/mechanical_crafter.json @@ -2250,6 +2659,7 @@ d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/nixie_tu 0b2b142cfb3ebe9d4506e498a8e31f48d00db58d data/create/loot_tables/blocks/oak_window.json 90cc4d5857f47c48e2b82f394de9567023c5c8ce data/create/loot_tables/blocks/oak_window_pane.json 2333aaea940816b6bc8454ba24e0c9f52af94ac0 data/create/loot_tables/blocks/orange_seat.json +13338687962ef5b48dd9d142a2a862637d5c6953 data/create/loot_tables/blocks/orange_valve_handle.json 267e9e24fac93e3496a80fcb6ed8e9d1c329d2d2 data/create/loot_tables/blocks/ornate_iron_window.json 1fe77a16f4c86993b5fb30f1f48362787fd7cd0b data/create/loot_tables/blocks/ornate_iron_window_pane.json 8d91485a5f353c6fb84e16bd0d9d4a55aaeb31ab data/create/loot_tables/blocks/overgrown_andesite.json @@ -2298,6 +2708,7 @@ dfeba5c6de20e9ec0252e43b7c4046f017284d3d data/create/loot_tables/blocks/paved_we 67b9227237ed2a8c09c4183c0f2ab1b3bd07084b data/create/loot_tables/blocks/paved_weathered_limestone_stairs.json d3e4ab984aef19ee21a1c5b868eb3fde96c05afd data/create/loot_tables/blocks/paved_weathered_limestone_wall.json 6f32e1217986407e41358e9417de63602c78e810 data/create/loot_tables/blocks/pink_seat.json +d85b09659f08a73513c57b1b2e5ec7fc4b6f340a data/create/loot_tables/blocks/pink_valve_handle.json 1087b6c6d88dc7c71ed81e1d3e180fe065e6d098 data/create/loot_tables/blocks/piston_extension_pole.json 05302657546d8d410e367e84d4d5e01f01523236 data/create/loot_tables/blocks/polished_dark_scoria.json 1b323a883816428ff851462f61d00eaee7255e33 data/create/loot_tables/blocks/polished_dark_scoria_slab.json @@ -2329,8 +2740,10 @@ a3fb7d3e3bf9dc73ce754002f10c469d57db1f71 data/create/loot_tables/blocks/powered_ 205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/pulley_magnet.json e8fb62c91226ac107dee45c5ebc54c8dd0aee224 data/create/loot_tables/blocks/pulse_repeater.json d7f6caa568e6508177a644fb78dc18ce26c9b2c0 data/create/loot_tables/blocks/purple_seat.json +773e4dc856044dabfe9d2323cbda0460dfb626ee data/create/loot_tables/blocks/purple_valve_handle.json 768420dab8785909891e52c4d77a182d99ba11d3 data/create/loot_tables/blocks/radial_chassis.json 71b0fa3b174efe94a2a735ab2426c376c0ef674a data/create/loot_tables/blocks/red_seat.json +59ee0fd35978068fbce0882e0b207db7eeb202c0 data/create/loot_tables/blocks/red_valve_handle.json f5907a694206facc01f61f3428f72488486761c7 data/create/loot_tables/blocks/redstone_contact.json 886a0c1386fb12104b736a15689030aaff771270 data/create/loot_tables/blocks/redstone_link.json 5569a01114939be4b09cc1414e33d7211d7aada3 data/create/loot_tables/blocks/refined_radiance_casing.json @@ -2378,7 +2791,9 @@ a89f425c47c3831071b556697169a3124370aed7 data/create/loot_tables/blocks/weathere e8f3af61d9a2fd1ff5b32c9bb474ed005e6d70c4 data/create/loot_tables/blocks/weathered_limestone_cobblestone_wall.json 54358a64639957cc66ffa5296ff45723f7adf00e data/create/loot_tables/blocks/weathered_limestone_pillar.json 969eda31556feb5a68e350762848d17453275fee data/create/loot_tables/blocks/white_seat.json +79fe374f8e677088f928a3a49ff5eeed6128d165 data/create/loot_tables/blocks/white_valve_handle.json 37ead431a278928a09b260ae06a448e2c791a73e data/create/loot_tables/blocks/yellow_seat.json +899bb208908a2f9bec5e544ff47526f3e24db720 data/create/loot_tables/blocks/yellow_valve_handle.json 94661e726b3d19271550359ae898a5590939512e data/create/loot_tables/blocks/zinc_block.json 37248ca92d474e440b91c27e3c8e78e568328100 data/create/loot_tables/blocks/zinc_ore.json b65bac8bc2fbfd476040c1aab1c0588b8bd59ebe data/create/recipes/acacia_window.json @@ -2522,9 +2937,9 @@ c465151b64381e2222203bf069b717435fdc2b26 data/create/recipes/crafting/logistics/ 34bcdffae0b104829161c86b7d161068f890daa2 data/create/recipes/crafting/logistics/adjustable_repeater.json fc75c87159569cb6ee978e6d51b0c3b0f504b5de data/create/recipes/crafting/logistics/andesite_funnel.json 660e824ab6042c145f02ffcfe95a34c38f113e19 data/create/recipes/crafting/logistics/andesite_tunnel.json -95cc99c90cb146eb85023748c4230840a4e6568e data/create/recipes/crafting/logistics/belt_observer.json 9b4e74f9a950191134d978bf45c3339212677b0d data/create/recipes/crafting/logistics/brass_funnel.json 2ae06df0357c494b53db0ddf9655c60ef2022d0b data/create/recipes/crafting/logistics/brass_tunnel.json +8559045b42abd99490fb9a3cf5d06b08fd014b38 data/create/recipes/crafting/logistics/content_observer.json a32ac53848862837f3044ff9c81ed62c1134fe4f data/create/recipes/crafting/logistics/powered_latch.json 660eb73bcc66c1528cbd4d4204ad6b771f4bd721 data/create/recipes/crafting/logistics/powered_toggle_latch.json 74b8a38d252cce564cc63db2ade41ed2d656d025 data/create/recipes/crafting/logistics/pulse_repeater.json @@ -3078,7 +3493,7 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone 0f3c993eb6dd3f37953f304b8fad15bf60469ef4 data/create/recipes/weathered_limestone_cobblestone_wall_from_weathered_limestone_cobblestone_stonecutting.json 6eceb25fabbb6b389ca35de3b829ad061c9c456a data/create/recipes/weathered_limestone_pillar.json 11667414f73bc2d00bda7c5c1a7d2934bf6e9165 data/create/recipes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json -10bed57f3eb989a643eb3609f177e30536f07965 data/create/tags/blocks/brittle.json +6d73642c6c64a8f7ebe6041218ac5a9fe2379e52 data/create/tags/blocks/brittle.json 246ee2ec4e778e38a362f319506564886d4e0e76 data/create/tags/blocks/fan_heaters.json 798ef82869dbe22682121504a372e95607a785dc data/create/tags/blocks/fan_transparent.json 74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/non_movable.json diff --git a/src/generated/resources/assets/create/blockstates/belt_observer.json b/src/generated/resources/assets/create/blockstates/belt_observer.json deleted file mode 100644 index 218931245..000000000 --- a/src/generated/resources/assets/create/blockstates/belt_observer.json +++ /dev/null @@ -1,244 +0,0 @@ -{ - "variants": { - "belt=false,facing=north,mode=detect,powered=false": { - "model": "create:block/belt_observer/detect", - "y": 180 - }, - "belt=true,facing=north,mode=detect,powered=false": { - "model": "create:block/belt_observer/detect_belt", - "y": 180 - }, - "belt=false,facing=south,mode=detect,powered=false": { - "model": "create:block/belt_observer/detect" - }, - "belt=true,facing=south,mode=detect,powered=false": { - "model": "create:block/belt_observer/detect_belt" - }, - "belt=false,facing=west,mode=detect,powered=false": { - "model": "create:block/belt_observer/detect", - "y": 90 - }, - "belt=true,facing=west,mode=detect,powered=false": { - "model": "create:block/belt_observer/detect_belt", - "y": 90 - }, - "belt=false,facing=east,mode=detect,powered=false": { - "model": "create:block/belt_observer/detect", - "y": 270 - }, - "belt=true,facing=east,mode=detect,powered=false": { - "model": "create:block/belt_observer/detect_belt", - "y": 270 - }, - "belt=false,facing=north,mode=pulse,powered=false": { - "model": "create:block/belt_observer/pulse", - "y": 180 - }, - "belt=true,facing=north,mode=pulse,powered=false": { - "model": "create:block/belt_observer/pulse_belt", - "y": 180 - }, - "belt=false,facing=south,mode=pulse,powered=false": { - "model": "create:block/belt_observer/pulse" - }, - "belt=true,facing=south,mode=pulse,powered=false": { - "model": "create:block/belt_observer/pulse_belt" - }, - "belt=false,facing=west,mode=pulse,powered=false": { - "model": "create:block/belt_observer/pulse", - "y": 90 - }, - "belt=true,facing=west,mode=pulse,powered=false": { - "model": "create:block/belt_observer/pulse_belt", - "y": 90 - }, - "belt=false,facing=east,mode=pulse,powered=false": { - "model": "create:block/belt_observer/pulse", - "y": 270 - }, - "belt=true,facing=east,mode=pulse,powered=false": { - "model": "create:block/belt_observer/pulse_belt", - "y": 270 - }, - "belt=false,facing=north,mode=eject,powered=false": { - "model": "create:block/belt_observer/eject", - "y": 180 - }, - "belt=true,facing=north,mode=eject,powered=false": { - "model": "create:block/belt_observer/eject_belt", - "y": 180 - }, - "belt=false,facing=south,mode=eject,powered=false": { - "model": "create:block/belt_observer/eject" - }, - "belt=true,facing=south,mode=eject,powered=false": { - "model": "create:block/belt_observer/eject_belt" - }, - "belt=false,facing=west,mode=eject,powered=false": { - "model": "create:block/belt_observer/eject", - "y": 90 - }, - "belt=true,facing=west,mode=eject,powered=false": { - "model": "create:block/belt_observer/eject_belt", - "y": 90 - }, - "belt=false,facing=east,mode=eject,powered=false": { - "model": "create:block/belt_observer/eject", - "y": 270 - }, - "belt=true,facing=east,mode=eject,powered=false": { - "model": "create:block/belt_observer/eject_belt", - "y": 270 - }, - "belt=false,facing=north,mode=split,powered=false": { - "model": "create:block/belt_observer/split", - "y": 180 - }, - "belt=true,facing=north,mode=split,powered=false": { - "model": "create:block/belt_observer/split_belt", - "y": 180 - }, - "belt=false,facing=south,mode=split,powered=false": { - "model": "create:block/belt_observer/split" - }, - "belt=true,facing=south,mode=split,powered=false": { - "model": "create:block/belt_observer/split_belt" - }, - "belt=false,facing=west,mode=split,powered=false": { - "model": "create:block/belt_observer/split", - "y": 90 - }, - "belt=true,facing=west,mode=split,powered=false": { - "model": "create:block/belt_observer/split_belt", - "y": 90 - }, - "belt=false,facing=east,mode=split,powered=false": { - "model": "create:block/belt_observer/split", - "y": 270 - }, - "belt=true,facing=east,mode=split,powered=false": { - "model": "create:block/belt_observer/split_belt", - "y": 270 - }, - "belt=false,facing=north,mode=detect,powered=true": { - "model": "create:block/belt_observer/detect_powered", - "y": 180 - }, - "belt=true,facing=north,mode=detect,powered=true": { - "model": "create:block/belt_observer/detect_belt_powered", - "y": 180 - }, - "belt=false,facing=south,mode=detect,powered=true": { - "model": "create:block/belt_observer/detect_powered" - }, - "belt=true,facing=south,mode=detect,powered=true": { - "model": "create:block/belt_observer/detect_belt_powered" - }, - "belt=false,facing=west,mode=detect,powered=true": { - "model": "create:block/belt_observer/detect_powered", - "y": 90 - }, - "belt=true,facing=west,mode=detect,powered=true": { - "model": "create:block/belt_observer/detect_belt_powered", - "y": 90 - }, - "belt=false,facing=east,mode=detect,powered=true": { - "model": "create:block/belt_observer/detect_powered", - "y": 270 - }, - "belt=true,facing=east,mode=detect,powered=true": { - "model": "create:block/belt_observer/detect_belt_powered", - "y": 270 - }, - "belt=false,facing=north,mode=pulse,powered=true": { - "model": "create:block/belt_observer/pulse_powered", - "y": 180 - }, - "belt=true,facing=north,mode=pulse,powered=true": { - "model": "create:block/belt_observer/pulse_belt_powered", - "y": 180 - }, - "belt=false,facing=south,mode=pulse,powered=true": { - "model": "create:block/belt_observer/pulse_powered" - }, - "belt=true,facing=south,mode=pulse,powered=true": { - "model": "create:block/belt_observer/pulse_belt_powered" - }, - "belt=false,facing=west,mode=pulse,powered=true": { - "model": "create:block/belt_observer/pulse_powered", - "y": 90 - }, - "belt=true,facing=west,mode=pulse,powered=true": { - "model": "create:block/belt_observer/pulse_belt_powered", - "y": 90 - }, - "belt=false,facing=east,mode=pulse,powered=true": { - "model": "create:block/belt_observer/pulse_powered", - "y": 270 - }, - "belt=true,facing=east,mode=pulse,powered=true": { - "model": "create:block/belt_observer/pulse_belt_powered", - "y": 270 - }, - "belt=false,facing=north,mode=eject,powered=true": { - "model": "create:block/belt_observer/eject_powered", - "y": 180 - }, - "belt=true,facing=north,mode=eject,powered=true": { - "model": "create:block/belt_observer/eject_belt_powered", - "y": 180 - }, - "belt=false,facing=south,mode=eject,powered=true": { - "model": "create:block/belt_observer/eject_powered" - }, - "belt=true,facing=south,mode=eject,powered=true": { - "model": "create:block/belt_observer/eject_belt_powered" - }, - "belt=false,facing=west,mode=eject,powered=true": { - "model": "create:block/belt_observer/eject_powered", - "y": 90 - }, - "belt=true,facing=west,mode=eject,powered=true": { - "model": "create:block/belt_observer/eject_belt_powered", - "y": 90 - }, - "belt=false,facing=east,mode=eject,powered=true": { - "model": "create:block/belt_observer/eject_powered", - "y": 270 - }, - "belt=true,facing=east,mode=eject,powered=true": { - "model": "create:block/belt_observer/eject_belt_powered", - "y": 270 - }, - "belt=false,facing=north,mode=split,powered=true": { - "model": "create:block/belt_observer/split_powered", - "y": 180 - }, - "belt=true,facing=north,mode=split,powered=true": { - "model": "create:block/belt_observer/split_belt_powered", - "y": 180 - }, - "belt=false,facing=south,mode=split,powered=true": { - "model": "create:block/belt_observer/split_powered" - }, - "belt=true,facing=south,mode=split,powered=true": { - "model": "create:block/belt_observer/split_belt_powered" - }, - "belt=false,facing=west,mode=split,powered=true": { - "model": "create:block/belt_observer/split_powered", - "y": 90 - }, - "belt=true,facing=west,mode=split,powered=true": { - "model": "create:block/belt_observer/split_belt_powered", - "y": 90 - }, - "belt=false,facing=east,mode=split,powered=true": { - "model": "create:block/belt_observer/split_powered", - "y": 270 - }, - "belt=true,facing=east,mode=split,powered=true": { - "model": "create:block/belt_observer/split_belt_powered", - "y": 270 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/black_valve_handle.json b/src/generated/resources/assets/create/blockstates/black_valve_handle.json new file mode 100644 index 000000000..ab5f48af8 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/black_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/black_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/black_valve_handle" + }, + "facing=north": { + "model": "create:block/black_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/black_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/black_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/black_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/blue_valve_handle.json b/src/generated/resources/assets/create/blockstates/blue_valve_handle.json new file mode 100644 index 000000000..fa05f73c2 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/blue_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/blue_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/blue_valve_handle" + }, + "facing=north": { + "model": "create:block/blue_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/blue_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/blue_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/blue_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/brown_valve_handle.json b/src/generated/resources/assets/create/blockstates/brown_valve_handle.json new file mode 100644 index 000000000..aac125cd9 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/brown_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/brown_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/brown_valve_handle" + }, + "facing=north": { + "model": "create:block/brown_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/brown_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/brown_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/brown_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/content_observer.json b/src/generated/resources/assets/create/blockstates/content_observer.json new file mode 100644 index 000000000..e66a1472c --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/content_observer.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,powered=false": { + "model": "create:block/content_observer/block" + }, + "facing=south,powered=false": { + "model": "create:block/content_observer/block", + "y": 180 + }, + "facing=west,powered=false": { + "model": "create:block/content_observer/block", + "y": 270 + }, + "facing=east,powered=false": { + "model": "create:block/content_observer/block", + "y": 90 + }, + "facing=north,powered=true": { + "model": "create:block/content_observer/block_powered" + }, + "facing=south,powered=true": { + "model": "create:block/content_observer/block_powered", + "y": 180 + }, + "facing=west,powered=true": { + "model": "create:block/content_observer/block_powered", + "y": 270 + }, + "facing=east,powered=true": { + "model": "create:block/content_observer/block_powered", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/copper_valve_handle.json b/src/generated/resources/assets/create/blockstates/copper_valve_handle.json new file mode 100644 index 000000000..d8e371297 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/copper_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/copper_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/copper_valve_handle" + }, + "facing=north": { + "model": "create:block/copper_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/copper_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/copper_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/copper_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/cyan_valve_handle.json b/src/generated/resources/assets/create/blockstates/cyan_valve_handle.json new file mode 100644 index 000000000..ca7d5322d --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/cyan_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/cyan_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/cyan_valve_handle" + }, + "facing=north": { + "model": "create:block/cyan_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/cyan_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/cyan_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/cyan_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/fluid_pipe.json b/src/generated/resources/assets/create/blockstates/fluid_pipe.json index a34bb11e8..745b1500a 100644 --- a/src/generated/resources/assets/create/blockstates/fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/fluid_pipe.json @@ -303,9 +303,15 @@ { "when": { "west": "false", +<<<<<<< HEAD "east": "true", "up": "true", "down": "false" +======= + "down": "false", + "east": "true", + "up": "true" +>>>>>>> mc1.15/dev }, "apply": { "model": "create:block/fluid_pipe/lu_z" @@ -314,9 +320,15 @@ { "when": { "west": "true", +<<<<<<< HEAD "east": "false", "up": "true", "down": "false" +======= + "down": "false", + "east": "false", + "up": "true" +>>>>>>> mc1.15/dev }, "apply": { "model": "create:block/fluid_pipe/ru_z" @@ -325,9 +337,15 @@ { "when": { "west": "false", +<<<<<<< HEAD "east": "true", "up": "false", "down": "true" +======= + "down": "true", + "east": "true", + "up": "false" +>>>>>>> mc1.15/dev }, "apply": { "model": "create:block/fluid_pipe/ld_z" @@ -336,9 +354,15 @@ { "when": { "west": "true", +<<<<<<< HEAD "east": "false", "up": "false", "down": "true" +======= + "down": "true", + "east": "false", + "up": "false" +>>>>>>> mc1.15/dev }, "apply": { "model": "create:block/fluid_pipe/rd_z" @@ -347,9 +371,15 @@ { "when": { "west": "false", +<<<<<<< HEAD "east": "false", "up": "true", "down": "true" +======= + "down": "true", + "east": "false", + "up": "true" +>>>>>>> mc1.15/dev }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -358,9 +388,15 @@ { "when": { "west": "false", +<<<<<<< HEAD "east": "false", "up": "true", "down": "false" +======= + "down": "false", + "east": "false", + "up": "true" +>>>>>>> mc1.15/dev }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -369,9 +405,15 @@ { "when": { "west": "false", +<<<<<<< HEAD "east": "false", "up": "false", "down": "true" +======= + "down": "true", + "east": "false", + "up": "false" +>>>>>>> mc1.15/dev }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -380,9 +422,15 @@ { "when": { "west": "true", +<<<<<<< HEAD "east": "true", "up": "false", "down": "false" +======= + "down": "false", + "east": "true", + "up": "false" +>>>>>>> mc1.15/dev }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -391,9 +439,15 @@ { "when": { "west": "false", +<<<<<<< HEAD "east": "true", "up": "false", "down": "false" +======= + "down": "false", + "east": "true", + "up": "false" +>>>>>>> mc1.15/dev }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -402,9 +456,15 @@ { "when": { "west": "true", +<<<<<<< HEAD "east": "false", "up": "false", "down": "false" +======= + "down": "false", + "east": "false", + "up": "false" +>>>>>>> mc1.15/dev }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -413,9 +473,15 @@ { "when": { "west": "false", +<<<<<<< HEAD "east": "false", "up": "false", "down": "false" +======= + "down": "false", + "east": "false", + "up": "false" +>>>>>>> mc1.15/dev }, "apply": { "model": "create:block/fluid_pipe/none_z" diff --git a/src/generated/resources/assets/create/blockstates/fluid_valve.json b/src/generated/resources/assets/create/blockstates/fluid_valve.json new file mode 100644 index 000000000..41d048d24 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/fluid_valve.json @@ -0,0 +1,100 @@ +{ + "variants": { + "axis_along_first=false,enabled=false,facing=down": { + "model": "create:block/fluid_valve/block_horizontal_closed", + "x": 270, + "y": 90 + }, + "axis_along_first=true,enabled=false,facing=down": { + "model": "create:block/fluid_valve/block_horizontal_closed", + "x": 270 + }, + "axis_along_first=false,enabled=true,facing=down": { + "model": "create:block/fluid_valve/block_horizontal_open", + "x": 270, + "y": 90 + }, + "axis_along_first=true,enabled=true,facing=down": { + "model": "create:block/fluid_valve/block_horizontal_open", + "x": 270 + }, + "axis_along_first=false,enabled=false,facing=up": { + "model": "create:block/fluid_valve/block_horizontal_closed", + "x": 90, + "y": 90 + }, + "axis_along_first=true,enabled=false,facing=up": { + "model": "create:block/fluid_valve/block_horizontal_closed", + "x": 90 + }, + "axis_along_first=false,enabled=true,facing=up": { + "model": "create:block/fluid_valve/block_horizontal_open", + "x": 90, + "y": 90 + }, + "axis_along_first=true,enabled=true,facing=up": { + "model": "create:block/fluid_valve/block_horizontal_open", + "x": 90 + }, + "axis_along_first=false,enabled=false,facing=north": { + "model": "create:block/fluid_valve/block_vertical_closed", + "y": 180 + }, + "axis_along_first=true,enabled=false,facing=north": { + "model": "create:block/fluid_valve/block_horizontal_closed", + "y": 180 + }, + "axis_along_first=false,enabled=true,facing=north": { + "model": "create:block/fluid_valve/block_vertical_open", + "y": 180 + }, + "axis_along_first=true,enabled=true,facing=north": { + "model": "create:block/fluid_valve/block_horizontal_open", + "y": 180 + }, + "axis_along_first=false,enabled=false,facing=south": { + "model": "create:block/fluid_valve/block_vertical_closed" + }, + "axis_along_first=true,enabled=false,facing=south": { + "model": "create:block/fluid_valve/block_horizontal_closed" + }, + "axis_along_first=false,enabled=true,facing=south": { + "model": "create:block/fluid_valve/block_vertical_open" + }, + "axis_along_first=true,enabled=true,facing=south": { + "model": "create:block/fluid_valve/block_horizontal_open" + }, + "axis_along_first=false,enabled=false,facing=west": { + "model": "create:block/fluid_valve/block_horizontal_closed", + "y": 90 + }, + "axis_along_first=true,enabled=false,facing=west": { + "model": "create:block/fluid_valve/block_vertical_closed", + "y": 90 + }, + "axis_along_first=false,enabled=true,facing=west": { + "model": "create:block/fluid_valve/block_horizontal_open", + "y": 90 + }, + "axis_along_first=true,enabled=true,facing=west": { + "model": "create:block/fluid_valve/block_vertical_open", + "y": 90 + }, + "axis_along_first=false,enabled=false,facing=east": { + "model": "create:block/fluid_valve/block_horizontal_closed", + "y": 270 + }, + "axis_along_first=true,enabled=false,facing=east": { + "model": "create:block/fluid_valve/block_vertical_closed", + "y": 270 + }, + "axis_along_first=false,enabled=true,facing=east": { + "model": "create:block/fluid_valve/block_horizontal_open", + "y": 270 + }, + "axis_along_first=true,enabled=true,facing=east": { + "model": "create:block/fluid_valve/block_vertical_open", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/gray_valve_handle.json b/src/generated/resources/assets/create/blockstates/gray_valve_handle.json new file mode 100644 index 000000000..9b85eb843 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/gray_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/gray_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/gray_valve_handle" + }, + "facing=north": { + "model": "create:block/gray_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/gray_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/gray_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/gray_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/green_valve_handle.json b/src/generated/resources/assets/create/blockstates/green_valve_handle.json new file mode 100644 index 000000000..aed9eac23 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/green_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/green_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/green_valve_handle" + }, + "facing=north": { + "model": "create:block/green_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/green_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/green_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/green_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/light_blue_valve_handle.json b/src/generated/resources/assets/create/blockstates/light_blue_valve_handle.json new file mode 100644 index 000000000..e42c11775 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/light_blue_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/light_blue_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/light_blue_valve_handle" + }, + "facing=north": { + "model": "create:block/light_blue_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/light_blue_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/light_blue_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/light_blue_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/light_gray_valve_handle.json b/src/generated/resources/assets/create/blockstates/light_gray_valve_handle.json new file mode 100644 index 000000000..488dc982a --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/light_gray_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/light_gray_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/light_gray_valve_handle" + }, + "facing=north": { + "model": "create:block/light_gray_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/light_gray_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/light_gray_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/light_gray_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/lime_valve_handle.json b/src/generated/resources/assets/create/blockstates/lime_valve_handle.json new file mode 100644 index 000000000..e761549f8 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/lime_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/lime_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/lime_valve_handle" + }, + "facing=north": { + "model": "create:block/lime_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/lime_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/lime_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/lime_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/magenta_valve_handle.json b/src/generated/resources/assets/create/blockstates/magenta_valve_handle.json new file mode 100644 index 000000000..bfcd42027 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/magenta_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/magenta_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/magenta_valve_handle" + }, + "facing=north": { + "model": "create:block/magenta_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/magenta_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/magenta_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/magenta_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/orange_valve_handle.json b/src/generated/resources/assets/create/blockstates/orange_valve_handle.json new file mode 100644 index 000000000..696d65489 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/orange_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/orange_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/orange_valve_handle" + }, + "facing=north": { + "model": "create:block/orange_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/orange_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/orange_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/orange_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/pink_valve_handle.json b/src/generated/resources/assets/create/blockstates/pink_valve_handle.json new file mode 100644 index 000000000..6097d8dee --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/pink_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/pink_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/pink_valve_handle" + }, + "facing=north": { + "model": "create:block/pink_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/pink_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/pink_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/pink_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/portable_storage_interface.json b/src/generated/resources/assets/create/blockstates/portable_storage_interface.json index 463c071a2..331749529 100644 --- a/src/generated/resources/assets/create/blockstates/portable_storage_interface.json +++ b/src/generated/resources/assets/create/blockstates/portable_storage_interface.json @@ -1,28 +1,28 @@ { "variants": { "facing=down": { - "model": "create:block/portable_storage_interface", + "model": "create:block/portable_storage_interface/block", "x": 180 }, "facing=up": { - "model": "create:block/portable_storage_interface" + "model": "create:block/portable_storage_interface/block" }, "facing=north": { - "model": "create:block/portable_storage_interface", + "model": "create:block/portable_storage_interface/block", "x": 90 }, "facing=south": { - "model": "create:block/portable_storage_interface", + "model": "create:block/portable_storage_interface/block", "x": 90, "y": 180 }, "facing=west": { - "model": "create:block/portable_storage_interface", + "model": "create:block/portable_storage_interface/block", "x": 90, "y": 270 }, "facing=east": { - "model": "create:block/portable_storage_interface", + "model": "create:block/portable_storage_interface/block", "x": 90, "y": 90 } diff --git a/src/generated/resources/assets/create/blockstates/purple_valve_handle.json b/src/generated/resources/assets/create/blockstates/purple_valve_handle.json new file mode 100644 index 000000000..caaa8c991 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/purple_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/purple_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/purple_valve_handle" + }, + "facing=north": { + "model": "create:block/purple_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/purple_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/purple_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/purple_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/radial_chassis.json b/src/generated/resources/assets/create/blockstates/radial_chassis.json index 7a1df3438..c930cf0b5 100644 --- a/src/generated/resources/assets/create/blockstates/radial_chassis.json +++ b/src/generated/resources/assets/create/blockstates/radial_chassis.json @@ -89,8 +89,8 @@ }, { "when": { - "sticky_west": "true", - "axis": "x" + "axis": "x", + "sticky_west": "true" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -99,8 +99,8 @@ }, { "when": { - "sticky_west": "true", - "axis": "y" + "axis": "y", + "sticky_west": "true" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky", @@ -109,8 +109,8 @@ }, { "when": { - "sticky_west": "true", - "axis": "z" + "axis": "z", + "sticky_west": "true" }, "apply": { "model": "create:block/radial_chassis_side_z_sticky", @@ -119,8 +119,8 @@ }, { "when": { - "sticky_west": "false", - "axis": "x" + "axis": "x", + "sticky_west": "false" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -129,8 +129,8 @@ }, { "when": { - "sticky_west": "false", - "axis": "y" + "axis": "y", + "sticky_west": "false" }, "apply": { "model": "create:block/radial_chassis_side_y", @@ -139,8 +139,8 @@ }, { "when": { - "sticky_west": "false", - "axis": "z" + "axis": "z", + "sticky_west": "false" }, "apply": { "model": "create:block/radial_chassis_side_z", diff --git a/src/generated/resources/assets/create/blockstates/red_valve_handle.json b/src/generated/resources/assets/create/blockstates/red_valve_handle.json new file mode 100644 index 000000000..0bff1aa0f --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/red_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/red_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/red_valve_handle" + }, + "facing=north": { + "model": "create:block/red_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/red_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/red_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/red_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/white_valve_handle.json b/src/generated/resources/assets/create/blockstates/white_valve_handle.json new file mode 100644 index 000000000..ced0ad42e --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/white_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/white_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/white_valve_handle" + }, + "facing=north": { + "model": "create:block/white_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/white_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/white_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/white_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/yellow_valve_handle.json b/src/generated/resources/assets/create/blockstates/yellow_valve_handle.json new file mode 100644 index 000000000..0edbf38a0 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/yellow_valve_handle.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "create:block/yellow_valve_handle", + "x": 180 + }, + "facing=up": { + "model": "create:block/yellow_valve_handle" + }, + "facing=north": { + "model": "create:block/yellow_valve_handle", + "x": 90 + }, + "facing=south": { + "model": "create:block/yellow_valve_handle", + "x": 90, + "y": 180 + }, + "facing=west": { + "model": "create:block/yellow_valve_handle", + "x": 90, + "y": 270 + }, + "facing=east": { + "model": "create:block/yellow_valve_handle", + "x": 90, + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 164f096ac..b38c1f753 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -21,18 +21,20 @@ "block.create.andesite_tunnel": "\u05DF\u01DDuun\u27D8 \u01DD\u0287\u0131s\u01DDpu\u2C6F", "block.create.basin": "u\u0131s\u0250\u15FA", "block.create.belt": "\u0287\u05DF\u01DD\u15FA", - "block.create.belt_observer": "\u0279\u01DD\u028C\u0279\u01DDsqO \u0287\u05DF\u01DD\u15FA", "block.create.birch_window": "\u028Dopu\u0131M \u0265\u0254\u0279\u0131\u15FA", "block.create.birch_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u0265\u0254\u0279\u0131\u15FA", "block.create.black_seat": "\u0287\u0250\u01DDS \u029E\u0254\u0250\u05DF\u15FA", + "block.create.black_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u029E\u0254\u0250\u05DF\u15FA", "block.create.blaze_burner": "\u0279\u01DDu\u0279n\u15FA \u01DDz\u0250\u05DF\u15FA", "block.create.blue_seat": "\u0287\u0250\u01DDS \u01DDn\u05DF\u15FA", + "block.create.blue_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DDn\u05DF\u15FA", "block.create.brass_belt_funnel": "\u05DF\u01DDuun\u2132 \u0287\u05DF\u01DD\u15FA ss\u0250\u0279\u15FA", "block.create.brass_block": "\u029E\u0254o\u05DF\u15FA ss\u0250\u0279\u15FA", "block.create.brass_casing": "bu\u0131s\u0250\u0186 ss\u0250\u0279\u15FA", "block.create.brass_funnel": "\u05DF\u01DDuun\u2132 ss\u0250\u0279\u15FA", "block.create.brass_tunnel": "\u05DF\u01DDuun\u27D8 ss\u0250\u0279\u15FA", "block.create.brown_seat": "\u0287\u0250\u01DDS u\u028Do\u0279\u15FA", + "block.create.brown_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B u\u028Do\u0279\u15FA", "block.create.cart_assembler": "\u0279\u01DD\u05DFq\u026F\u01DDss\u2C6F \u0287\u0279\u0250\u0186", "block.create.chiseled_dark_scoria": "\u0250\u0131\u0279o\u0254S \u029E\u0279\u0250\u15E1 p\u01DD\u05DF\u01DDs\u0131\u0265\u0186", "block.create.chiseled_dolomite": "\u01DD\u0287\u0131\u026Fo\u05DFo\u15E1 p\u01DD\u05DF\u01DDs\u0131\u0265\u0186", @@ -44,17 +46,20 @@ "block.create.clockwork_bearing": "bu\u0131\u0279\u0250\u01DD\u15FA \u029E\u0279o\u028D\u029E\u0254o\u05DF\u0186", "block.create.clutch": "\u0265\u0254\u0287n\u05DF\u0186", "block.create.cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186", + "block.create.content_observer": "\u0279\u01DD\u028C\u0279\u01DDsqO \u0287u\u01DD\u0287uo\u0186", "block.create.copper_block": "\u029E\u0254o\u05DF\u15FA \u0279\u01DDddo\u0186", "block.create.copper_casing": "bu\u0131s\u0250\u0186 \u0279\u01DDddo\u0186", "block.create.copper_ore": "\u01DD\u0279O \u0279\u01DDddo\u0186", "block.create.copper_shingles": "s\u01DD\u05DFbu\u0131\u0265S \u0279\u01DDddo\u0186", "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_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", "block.create.cuckoo_clock": "\u029E\u0254o\u05DF\u0186 oo\u029E\u0254n\u0186", "block.create.cyan_seat": "\u0287\u0250\u01DDS u\u0250\u028E\u0186", + "block.create.cyan_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B u\u0250\u028E\u0186", "block.create.dark_oak_window": "\u028Dopu\u0131M \u029E\u0250O \u029E\u0279\u0250\u15E1", "block.create.dark_oak_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u029E\u0250O \u029E\u0279\u0250\u15E1", "block.create.dark_scoria": "\u0250\u0131\u0279o\u0254S \u029E\u0279\u0250\u15E1", @@ -130,6 +135,7 @@ "block.create.fancy_weathered_limestone_bricks_wall": "\u05DF\u05DF\u0250M s\u029E\u0254\u0131\u0279\u15FA \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM \u028E\u0254u\u0250\u2132", "block.create.fluid_pipe": "\u01DDd\u0131\u0500 p\u0131n\u05DF\u2132", "block.create.fluid_tank": "\u029Eu\u0250\u27D8 p\u0131n\u05DF\u2132", + "block.create.fluid_valve": "\u01DD\u028C\u05DF\u0250\u039B p\u0131n\u05DF\u2132", "block.create.flywheel": "\u05DF\u01DD\u01DD\u0265\u028D\u028E\u05DF\u2132", "block.create.framed_glass": "ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132", "block.create.framed_glass_pane": "\u01DDu\u0250\u0500 ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132", @@ -157,7 +163,9 @@ "block.create.granite_cobblestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131u\u0250\u0279\u2141", "block.create.granite_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DD\u0287\u0131u\u0250\u0279\u2141", "block.create.gray_seat": "\u0287\u0250\u01DDS \u028E\u0250\u0279\u2141", + "block.create.gray_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u028E\u0250\u0279\u2141", "block.create.green_seat": "\u0287\u0250\u01DDS u\u01DD\u01DD\u0279\u2141", + "block.create.green_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B u\u01DD\u01DD\u0279\u2141", "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", @@ -174,8 +182,11 @@ "block.create.layered_scoria": "\u0250\u0131\u0279o\u0254S p\u01DD\u0279\u01DD\u028E\u0250\uA780", "block.create.layered_weathered_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM p\u01DD\u0279\u01DD\u028E\u0250\uA780", "block.create.light_blue_seat": "\u0287\u0250\u01DDS \u01DDn\u05DF\u15FA \u0287\u0265b\u0131\uA780", + "block.create.light_blue_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DDn\u05DF\u15FA \u0287\u0265b\u0131\uA780", "block.create.light_gray_seat": "\u0287\u0250\u01DDS \u028E\u0250\u0279\u2141 \u0287\u0265b\u0131\uA780", + "block.create.light_gray_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u028E\u0250\u0279\u2141 \u0287\u0265b\u0131\uA780", "block.create.lime_seat": "\u0287\u0250\u01DDS \u01DD\u026F\u0131\uA780", + "block.create.lime_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DD\u026F\u0131\uA780", "block.create.limesand": "pu\u0250s\u01DD\u026F\u0131\uA780", "block.create.limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780", "block.create.limestone_bricks": "s\u029E\u0254\u0131\u0279\u15FA \u01DDuo\u0287s\u01DD\u026F\u0131\uA780", @@ -189,6 +200,7 @@ "block.create.limestone_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780", "block.create.linear_chassis": "s\u0131ss\u0250\u0265\u0186 \u0279\u0250\u01DDu\u0131\uA780", "block.create.magenta_seat": "\u0287\u0250\u01DDS \u0250\u0287u\u01DDb\u0250W", + "block.create.magenta_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u0250\u0287u\u01DDb\u0250W", "block.create.mechanical_arm": "\u026F\u0279\u2C6F \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW", "block.create.mechanical_bearing": "bu\u0131\u0279\u0250\u01DD\u15FA \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW", "block.create.mechanical_crafter": "\u0279\u01DD\u0287\u025F\u0250\u0279\u0186 \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW", @@ -219,6 +231,7 @@ "block.create.oak_window": "\u028Dopu\u0131M \u029E\u0250O", "block.create.oak_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u029E\u0250O", "block.create.orange_seat": "\u0287\u0250\u01DDS \u01DDbu\u0250\u0279O", + "block.create.orange_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DDbu\u0250\u0279O", "block.create.ornate_iron_window": "\u028Dopu\u0131M uo\u0279I \u01DD\u0287\u0250u\u0279O", "block.create.ornate_iron_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M uo\u0279I \u01DD\u0287\u0250u\u0279O", "block.create.overgrown_andesite": "\u01DD\u0287\u0131s\u01DDpu\u2C6F u\u028Do\u0279b\u0279\u01DD\u028CO", @@ -267,6 +280,7 @@ "block.create.paved_weathered_limestone_stairs": "s\u0279\u0131\u0250\u0287S \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM p\u01DD\u028C\u0250\u0500", "block.create.paved_weathered_limestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM p\u01DD\u028C\u0250\u0500", "block.create.pink_seat": "\u0287\u0250\u01DDS \u029Eu\u0131\u0500", + "block.create.pink_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u029Eu\u0131\u0500", "block.create.piston_extension_pole": "\u01DD\u05DFo\u0500 uo\u0131su\u01DD\u0287x\u018E uo\u0287s\u0131\u0500", "block.create.polished_dark_scoria": "\u0250\u0131\u0279o\u0254S \u029E\u0279\u0250\u15E1 p\u01DD\u0265s\u0131\u05DFo\u0500", "block.create.polished_dark_scoria_slab": "q\u0250\u05DFS \u0250\u0131\u0279o\u0254S \u029E\u0279\u0250\u15E1 p\u01DD\u0265s\u0131\u05DFo\u0500", @@ -298,8 +312,10 @@ "block.create.pulley_magnet": "\u0287\u01DDub\u0250W \u028E\u01DD\u05DF\u05DFn\u0500", "block.create.pulse_repeater": "\u0279\u01DD\u0287\u0250\u01DDd\u01DD\u1D1A \u01DDs\u05DFn\u0500", "block.create.purple_seat": "\u0287\u0250\u01DDS \u01DD\u05DFd\u0279n\u0500", + "block.create.purple_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DD\u05DFd\u0279n\u0500", "block.create.radial_chassis": "s\u0131ss\u0250\u0265\u0186 \u05DF\u0250\u0131p\u0250\u1D1A", "block.create.red_seat": "\u0287\u0250\u01DDS p\u01DD\u1D1A", + "block.create.red_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B p\u01DD\u1D1A", "block.create.redstone_contact": "\u0287\u0254\u0250\u0287uo\u0186 \u01DDuo\u0287sp\u01DD\u1D1A", "block.create.redstone_link": "\u029Eu\u0131\uA780 \u01DDuo\u0287sp\u01DD\u1D1A", "block.create.refined_radiance_casing": "bu\u0131s\u0250\u0186 \u0287u\u0250\u0131p\u0250\u1D1A", @@ -347,7 +363,9 @@ "block.create.weathered_limestone_cobblestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM", "block.create.weathered_limestone_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM", "block.create.white_seat": "\u0287\u0250\u01DDS \u01DD\u0287\u0131\u0265M", + "block.create.white_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DD\u0287\u0131\u0265M", "block.create.yellow_seat": "\u0287\u0250\u01DDS \u028Do\u05DF\u05DF\u01DD\u028E", + "block.create.yellow_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u028Do\u05DF\u05DF\u01DD\u028E", "block.create.zinc_block": "\u029E\u0254o\u05DF\u15FA \u0254u\u0131Z", "block.create.zinc_ore": "\u01DD\u0279O \u0254u\u0131Z", "entity.create.contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 9475d69b2..225ade75f 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -24,18 +24,20 @@ "block.create.andesite_tunnel": "Andesite Tunnel", "block.create.basin": "Basin", "block.create.belt": "Belt", - "block.create.belt_observer": "Belt Observer", "block.create.birch_window": "Birch Window", "block.create.birch_window_pane": "Birch Window Pane", "block.create.black_seat": "Black Seat", + "block.create.black_valve_handle": "Black Valve Handle", "block.create.blaze_burner": "Blaze Burner", "block.create.blue_seat": "Blue Seat", + "block.create.blue_valve_handle": "Blue Valve Handle", "block.create.brass_belt_funnel": "Brass Belt Funnel", "block.create.brass_block": "Brass Block", "block.create.brass_casing": "Brass Casing", "block.create.brass_funnel": "Brass Funnel", "block.create.brass_tunnel": "Brass Tunnel", "block.create.brown_seat": "Brown Seat", + "block.create.brown_valve_handle": "Brown Valve Handle", "block.create.cart_assembler": "Cart Assembler", "block.create.chiseled_dark_scoria": "Chiseled Dark Scoria", "block.create.chiseled_dolomite": "Chiseled Dolomite", @@ -47,17 +49,20 @@ "block.create.clockwork_bearing": "Clockwork Bearing", "block.create.clutch": "Clutch", "block.create.cogwheel": "Cogwheel", + "block.create.content_observer": "Content Observer", "block.create.copper_block": "Copper Block", "block.create.copper_casing": "Copper Casing", "block.create.copper_ore": "Copper Ore", "block.create.copper_shingles": "Copper Shingles", "block.create.copper_tiles": "Copper Tiles", + "block.create.copper_valve_handle": "Copper Valve Handle", "block.create.creative_crate": "Creative Crate", "block.create.creative_motor": "Creative Motor", "block.create.crushing_wheel": "Crushing Wheel", "block.create.crushing_wheel_controller": "Crushing Wheel Controller", "block.create.cuckoo_clock": "Cuckoo Clock", "block.create.cyan_seat": "Cyan Seat", + "block.create.cyan_valve_handle": "Cyan Valve Handle", "block.create.dark_oak_window": "Dark Oak Window", "block.create.dark_oak_window_pane": "Dark Oak Window Pane", "block.create.dark_scoria": "Dark Scoria", @@ -133,6 +138,7 @@ "block.create.fancy_weathered_limestone_bricks_wall": "Fancy Weathered Limestone Bricks Wall", "block.create.fluid_pipe": "Fluid Pipe", "block.create.fluid_tank": "Fluid Tank", + "block.create.fluid_valve": "Fluid Valve", "block.create.flywheel": "Flywheel", "block.create.framed_glass": "Framed Glass", "block.create.framed_glass_pane": "Framed Glass Pane", @@ -160,7 +166,9 @@ "block.create.granite_cobblestone_wall": "Granite Cobblestone Wall", "block.create.granite_pillar": "Granite Pillar", "block.create.gray_seat": "Gray Seat", + "block.create.gray_valve_handle": "Gray Valve Handle", "block.create.green_seat": "Green Seat", + "block.create.green_valve_handle": "Green Valve Handle", "block.create.hand_crank": "Hand Crank", "block.create.horizontal_framed_glass": "Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "Horizontal Framed Glass Pane", @@ -177,8 +185,11 @@ "block.create.layered_scoria": "Layered Scoria", "block.create.layered_weathered_limestone": "Layered Weathered Limestone", "block.create.light_blue_seat": "Light Blue Seat", + "block.create.light_blue_valve_handle": "Light Blue Valve Handle", "block.create.light_gray_seat": "Light Gray Seat", + "block.create.light_gray_valve_handle": "Light Gray Valve Handle", "block.create.lime_seat": "Lime Seat", + "block.create.lime_valve_handle": "Lime Valve Handle", "block.create.limesand": "Limesand", "block.create.limestone": "Limestone", "block.create.limestone_bricks": "Limestone Bricks", @@ -192,6 +203,7 @@ "block.create.limestone_pillar": "Limestone Pillar", "block.create.linear_chassis": "Linear Chassis", "block.create.magenta_seat": "Magenta Seat", + "block.create.magenta_valve_handle": "Magenta Valve Handle", "block.create.mechanical_arm": "Mechanical Arm", "block.create.mechanical_bearing": "Mechanical Bearing", "block.create.mechanical_crafter": "Mechanical Crafter", @@ -222,6 +234,7 @@ "block.create.oak_window": "Oak Window", "block.create.oak_window_pane": "Oak Window Pane", "block.create.orange_seat": "Orange Seat", + "block.create.orange_valve_handle": "Orange Valve Handle", "block.create.ornate_iron_window": "Ornate Iron Window", "block.create.ornate_iron_window_pane": "Ornate Iron Window Pane", "block.create.overgrown_andesite": "Overgrown Andesite", @@ -270,6 +283,7 @@ "block.create.paved_weathered_limestone_stairs": "Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "Paved Weathered Limestone Wall", "block.create.pink_seat": "Pink Seat", + "block.create.pink_valve_handle": "Pink Valve Handle", "block.create.piston_extension_pole": "Piston Extension Pole", "block.create.polished_dark_scoria": "Polished Dark Scoria", "block.create.polished_dark_scoria_slab": "Polished Dark Scoria Slab", @@ -301,8 +315,10 @@ "block.create.pulley_magnet": "Pulley Magnet", "block.create.pulse_repeater": "Pulse Repeater", "block.create.purple_seat": "Purple Seat", + "block.create.purple_valve_handle": "Purple Valve Handle", "block.create.radial_chassis": "Radial Chassis", "block.create.red_seat": "Red Seat", + "block.create.red_valve_handle": "Red Valve Handle", "block.create.redstone_contact": "Redstone Contact", "block.create.redstone_link": "Redstone Link", "block.create.refined_radiance_casing": "Radiant Casing", @@ -350,7 +366,9 @@ "block.create.weathered_limestone_cobblestone_wall": "Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "Weathered Limestone Pillar", "block.create.white_seat": "White Seat", + "block.create.white_valve_handle": "White Valve Handle", "block.create.yellow_seat": "Yellow Seat", + "block.create.yellow_valve_handle": "Yellow Valve Handle", "block.create.zinc_block": "Zinc Block", "block.create.zinc_ore": "Zinc Ore", @@ -660,12 +678,9 @@ "create.gui.adjustable_crate.title": "Adjustable Crate", "create.gui.adjustable_crate.storageSpace": "Storage Space", "create.gui.stockpile_switch.title": "Stockpile Switch", - "create.gui.stockpile_switch.lowerLimit": "Lower Threshold", - "create.gui.stockpile_switch.upperLimit": "Upper Threshold", - "create.gui.stockpile_switch.startAt": "Start Signal at", - "create.gui.stockpile_switch.startAbove": "Start Signal above", - "create.gui.stockpile_switch.stopAt": "Stop Signal at", - "create.gui.stockpile_switch.stopBelow": "Stop Signal below", + "create.gui.stockpile_switch.invert_signal": "Invert Signal", + "create.gui.stockpile_switch.move_to_lower_at": "Move to lower lane at %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "Move to upper lane at %1$s%%", "create.gui.sequenced_gearshift.title": "Sequenced Gearshift", "create.gui.sequenced_gearshift.instruction": "Instruction", "create.gui.sequenced_gearshift.instruction.turn_angle": "Turn", @@ -686,7 +701,8 @@ "create.schematicAndQuill.secondPos": "Second position set.", "create.schematicAndQuill.noTarget": "Hold [Ctrl] to select Air blocks.", "create.schematicAndQuill.abort": "Removed selection.", - "create.schematicAndQuill.prompt": "Enter a name for the Schematic:", + "create.schematicAndQuill.title": "Schematic Name:", + "create.schematicAndQuill.convert": "Save and Deploy Immediately", "create.schematicAndQuill.fallbackName": "My Schematic", "create.schematicAndQuill.saved": "Saved as %1$s", @@ -733,28 +749,33 @@ "create.schematic.tool.flip.description.3": "", "create.schematics.synchronizing": "Syncing...", - "create.schematics.uploadTooLarge": "Your schematic is too big.", + "create.schematics.uploadTooLarge": "Your schematic exceeds limitations specified by the server.", "create.schematics.maxAllowedSize": "The maximum allowed schematic file size is:", "create.gui.schematicTable.title": "Schematic Table", + "create.gui.schematicTable.refresh": "Refresh Files", + "create.gui.schematicTable.open_folder": "Open Folder", "create.gui.schematicTable.availableSchematics": "Available Schematics", "create.gui.schematicTable.noSchematics": "No Schematics Saved", "create.gui.schematicTable.uploading": "Uploading...", "create.gui.schematicTable.finished": "Upload Finished!", "create.gui.schematicannon.title": "Schematicannon", - "create.gui.schematicannon.settingsTitle": "Placement Settings", - "create.gui.schematicannon.listPrinter": "Material List Printer", + "create.gui.schematicannon.listPrinter": "Checklist Printer", "create.gui.schematicannon.gunpowderLevel": "Gunpowder at %1$s%%", "create.gui.schematicannon.shotsRemaining": "Shots left: %1$s", "create.gui.schematicannon.shotsRemainingWithBackup": "With backup: %1$s", "create.gui.schematicannon.optionEnabled": "Currently Enabled", "create.gui.schematicannon.optionDisabled": "Currently Disabled", + "create.gui.schematicannon.showOptions": "Show Printer Settings", "create.gui.schematicannon.option.dontReplaceSolid": "Don't Replace Solid Blocks", "create.gui.schematicannon.option.replaceWithSolid": "Replace Solid with Solid", "create.gui.schematicannon.option.replaceWithAny": "Replace Solid with Any", "create.gui.schematicannon.option.replaceWithEmpty": "Replace Solid with Empty", "create.gui.schematicannon.option.skipMissing": "Skip missing Blocks", "create.gui.schematicannon.option.skipTileEntities": "Protect Tile Entities", + "create.gui.schematicannon.slot.gunpowder": "Add gunpowder to fuel the cannon", + "create.gui.schematicannon.slot.listPrinter": "Place books here to print a Checklist for your Schematic", + "create.gui.schematicannon.slot.schematic": "Add your Schematic here. Make sure it is deployed at a specific location.", "create.gui.schematicannon.option.skipMissing.description": "If the cannon cannot find a required Block for placement, it will continue at the next Location.", "create.gui.schematicannon.option.skipTileEntities.description": "The cannon will avoid replacing data holding blocks such as Chests.", "create.gui.schematicannon.option.dontReplaceSolid.description": "The cannon will never replace any Solid blocks in its working area, only non-Solid and Air.", @@ -790,23 +811,42 @@ "create.gui.filter.ignore_data.description": "Items match regardless of their attributes.", "create.item_attributes.placeable": "is placeable", + "create.item_attributes.placeable.inverted": "is not placeable", "create.item_attributes.consumable": "can be eaten", + "create.item_attributes.consumable.inverted": "cannot be eaten", "create.item_attributes.smeltable": "can be Smelted", + "create.item_attributes.smeltable.inverted": "cannot be Smelted", "create.item_attributes.washable": "can be Washed", + "create.item_attributes.washable.inverted": "cannot be Washed", "create.item_attributes.smokable": "can be Smoked", + "create.item_attributes.smokable.inverted": "cannot be Smoked", + "create.item_attributes.crushable": "can be Crushed", + "create.item_attributes.crushable.inverted": "cannot be Crushed", "create.item_attributes.blastable": "is smeltable in Blast Furnace", + "create.item_attributes.blastable.inverted": "is not smeltable in Blast Furnace", "create.item_attributes.enchanted": "is enchanted", + "create.item_attributes.enchanted.inverted": "is unenchanted", "create.item_attributes.damaged": "is damaged", + "create.item_attributes.damaged.inverted": "is not damaged", "create.item_attributes.badly_damaged": "is heavily damaged", + "create.item_attributes.badly_damaged.inverted": "is not heavily damaged", "create.item_attributes.not_stackable": "cannot stack", + "create.item_attributes.not_stackable.inverted": "can be stacked", "create.item_attributes.equipable": "can be equipped", + "create.item_attributes.equipable.inverted": "cannot be equipped", "create.item_attributes.furnace_fuel": "is furnace fuel", + "create.item_attributes.furnace_fuel.inverted": "is not furnace fuel", "create.item_attributes.in_tag": "is tagged %1$s", - "create.item_attributes.in_item_group": "belongs to %1$s", + "create.item_attributes.in_tag.inverted": "is not tagged %1$s", + "create.item_attributes.in_item_group": "is in group '%1$s'", + "create.item_attributes.in_item_group.inverted": "is not in group '%1$s'", "create.item_attributes.added_by": "was added by %1$s", + "create.item_attributes.added_by.inverted": "was not added by %1$s", "create.gui.attribute_filter.no_selected_attributes": "No attributes selected", "create.gui.attribute_filter.selected_attributes": "Selected attributes:", + "create.gui.attribute_filter.add_attribute": "Add attribute to List", + "create.gui.attribute_filter.add_inverted_attribute": "Add opposite attribute to List", "create.gui.attribute_filter.whitelist_disjunctive": "Whitelist (Any)", "create.gui.attribute_filter.whitelist_disjunctive.description": "Items pass if they have any of the selected attributes.", "create.gui.attribute_filter.whitelist_conjunctive": "Whitelist (All)", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index f44fe1c02..3a7a5652e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 804", + "_": "Missing Localizations: 853", "_": "->------------------------] Game Elements [------------------------<-", @@ -25,18 +25,24 @@ "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", "block.create.basin": "UNLOCALIZED: Basin", "block.create.belt": "Mechanischer Riemen", +<<<<<<< HEAD "block.create.belt_observer": "Fließband-Beobachter", +======= +>>>>>>> mc1.15/dev "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", + "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", + "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", + "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", "block.create.cart_assembler": "UNLOCALIZED: Cart Assembler", "block.create.chiseled_dark_scoria": "UNLOCALIZED: Chiseled Dark Scoria", "block.create.chiseled_dolomite": "UNLOCALIZED: Chiseled Dolomite", @@ -48,17 +54,20 @@ "block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing", "block.create.clutch": "Kupplung", "block.create.cogwheel": "Zahnrad", + "block.create.content_observer": "UNLOCALIZED: Content Observer", "block.create.copper_block": "UNLOCALIZED: Copper Block", "block.create.copper_casing": "UNLOCALIZED: Copper Casing", "block.create.copper_ore": "UNLOCALIZED: Copper Ore", "block.create.copper_shingles": "UNLOCALIZED: Copper Shingles", "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", + "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", "block.create.creative_crate": "Bauplankanonenmacher", "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Mahlwerkrad", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "UNLOCALIZED: Cuckoo Clock", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", + "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", "block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window", "block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane", "block.create.dark_scoria": "UNLOCALIZED: Dark Scoria", @@ -134,6 +143,7 @@ "block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall", "block.create.fluid_pipe": "UNLOCALIZED: Fluid Pipe", "block.create.fluid_tank": "UNLOCALIZED: Fluid Tank", + "block.create.fluid_valve": "UNLOCALIZED: Fluid Valve", "block.create.flywheel": "UNLOCALIZED: Flywheel", "block.create.framed_glass": "UNLOCALIZED: Framed Glass", "block.create.framed_glass_pane": "UNLOCALIZED: Framed Glass Pane", @@ -161,7 +171,9 @@ "block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_seat": "UNLOCALIZED: Green Seat", + "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "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", @@ -178,8 +190,11 @@ "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", + "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", "block.create.limesand": "Kalksand", "block.create.limestone": "Kalkstein", "block.create.limestone_bricks": "Kalksteinziegel", @@ -193,6 +208,7 @@ "block.create.limestone_pillar": "Kalksteinsäule", "block.create.linear_chassis": "Schubgerüst", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Mechanisches Lager", "block.create.mechanical_crafter": "UNLOCALIZED: Mechanical Crafter", @@ -223,6 +239,7 @@ "block.create.oak_window": "UNLOCALIZED: Oak Window", "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", + "block.create.orange_valve_handle": "UNLOCALIZED: Orange Valve Handle", "block.create.ornate_iron_window": "UNLOCALIZED: Ornate Iron Window", "block.create.ornate_iron_window_pane": "UNLOCALIZED: Ornate Iron Window Pane", "block.create.overgrown_andesite": "UNLOCALIZED: Overgrown Andesite", @@ -271,7 +288,12 @@ "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", +<<<<<<< HEAD "block.create.piston_extension_pole": "Kolben-Pleuelverlängerung", +======= + "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", + "block.create.piston_extension_pole": "Kolben-Pleuelverlängerung", +>>>>>>> mc1.15/dev "block.create.polished_dark_scoria": "UNLOCALIZED: Polished Dark Scoria", "block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab", "block.create.polished_dark_scoria_stairs": "UNLOCALIZED: Polished Dark Scoria Stairs", @@ -302,8 +324,14 @@ "block.create.pulley_magnet": "UNLOCALIZED: Pulley Magnet", "block.create.pulse_repeater": "Pulsierender Verstärker", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", +<<<<<<< HEAD "block.create.radial_chassis": "Drehgerüst", +======= + "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", + "block.create.radial_chassis": "Drehgerüst", +>>>>>>> mc1.15/dev "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", "block.create.redstone_contact": "Redstone-Kontakt", "block.create.redstone_link": "Redstone-Verbindung", "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", @@ -351,7 +379,9 @@ "block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "Verwitterte Kalksteinsäule", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", + "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", "block.create.zinc_block": "UNLOCALIZED: Zinc Block", "block.create.zinc_ore": "UNLOCALIZED: Zinc Ore", @@ -661,12 +691,18 @@ "create.gui.adjustable_crate.title": "adjustable_crate", "create.gui.adjustable_crate.storageSpace": "Lagerraum", "create.gui.stockpile_switch.title": "Vorratssensor", +<<<<<<< HEAD "create.gui.stockpile_switch.lowerLimit": "Untergrenze", "create.gui.stockpile_switch.upperLimit": "Obergrenze", "create.gui.stockpile_switch.startAt": "Signal bei", "create.gui.stockpile_switch.startAbove": "Signal über", "create.gui.stockpile_switch.stopAt": "Signalstopp bei", "create.gui.stockpile_switch.stopBelow": "Signalstopp über", +======= + "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", + "create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", +>>>>>>> mc1.15/dev "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", @@ -686,8 +722,14 @@ "create.schematicAndQuill.firstPos": "Erste Position festgelegt.", "create.schematicAndQuill.secondPos": "Zweite Position festgelegt.", "create.schematicAndQuill.noTarget": "Halte [Strg] zur Auswahl von Luft.", +<<<<<<< HEAD "create.schematicAndQuill.abort": "Auswahl zurückgesetzt.", "create.schematicAndQuill.prompt": "Gib dem Bauplan einen Namen:", +======= + "create.schematicAndQuill.abort": "Auswahl zurückgesetzt.", + "create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", + "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately", +>>>>>>> mc1.15/dev "create.schematicAndQuill.fallbackName": "Mein Bauplan", "create.schematicAndQuill.saved": "Gespeichert als %1$s", @@ -738,18 +780,25 @@ "create.schematics.maxAllowedSize": "Die maximale Bauplan-Dateigröße ist:", "create.gui.schematicTable.title": "Bauplantisch", +<<<<<<< HEAD "create.gui.schematicTable.availableSchematics": "Verfügbare Baupläne", "create.gui.schematicTable.noSchematics": "Keine gespeicherten Baupläne", +======= + "create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files", + "create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder", + "create.gui.schematicTable.availableSchematics": "Verfügbare Baupläne", + "create.gui.schematicTable.noSchematics": "Keine gespeicherten Baupläne", +>>>>>>> mc1.15/dev "create.gui.schematicTable.uploading": "Hochladen...", "create.gui.schematicTable.finished": "Hochgeladen!", "create.gui.schematicannon.title": "Bauplankanone", - "create.gui.schematicannon.settingsTitle": "Platzier-Optionen", "create.gui.schematicannon.listPrinter": "Materiallistendruck", "create.gui.schematicannon.gunpowderLevel": "Schwarzpulver bei %1$s%%", "create.gui.schematicannon.shotsRemaining": "%1$s Schuss übrig", "create.gui.schematicannon.shotsRemainingWithBackup": "Mit Reserve: %1$s", "create.gui.schematicannon.optionEnabled": "Aktiviert", "create.gui.schematicannon.optionDisabled": "Deaktiviert", +<<<<<<< HEAD "create.gui.schematicannon.option.dontReplaceSolid": "Feste Blöcke nicht ersetzen", "create.gui.schematicannon.option.replaceWithSolid": "Feste Blöcke mit festen ersetzen", "create.gui.schematicannon.option.replaceWithAny": "Feste Blöcke immer ersetzen", @@ -762,6 +811,24 @@ "create.gui.schematicannon.option.replaceWithSolid.description": "Die Kanone wird feste Blöcke nur dann ersetzen, wenn an der Position vorher bereits ein fester Block war.", "create.gui.schematicannon.option.replaceWithAny.description": "Die Kanone wird feste Blöcke ersetzen, wenn der Bauplan an der Position einen Block enthält.", "create.gui.schematicannon.option.replaceWithEmpty.description": "Die Kanone wird alle Blöcke im Arbeitsbereich entfernen.", +======= + "create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings", + "create.gui.schematicannon.option.dontReplaceSolid": "Feste Blöcke nicht ersetzen", + "create.gui.schematicannon.option.replaceWithSolid": "Feste Blöcke mit festen ersetzen", + "create.gui.schematicannon.option.replaceWithAny": "Feste Blöcke immer ersetzen", + "create.gui.schematicannon.option.replaceWithEmpty": "Feste Blöcke mit Leere ersetzen", + "create.gui.schematicannon.option.skipMissing": "Fehlende Blöcke ignorieren", + "create.gui.schematicannon.option.skipTileEntities": "Tile Entities ignorieren", + "create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon", + "create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic", + "create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.", + "create.gui.schematicannon.option.skipMissing.description": "Wenn die Bauplankanone einen benötigten Block nicht finden kann, wird sie einfach beim nächsten weiter machen.", + "create.gui.schematicannon.option.skipTileEntities.description": "Die Bauplankanone wird versuchen, Blöcke mit extra Daten, beispielsweise Truhen, nicht zu ersetzen.", + "create.gui.schematicannon.option.dontReplaceSolid.description": "Die Kanone wird ausschließlich nicht feste Blöcke und Luft in ihrem Arbeitsbereich ersetzen.", + "create.gui.schematicannon.option.replaceWithSolid.description": "Die Kanone wird feste Blöcke nur dann ersetzen, wenn an der Position vorher bereits ein fester Block war.", + "create.gui.schematicannon.option.replaceWithAny.description": "Die Kanone wird feste Blöcke ersetzen, wenn der Bauplan an der Position einen Block enthält.", + "create.gui.schematicannon.option.replaceWithEmpty.description": "Die Kanone wird alle Blöcke im Arbeitsbereich entfernen.", +>>>>>>> mc1.15/dev "create.schematicannon.status.idle": "Aus", "create.schematicannon.status.ready": "Bereit", @@ -791,23 +858,42 @@ "create.gui.filter.ignore_data.description": "UNLOCALIZED: Items match regardless of their attributes.", "create.item_attributes.placeable": "UNLOCALIZED: is placeable", + "create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable", "create.item_attributes.consumable": "UNLOCALIZED: can be eaten", + "create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten", "create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", "create.item_attributes.washable": "UNLOCALIZED: can be Washed", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", "create.item_attributes.smokable": "UNLOCALIZED: can be Smoked", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", "create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace", + "create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace", "create.item_attributes.enchanted": "UNLOCALIZED: is enchanted", + "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", "create.item_attributes.damaged": "UNLOCALIZED: is damaged", + "create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged", "create.item_attributes.badly_damaged": "UNLOCALIZED: is heavily damaged", + "create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged", "create.item_attributes.not_stackable": "UNLOCALIZED: cannot stack", + "create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked", "create.item_attributes.equipable": "UNLOCALIZED: can be equipped", + "create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped", "create.item_attributes.furnace_fuel": "UNLOCALIZED: is furnace fuel", + "create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel", "create.item_attributes.in_tag": "UNLOCALIZED: is tagged %1$s", - "create.item_attributes.in_item_group": "UNLOCALIZED: belongs to %1$s", + "create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s", + "create.item_attributes.in_item_group": "UNLOCALIZED: is in group '%1$s'", + "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", "create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s", + "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", "create.gui.attribute_filter.no_selected_attributes": "UNLOCALIZED: No attributes selected", "create.gui.attribute_filter.selected_attributes": "UNLOCALIZED: Selected attributes:", + "create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List", + "create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List", "create.gui.attribute_filter.whitelist_disjunctive": "UNLOCALIZED: Whitelist (Any)", "create.gui.attribute_filter.whitelist_disjunctive.description": "UNLOCALIZED: Items pass if they have any of the selected attributes.", "create.gui.attribute_filter.whitelist_conjunctive": "UNLOCALIZED: Whitelist (All)", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 9d53b7fca..c457a033d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 428", + "_": "Missing Localizations: 477", "_": "->------------------------] Game Elements [------------------------<-", @@ -25,18 +25,24 @@ "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", "block.create.basin": "Bassin", "block.create.belt": "Tapis roulant", +<<<<<<< HEAD "block.create.belt_observer": "Observateur d'entité", +======= +>>>>>>> mc1.15/dev "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", + "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", + "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "Boîtier en laiton", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", + "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", "block.create.cart_assembler": "Assembleur de wagon", "block.create.chiseled_dark_scoria": "UNLOCALIZED: Chiseled Dark Scoria", "block.create.chiseled_dolomite": "UNLOCALIZED: Chiseled Dolomite", @@ -47,18 +53,29 @@ "block.create.chute": "UNLOCALIZED: Chute", "block.create.clockwork_bearing": "Roulement mécanique horloger", "block.create.clutch": "Embrayage", +<<<<<<< HEAD "block.create.cogwheel": "Roue dentée", +======= + "block.create.cogwheel": "Roue dentée", + "block.create.content_observer": "UNLOCALIZED: Content Observer", +>>>>>>> mc1.15/dev "block.create.copper_block": "Bloc de cuivre", "block.create.copper_casing": "Boîtier en cuivre", "block.create.copper_ore": "Minerai de cuivre", "block.create.copper_shingles": "Bardeaux de cuivre", "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", +<<<<<<< HEAD "block.create.creative_crate": "Créateur de schémacanon", +======= + "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", + "block.create.creative_crate": "Créateur de schémacanon", +>>>>>>> mc1.15/dev "block.create.creative_motor": "Moteur", "block.create.crushing_wheel": "Roue de concassage", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "Horloge à coucou", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", + "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", "block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window", "block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane", "block.create.dark_scoria": "Scorie sombre", @@ -134,6 +151,7 @@ "block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall", "block.create.fluid_pipe": "UNLOCALIZED: Fluid Pipe", "block.create.fluid_tank": "UNLOCALIZED: Fluid Tank", + "block.create.fluid_valve": "UNLOCALIZED: Fluid Valve", "block.create.flywheel": "Volant d'inertie", "block.create.framed_glass": "Grande fenêtre en verre", "block.create.framed_glass_pane": "Grande vitre encadrée", @@ -161,7 +179,9 @@ "block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_seat": "UNLOCALIZED: Green Seat", + "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "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", @@ -178,8 +198,11 @@ "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", + "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", "block.create.limesand": "Chaux", "block.create.limestone": "Calcaire", "block.create.limestone_bricks": "Briques de calcaire", @@ -193,6 +216,7 @@ "block.create.limestone_pillar": "Pillier de calcaire", "block.create.linear_chassis": "Châssis linéaire", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Roulement mécanique", "block.create.mechanical_crafter": "Établi mécanique", @@ -223,6 +247,7 @@ "block.create.oak_window": "UNLOCALIZED: Oak Window", "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", + "block.create.orange_valve_handle": "UNLOCALIZED: Orange Valve Handle", "block.create.ornate_iron_window": "UNLOCALIZED: Ornate Iron Window", "block.create.ornate_iron_window_pane": "UNLOCALIZED: Ornate Iron Window Pane", "block.create.overgrown_andesite": "UNLOCALIZED: Overgrown Andesite", @@ -271,7 +296,12 @@ "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", +<<<<<<< HEAD "block.create.piston_extension_pole": "Pôle d'extension de piston", +======= + "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", + "block.create.piston_extension_pole": "Pôle d'extension de piston", +>>>>>>> mc1.15/dev "block.create.polished_dark_scoria": "Scorie sombre polie", "block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab", "block.create.polished_dark_scoria_stairs": "UNLOCALIZED: Polished Dark Scoria Stairs", @@ -302,8 +332,14 @@ "block.create.pulley_magnet": "Aimant de poulie", "block.create.pulse_repeater": "Répéteur d'impulsions", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", +<<<<<<< HEAD "block.create.radial_chassis": "Châssis radial", +======= + "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", + "block.create.radial_chassis": "Châssis radial", +>>>>>>> mc1.15/dev "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", "block.create.redstone_contact": "redstone_contact Redstone", "block.create.redstone_link": "Liaison Redstone", "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", @@ -351,7 +387,9 @@ "block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "Pillier de calcaire patinées", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", + "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", "block.create.zinc_block": "UNLOCALIZED: Zinc Block", "block.create.zinc_ore": "Minerai de zinc", @@ -661,6 +699,7 @@ "create.gui.adjustable_crate.title": "Caisse réglable", "create.gui.adjustable_crate.storageSpace": "Espace de stockage", "create.gui.stockpile_switch.title": "Commutateur de stockage", +<<<<<<< HEAD "create.gui.stockpile_switch.lowerLimit": "Seuil inférieur", "create.gui.stockpile_switch.upperLimit": "Seuil supérieur", "create.gui.stockpile_switch.startAt": "Signal de départ à", @@ -668,6 +707,12 @@ "create.gui.stockpile_switch.stopAt": "Signal d'arrêt à", "create.gui.stockpile_switch.stopBelow": "Signal d'arrêt en-dessous", "create.gui.sequenced_gearshift.title": "Décaleur de rotation séquencé", +======= + "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", + "create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", + "create.gui.sequenced_gearshift.title": "Décaleur de rotation séquencé", +>>>>>>> mc1.15/dev "create.gui.sequenced_gearshift.instruction": "Instructions", "create.gui.sequenced_gearshift.instruction.turn_angle": "Tourner", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angle", @@ -679,6 +724,7 @@ "create.gui.sequenced_gearshift.speed": "Vitesse, direction", "create.gui.sequenced_gearshift.speed.forward": "Vitesse d'entrée, normal", "create.gui.sequenced_gearshift.speed.forward_fast": "Vitesse double, normal", +<<<<<<< HEAD "create.gui.sequenced_gearshift.speed.back": "Vitesse d'entrée, inversé", "create.gui.sequenced_gearshift.speed.back_fast": "Vitesse double, inversée", @@ -692,6 +738,22 @@ "create.schematicAndQuill.saved": "Sauvegardé en tant que %1$s", "create.schematic.invalid": "[!] objet invalide - Utilisez plutôt la table à schéma", +======= + "create.gui.sequenced_gearshift.speed.back": "Vitesse d'entrée, inversé", + "create.gui.sequenced_gearshift.speed.back_fast": "Vitesse double, inversée", + + "create.schematicAndQuill.dimensions": "Taille du schéma: %1$sx%2$sx%3$s", + "create.schematicAndQuill.firstPos": "Première position définie.", + "create.schematicAndQuill.secondPos": "Seconde position définie.", + "create.schematicAndQuill.noTarget": "Enfoncez [Ctrl] pour sélectionner les blocs d'air.", + "create.schematicAndQuill.abort": "Sélection supprimée.", + "create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", + "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately", + "create.schematicAndQuill.fallbackName": "Mon schéma", + "create.schematicAndQuill.saved": "Sauvegardé en tant que %1$s", + + "create.schematic.invalid": "[!] objet invalide - Utilisez plutôt la table à schéma", +>>>>>>> mc1.15/dev "create.schematic.position": "Position", "create.schematic.rotation": "Rotation", "create.schematic.rotation.none": "Aucune", @@ -734,6 +796,7 @@ "create.schematic.tool.flip.description.3": "", "create.schematics.synchronizing": "Synchronisation...", +<<<<<<< HEAD "create.schematics.uploadTooLarge": "Votre schéma est trop grand.", "create.schematics.maxAllowedSize": "La taille de fichier schématique maximale autorisée est:", @@ -750,12 +813,39 @@ "create.gui.schematicannon.shotsRemainingWithBackup": "Avec sauvegarde: %1$s", "create.gui.schematicannon.optionEnabled": "Actuellement activé", "create.gui.schematicannon.optionDisabled": "Actuellement désactivé", +======= + "create.schematics.uploadTooLarge": "Votre schéma est trop grand.", + "create.schematics.maxAllowedSize": "La taille de fichier schématique maximale autorisée est:", + + "create.gui.schematicTable.title": "Table à schéma", + "create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files", + "create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder", + "create.gui.schematicTable.availableSchematics": "Schémas disponibles", + "create.gui.schematicTable.noSchematics": "Aucun schéma enregistré", + "create.gui.schematicTable.uploading": "Téléchargement...", + "create.gui.schematicTable.finished": "Téléchargement terminé!", + "create.gui.schematicannon.title": "Schémacanon", + "create.gui.schematicannon.listPrinter": "Imprimante de liste de matériaux", + "create.gui.schematicannon.gunpowderLevel": "Poudre à canon à %1$s%%", + "create.gui.schematicannon.shotsRemaining": "Tirs restants: %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "Avec sauvegarde: %1$s", + "create.gui.schematicannon.optionEnabled": "Actuellement activé", + "create.gui.schematicannon.optionDisabled": "Actuellement désactivé", + "create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings", +>>>>>>> mc1.15/dev "create.gui.schematicannon.option.dontReplaceSolid": "Ne remplacez pas les blocs solides", "create.gui.schematicannon.option.replaceWithSolid": "Remplacer solide par solide", "create.gui.schematicannon.option.replaceWithAny": "Remplacer le solide par n'importe quoi", "create.gui.schematicannon.option.replaceWithEmpty": "Remplacer le solide par rien", "create.gui.schematicannon.option.skipMissing": "Ignorer les blocs manquants", +<<<<<<< HEAD "create.gui.schematicannon.option.skipTileEntities": "Protéger les Tile Entities", +======= + "create.gui.schematicannon.option.skipTileEntities": "Protéger les Tile Entities", + "create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon", + "create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic", + "create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.", +>>>>>>> mc1.15/dev "create.gui.schematicannon.option.skipMissing.description": "Si le canon ne peut pas trouver un bloc requis pour le placement, il continuera au prochain emplacement.", "create.gui.schematicannon.option.skipTileEntities.description": "Le canon évitera de remplacer les blocs de stockage de données tels que les coffres.", "create.gui.schematicannon.option.dontReplaceSolid.description": "Le canon ne remplacera jamais les blocs solides dans sa zone de travail, seulement non solides et air.", @@ -791,15 +881,36 @@ "create.gui.filter.ignore_data.description": "Les éléments correspondent indépendamment de leurs attributs.", "create.item_attributes.placeable": "est placeable", +<<<<<<< HEAD "create.item_attributes.consumable": "peut être mangé", +======= + "create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable", + "create.item_attributes.consumable": "peut être mangé", + "create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten", +>>>>>>> mc1.15/dev "create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", "create.item_attributes.washable": "UNLOCALIZED: can be Washed", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", "create.item_attributes.smokable": "UNLOCALIZED: can be Smoked", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", "create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace", +<<<<<<< HEAD "create.item_attributes.enchanted": "est enchanté", "create.item_attributes.damaged": "est endommagé", +======= + "create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace", + "create.item_attributes.enchanted": "est enchanté", + "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", + "create.item_attributes.damaged": "est endommagé", + "create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged", +>>>>>>> mc1.15/dev "create.item_attributes.badly_damaged": "est fortement damaged", + "create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged", "create.item_attributes.not_stackable": "ne peut pas s'empiler", +<<<<<<< HEAD "create.item_attributes.equipable": "peut être équipé", "create.item_attributes.furnace_fuel": "est du combustible", "create.item_attributes.in_tag": "est étiqueté %1$s", @@ -808,6 +919,24 @@ "create.gui.attribute_filter.no_selected_attributes": "Aucun attribut sélectionné", "create.gui.attribute_filter.selected_attributes": "Attributs sélectionnés:", +======= + "create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked", + "create.item_attributes.equipable": "peut être équipé", + "create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped", + "create.item_attributes.furnace_fuel": "est du combustible", + "create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel", + "create.item_attributes.in_tag": "est étiqueté %1$s", + "create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s", + "create.item_attributes.in_item_group": "appartient à %1$s", + "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", + "create.item_attributes.added_by": "a été ajouté par %1$s", + "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", + + "create.gui.attribute_filter.no_selected_attributes": "Aucun attribut sélectionné", + "create.gui.attribute_filter.selected_attributes": "Attributs sélectionnés:", + "create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List", + "create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List", +>>>>>>> mc1.15/dev "create.gui.attribute_filter.whitelist_disjunctive": "Liste blanche (n'importe)", "create.gui.attribute_filter.whitelist_disjunctive.description": "Les objets réussissent s'ils possèdent l'un des attributs sélectionnés.", "create.gui.attribute_filter.whitelist_conjunctive": "Liste blanche (tout)", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 73478f010..3c29bc4ab 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 412", + "_": "Missing Localizations: 461", "_": "->------------------------] Game Elements [------------------------<-", @@ -25,18 +25,20 @@ "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", "block.create.basin": "Bacinella", "block.create.belt": "Nastro Meccanico", - "block.create.belt_observer": "Osservatore a Cinghia", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", + "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", + "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "Blocco di Ottone", "block.create.brass_casing": "Involucro di Ottone", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", + "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", "block.create.cart_assembler": "Assemblatore Carrello da Miniera", "block.create.chiseled_dark_scoria": "UNLOCALIZED: Chiseled Dark Scoria", "block.create.chiseled_dolomite": "UNLOCALIZED: Chiseled Dolomite", @@ -48,17 +50,20 @@ "block.create.clockwork_bearing": "Supporto del Orologio", "block.create.clutch": "Frizione", "block.create.cogwheel": "Ruota Dentata", + "block.create.content_observer": "UNLOCALIZED: Content Observer", "block.create.copper_block": "Blocco di Rame", "block.create.copper_casing": "Involucro di Rame", "block.create.copper_ore": "Rame Grezzo", "block.create.copper_shingles": "Tegole di Rame", "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_motor": "Motore", "block.create.crushing_wheel": "Ruota di Frantumazione", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "Orologio a Cucù", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", + "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", "block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window", "block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane", "block.create.dark_scoria": "Scoria Scura", @@ -134,6 +139,7 @@ "block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall", "block.create.fluid_pipe": "UNLOCALIZED: Fluid Pipe", "block.create.fluid_tank": "UNLOCALIZED: Fluid Tank", + "block.create.fluid_valve": "UNLOCALIZED: Fluid Valve", "block.create.flywheel": "Volano", "block.create.framed_glass": "Finestra Grande Vetro", "block.create.framed_glass_pane": "Pannello di Finestra Grande Vetro", @@ -161,7 +167,9 @@ "block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_seat": "UNLOCALIZED: Green Seat", + "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "Manovella", "block.create.horizontal_framed_glass": "Finestra Orizzontale Vetro", "block.create.horizontal_framed_glass_pane": "Pannello di Finestra Orizzontale Vetro", @@ -178,8 +186,11 @@ "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", + "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", "block.create.limesand": "Silico Calcare", "block.create.limestone": "Calcare", "block.create.limestone_bricks": "Mattoni di Calcare", @@ -193,6 +204,7 @@ "block.create.limestone_pillar": "Pilastro di Calcare", "block.create.linear_chassis": "Telaio Lineare", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Supporto Meccanico", "block.create.mechanical_crafter": "Costruttore Meccanico", @@ -223,6 +235,7 @@ "block.create.oak_window": "UNLOCALIZED: Oak Window", "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", + "block.create.orange_valve_handle": "UNLOCALIZED: Orange Valve Handle", "block.create.ornate_iron_window": "UNLOCALIZED: Ornate Iron Window", "block.create.ornate_iron_window_pane": "UNLOCALIZED: Ornate Iron Window Pane", "block.create.overgrown_andesite": "UNLOCALIZED: Overgrown Andesite", @@ -271,6 +284,7 @@ "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", + "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", "block.create.piston_extension_pole": "Palo Pistome", "block.create.polished_dark_scoria": "Scoria Scura Levigata", "block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab", @@ -302,8 +316,10 @@ "block.create.pulley_magnet": "Magnete della Puleggia", "block.create.pulse_repeater": "Ripetitore di Impulsi", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", + "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", "block.create.radial_chassis": "Telaio Radiale", "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", "block.create.redstone_contact": "Contatto Redstone", "block.create.redstone_link": "Collegamento Redstone", "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", @@ -351,7 +367,9 @@ "block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "Pilastro di Calcare Consumato", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", + "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", "block.create.zinc_block": "Blocco di Zinco", "block.create.zinc_ore": "Zinco Grezzo", @@ -661,12 +679,9 @@ "create.gui.adjustable_crate.title": "Baule Regolabile", "create.gui.adjustable_crate.storageSpace": "Spazio di Immagazzinamento", "create.gui.stockpile_switch.title": "Interruttore Accumulatore", - "create.gui.stockpile_switch.lowerLimit": "Soglia Inferiore", - "create.gui.stockpile_switch.upperLimit": "Soglia Superiore", - "create.gui.stockpile_switch.startAt": "Inizia Segnale al", - "create.gui.stockpile_switch.startAbove": "Inizia il Segnale dop.", - "create.gui.stockpile_switch.stopAt": "Ferma Segnale al", - "create.gui.stockpile_switch.stopBelow": "Ferma il Segnale dop.", + "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", + "create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", "create.gui.sequenced_gearshift.title": "Cambio Sequenziale", "create.gui.sequenced_gearshift.instruction": "Istruzione", "create.gui.sequenced_gearshift.instruction.turn_angle": "Gira", @@ -687,7 +702,8 @@ "create.schematicAndQuill.secondPos": "Seconda posizione impostata.", "create.schematicAndQuill.noTarget": "Premi [Ctrl] per selezionare il Blocco d'Aria.", "create.schematicAndQuill.abort": "Selezione rimossa.", - "create.schematicAndQuill.prompt": "Immettere un nome per lo schema:", + "create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", + "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately", "create.schematicAndQuill.fallbackName": "La mia Schematica", "create.schematicAndQuill.saved": "Salvata come %1$s", @@ -738,23 +754,26 @@ "create.schematics.maxAllowedSize": "La dimensione massima consentita del file schematica è:", "create.gui.schematicTable.title": "Banco Schematico", + "create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files", + "create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder", "create.gui.schematicTable.availableSchematics": "Schatiche disponibili", "create.gui.schematicTable.noSchematics": "Nessuna Schatica Salvata", "create.gui.schematicTable.uploading": "Caricamento...", "create.gui.schematicTable.finished": "Caricamento Finito!", "create.gui.schematicannon.title": "Cannoneschematico", - "create.gui.schematicannon.settingsTitle": "Impostazioni di Posizionamento", "create.gui.schematicannon.listPrinter": "Stampante Lisra dei Materiali", "create.gui.schematicannon.gunpowderLevel": "Polvere da sparo al %1$s%%", "create.gui.schematicannon.shotsRemaining": "Spari Rimanenti: %1$s", "create.gui.schematicannon.shotsRemainingWithBackup": "Con il backup: %1$s", "create.gui.schematicannon.optionEnabled": "Attualmente Abilitato", "create.gui.schematicannon.optionDisabled": "Attualmente Disabilitato", + "create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings", "create.gui.schematicannon.option.dontReplaceSolid": "Non sostituire i Blocchi Solidi", "create.gui.schematicannon.option.replaceWithSolid": "Sostituisci Solidi con Solidi", "create.gui.schematicannon.option.replaceWithAny": "Sostituisci Solidi con Qualsiasi", "create.gui.schematicannon.option.replaceWithEmpty": "Sostituisci Solidi con il Vuoto", "create.gui.schematicannon.option.skipMissing": "Salta i Blocchi Mancanti", +<<<<<<< HEAD "create.gui.schematicannon.option.skipTileEntities": "Proteggi i Blocchi Entità", "create.gui.schematicannon.option.skipMissing.description": "Se il cannone non riesce a trovare un blocco richiesto per il posizionamento, continuerà nella posizione successiva.", "create.gui.schematicannon.option.skipTileEntities.description": "Il cannone eviterà di sostituire i blocchi di dati come bauli.", @@ -762,6 +781,18 @@ "create.gui.schematicannon.option.replaceWithSolid.description": "Il cannone sostituirà i blocchi solidi nella sua area di lavoro se lo schema contiene un blocco solido nella posizione.", "create.gui.schematicannon.option.replaceWithAny.description": "Il cannone sostituirà i blocchi solidi nella sua area di lavoro se lo schema contiene qualche blocco nella posizione.", "create.gui.schematicannon.option.replaceWithEmpty.description": "Il cannone eliminerà tutti i blocchi nell'area di lavoro, compresi quelli sostituiti dal aria.", +======= + "create.gui.schematicannon.option.skipTileEntities": "Proteggi i Blocchi Entità", + "create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon", + "create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic", + "create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.", + "create.gui.schematicannon.option.skipMissing.description": "Se il cannone non riesce a trovare un blocco richiesto per il posizionamento, continuerà nella posizione successiva.", + "create.gui.schematicannon.option.skipTileEntities.description": "Il cannone eviterà di sostituire i blocchi di dati come bauli.", + "create.gui.schematicannon.option.dontReplaceSolid.description": "Il cannone non sostituirà mai alcun blocco Solido nella sua area di lavoro, solo non solidi e aria.", + "create.gui.schematicannon.option.replaceWithSolid.description": "Il cannone sostituirà i blocchi solidi nella sua area di lavoro se lo schema contiene un blocco solido nella posizione.", + "create.gui.schematicannon.option.replaceWithAny.description": "Il cannone sostituirà i blocchi solidi nella sua area di lavoro se lo schema contiene qualche blocco nella posizione.", + "create.gui.schematicannon.option.replaceWithEmpty.description": "Il cannone eliminerà tutti i blocchi nell'area di lavoro, compresi quelli sostituiti dal aria.", +>>>>>>> mc1.15/dev "create.schematicannon.status.idle": "Inattivo", "create.schematicannon.status.ready": "Pronto", @@ -790,6 +821,7 @@ "create.gui.filter.ignore_data": "Ignora Dati", "create.gui.filter.ignore_data.description": "Gli oggetti corrispondono indipendentemente dai loro attributi.", +<<<<<<< HEAD "create.item_attributes.placeable": "è posizionabile", "create.item_attributes.consumable": "può essere mangiato", "create.item_attributes.smeltable": "può essere Fuso", @@ -805,9 +837,45 @@ "create.item_attributes.in_tag": "è etichettato %1$s", "create.item_attributes.in_item_group": "appartiene a %1$s", "create.item_attributes.added_by": "è stato aggiunto da %1$s", +======= + "create.item_attributes.placeable": "è posizionabile", + "create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable", + "create.item_attributes.consumable": "può essere mangiato", + "create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten", + "create.item_attributes.smeltable": "può essere Fuso", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", + "create.item_attributes.washable": "può essere Lavato", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", + "create.item_attributes.smokable": "può essere Affumicato", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", + "create.item_attributes.blastable": "è fondibile in un Forno fusorio", + "create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace", + "create.item_attributes.enchanted": "è incantato", + "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", + "create.item_attributes.damaged": "è danneggiato", + "create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged", + "create.item_attributes.badly_damaged": "è gravemente danneggiato", + "create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged", + "create.item_attributes.not_stackable": "non impilabile", + "create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked", + "create.item_attributes.equipable": "può essere equipaggiato", + "create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped", + "create.item_attributes.furnace_fuel": "è il combustibile della fornace", + "create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel", + "create.item_attributes.in_tag": "è etichettato %1$s", + "create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s", + "create.item_attributes.in_item_group": "appartiene a %1$s", + "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", + "create.item_attributes.added_by": "è stato aggiunto da %1$s", + "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", +>>>>>>> mc1.15/dev "create.gui.attribute_filter.no_selected_attributes": "Nessun attributo selezionato", "create.gui.attribute_filter.selected_attributes": "Attributi selezionati:", + "create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List", + "create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List", "create.gui.attribute_filter.whitelist_disjunctive": "Lista Bianca (Qualsiasi)", "create.gui.attribute_filter.whitelist_disjunctive.description": "Gli oggetti passano se hanno uno degli attributi selezionati.", "create.gui.attribute_filter.whitelist_conjunctive": "Lista Bianca (Tutti)", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index bf29efd49..9d2226306 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 407", + "_": "Missing Localizations: 456", "_": "->------------------------] Game Elements [------------------------<-", @@ -23,21 +23,33 @@ "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", +<<<<<<< HEAD "block.create.basin": "鉢", "block.create.belt": "メカニカルベルト", "block.create.belt_observer": "ベルトオブザーãƒ�ー", +======= + "block.create.basin": "鉢", + "block.create.belt": "メカニカルベルト", +>>>>>>> mc1.15/dev "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", + "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", + "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "真é�®ãƒ–ロック", "block.create.brass_casing": "真é�®ã‚±ãƒ¼ã‚·ãƒ³ã‚°", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", +<<<<<<< HEAD "block.create.cart_assembler": "カートアセンブラ", +======= + "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", + "block.create.cart_assembler": "カートアセンブラ", +>>>>>>> mc1.15/dev "block.create.chiseled_dark_scoria": "UNLOCALIZED: Chiseled Dark Scoria", "block.create.chiseled_dolomite": "UNLOCALIZED: Chiseled Dolomite", "block.create.chiseled_gabbro": "UNLOCALIZED: Chiseled Gabbro", @@ -45,6 +57,7 @@ "block.create.chiseled_scoria": "UNLOCALIZED: Chiseled Scoria", "block.create.chiseled_weathered_limestone": "UNLOCALIZED: Chiseled Weathered Limestone", "block.create.chute": "UNLOCALIZED: Chute", +<<<<<<< HEAD "block.create.clockwork_bearing": "時計仕掛ã�‘ã�®ãƒ™ã‚¢ãƒªãƒ³ã‚°", "block.create.clutch": "クラッãƒ�", "block.create.cogwheel": "歯車", @@ -56,9 +69,25 @@ "block.create.creative_crate": "概略図砲クリエティフィアー", "block.create.creative_motor": "モーター", "block.create.crushing_wheel": "破砕ホイール", +======= + "block.create.clockwork_bearing": "時計仕掛けのベアリング", + "block.create.clutch": "クラッチ", + "block.create.cogwheel": "歯車", + "block.create.content_observer": "UNLOCALIZED: Content Observer", + "block.create.copper_block": "銅ブロック", + "block.create.copper_casing": "銅ケーシング", + "block.create.copper_ore": "銅鉱石", + "block.create.copper_shingles": "銅のこけら板", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", + "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", + "block.create.creative_crate": "概略図砲クリエティフィアー", + "block.create.creative_motor": "モーター", + "block.create.crushing_wheel": "破砕ホイール", +>>>>>>> mc1.15/dev "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "鳩時計", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", + "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", "block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window", "block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane", "block.create.dark_scoria": "ダークスコリア", @@ -134,12 +163,22 @@ "block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall", "block.create.fluid_pipe": "UNLOCALIZED: Fluid Pipe", "block.create.fluid_tank": "UNLOCALIZED: Fluid Tank", +<<<<<<< HEAD "block.create.flywheel": "勢車", "block.create.framed_glass": "大ã��ã�ªã‚¬ãƒ©ã‚¹çª“", "block.create.framed_glass_pane": "大ã��ã�ªã‚¬ãƒ©ã‚¹çª“æ�¿", "block.create.furnace_engine": "ã�‹ã�¾ã�©ã‚¨ãƒ³ã‚¸ãƒ³", "block.create.gabbro": "æ–‘ã‚Œã�„岩", "block.create.gabbro_bricks": "æ–‘ã‚Œã�„岩レンガ", +======= + "block.create.fluid_valve": "UNLOCALIZED: Fluid Valve", + "block.create.flywheel": "勢車", + "block.create.framed_glass": "大きなガラス窓", + "block.create.framed_glass_pane": "大きなガラス窓板", + "block.create.furnace_engine": "かまどエンジン", + "block.create.gabbro": "斑れい岩", + "block.create.gabbro_bricks": "斑れい岩レンガ", +>>>>>>> mc1.15/dev "block.create.gabbro_bricks_slab": "UNLOCALIZED: Gabbro Bricks Slab", "block.create.gabbro_bricks_stairs": "æ–‘ã‚Œã�„岩レンガã�®éšŽæ®µ", "block.create.gabbro_bricks_wall": "æ–‘ã‚Œã�„岩レンガã�®å¡€", @@ -161,10 +200,18 @@ "block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_seat": "UNLOCALIZED: Green Seat", +<<<<<<< HEAD "block.create.hand_crank": "ãƒ�ンドクランク", "block.create.horizontal_framed_glass": "横型ガラス窓", "block.create.horizontal_framed_glass_pane": "横型ガラス窓æ�¿", +======= + "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", + "block.create.hand_crank": "ハンドクランク", + "block.create.horizontal_framed_glass": "横型ガラス窓", + "block.create.horizontal_framed_glass_pane": "横型ガラス窓板", +>>>>>>> mc1.15/dev "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "大ã��ã�ªæ­¯è»Š", @@ -178,14 +225,26 @@ "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", +<<<<<<< HEAD "block.create.limesand": "石ç�°ç •ç ‚", "block.create.limestone": "石ç�°å²©", "block.create.limestone_bricks": "石ç�°å²©ãƒ¬ãƒ³ã‚¬", "block.create.limestone_bricks_slab": "石ç�°å²©ãƒ¬ãƒ³ã‚¬ã�®ãƒ�ーフブロック", "block.create.limestone_bricks_stairs": "石ç�°å²©ãƒ¬ãƒ³ã‚¬ã�®éšŽæ®µ", "block.create.limestone_bricks_wall": "石ç�°å²©ãƒ¬ãƒ³ã‚¬ã�®å¡€", +======= + "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", + "block.create.limesand": "石灰砕砂", + "block.create.limestone": "石灰岩", + "block.create.limestone_bricks": "石灰岩レンガ", + "block.create.limestone_bricks_slab": "石灰岩レンガのハーフブロック", + "block.create.limestone_bricks_stairs": "石灰岩レンガの階段", + "block.create.limestone_bricks_wall": "石灰岩レンガの塀", +>>>>>>> mc1.15/dev "block.create.limestone_cobblestone": "UNLOCALIZED: Limestone Cobblestone", "block.create.limestone_cobblestone_slab": "UNLOCALIZED: Limestone Cobblestone Slab", "block.create.limestone_cobblestone_stairs": "UNLOCALIZED: Limestone Cobblestone Stairs", @@ -193,6 +252,7 @@ "block.create.limestone_pillar": "石ç�°å²©ã�®æŸ±", "block.create.linear_chassis": "リニアシャーシ", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "メカニカルベアリング", "block.create.mechanical_crafter": "メカニカルクラフター", @@ -223,6 +283,7 @@ "block.create.oak_window": "UNLOCALIZED: Oak Window", "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", + "block.create.orange_valve_handle": "UNLOCALIZED: Orange Valve Handle", "block.create.ornate_iron_window": "UNLOCALIZED: Ornate Iron Window", "block.create.ornate_iron_window_pane": "UNLOCALIZED: Ornate Iron Window Pane", "block.create.overgrown_andesite": "UNLOCALIZED: Overgrown Andesite", @@ -271,8 +332,14 @@ "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", +<<<<<<< HEAD "block.create.piston_extension_pole": "ピストン延長ãƒ�ール", "block.create.polished_dark_scoria": "磨ã�‹ã‚Œã�Ÿãƒ€ãƒ¼ã‚¯ã‚¹ã‚³ãƒªã‚¢", +======= + "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", + "block.create.piston_extension_pole": "ピストン延長ポール", + "block.create.polished_dark_scoria": "磨かれたダークスコリア", +>>>>>>> mc1.15/dev "block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab", "block.create.polished_dark_scoria_stairs": "UNLOCALIZED: Polished Dark Scoria Stairs", "block.create.polished_dark_scoria_wall": "UNLOCALIZED: Polished Dark Scoria Wall", @@ -302,10 +369,19 @@ "block.create.pulley_magnet": "プーリーマグãƒ�ット", "block.create.pulse_repeater": "パルスリピーター", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", +<<<<<<< HEAD "block.create.radial_chassis": "ラジアルシャーシ", "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "レッドストーンコンタクト", "block.create.redstone_link": "レッドストーンリンク", +======= + "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", + "block.create.radial_chassis": "ラジアルシャーシ", + "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", + "block.create.redstone_contact": "レッドストーンコンタクト", + "block.create.redstone_link": "レッドストーンリンク", +>>>>>>> mc1.15/dev "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "ロープ", @@ -351,9 +427,16 @@ "block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "風化ã�—ã�ŸçŸ³ç�°å²©ã�®æŸ±", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", +<<<<<<< HEAD "block.create.zinc_block": "亜鉛ブロック", "block.create.zinc_ore": "亜鉛鉱石", +======= + "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", + "block.create.zinc_block": "亜鉛ブロック", + "block.create.zinc_ore": "亜鉛鉱石", +>>>>>>> mc1.15/dev "entity.create.contraption": "UNLOCALIZED: Contraption", "entity.create.seat": "UNLOCALIZED: Seat", @@ -646,6 +729,7 @@ "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", +<<<<<<< HEAD "create.gui.goggles.generator_stats": "ジェãƒ�レータã�®çµ±è¨ˆ:", "create.gui.goggles.kinetic_stats": "動力ã�®çµ±è¨ˆ:", "create.gui.goggles.at_current_speed": "ç�¾åœ¨ã�®é€Ÿåº¦", @@ -688,6 +772,48 @@ "create.schematicAndQuill.noTarget": "[Ctrl] を押ã�—ã�Ÿã�¾ã�¾ã�§ç©ºæ°—ブロックをé�¸æŠžã�—ã�¾ã�™", "create.schematicAndQuill.abort": "é�¸æŠžã‚’削除ã�—ã�¾ã�—ã�Ÿã€‚", "create.schematicAndQuill.prompt": "概略図ã�®å��å‰�を入力ã�—ã�¦ã��ã� ã�•ã�„:", +======= + "create.gui.goggles.generator_stats": "ジェネレータの統計:", + "create.gui.goggles.kinetic_stats": "動力の統計:", + "create.gui.goggles.at_current_speed": "現在の速度", + "create.gui.goggles.base_value": "基本値", + "create.gui.gauge.info_header": "計器の情報:", + "create.gui.speedometer.title": "回転速度", + "create.gui.stressometer.title": "ネットワークの応力", + "create.gui.stressometer.capacity": "残りの容量", + "create.gui.stressometer.overstressed": "超過応力", + "create.gui.stressometer.no_rotation": "回転なし", + "create.gui.contraptions.not_fast_enough": "この %1$s は_十分な_回転を_していない_ようです。", + "create.gui.contraptions.network_overstressed": "この仕掛けは_超過応力_のようです。さらにソースを追加するか、コンポーネントに_負荷をかけ_応力の影響を大きくします。", + "create.gui.adjustable_crate.title": "調整可能なクレート", + "create.gui.adjustable_crate.storageSpace": "収納スペース", + "create.gui.stockpile_switch.title": "在庫スイッチ", + "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", + "create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", + "create.gui.sequenced_gearshift.title": "シーケンスギアシフト", + "create.gui.sequenced_gearshift.instruction": "命令", + "create.gui.sequenced_gearshift.instruction.turn_angle": "回転", + "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度", + "create.gui.sequenced_gearshift.instruction.turn_distance": "ピストン", + "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距離", + "create.gui.sequenced_gearshift.instruction.wait": "待機", + "create.gui.sequenced_gearshift.instruction.wait.duration": "期間", + "create.gui.sequenced_gearshift.instruction.end": "終了", + "create.gui.sequenced_gearshift.speed": "速度, 方向", + "create.gui.sequenced_gearshift.speed.forward": "入力速度, フォワード", + "create.gui.sequenced_gearshift.speed.forward_fast": "倍速, フォワード", + "create.gui.sequenced_gearshift.speed.back": "入力速度, 反転", + "create.gui.sequenced_gearshift.speed.back_fast": "倍速, 反転", + + "create.schematicAndQuill.dimensions": "概略図サイズ: %1$sx%2$sx%3$s", + "create.schematicAndQuill.firstPos": "最初の位置セット。", + "create.schematicAndQuill.secondPos": "2番目の位置セット。", + "create.schematicAndQuill.noTarget": "[Ctrl] を押したままで空気ブロックを選択します", + "create.schematicAndQuill.abort": "選択を削除しました。", + "create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", + "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately", +>>>>>>> mc1.15/dev "create.schematicAndQuill.fallbackName": "My Schematic", "create.schematicAndQuill.saved": "%1$s ã�¨ã�—ã�¦ä¿�å­˜ã�—ã�¾ã�—ã�Ÿ", @@ -733,6 +859,7 @@ "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", +<<<<<<< HEAD "create.schematics.synchronizing": "å�ŒæœŸã�—ã�¦ã�„ã�¾ã�™...", "create.schematics.uploadTooLarge": "概略図ã�Œå¤§ã��ã�™ã�Žã�¾ã�™ã€‚", "create.schematics.maxAllowedSize": "最大許容概略図ファイルサイズã�¯:", @@ -818,6 +945,117 @@ "create.tooltip.holdKey": "[%1$s] を長押ã�—", "create.tooltip.holdKeyOrKey": "[%1$s] ã�¾ã�Ÿã�¯ [%2$s] を長押ã�—", +======= + "create.schematics.synchronizing": "同期しています...", + "create.schematics.uploadTooLarge": "概略図が大きすぎます。", + "create.schematics.maxAllowedSize": "最大許容概略図ファイルサイズは:", + + "create.gui.schematicTable.title": "概略図テーブル", + "create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files", + "create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder", + "create.gui.schematicTable.availableSchematics": "利用可能な概略図", + "create.gui.schematicTable.noSchematics": "保存された概略図はありません", + "create.gui.schematicTable.uploading": "アップロードしています...", + "create.gui.schematicTable.finished": "アップロードが完了しました!", + "create.gui.schematicannon.title": "概略図砲", + "create.gui.schematicannon.listPrinter": "材料リストプリンター", + "create.gui.schematicannon.gunpowderLevel": "火薬はあと %1$s%% 残っています", + "create.gui.schematicannon.shotsRemaining": "残りのショット数: %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "バックアップあり: %1$s", + "create.gui.schematicannon.optionEnabled": "現在有効", + "create.gui.schematicannon.optionDisabled": "現在無効", + "create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings", + "create.gui.schematicannon.option.dontReplaceSolid": "固体ブロックを置き換えない", + "create.gui.schematicannon.option.replaceWithSolid": "固体を固体に置き換える", + "create.gui.schematicannon.option.replaceWithAny": "固体を任意のものに置き換える", + "create.gui.schematicannon.option.replaceWithEmpty": "空の固体と交換", + "create.gui.schematicannon.option.skipMissing": "不足しているブロックをスキップ", + "create.gui.schematicannon.option.skipTileEntities": "タイルエンティティを保護する", + "create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon", + "create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic", + "create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.", + "create.gui.schematicannon.option.skipMissing.description": "大砲が配置に必要なブロックを見つけられない場合、次の場所に進みます。", + "create.gui.schematicannon.option.skipTileEntities.description": "大砲は、チェストなどのデータ保持ブロックの交換を回避します。", + "create.gui.schematicannon.option.dontReplaceSolid.description": "大砲は、その作業領域の固体ブロックを置き換えることはなく、非固体と空気のみを置き換えます。", + "create.gui.schematicannon.option.replaceWithSolid.description": "大砲は、概略図の位置にソリッドブロックが含まれている場合にのみ、その作業領域のソリッドブロックを置き換えます。", + "create.gui.schematicannon.option.replaceWithAny.description": "概略図のロケーションにブロックが含まれている場合、大砲はその作業領域の個体ブロックを置き換えます。", + "create.gui.schematicannon.option.replaceWithEmpty.description": "大砲は、空気に置き換えられたものを含め、その作業エリア内のすべてのブロックを一掃します。", + + "create.schematicannon.status.idle": "停止中", + "create.schematicannon.status.ready": "準備完了", + "create.schematicannon.status.running": "稼働中", + "create.schematicannon.status.finished": "完成", + "create.schematicannon.status.paused": "一時停止中", + "create.schematicannon.status.stopped": "停止", + "create.schematicannon.status.noGunpowder": "火薬不足", + "create.schematicannon.status.targetNotLoaded": "ブロックが読み込まれていません", + "create.schematicannon.status.targetOutsideRange": "ターゲットが遠すぎます", + "create.schematicannon.status.searching": "検索中", + "create.schematicannon.status.skipping": "スキップ", + "create.schematicannon.status.missingBlock": "不明なブロック:", + "create.schematicannon.status.placing": "配置中", + "create.schematicannon.status.clearing": "ブロックをクリア中", + "create.schematicannon.status.schematicInvalid": "概略図が無効です", + "create.schematicannon.status.schematicNotPlaced": "配置されていない概略図です", + "create.schematicannon.status.schematicExpired": "概略図ファイルが期限切れです", + + "create.gui.filter.blacklist": "ブラックリスト", + "create.gui.filter.blacklist.description": "上記のいずれにも一致しない場合、アイテムは通り抜けます。 空のブラックリストはすべてを受け入れます。", + "create.gui.filter.whitelist": "ホワイトリスト", + "create.gui.filter.whitelist.description": "上記のいずれかに一致した場合、アイテムは通り抜けます。 空のホワイトリストはすべてを拒否します。", + "create.gui.filter.respect_data": "データを重視", + "create.gui.filter.respect_data.description": "アイテムは、耐久性、エンチャント、その他の属性も一致する場合にのみ一致します。", + "create.gui.filter.ignore_data": "データを無視", + "create.gui.filter.ignore_data.description": "アイテムは属性に関係なく一致します。", + + "create.item_attributes.placeable": "設置可能か", + "create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable", + "create.item_attributes.consumable": "食べられるか", + "create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten", + "create.item_attributes.smeltable": "精錬可能か", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", + "create.item_attributes.washable": "洗えるか", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", + "create.item_attributes.smokable": "燻製可能か", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", + "create.item_attributes.blastable": "高炉で製錬可能か", + "create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace", + "create.item_attributes.enchanted": "エンチャント済みか", + "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", + "create.item_attributes.damaged": "破損してるか", + "create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged", + "create.item_attributes.badly_damaged": "ひどく損傷してるか", + "create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged", + "create.item_attributes.not_stackable": "スタック可能か", + "create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked", + "create.item_attributes.equipable": "装備可能か", + "create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped", + "create.item_attributes.furnace_fuel": "かまどの燃料か", + "create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel", + "create.item_attributes.in_tag": "%1$s のタグが付けられてるか", + "create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s", + "create.item_attributes.in_item_group": "%1$s に属してるか", + "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", + "create.item_attributes.added_by": "%1$s によって追加されたか", + "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", + + "create.gui.attribute_filter.no_selected_attributes": "属性が選択されていません", + "create.gui.attribute_filter.selected_attributes": "選択された属性:", + "create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List", + "create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List", + "create.gui.attribute_filter.whitelist_disjunctive": "ホワイトリスト(どれか)", + "create.gui.attribute_filter.whitelist_disjunctive.description": "選択した属性のいずれかを持っている場合、アイテムは通り抜けます。", + "create.gui.attribute_filter.whitelist_conjunctive": "ホワイトリスト(全て)", + "create.gui.attribute_filter.whitelist_conjunctive.description": "選択した属性をすべてを持っている場合、アイテムは通り抜けます。", + "create.gui.attribute_filter.blacklist": "ブラックリスト", + "create.gui.attribute_filter.blacklist.description": "選択された属性を持たない場合、アイテムは通り抜けます。", + "create.gui.attribute_filter.add_reference_item": "参照アイテムを追加", + + "create.tooltip.holdKey": "[%1$s] を長押し", + "create.tooltip.holdKeyOrKey": "[%1$s] または [%2$s] を長押し", +>>>>>>> mc1.15/dev "create.tooltip.keyShift": "Shift", "create.tooltip.keyCtrl": "Ctrl", "create.tooltip.speedRequirement": "スピードè¦�件: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index ad0174d62..30fdcc0f6 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 412", + "_": "Missing Localizations: 461", "_": "->------------------------] Game Elements [------------------------<-", @@ -23,21 +23,33 @@ "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", +<<<<<<< HEAD "block.create.basin": "대야", "block.create.belt": "컨베ì�´ì–´ 벨트", "block.create.belt_observer": "벨트 ê°�지기", +======= + "block.create.basin": "대야", + "block.create.belt": "컨베이어 벨트", +>>>>>>> mc1.15/dev "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", + "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", + "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "황ë�™ 블럭", "block.create.brass_casing": "황ë�™ ì¼€ì�´ìŠ¤", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", +<<<<<<< HEAD "block.create.cart_assembler": "카트 조립기", +======= + "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", + "block.create.cart_assembler": "카트 조립기", +>>>>>>> mc1.15/dev "block.create.chiseled_dark_scoria": "UNLOCALIZED: Chiseled Dark Scoria", "block.create.chiseled_dolomite": "UNLOCALIZED: Chiseled Dolomite", "block.create.chiseled_gabbro": "UNLOCALIZED: Chiseled Gabbro", @@ -45,6 +57,7 @@ "block.create.chiseled_scoria": "UNLOCALIZED: Chiseled Scoria", "block.create.chiseled_weathered_limestone": "UNLOCALIZED: Chiseled Weathered Limestone", "block.create.chute": "UNLOCALIZED: Chute", +<<<<<<< HEAD "block.create.clockwork_bearing": "시계 ë² ì–´ë§�", "block.create.clutch": "í�´ëŸ¬ì¹˜", "block.create.cogwheel": "톱나버퀴", @@ -56,9 +69,25 @@ "block.create.creative_crate": "청사진 대í�¬ 지ì›�기", "block.create.creative_motor": "모터", "block.create.crushing_wheel": "분쇄 휠", +======= + "block.create.clockwork_bearing": "시계 베어링", + "block.create.clutch": "클러치", + "block.create.cogwheel": "톱나버퀴", + "block.create.content_observer": "UNLOCALIZED: Content Observer", + "block.create.copper_block": "구리 블럭", + "block.create.copper_casing": "구리 케이스", + "block.create.copper_ore": "구리 광석", + "block.create.copper_shingles": "구리 판자", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", + "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", + "block.create.creative_crate": "청사진 대포 지원기", + "block.create.creative_motor": "모터", + "block.create.crushing_wheel": "분쇄 휠", +>>>>>>> mc1.15/dev "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "ë»�꾸기 시계", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", + "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", "block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window", "block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane", "block.create.dark_scoria": "짙ì�€ 스코리아", @@ -134,12 +163,22 @@ "block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall", "block.create.fluid_pipe": "UNLOCALIZED: Fluid Pipe", "block.create.fluid_tank": "UNLOCALIZED: Fluid Tank", +<<<<<<< HEAD "block.create.flywheel": "플ë�¼ì�´íœ ", "block.create.framed_glass": "í�° 유리", "block.create.framed_glass_pane": "í�° 유리íŒ�", "block.create.furnace_engine": "화로 엔진", "block.create.gabbro": "반려암", "block.create.gabbro_bricks": "반려암 ë²½ë�Œ", +======= + "block.create.fluid_valve": "UNLOCALIZED: Fluid Valve", + "block.create.flywheel": "플라이휠", + "block.create.framed_glass": "큰 유리", + "block.create.framed_glass_pane": "큰 유리판", + "block.create.furnace_engine": "화로 엔진", + "block.create.gabbro": "반려암", + "block.create.gabbro_bricks": "반려암 벽돌", +>>>>>>> mc1.15/dev "block.create.gabbro_bricks_slab": "UNLOCALIZED: Gabbro Bricks Slab", "block.create.gabbro_bricks_stairs": "반려암 ë²½ë�Œ 계단", "block.create.gabbro_bricks_wall": "반려암 ë²½ë�Œ 담장", @@ -161,10 +200,18 @@ "block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_seat": "UNLOCALIZED: Green Seat", +<<<<<<< HEAD "block.create.hand_crank": "핸드 í�¬ëž­í�¬", "block.create.horizontal_framed_glass": "수í�‰ 유리", "block.create.horizontal_framed_glass_pane": "수í�‰ 유리íŒ�", +======= + "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", + "block.create.hand_crank": "핸드 크랭크", + "block.create.horizontal_framed_glass": "수평 유리", + "block.create.horizontal_framed_glass_pane": "수평 유리판", +>>>>>>> mc1.15/dev "block.create.jungle_window": "UNLOCALIZED: Jungle Window", "block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane", "block.create.large_cogwheel": "í�° 톱니바퀴", @@ -178,14 +225,26 @@ "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", +<<<<<<< HEAD "block.create.limesand": "ì„�회모래", "block.create.limestone": "ì„�회암", "block.create.limestone_bricks": "ì„�회암 ë²½ë�Œ", "block.create.limestone_bricks_slab": "ì„�회암 ë²½ë�Œ ë°˜ 블ë¡�", "block.create.limestone_bricks_stairs": "ì„�회암 ë²½ë�Œ 계단", "block.create.limestone_bricks_wall": "ì„�회암 ë²½ë�Œ 담장", +======= + "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", + "block.create.limesand": "석회모래", + "block.create.limestone": "석회암", + "block.create.limestone_bricks": "석회암 벽돌", + "block.create.limestone_bricks_slab": "석회암 벽돌 반 블록", + "block.create.limestone_bricks_stairs": "석회암 벽돌 계단", + "block.create.limestone_bricks_wall": "석회암 벽돌 담장", +>>>>>>> mc1.15/dev "block.create.limestone_cobblestone": "UNLOCALIZED: Limestone Cobblestone", "block.create.limestone_cobblestone_slab": "UNLOCALIZED: Limestone Cobblestone Slab", "block.create.limestone_cobblestone_stairs": "UNLOCALIZED: Limestone Cobblestone Stairs", @@ -193,6 +252,7 @@ "block.create.limestone_pillar": "ì„�회암 기둥", "block.create.linear_chassis": "ì§�ì„  섀시", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "ë² ì–´ë§�", "block.create.mechanical_crafter": "기계ì‹� 조합기", @@ -223,6 +283,7 @@ "block.create.oak_window": "UNLOCALIZED: Oak Window", "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", + "block.create.orange_valve_handle": "UNLOCALIZED: Orange Valve Handle", "block.create.ornate_iron_window": "UNLOCALIZED: Ornate Iron Window", "block.create.ornate_iron_window_pane": "UNLOCALIZED: Ornate Iron Window Pane", "block.create.overgrown_andesite": "UNLOCALIZED: Overgrown Andesite", @@ -271,8 +332,14 @@ "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", +<<<<<<< HEAD "block.create.piston_extension_pole": "피스톤 연장 축", "block.create.polished_dark_scoria": "윤나는 짙ì�€ 스코리아", +======= + "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", + "block.create.piston_extension_pole": "피스톤 연장 축", + "block.create.polished_dark_scoria": "윤나는 짙은 스코리아", +>>>>>>> mc1.15/dev "block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab", "block.create.polished_dark_scoria_stairs": "UNLOCALIZED: Polished Dark Scoria Stairs", "block.create.polished_dark_scoria_wall": "UNLOCALIZED: Polished Dark Scoria Wall", @@ -302,10 +369,19 @@ "block.create.pulley_magnet": "ë�„르래 ìž�ì„�", "block.create.pulse_repeater": "펄스 리피터", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", +<<<<<<< HEAD "block.create.radial_chassis": "ì›�형 섀시", "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "ë�™í˜• ê°�지기", "block.create.redstone_link": "레드스톤 ë§�í�¬", +======= + "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", + "block.create.radial_chassis": "원형 섀시", + "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", + "block.create.redstone_contact": "동형 감지기", + "block.create.redstone_link": "레드스톤 링크", +>>>>>>> mc1.15/dev "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "밧줄", @@ -351,9 +427,16 @@ "block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "í’�í™”ë�œ ì„�회암 기둥", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", +<<<<<<< HEAD "block.create.zinc_block": "ì•„ì—° 블럭", "block.create.zinc_ore": "ì•„ì—° ê´‘ì„�", +======= + "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", + "block.create.zinc_block": "아연 블럭", + "block.create.zinc_ore": "아연 광석", +>>>>>>> mc1.15/dev "entity.create.contraption": "UNLOCALIZED: Contraption", "entity.create.seat": "UNLOCALIZED: Seat", @@ -643,6 +726,7 @@ "create.logistics.filter": "í•„í„°", "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", +<<<<<<< HEAD "create.logistics.firstFrequency": "주파수. #1", "create.logistics.secondFrequency": "주파수. #2", @@ -714,6 +798,77 @@ "create.schematic.tool.deploy.description.3": "[Ctrl]-스í�¬ë¡¤ë¡œ 거리를 조정합니다.", "create.schematic.tool.move.description.0": "청사진ì�„ 수í�‰ ì�´ë�™ì‹œí‚µë‹ˆë‹¤.", "create.schematic.tool.move.description.1": "청사진ì�„ ë³´ê³  [CTRL]-스í�¬ë¡¤ë¡œ 밉니다.", +======= + "create.logistics.firstFrequency": "주파수. #1", + "create.logistics.secondFrequency": "주파수. #2", + + "create.gui.goggles.generator_stats": "발전 상태:", + "create.gui.goggles.kinetic_stats": "가동 상태:", + "create.gui.goggles.at_current_speed": "현재 속도", + "create.gui.goggles.base_value": "기본 수치", + "create.gui.gauge.info_header": "게이지 정보:", + "create.gui.speedometer.title": "회전 속도", + "create.gui.stressometer.title": "네트워크 부하", + "create.gui.stressometer.capacity": "용량", + "create.gui.stressometer.overstressed": "과부하됨", + "create.gui.stressometer.no_rotation": "회전없음", + "create.gui.contraptions.not_fast_enough": "이 %1$s은(는) 작동하기에 _회전 속도_가 _부족합니다_", + "create.gui.contraptions.network_overstressed": "이 장치는 _과부하_되었습니다. _높은 피로도_ 용량을 가진 발전기를 추가로 설치하거나 장치 _속도_를 _늦추세요_.", + "create.gui.adjustable_crate.title": "가변 창고 ", + "create.gui.adjustable_crate.storageSpace": "저장 공간", + "create.gui.stockpile_switch.title": "수량 스위치", + "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", + "create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", + "create.gui.sequenced_gearshift.title": "순서 기어쉬프트", + "create.gui.sequenced_gearshift.instruction": "설명", + "create.gui.sequenced_gearshift.instruction.turn_angle": "회전", + "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "각도", + "create.gui.sequenced_gearshift.instruction.turn_distance": "피스톤", + "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "거리", + "create.gui.sequenced_gearshift.instruction.wait": "정지", + "create.gui.sequenced_gearshift.instruction.wait.duration": "지속시간", + "create.gui.sequenced_gearshift.instruction.end": "마침", + "create.gui.sequenced_gearshift.speed": "속도, 방향", + "create.gui.sequenced_gearshift.speed.forward": "입력된 속도, 그대로 회전", + "create.gui.sequenced_gearshift.speed.forward_fast": "입력된 속도의 2배, 그대로 회전", + "create.gui.sequenced_gearshift.speed.back": "입력된 속도, 반대로 회전", + "create.gui.sequenced_gearshift.speed.back_fast": "입력된 속도의 2배, 반대로 회전", + + "create.schematicAndQuill.dimensions": "청사진 크기: %1$sx%2$sx%3$s", + "create.schematicAndQuill.firstPos": "첫번쨰 위치 지정됨.", + "create.schematicAndQuill.secondPos": "두번째 위치 지정됨.", + "create.schematicAndQuill.noTarget": "[Ctrl]을 눌러 공기 블럭을 선택하기.", + "create.schematicAndQuill.abort": "위치 제거됨.", + "create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", + "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately", + "create.schematicAndQuill.fallbackName": "내 청사진", + "create.schematicAndQuill.saved": "%1$s로 저장됨", + + "create.schematic.invalid": "[!] 없는 아이템 - 청사진 테이블을 이용하세요", + "create.schematic.position": "위치", + "create.schematic.rotation": "회전", + "create.schematic.rotation.none": "없음", + "create.schematic.rotation.cw90": "90도 시계방향 회전", + "create.schematic.rotation.cw180": "180도 시계방향 회전", + "create.schematic.rotation.cw270": "270도 시계방향 회전", + "create.schematic.mirror": "거울", + "create.schematic.mirror.none": "없음", + "create.schematic.mirror.frontBack": "전-후", + "create.schematic.mirror.leftRight": "좌-우", + "create.schematic.tool.deploy": "전개", + "create.schematic.tool.move": "X/Z좌표 이동", + "create.schematic.tool.movey": "Y좌표 이동", + "create.schematic.tool.rotate": "회전", + "create.schematic.tool.print": "설치", + "create.schematic.tool.flip": "뒤집기", + "create.schematic.tool.deploy.description.0": "구조물을 해당 위치로 고정합니다.", + "create.schematic.tool.deploy.description.1": "땅에다 우클릭으로 설치합니다.", + "create.schematic.tool.deploy.description.2": "[Ctrl]을 눌러 플레이어-청사진의 거리를 설정합니다.", + "create.schematic.tool.deploy.description.3": "[Ctrl]-스크롤로 거리를 조정합니다.", + "create.schematic.tool.move.description.0": "청사진을 수평 이동시킵니다.", + "create.schematic.tool.move.description.1": "청사진을 보고 [CTRL]-스크롤로 밉니다.", +>>>>>>> mc1.15/dev "create.schematic.tool.move.description.2": "", "create.schematic.tool.move.description.3": "", "create.schematic.tool.movey.description.0": "청사진ì�„ 수ì§� ì�´ë�™ì‹œí‚µë‹ˆë‹¤.", @@ -733,6 +888,7 @@ "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", +<<<<<<< HEAD "create.schematics.synchronizing": "ë�™ê¸°í™” 중...", "create.schematics.uploadTooLarge": "청사진ì�´ 너무 í�½ë‹ˆë‹¤!.", "create.schematics.maxAllowedSize": "최대 청사진 파ì�¼ í�¬ê¸°ëŠ”:", @@ -818,6 +974,117 @@ "create.tooltip.holdKey": "[%1$s]를 눌러 설명보기", "create.tooltip.holdKeyOrKey": "[%1$s] ë˜�는 [%2$s]를 눌러 설명보기", +======= + "create.schematics.synchronizing": "동기화 중...", + "create.schematics.uploadTooLarge": "청사진이 너무 큽니다!.", + "create.schematics.maxAllowedSize": "최대 청사진 파일 크기는:", + + "create.gui.schematicTable.title": "청사진 테이블", + "create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files", + "create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder", + "create.gui.schematicTable.availableSchematics": "이용가능한 청사진", + "create.gui.schematicTable.noSchematics": "저장된 청사진 없음", + "create.gui.schematicTable.uploading": "업로딩 중...", + "create.gui.schematicTable.finished": "업로드 완료!", + "create.gui.schematicannon.title": "청사진 대포", + "create.gui.schematicannon.listPrinter": "재료 목록 프린터", + "create.gui.schematicannon.gunpowderLevel": "화약 용량 %1$s%%", + "create.gui.schematicannon.shotsRemaining": "남은 발포 수 : %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "화약 여분: %1$s", + "create.gui.schematicannon.optionEnabled": "현재 활성화 됨", + "create.gui.schematicannon.optionDisabled": "현재 비활성화 됨", + "create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings", + "create.gui.schematicannon.option.dontReplaceSolid": "온전한 블럭을 대체하지 않음", + "create.gui.schematicannon.option.replaceWithSolid": "온전한 블럭을 재료로 대체함", + "create.gui.schematicannon.option.replaceWithAny": "온전한 블럭을 아무 재료로 대체함", + "create.gui.schematicannon.option.replaceWithEmpty": "온전한 블럭을 공기로 채움", + "create.gui.schematicannon.option.skipMissing": "부족한 블럭을 무시하고 진행", + "create.gui.schematicannon.option.skipTileEntities": "타일 엔티티를 보호", + "create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon", + "create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic", + "create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.", + "create.gui.schematicannon.option.skipMissing.description": "만약 대포가 설치에 필요한 블럭을 찾지 못할 경우,건너뛰고 다음 블럭 설치를 진행합니다.", + "create.gui.schematicannon.option.skipTileEntities.description": "대포가 상세정보가 든 상자같은 타일 엔티티 설치를 무시합니다.", + "create.gui.schematicannon.option.dontReplaceSolid.description": "대포가 작업구역의 온전한 블럭을 대체하지 않습니다.", + "create.gui.schematicannon.option.replaceWithSolid.description": "대포가 작업구역의 온전한 블럭을 대포가 가진 재료로 대체합니다.", + "create.gui.schematicannon.option.replaceWithAny.description": "대포가 작업구역의 온전한 블럭을 대포가 가진 어떠한 재료로든 대체합니다.", + "create.gui.schematicannon.option.replaceWithEmpty.description": "대포가 작업구역의 블럭들을 제거하고 공기로 채웁니다.", + + "create.schematicannon.status.idle": "휴식", + "create.schematicannon.status.ready": "준비됨", + "create.schematicannon.status.running": "가동 중", + "create.schematicannon.status.finished": "완료", + "create.schematicannon.status.paused": "멈춤", + "create.schematicannon.status.stopped": "중단됨", + "create.schematicannon.status.noGunpowder": "화약이 부족함", + "create.schematicannon.status.targetNotLoaded": "블럭이 준비되지 않음", + "create.schematicannon.status.targetOutsideRange": "목표가 너무 멀리 떨어져 있습니다.", + "create.schematicannon.status.searching": "검색 중", + "create.schematicannon.status.skipping": "건너뛰는 중", + "create.schematicannon.status.missingBlock": "부족한 블럭:", + "create.schematicannon.status.placing": "설치 중", + "create.schematicannon.status.clearing": "블럭을 제거하는 중", + "create.schematicannon.status.schematicInvalid": "청사진 없음", + "create.schematicannon.status.schematicNotPlaced": "청사진이 전개되지 않음", + "create.schematicannon.status.schematicExpired": "청사진 파일이 제거됨", + + "create.gui.filter.blacklist": "블랙리스트", + "create.gui.filter.blacklist.description": "위 목록에 맞지않는 아이템이면 통과합니다. 빈 블랙리스트는 모두 통과시킵니다.", + "create.gui.filter.whitelist": "화이트리스트", + "create.gui.filter.whitelist.description": "위 목록에 맞는 아이템이면 통과합니다. 빈 화이트리스트는 모두 통과시키지 않습니다.", + "create.gui.filter.respect_data": "상세정보 일치", + "create.gui.filter.respect_data.description": "위 목록 아이템의 내구도, 마법부여, 그리고 다른 NBT와 일치할 때 통과시킵니다.", + "create.gui.filter.ignore_data": "상세정보 무시", + "create.gui.filter.ignore_data.description": "상세정보와 상관없이 아이템 종류만 일치한다면 통과시킵니다.", + + "create.item_attributes.placeable": "설치할 수 있음", + "create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable", + "create.item_attributes.consumable": "먹을 수 있음", + "create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten", + "create.item_attributes.smeltable": "구워질 수 있음", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", + "create.item_attributes.washable": "세척될 수 있음", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", + "create.item_attributes.smokable": "훈연될 수 있음", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", + "create.item_attributes.blastable": "용광로에 녹일 수 있음", + "create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace", + "create.item_attributes.enchanted": "마법부여됨", + "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", + "create.item_attributes.damaged": "내구도가 닮", + "create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged", + "create.item_attributes.badly_damaged": "심각하게 내구도가 닮", + "create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged", + "create.item_attributes.not_stackable": "겹쳐질 수 없음", + "create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked", + "create.item_attributes.equipable": "장착할 수 있음", + "create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped", + "create.item_attributes.furnace_fuel": "화로 연료로 쓸 수 있음", + "create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel", + "create.item_attributes.in_tag": "%1$s로 등록됨", + "create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s", + "create.item_attributes.in_item_group": "%1$s탭에 속함", + "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", + "create.item_attributes.added_by": "%1$s가 추가함", + "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", + + "create.gui.attribute_filter.no_selected_attributes": "속성이 선택되지 않음", + "create.gui.attribute_filter.selected_attributes": "선택된 속성:", + "create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List", + "create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List", + "create.gui.attribute_filter.whitelist_disjunctive": "화이트리스트 (최소)", + "create.gui.attribute_filter.whitelist_disjunctive.description": "아이템이 선택된 속성 중 하나라도 가지고 있다면 통과시킵니다.", + "create.gui.attribute_filter.whitelist_conjunctive": "화이트리스트 (모두)", + "create.gui.attribute_filter.whitelist_conjunctive.description": "아이템이 선택된 속성 모두를 가지고 있어야 통과시킵니다.", + "create.gui.attribute_filter.blacklist": "블랙리스트", + "create.gui.attribute_filter.blacklist.description": "아이템이 선택된 속성이 없다면 통과시킵니다.", + "create.gui.attribute_filter.add_reference_item": "참고할 아이템을 추가하기", + + "create.tooltip.holdKey": "[%1$s]를 눌러 설명보기", + "create.tooltip.holdKeyOrKey": "[%1$s] 또는 [%2$s]를 눌러 설명보기", +>>>>>>> mc1.15/dev "create.tooltip.keyShift": "Shift", "create.tooltip.keyCtrl": "Ctrl", "create.tooltip.speedRequirement": "회전ì†�ë�„ 요구: %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 584e79166..c75bb4555 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 742", + "_": "Missing Localizations: 791", "_": "->------------------------] Game Elements [------------------------<-", @@ -25,18 +25,20 @@ "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", "block.create.basin": "Bekken", "block.create.belt": "Mechanische Transportband", - "block.create.belt_observer": "Transportband Observeerder", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", + "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", + "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", + "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", "block.create.cart_assembler": "Kar Assembler", "block.create.chiseled_dark_scoria": "UNLOCALIZED: Chiseled Dark Scoria", "block.create.chiseled_dolomite": "UNLOCALIZED: Chiseled Dolomite", @@ -48,17 +50,20 @@ "block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing", "block.create.clutch": "Koppeling", "block.create.cogwheel": "Tandwiel", + "block.create.content_observer": "UNLOCALIZED: Content Observer", "block.create.copper_block": "UNLOCALIZED: Copper Block", "block.create.copper_casing": "UNLOCALIZED: Copper Casing", "block.create.copper_ore": "UNLOCALIZED: Copper Ore", "block.create.copper_shingles": "UNLOCALIZED: Copper Shingles", "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_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Verpulveraar", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "UNLOCALIZED: Cuckoo Clock", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", + "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", "block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window", "block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane", "block.create.dark_scoria": "UNLOCALIZED: Dark Scoria", @@ -134,6 +139,7 @@ "block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall", "block.create.fluid_pipe": "UNLOCALIZED: Fluid Pipe", "block.create.fluid_tank": "UNLOCALIZED: Fluid Tank", + "block.create.fluid_valve": "UNLOCALIZED: Fluid Valve", "block.create.flywheel": "UNLOCALIZED: Flywheel", "block.create.framed_glass": "Ingelijst Glas", "block.create.framed_glass_pane": "UNLOCALIZED: Framed Glass Pane", @@ -161,7 +167,9 @@ "block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_seat": "UNLOCALIZED: Green Seat", + "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "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", @@ -178,8 +186,11 @@ "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", + "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", "block.create.limesand": "Kalkzand", "block.create.limestone": "Kalksteen", "block.create.limestone_bricks": "Kalksteenstenen", @@ -193,6 +204,7 @@ "block.create.limestone_pillar": "Kalksteen Pillar", "block.create.linear_chassis": "Lineaar Frame", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Mechanische Lager", "block.create.mechanical_crafter": "Mechanische Werkbank", @@ -223,6 +235,7 @@ "block.create.oak_window": "UNLOCALIZED: Oak Window", "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", + "block.create.orange_valve_handle": "UNLOCALIZED: Orange Valve Handle", "block.create.ornate_iron_window": "UNLOCALIZED: Ornate Iron Window", "block.create.ornate_iron_window_pane": "UNLOCALIZED: Ornate Iron Window Pane", "block.create.overgrown_andesite": "UNLOCALIZED: Overgrown Andesite", @@ -271,6 +284,7 @@ "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", + "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", "block.create.piston_extension_pole": "Zuiger Verlengpaal", "block.create.polished_dark_scoria": "UNLOCALIZED: Polished Dark Scoria", "block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab", @@ -302,8 +316,10 @@ "block.create.pulley_magnet": "UNLOCALIZED: Pulley Magnet", "block.create.pulse_repeater": "Pulse Versterker", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", + "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", "block.create.radial_chassis": "Rotation Frame", "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", "block.create.redstone_contact": "Redstone redstone_contact", "block.create.redstone_link": "Redstone Brug", "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", @@ -351,7 +367,9 @@ "block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "Verweerde Kalksteen Pilaar", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", + "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", "block.create.zinc_block": "UNLOCALIZED: Zinc Block", "block.create.zinc_ore": "UNLOCALIZED: Zinc Ore", @@ -661,12 +679,9 @@ "create.gui.adjustable_crate.title": "FlexKrat", "create.gui.adjustable_crate.storageSpace": "Opslagruimte", "create.gui.stockpile_switch.title": "Voorraad Schakelaar", - "create.gui.stockpile_switch.lowerLimit": "Lagere drempel", - "create.gui.stockpile_switch.upperLimit": "Hogere drempel", - "create.gui.stockpile_switch.startAt": "Start Signaal op", - "create.gui.stockpile_switch.startAbove": "Start Signaal boven", - "create.gui.stockpile_switch.stopAt": "Stop Signaal op", - "create.gui.stockpile_switch.stopBelow": "Stop Signaal onder", + "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", + "create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", @@ -687,7 +702,8 @@ "create.schematicAndQuill.secondPos": "Tweede positie ingesteld.", "create.schematicAndQuill.noTarget": "Houd [Ctrl] ingedrukt om een Lucht block te kiezen.", "create.schematicAndQuill.abort": "Keuze verwijderd.", - "create.schematicAndQuill.prompt": "Vul een naam in voor de bouwtekening:", + "create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", + "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately", "create.schematicAndQuill.fallbackName": "Mijn Bouwtekening", "create.schematicAndQuill.saved": "Opgeslagen als %1$s", @@ -738,24 +754,29 @@ "create.schematics.maxAllowedSize": "De maximum toegestane grote van een Bouwtekings bestand is:", "create.gui.schematicTable.title": "Bouwtekening Tafel", + "create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files", + "create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder", "create.gui.schematicTable.availableSchematics": "Beschikbare Bouwtekeningen", "create.gui.schematicTable.noSchematics": "Geen Bouwtekeningen opgeslagen", "create.gui.schematicTable.uploading": "Uploaden...", "create.gui.schematicTable.finished": "Upload Klaar!", "create.gui.schematicannon.title": "Bouwtekeningkannon", - "create.gui.schematicannon.settingsTitle": "Plaatsing Instellingen", "create.gui.schematicannon.listPrinter": "Materiaal lijst Printer", "create.gui.schematicannon.gunpowderLevel": "Buskruit op %1$s%%", "create.gui.schematicannon.shotsRemaining": "Schoten over: %1$s", "create.gui.schematicannon.shotsRemainingWithBackup": "Met backup: %1$s", "create.gui.schematicannon.optionEnabled": "Momenteel Ingeschakeld", "create.gui.schematicannon.optionDisabled": "Momenteel Uitgeschakeld", + "create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings", "create.gui.schematicannon.option.dontReplaceSolid": "Niet vaste blokken vervangen", "create.gui.schematicannon.option.replaceWithSolid": "Vervang vast met vast", "create.gui.schematicannon.option.replaceWithAny": "Vervang vast met alles", "create.gui.schematicannon.option.replaceWithEmpty": "Vervang vast met leeg", "create.gui.schematicannon.option.skipMissing": "Sla missende blokken over", "create.gui.schematicannon.option.skipTileEntities": "Bescherm Tile Entities", + "create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon", + "create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic", + "create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.", "create.gui.schematicannon.option.skipMissing.description": "Als het Bouwtekeningkannon niet een geschikt blok kan vinden om te plaatsen gaat hij door bij de volgende locatie.", "create.gui.schematicannon.option.skipTileEntities.description": "Het Bouwtekeningkannon probeert blokken met data zoals kisten te vermijden", "create.gui.schematicannon.option.dontReplaceSolid.description": "Het Bouwtekeningkannon zal nooit vaste blokken in zijn gebied vervangen, alleen niet-vaste blokken en lucht", @@ -791,23 +812,42 @@ "create.gui.filter.ignore_data.description": "UNLOCALIZED: Items match regardless of their attributes.", "create.item_attributes.placeable": "UNLOCALIZED: is placeable", + "create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable", "create.item_attributes.consumable": "UNLOCALIZED: can be eaten", + "create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten", "create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", "create.item_attributes.washable": "UNLOCALIZED: can be Washed", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", "create.item_attributes.smokable": "UNLOCALIZED: can be Smoked", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", "create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace", + "create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace", "create.item_attributes.enchanted": "UNLOCALIZED: is enchanted", + "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", "create.item_attributes.damaged": "UNLOCALIZED: is damaged", + "create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged", "create.item_attributes.badly_damaged": "UNLOCALIZED: is heavily damaged", + "create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged", "create.item_attributes.not_stackable": "UNLOCALIZED: cannot stack", + "create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked", "create.item_attributes.equipable": "UNLOCALIZED: can be equipped", + "create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped", "create.item_attributes.furnace_fuel": "UNLOCALIZED: is furnace fuel", + "create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel", "create.item_attributes.in_tag": "UNLOCALIZED: is tagged %1$s", - "create.item_attributes.in_item_group": "UNLOCALIZED: belongs to %1$s", + "create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s", + "create.item_attributes.in_item_group": "UNLOCALIZED: is in group '%1$s'", + "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", "create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s", + "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", "create.gui.attribute_filter.no_selected_attributes": "UNLOCALIZED: No attributes selected", "create.gui.attribute_filter.selected_attributes": "UNLOCALIZED: Selected attributes:", + "create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List", + "create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List", "create.gui.attribute_filter.whitelist_disjunctive": "UNLOCALIZED: Whitelist (Any)", "create.gui.attribute_filter.whitelist_disjunctive.description": "UNLOCALIZED: Items pass if they have any of the selected attributes.", "create.gui.attribute_filter.whitelist_conjunctive": "UNLOCALIZED: Whitelist (All)", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 45441337c..34975b722 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 811", + "_": "Missing Localizations: 860", "_": "->------------------------] Game Elements [------------------------<-", @@ -24,19 +24,26 @@ "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", "block.create.basin": "UNLOCALIZED: Basin", +<<<<<<< HEAD "block.create.belt": "Esteira Mecânica", "block.create.belt_observer": "Observador de Esteira", +======= + "block.create.belt": "Esteira Mecânica", +>>>>>>> mc1.15/dev "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", + "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", + "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", + "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", "block.create.cart_assembler": "UNLOCALIZED: Cart Assembler", "block.create.chiseled_dark_scoria": "UNLOCALIZED: Chiseled Dark Scoria", "block.create.chiseled_dolomite": "UNLOCALIZED: Chiseled Dolomite", @@ -48,17 +55,20 @@ "block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing", "block.create.clutch": "Embreagem", "block.create.cogwheel": "Roda Dentada", + "block.create.content_observer": "UNLOCALIZED: Content Observer", "block.create.copper_block": "UNLOCALIZED: Copper Block", "block.create.copper_casing": "UNLOCALIZED: Copper Casing", "block.create.copper_ore": "UNLOCALIZED: Copper Ore", "block.create.copper_shingles": "UNLOCALIZED: Copper Shingles", "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_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Roda de Moer", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "UNLOCALIZED: Cuckoo Clock", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", + "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", "block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window", "block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane", "block.create.dark_scoria": "UNLOCALIZED: Dark Scoria", @@ -134,6 +144,7 @@ "block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall", "block.create.fluid_pipe": "UNLOCALIZED: Fluid Pipe", "block.create.fluid_tank": "UNLOCALIZED: Fluid Tank", + "block.create.fluid_valve": "UNLOCALIZED: Fluid Valve", "block.create.flywheel": "UNLOCALIZED: Flywheel", "block.create.framed_glass": "UNLOCALIZED: Framed Glass", "block.create.framed_glass_pane": "UNLOCALIZED: Framed Glass Pane", @@ -161,7 +172,9 @@ "block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_seat": "UNLOCALIZED: Green Seat", + "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "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", @@ -178,14 +191,26 @@ "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", +<<<<<<< HEAD "block.create.limesand": "Areia Calcária", "block.create.limestone": "Calcário", "block.create.limestone_bricks": "Tijolos de Calcário", "block.create.limestone_bricks_slab": "Lajotas de Tijolos de Calcário", "block.create.limestone_bricks_stairs": "Escadas de Tijolos de Calcário", "block.create.limestone_bricks_wall": "Muro de Tijolos de Calcário", +======= + "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", + "block.create.limesand": "Areia Calcária", + "block.create.limestone": "Calcário", + "block.create.limestone_bricks": "Tijolos de Calcário", + "block.create.limestone_bricks_slab": "Lajotas de Tijolos de Calcário", + "block.create.limestone_bricks_stairs": "Escadas de Tijolos de Calcário", + "block.create.limestone_bricks_wall": "Muro de Tijolos de Calcário", +>>>>>>> mc1.15/dev "block.create.limestone_cobblestone": "UNLOCALIZED: Limestone Cobblestone", "block.create.limestone_cobblestone_slab": "UNLOCALIZED: Limestone Cobblestone Slab", "block.create.limestone_cobblestone_stairs": "UNLOCALIZED: Limestone Cobblestone Stairs", @@ -193,6 +218,7 @@ "block.create.limestone_pillar": "Pilar de Calcário", "block.create.linear_chassis": "Chassis de Translado", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Rolamento Mecânico", "block.create.mechanical_crafter": "UNLOCALIZED: Mechanical Crafter", @@ -223,6 +249,7 @@ "block.create.oak_window": "UNLOCALIZED: Oak Window", "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", + "block.create.orange_valve_handle": "UNLOCALIZED: Orange Valve Handle", "block.create.ornate_iron_window": "UNLOCALIZED: Ornate Iron Window", "block.create.ornate_iron_window_pane": "UNLOCALIZED: Ornate Iron Window Pane", "block.create.overgrown_andesite": "UNLOCALIZED: Overgrown Andesite", @@ -271,7 +298,12 @@ "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", +<<<<<<< HEAD "block.create.piston_extension_pole": "Vara de Extensão do Pistão", +======= + "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", + "block.create.piston_extension_pole": "Vara de Extensão do Pistão", +>>>>>>> mc1.15/dev "block.create.polished_dark_scoria": "UNLOCALIZED: Polished Dark Scoria", "block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab", "block.create.polished_dark_scoria_stairs": "UNLOCALIZED: Polished Dark Scoria Stairs", @@ -302,8 +334,14 @@ "block.create.pulley_magnet": "UNLOCALIZED: Pulley Magnet", "block.create.pulse_repeater": "Repetidor de Pulso", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", +<<<<<<< HEAD "block.create.radial_chassis": "Chassis de Rotação", +======= + "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", + "block.create.radial_chassis": "Chassis de Rotação", +>>>>>>> mc1.15/dev "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", "block.create.redstone_contact": "Contato de Redstone", "block.create.redstone_link": "Conexão de Redstone", "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", @@ -351,7 +389,9 @@ "block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "Pilar de Calcário Resistido", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", + "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", "block.create.zinc_block": "UNLOCALIZED: Zinc Block", "block.create.zinc_ore": "UNLOCALIZED: Zinc Ore", @@ -661,12 +701,18 @@ "create.gui.adjustable_crate.title": "adjustable_crate", "create.gui.adjustable_crate.storageSpace": "Espaço de Armazenamento", "create.gui.stockpile_switch.title": "Disjuntor de Armazenamento", +<<<<<<< HEAD "create.gui.stockpile_switch.lowerLimit": "Limite Mínimo", "create.gui.stockpile_switch.upperLimit": "Limite Máximo", "create.gui.stockpile_switch.startAt": "Iniciar Sinal em", "create.gui.stockpile_switch.startAbove": "Iniciar Sinal acima de", "create.gui.stockpile_switch.stopAt": "Parar Sinal em", "create.gui.stockpile_switch.stopBelow": "Parar Sinal abaixo de", +======= + "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", + "create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", +>>>>>>> mc1.15/dev "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", @@ -686,8 +732,14 @@ "create.schematicAndQuill.firstPos": "Primeira posição feita.", "create.schematicAndQuill.secondPos": "Segunda posição feita.", "create.schematicAndQuill.noTarget": "Seguro [Ctrl] para selecionar Blocos de Ar.", +<<<<<<< HEAD "create.schematicAndQuill.abort": "Seleção removida.", "create.schematicAndQuill.prompt": "Informe um nome para o Esquema:", +======= + "create.schematicAndQuill.abort": "Seleção removida.", + "create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", + "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately", +>>>>>>> mc1.15/dev "create.schematicAndQuill.fallbackName": "Meu Esquema", "create.schematicAndQuill.saved": "Salvo como %1$s", @@ -738,18 +790,24 @@ "create.schematics.maxAllowedSize": "O tamanho máximo permitido para o esquema é:", "create.gui.schematicTable.title": "Mesa de Desenho", + "create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files", + "create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder", "create.gui.schematicTable.availableSchematics": "UNLOCALIZED: Available Schematics", "create.gui.schematicTable.noSchematics": "UNLOCALIZED: No Schematics Saved", "create.gui.schematicTable.uploading": "Importando...", "create.gui.schematicTable.finished": "Envio Concluído!", "create.gui.schematicannon.title": "Esquemaannon", +<<<<<<< HEAD "create.gui.schematicannon.settingsTitle": "Parâmetros de Posicionamento", +======= +>>>>>>> mc1.15/dev "create.gui.schematicannon.listPrinter": "Impressora de Lista de Materiais", "create.gui.schematicannon.gunpowderLevel": "Pólvora em %1$s%%", "create.gui.schematicannon.shotsRemaining": "Disparos faltantes: %1$s", "create.gui.schematicannon.shotsRemainingWithBackup": "Com backup: %1$s", "create.gui.schematicannon.optionEnabled": "Habilitado Atualmente", "create.gui.schematicannon.optionDisabled": "Desabilitado Atualmente", +<<<<<<< HEAD "create.gui.schematicannon.option.dontReplaceSolid": "Não Substituir Blocos Sólidos", "create.gui.schematicannon.option.replaceWithSolid": "Substituir Blocos Sólidos", "create.gui.schematicannon.option.replaceWithAny": "Substituir Sólidos com Qualquer", @@ -762,6 +820,24 @@ "create.gui.schematicannon.option.replaceWithSolid.description": "O canhão irá apenas substituir Blocos sólidos na área de trabalho, se o Esquema conter um bloco Sólido naquela posição.", "create.gui.schematicannon.option.replaceWithAny.description": "O canhão irá substituir Blocos sólidos na área de trabalho, se o Esquema conter qualquer Bloco naquela posição.", "create.gui.schematicannon.option.replaceWithEmpty.description": "O canhão irá limpar todos os blocos na área de trabalho, incluindo os substituídos por Ar.", +======= + "create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings", + "create.gui.schematicannon.option.dontReplaceSolid": "Não Substituir Blocos Sólidos", + "create.gui.schematicannon.option.replaceWithSolid": "Substituir Blocos Sólidos", + "create.gui.schematicannon.option.replaceWithAny": "Substituir Sólidos com Qualquer", + "create.gui.schematicannon.option.replaceWithEmpty": "Substituir Sólidos com Vazio", + "create.gui.schematicannon.option.skipMissing": "Pulando Blocos faltantes", + "create.gui.schematicannon.option.skipTileEntities": "Proteger Entidades Entalhadas", + "create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon", + "create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic", + "create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.", + "create.gui.schematicannon.option.skipMissing.description": "Se o Esquemaannon não encontrar o Bloco para colocar, ele irá continuar para a próx. Posição.", + "create.gui.schematicannon.option.skipTileEntities.description": "O Esquemaannon vai evitar substituir blocos que contêm dados como Baus.", + "create.gui.schematicannon.option.dontReplaceSolid.description": "O canhão irá nunca substituir Blocos sólidos na área em trabalho, apenas não-Sólidos e Ar.", + "create.gui.schematicannon.option.replaceWithSolid.description": "O canhão irá apenas substituir Blocos sólidos na área de trabalho, se o Esquema conter um bloco Sólido naquela posição.", + "create.gui.schematicannon.option.replaceWithAny.description": "O canhão irá substituir Blocos sólidos na área de trabalho, se o Esquema conter qualquer Bloco naquela posição.", + "create.gui.schematicannon.option.replaceWithEmpty.description": "O canhão irá limpar todos os blocos na área de trabalho, incluindo os substituídos por Ar.", +>>>>>>> mc1.15/dev "create.schematicannon.status.idle": "Ocioso", "create.schematicannon.status.ready": "Pronto", @@ -791,23 +867,42 @@ "create.gui.filter.ignore_data.description": "UNLOCALIZED: Items match regardless of their attributes.", "create.item_attributes.placeable": "UNLOCALIZED: is placeable", + "create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable", "create.item_attributes.consumable": "UNLOCALIZED: can be eaten", + "create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten", "create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", "create.item_attributes.washable": "UNLOCALIZED: can be Washed", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", "create.item_attributes.smokable": "UNLOCALIZED: can be Smoked", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", "create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace", + "create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace", "create.item_attributes.enchanted": "UNLOCALIZED: is enchanted", + "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", "create.item_attributes.damaged": "UNLOCALIZED: is damaged", + "create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged", "create.item_attributes.badly_damaged": "UNLOCALIZED: is heavily damaged", + "create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged", "create.item_attributes.not_stackable": "UNLOCALIZED: cannot stack", + "create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked", "create.item_attributes.equipable": "UNLOCALIZED: can be equipped", + "create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped", "create.item_attributes.furnace_fuel": "UNLOCALIZED: is furnace fuel", + "create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel", "create.item_attributes.in_tag": "UNLOCALIZED: is tagged %1$s", - "create.item_attributes.in_item_group": "UNLOCALIZED: belongs to %1$s", + "create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s", + "create.item_attributes.in_item_group": "UNLOCALIZED: is in group '%1$s'", + "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", "create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s", + "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", "create.gui.attribute_filter.no_selected_attributes": "UNLOCALIZED: No attributes selected", "create.gui.attribute_filter.selected_attributes": "UNLOCALIZED: Selected attributes:", + "create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List", + "create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List", "create.gui.attribute_filter.whitelist_disjunctive": "UNLOCALIZED: Whitelist (Any)", "create.gui.attribute_filter.whitelist_disjunctive.description": "UNLOCALIZED: Items pass if they have any of the selected attributes.", "create.gui.attribute_filter.whitelist_conjunctive": "UNLOCALIZED: Whitelist (All)", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 177e35eec..3859bb521 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 805", + "_": "Missing Localizations: 854", "_": "->------------------------] Game Elements [------------------------<-", @@ -24,19 +24,26 @@ "block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", "block.create.basin": "UNLOCALIZED: Basin", +<<<<<<< HEAD "block.create.belt": "МеханичеÑ�каÑ� лента", "block.create.belt_observer": "Ленточный Ñ�канер", +======= + "block.create.belt": "Механическая лента", +>>>>>>> mc1.15/dev "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", + "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", + "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", + "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", "block.create.cart_assembler": "UNLOCALIZED: Cart Assembler", "block.create.chiseled_dark_scoria": "UNLOCALIZED: Chiseled Dark Scoria", "block.create.chiseled_dolomite": "UNLOCALIZED: Chiseled Dolomite", @@ -46,19 +53,31 @@ "block.create.chiseled_weathered_limestone": "UNLOCALIZED: Chiseled Weathered Limestone", "block.create.chute": "UNLOCALIZED: Chute", "block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing", +<<<<<<< HEAD "block.create.clutch": "ПереключаемаÑ� муфта", "block.create.cogwheel": "ШеÑ�тернÑ�", +======= + "block.create.clutch": "Переключаемая муфта", + "block.create.cogwheel": "Шестерня", + "block.create.content_observer": "UNLOCALIZED: Content Observer", +>>>>>>> mc1.15/dev "block.create.copper_block": "UNLOCALIZED: Copper Block", "block.create.copper_casing": "UNLOCALIZED: Copper Casing", "block.create.copper_ore": "UNLOCALIZED: Copper Ore", "block.create.copper_shingles": "UNLOCALIZED: Copper Shingles", "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", +<<<<<<< HEAD "block.create.creative_crate": "Креативный Ñ�щик", +======= + "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", + "block.create.creative_crate": "Креативный ящик", +>>>>>>> mc1.15/dev "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Дробильное колеÑ�о", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "UNLOCALIZED: Cuckoo Clock", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", + "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", "block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window", "block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane", "block.create.dark_scoria": "UNLOCALIZED: Dark Scoria", @@ -134,6 +153,7 @@ "block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall", "block.create.fluid_pipe": "UNLOCALIZED: Fluid Pipe", "block.create.fluid_tank": "UNLOCALIZED: Fluid Tank", + "block.create.fluid_valve": "UNLOCALIZED: Fluid Valve", "block.create.flywheel": "UNLOCALIZED: Flywheel", "block.create.framed_glass": "UNLOCALIZED: Framed Glass", "block.create.framed_glass_pane": "UNLOCALIZED: Framed Glass Pane", @@ -161,7 +181,9 @@ "block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_seat": "UNLOCALIZED: Green Seat", + "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "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", @@ -178,14 +200,26 @@ "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", +<<<<<<< HEAD "block.create.limesand": "ИзвеÑ�Ñ‚ÑŒ", "block.create.limestone": "ИзвеÑ�тнÑ�к", "block.create.limestone_bricks": "ИзвеÑ�тковые кирпичи", "block.create.limestone_bricks_slab": "Плита из извеÑ�ткового кирпича", "block.create.limestone_bricks_stairs": "Ступеньки из извеÑ�ткового кирпича", "block.create.limestone_bricks_wall": "Ограда из извеÑ�ткового кирпича", +======= + "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", + "block.create.limesand": "Известь", + "block.create.limestone": "Известняк", + "block.create.limestone_bricks": "Известковые кирпичи", + "block.create.limestone_bricks_slab": "Плита из известкового кирпича", + "block.create.limestone_bricks_stairs": "Ступеньки из известкового кирпича", + "block.create.limestone_bricks_wall": "Ограда из известкового кирпича", +>>>>>>> mc1.15/dev "block.create.limestone_cobblestone": "UNLOCALIZED: Limestone Cobblestone", "block.create.limestone_cobblestone_slab": "UNLOCALIZED: Limestone Cobblestone Slab", "block.create.limestone_cobblestone_stairs": "UNLOCALIZED: Limestone Cobblestone Stairs", @@ -193,6 +227,7 @@ "block.create.limestone_pillar": "ИзвеÑ�тнÑ�коваÑ� колонна", "block.create.linear_chassis": "ПоÑ�тупательнаÑ� рама", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "МеханичеÑ�кий подшипник", "block.create.mechanical_crafter": "UNLOCALIZED: Mechanical Crafter", @@ -223,6 +258,7 @@ "block.create.oak_window": "UNLOCALIZED: Oak Window", "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", + "block.create.orange_valve_handle": "UNLOCALIZED: Orange Valve Handle", "block.create.ornate_iron_window": "UNLOCALIZED: Ornate Iron Window", "block.create.ornate_iron_window_pane": "UNLOCALIZED: Ornate Iron Window Pane", "block.create.overgrown_andesite": "UNLOCALIZED: Overgrown Andesite", @@ -271,7 +307,12 @@ "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", +<<<<<<< HEAD "block.create.piston_extension_pole": "Удлинитель поршнÑ�", +======= + "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", + "block.create.piston_extension_pole": "Удлинитель поршня", +>>>>>>> mc1.15/dev "block.create.polished_dark_scoria": "UNLOCALIZED: Polished Dark Scoria", "block.create.polished_dark_scoria_slab": "UNLOCALIZED: Polished Dark Scoria Slab", "block.create.polished_dark_scoria_stairs": "UNLOCALIZED: Polished Dark Scoria Stairs", @@ -302,10 +343,19 @@ "block.create.pulley_magnet": "UNLOCALIZED: Pulley Magnet", "block.create.pulse_repeater": "Повторитель импульÑ�а", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", +<<<<<<< HEAD "block.create.radial_chassis": "ПоворотнаÑ� рама", "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "Контактное Ñ�оединение", "block.create.redstone_link": "Сигнальное Ñ�оединение", +======= + "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", + "block.create.radial_chassis": "Поворотная рама", + "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", + "block.create.redstone_contact": "Контактное соединение", + "block.create.redstone_link": "Сигнальное соединение", +>>>>>>> mc1.15/dev "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "UNLOCALIZED: Rope", @@ -351,7 +401,9 @@ "block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "Колонна из обветренного извеÑ�тнÑ�ка", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", + "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", "block.create.zinc_block": "UNLOCALIZED: Zinc Block", "block.create.zinc_ore": "UNLOCALIZED: Zinc Ore", @@ -658,6 +710,7 @@ "create.gui.stressometer.no_rotation": "UNLOCALIZED: No Rotation", "create.gui.contraptions.not_fast_enough": "UNLOCALIZED: It appears that this %1$s is _not_ rotating with _enough_ _speed_.", "create.gui.contraptions.network_overstressed": "UNLOCALIZED: It appears that this contraption is _overstressed_. Add more sources or _slow_ _down_ the components with a high _stress_ _impact_.", +<<<<<<< HEAD "create.gui.adjustable_crate.title": "Гибкий Ñ�щик", "create.gui.adjustable_crate.storageSpace": "Обьём хранилища", "create.gui.stockpile_switch.title": "СенÑ�ор хранилища", @@ -667,6 +720,14 @@ "create.gui.stockpile_switch.startAbove": "Включить выше", "create.gui.stockpile_switch.stopAt": "Отключить на", "create.gui.stockpile_switch.stopBelow": "Отключить ниже", +======= + "create.gui.adjustable_crate.title": "Гибкий ящик", + "create.gui.adjustable_crate.storageSpace": "Обьём хранилища", + "create.gui.stockpile_switch.title": "Сенсор хранилища", + "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", + "create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", +>>>>>>> mc1.15/dev "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", @@ -682,6 +743,7 @@ "create.gui.sequenced_gearshift.speed.back": "UNLOCALIZED: Input speed, Reversed", "create.gui.sequenced_gearshift.speed.back_fast": "UNLOCALIZED: Double speed, Reversed", +<<<<<<< HEAD "create.schematicAndQuill.dimensions": "Размер Ñ�хемы: %1$sx%2$sx%3$s", "create.schematicAndQuill.firstPos": "ПерваÑ� позициÑ� уÑ�тановлена.", "create.schematicAndQuill.secondPos": "ВтораÑ� позициÑ� уÑ�тановлена.", @@ -714,6 +776,41 @@ "create.schematic.tool.deploy.description.3": "[Ctrl]-КолМыши длÑ� изменениÑ� диÑ�танции.", "create.schematic.tool.move.description.0": "Сдвигает Ñ�хему по горизонтали", "create.schematic.tool.move.description.1": "Смотрите на Ñ�хему и [CTRL]-КолМыши длÑ� Ñ�двига.", +======= + "create.schematicAndQuill.dimensions": "Размер схемы: %1$sx%2$sx%3$s", + "create.schematicAndQuill.firstPos": "Первая позиция установлена.", + "create.schematicAndQuill.secondPos": "Вторая позиция установлена.", + "create.schematicAndQuill.noTarget": "Зажмите [Ctrl], чтобы выделять блоки воздуха.", + "create.schematicAndQuill.abort": "Выделение удалено.", + "create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", + "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately", + "create.schematicAndQuill.fallbackName": "Моя схема", + "create.schematicAndQuill.saved": "Сохранено как %1$s", + + "create.schematic.invalid": "[!] Недействительный предмет - используйте стол для схем", + "create.schematic.position": "Позиция", + "create.schematic.rotation": "Вращение", + "create.schematic.rotation.none": "Ничего", + "create.schematic.rotation.cw90": "90° по часовой", + "create.schematic.rotation.cw180": "180° по часовой", + "create.schematic.rotation.cw270": "270° по часовой", + "create.schematic.mirror": "Отразить", + "create.schematic.mirror.none": "Ничего", + "create.schematic.mirror.frontBack": "Перед-зад", + "create.schematic.mirror.leftRight": "Лево-право", + "create.schematic.tool.deploy": "Разместить", + "create.schematic.tool.move": "Сдвиг по XZ", + "create.schematic.tool.movey": "Сдвиг по Y", + "create.schematic.tool.rotate": "Повернуть", + "create.schematic.tool.print": "Напечатать", + "create.schematic.tool.flip": "Отразить", + "create.schematic.tool.deploy.description.0": "Размещает конструкцию.", + "create.schematic.tool.deploy.description.1": "ПКМ на земле для размещения.", + "create.schematic.tool.deploy.description.2": "Зажмите [Ctrl] для перемещения на фикс. дистанции.", + "create.schematic.tool.deploy.description.3": "[Ctrl]-КолМыши для изменения дистанции.", + "create.schematic.tool.move.description.0": "Сдвигает схему по горизонтали", + "create.schematic.tool.move.description.1": "Смотрите на схему и [CTRL]-КолМыши для сдвига.", +>>>>>>> mc1.15/dev "create.schematic.tool.move.description.2": "", "create.schematic.tool.move.description.3": "", "create.schematic.tool.movey.description.0": "Сдвигает Ñ�хему по вертикали", @@ -733,6 +830,7 @@ "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", +<<<<<<< HEAD "create.schematics.synchronizing": "СинхронизациÑ�...", "create.schematics.uploadTooLarge": "Схема Ñ�лишком большаÑ�", "create.schematics.maxAllowedSize": "МакÑ�имальный размер файла Ñ�хемы:", @@ -780,6 +878,60 @@ "create.schematicannon.status.schematicInvalid": "Схема недейÑ�твительна", "create.schematicannon.status.schematicNotPlaced": "Схема не размещена", "create.schematicannon.status.schematicExpired": "Срок дейÑ�твиÑ� файла Ñ�хемы иÑ�тек", +======= + "create.schematics.synchronizing": "Синхронизация...", + "create.schematics.uploadTooLarge": "Схема слишком большая", + "create.schematics.maxAllowedSize": "Максимальный размер файла схемы:", + + "create.gui.schematicTable.title": "Стол для схем", + "create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files", + "create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder", + "create.gui.schematicTable.availableSchematics": "Доступные схемы", + "create.gui.schematicTable.noSchematics": "Нет сохранённых схем", + "create.gui.schematicTable.uploading": "Загрузка...", + "create.gui.schematicTable.finished": "Загрузка завершена!", + "create.gui.schematicannon.title": "Схемопушка", + "create.gui.schematicannon.listPrinter": "Распечатать список материалов", + "create.gui.schematicannon.gunpowderLevel": "Порох: %1$s%%", + "create.gui.schematicannon.shotsRemaining": "Выстрелов осталось: %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "C запасом: %1$s", + "create.gui.schematicannon.optionEnabled": "Включена", + "create.gui.schematicannon.optionDisabled": "Отключена", + "create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings", + "create.gui.schematicannon.option.dontReplaceSolid": "Не заменять целые блоки", + "create.gui.schematicannon.option.replaceWithSolid": "Заменять целые блоки целыми блоками", + "create.gui.schematicannon.option.replaceWithAny": "Заменять целые блоки чем угодно", + "create.gui.schematicannon.option.replaceWithEmpty": "Заменять целые блоки пустотой", + "create.gui.schematicannon.option.skipMissing": "Пропускать отсутствующие блоки", + "create.gui.schematicannon.option.skipTileEntities": "Защита от сущностей", + "create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon", + "create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic", + "create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.", + "create.gui.schematicannon.option.skipMissing.description": "Если схемопушка не найдёт нужный блок, то она продолжит в следующем месте.", + "create.gui.schematicannon.option.skipTileEntities.description": "Схемопушка будет избегать замены блоков с данными, например сундуки.", + "create.gui.schematicannon.option.dontReplaceSolid.description": "Схемопушка никогда не заменит целые блоки, только не целые и воздух.", + "create.gui.schematicannon.option.replaceWithSolid.description": "Схемопушка будет заменять целый блок только в случае, если в схеме в этом месте расположен целый блок.", + "create.gui.schematicannon.option.replaceWithAny.description": "Схемопушка будет заменять целые блоки, если в схеме в этом месте есть что-либо.", + "create.gui.schematicannon.option.replaceWithEmpty.description": "Схемопушка отчистит все блоки, включая замену на воздух.", + + "create.schematicannon.status.idle": "Бездействует", + "create.schematicannon.status.ready": "Готова", + "create.schematicannon.status.running": "Работает", + "create.schematicannon.status.finished": "Закончила", + "create.schematicannon.status.paused": "Приостановлена", + "create.schematicannon.status.stopped": "Остановлена", + "create.schematicannon.status.noGunpowder": "Кончился порох", + "create.schematicannon.status.targetNotLoaded": "Блок не загружен", + "create.schematicannon.status.targetOutsideRange": "Цель слишком далеко", + "create.schematicannon.status.searching": "Поиск", + "create.schematicannon.status.skipping": "Пропуск", + "create.schematicannon.status.missingBlock": "Нет блока:", + "create.schematicannon.status.placing": "Размещение", + "create.schematicannon.status.clearing": "Отчистка", + "create.schematicannon.status.schematicInvalid": "Схема недействительна", + "create.schematicannon.status.schematicNotPlaced": "Схема не размещена", + "create.schematicannon.status.schematicExpired": "Срок действия файла схемы истек", +>>>>>>> mc1.15/dev "create.gui.filter.blacklist": "UNLOCALIZED: Blacklist", "create.gui.filter.blacklist.description": "UNLOCALIZED: Items pass if they do NOT match any of the above. An empty Blacklist accepts everything.", @@ -791,23 +943,42 @@ "create.gui.filter.ignore_data.description": "UNLOCALIZED: Items match regardless of their attributes.", "create.item_attributes.placeable": "UNLOCALIZED: is placeable", + "create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable", "create.item_attributes.consumable": "UNLOCALIZED: can be eaten", + "create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten", "create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", "create.item_attributes.washable": "UNLOCALIZED: can be Washed", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", "create.item_attributes.smokable": "UNLOCALIZED: can be Smoked", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", "create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace", + "create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace", "create.item_attributes.enchanted": "UNLOCALIZED: is enchanted", + "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", "create.item_attributes.damaged": "UNLOCALIZED: is damaged", + "create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged", "create.item_attributes.badly_damaged": "UNLOCALIZED: is heavily damaged", + "create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged", "create.item_attributes.not_stackable": "UNLOCALIZED: cannot stack", + "create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked", "create.item_attributes.equipable": "UNLOCALIZED: can be equipped", + "create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped", "create.item_attributes.furnace_fuel": "UNLOCALIZED: is furnace fuel", + "create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel", "create.item_attributes.in_tag": "UNLOCALIZED: is tagged %1$s", - "create.item_attributes.in_item_group": "UNLOCALIZED: belongs to %1$s", + "create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s", + "create.item_attributes.in_item_group": "UNLOCALIZED: is in group '%1$s'", + "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", "create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s", + "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", "create.gui.attribute_filter.no_selected_attributes": "UNLOCALIZED: No attributes selected", "create.gui.attribute_filter.selected_attributes": "UNLOCALIZED: Selected attributes:", + "create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List", + "create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List", "create.gui.attribute_filter.whitelist_disjunctive": "UNLOCALIZED: Whitelist (Any)", "create.gui.attribute_filter.whitelist_disjunctive.description": "UNLOCALIZED: Items pass if they have any of the selected attributes.", "create.gui.attribute_filter.whitelist_conjunctive": "UNLOCALIZED: Whitelist (All)", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 6468182a7..0a8ea639d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 92", + "_": "Missing Localizations: 141", "_": "->------------------------] Game Elements [------------------------<-", @@ -23,20 +23,30 @@ "block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel", "block.create.andesite_pillar": "竖纹安山岩", "block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel", +<<<<<<< HEAD "block.create.basin": "工作盆", "block.create.belt": "ä¼ é€�带", "block.create.belt_observer": "ä¼ é€�带侦测器", "block.create.birch_window": "白桦窗户", "block.create.birch_window_pane": "白桦窗户æ�¿", +======= + "block.create.basin": "工作盆", + "block.create.belt": "传送带", + "block.create.birch_window": "白桦窗户", + "block.create.birch_window_pane": "白桦窗户板", +>>>>>>> mc1.15/dev "block.create.black_seat": "UNLOCALIZED: Black Seat", + "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", + "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "黄铜å�—", "block.create.brass_casing": "黄铜机壳", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", +<<<<<<< HEAD "block.create.cart_assembler": "矿车装é…�ç«™", "block.create.chiseled_dark_scoria": "錾制深色熔渣", "block.create.chiseled_dolomite": "錾制白云岩", @@ -72,6 +82,47 @@ "block.create.dark_scoria_cobblestone_wall": "深色熔渣圆石墙", "block.create.dark_scoria_pillar": "竖纹深色熔渣", "block.create.deployer": "机械手", +======= + "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", + "block.create.cart_assembler": "矿车装配站", + "block.create.chiseled_dark_scoria": "錾制深色熔渣", + "block.create.chiseled_dolomite": "錾制白云岩", + "block.create.chiseled_gabbro": "錾制辉长岩", + "block.create.chiseled_limestone": "錾制石灰岩", + "block.create.chiseled_scoria": "錾制熔渣", + "block.create.chiseled_weathered_limestone": "錾制风化石灰岩", + "block.create.chute": "UNLOCALIZED: Chute", + "block.create.clockwork_bearing": "时钟轴承", + "block.create.clutch": "离合器", + "block.create.cogwheel": "齿轮", + "block.create.content_observer": "UNLOCALIZED: Content Observer", + "block.create.copper_block": "铜块", + "block.create.copper_casing": "铜机壳", + "block.create.copper_ore": "铜矿石", + "block.create.copper_shingles": "铜瓦", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", + "block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle", + "block.create.creative_crate": "创造板条箱", + "block.create.creative_motor": "创造马达", + "block.create.crushing_wheel": "粉碎轮", + "block.create.crushing_wheel_controller": "粉碎轮控制器", + "block.create.cuckoo_clock": "布谷鸟闹钟", + "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", + "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", + "block.create.dark_oak_window": "深色橡木窗户", + "block.create.dark_oak_window_pane": "深色橡木窗户板", + "block.create.dark_scoria": "深色熔渣", + "block.create.dark_scoria_bricks": "深色熔渣砖", + "block.create.dark_scoria_bricks_slab": "深色熔渣砖台阶", + "block.create.dark_scoria_bricks_stairs": "深色熔渣砖楼梯", + "block.create.dark_scoria_bricks_wall": "深色熔渣砖墙", + "block.create.dark_scoria_cobblestone": "深色熔渣圆石", + "block.create.dark_scoria_cobblestone_slab": "深色熔渣圆石台阶", + "block.create.dark_scoria_cobblestone_stairs": "深色熔渣圆石楼梯", + "block.create.dark_scoria_cobblestone_wall": "深色熔渣圆石墙", + "block.create.dark_scoria_pillar": "竖纹深色熔渣", + "block.create.deployer": "机械手", +>>>>>>> mc1.15/dev "block.create.depot": "UNLOCALIZED: Depot", "block.create.diorite_bricks": "闪长岩砖", "block.create.diorite_bricks_slab": "闪长岩砖å�°é˜¶", @@ -134,6 +185,7 @@ "block.create.fancy_weathered_limestone_bricks_wall": "方纹风化石ç�°å²©ç –墙", "block.create.fluid_pipe": "UNLOCALIZED: Fluid Pipe", "block.create.fluid_tank": "UNLOCALIZED: Fluid Tank", +<<<<<<< HEAD "block.create.flywheel": "飞轮", "block.create.framed_glass": "边框玻璃", "block.create.framed_glass_pane": "边框玻璃æ�¿", @@ -150,6 +202,25 @@ "block.create.gabbro_pillar": "竖纹辉长岩", "block.create.gearbox": "å��字齿轮箱", "block.create.gearshift": "红石齿轮箱", +======= + "block.create.fluid_valve": "UNLOCALIZED: Fluid Valve", + "block.create.flywheel": "飞轮", + "block.create.framed_glass": "边框玻璃", + "block.create.framed_glass_pane": "边框玻璃板", + "block.create.furnace_engine": "熔炼引擎", + "block.create.gabbro": "辉长岩", + "block.create.gabbro_bricks": "辉长岩砖", + "block.create.gabbro_bricks_slab": "辉长岩砖台阶", + "block.create.gabbro_bricks_stairs": "辉长岩砖楼梯", + "block.create.gabbro_bricks_wall": "辉长岩砖墙", + "block.create.gabbro_cobblestone": "辉长岩圆石", + "block.create.gabbro_cobblestone_slab": "辉长岩圆石台阶", + "block.create.gabbro_cobblestone_stairs": "辉长岩圆石楼梯", + "block.create.gabbro_cobblestone_wall": "辉长岩圆石墙", + "block.create.gabbro_pillar": "竖纹辉长岩", + "block.create.gearbox": "十字齿轮箱", + "block.create.gearshift": "红石齿轮箱", +>>>>>>> mc1.15/dev "block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe", "block.create.granite_bricks": "花岗岩砖", "block.create.granite_bricks_slab": "花岗岩砖å�°é˜¶", @@ -161,7 +232,9 @@ "block.create.granite_cobblestone_wall": "花岗岩圆石墙", "block.create.granite_pillar": "竖纹花岗岩", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_seat": "UNLOCALIZED: Green Seat", +<<<<<<< HEAD "block.create.hand_crank": "手摇曲柄", "block.create.horizontal_framed_glass": "竖直边框玻璃", "block.create.horizontal_framed_glass_pane": "竖直边框玻璃æ�¿", @@ -177,9 +250,30 @@ "block.create.layered_limestone": "层å� çŸ³ç�°å²©", "block.create.layered_scoria": "层å� ç†”渣", "block.create.layered_weathered_limestone": "层å� é£ŽåŒ–石ç�°å²©", +======= + "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", + "block.create.hand_crank": "手摇曲柄", + "block.create.horizontal_framed_glass": "竖直边框玻璃", + "block.create.horizontal_framed_glass_pane": "竖直边框玻璃板", + "block.create.jungle_window": "丛林窗户", + "block.create.jungle_window_pane": "丛林窗户板", + "block.create.large_cogwheel": "大齿轮", + "block.create.layered_andesite": "层叠安山岩", + "block.create.layered_dark_scoria": "层叠深色熔渣", + "block.create.layered_diorite": "层叠闪长岩", + "block.create.layered_dolomite": "层叠白云岩", + "block.create.layered_gabbro": "层叠辉长岩", + "block.create.layered_granite": "层叠花岗岩", + "block.create.layered_limestone": "层叠石灰岩", + "block.create.layered_scoria": "层叠熔渣", + "block.create.layered_weathered_limestone": "层叠风化石灰岩", +>>>>>>> mc1.15/dev "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", +<<<<<<< HEAD "block.create.limesand": "石ç�°æ²™", "block.create.limestone": "石ç�°å²©", "block.create.limestone_bricks": "石ç�°å²©ç –", @@ -192,7 +286,23 @@ "block.create.limestone_cobblestone_wall": "石ç�°å²©åœ†çŸ³å¢™", "block.create.limestone_pillar": "竖纹石ç�°å²©", "block.create.linear_chassis": "机壳底盘", +======= + "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", + "block.create.limesand": "石灰沙", + "block.create.limestone": "石灰岩", + "block.create.limestone_bricks": "石灰岩砖", + "block.create.limestone_bricks_slab": "石灰岩砖台阶", + "block.create.limestone_bricks_stairs": "石灰岩砖楼梯", + "block.create.limestone_bricks_wall": "石灰岩砖墙", + "block.create.limestone_cobblestone": "石灰岩圆石", + "block.create.limestone_cobblestone_slab": "石灰岩圆石台阶", + "block.create.limestone_cobblestone_stairs": "石灰岩圆石楼梯", + "block.create.limestone_cobblestone_wall": "石灰岩圆石墙", + "block.create.limestone_pillar": "竖纹石灰岩", + "block.create.linear_chassis": "机壳底盘", +>>>>>>> mc1.15/dev "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "动力轴承", "block.create.mechanical_crafter": "动力制造器", @@ -223,6 +333,7 @@ "block.create.oak_window": "橡木窗户", "block.create.oak_window_pane": "橡木窗户æ�¿", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", +<<<<<<< HEAD "block.create.ornate_iron_window": "å�Žä¸½é“�窗户", "block.create.ornate_iron_window_pane": "å�Žä¸½é“�窗户æ�¿", "block.create.overgrown_andesite": "生è�‰å®‰å±±å²©", @@ -306,6 +417,95 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "ä¿¡å�·æ£€æµ‹å™¨", "block.create.redstone_link": "æ— é™�红石信å�·ç»ˆç«¯", +======= + "block.create.orange_valve_handle": "UNLOCALIZED: Orange Valve Handle", + "block.create.ornate_iron_window": "华丽铁窗户", + "block.create.ornate_iron_window_pane": "华丽铁窗户板", + "block.create.overgrown_andesite": "生草安山岩", + "block.create.overgrown_dark_scoria": "生草深色熔渣", + "block.create.overgrown_diorite": "生草闪长岩", + "block.create.overgrown_dolomite": "生草白云岩", + "block.create.overgrown_gabbro": "生草辉长岩", + "block.create.overgrown_granite": "生草花岗岩", + "block.create.overgrown_limestone": "生草石灰岩", + "block.create.overgrown_scoria": "生草熔渣", + "block.create.overgrown_weathered_limestone": "生草风化石灰岩", + "block.create.paved_andesite": "安山岩铺路石", + "block.create.paved_andesite_slab": "安山岩铺路石台阶", + "block.create.paved_andesite_stairs": "安山岩铺路石楼梯", + "block.create.paved_andesite_wall": "安山岩铺路石墙", + "block.create.paved_dark_scoria": "深色熔渣铺路石", + "block.create.paved_dark_scoria_slab": "深色熔渣铺路石台阶", + "block.create.paved_dark_scoria_stairs": "深色熔渣铺路石楼梯", + "block.create.paved_dark_scoria_wall": "深色熔渣铺路石墙", + "block.create.paved_diorite": "闪长岩铺路石", + "block.create.paved_diorite_slab": "闪长岩铺路石台阶", + "block.create.paved_diorite_stairs": "闪长岩铺路石楼梯", + "block.create.paved_diorite_wall": "闪长岩铺路石墙", + "block.create.paved_dolomite": "白云岩铺路石", + "block.create.paved_dolomite_slab": "白云岩铺路石台阶", + "block.create.paved_dolomite_stairs": "白云岩铺路石楼梯", + "block.create.paved_dolomite_wall": "白云岩铺路石墙", + "block.create.paved_gabbro": "辉长岩铺路石", + "block.create.paved_gabbro_slab": "辉长岩铺路石台阶", + "block.create.paved_gabbro_stairs": "辉长岩铺路石楼梯", + "block.create.paved_gabbro_wall": "辉长岩铺路石墙", + "block.create.paved_granite": "花岗岩铺路石", + "block.create.paved_granite_slab": "花岗岩铺路石台阶", + "block.create.paved_granite_stairs": "花岗岩铺路石楼梯", + "block.create.paved_granite_wall": "花岗岩铺路石墙", + "block.create.paved_limestone": "石灰岩铺路石", + "block.create.paved_limestone_slab": "石灰岩铺路石台阶", + "block.create.paved_limestone_stairs": "石灰岩铺路石楼梯", + "block.create.paved_limestone_wall": "石灰岩铺路石墙", + "block.create.paved_scoria": "熔渣铺路石", + "block.create.paved_scoria_slab": "熔渣铺路石台阶", + "block.create.paved_scoria_stairs": "熔渣铺路石楼梯", + "block.create.paved_scoria_wall": "熔渣铺路石墙", + "block.create.paved_weathered_limestone": "风化石灰岩铺路石", + "block.create.paved_weathered_limestone_slab": "风化石灰岩铺路石台阶", + "block.create.paved_weathered_limestone_stairs": "风化石灰岩铺路石楼梯", + "block.create.paved_weathered_limestone_wall": "风化石灰岩铺路石墙", + "block.create.pink_seat": "UNLOCALIZED: Pink Seat", + "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", + "block.create.piston_extension_pole": "活塞杆", + "block.create.polished_dark_scoria": "磨制深色熔渣", + "block.create.polished_dark_scoria_slab": "磨制深色熔渣台阶", + "block.create.polished_dark_scoria_stairs": "磨制深色熔渣楼梯", + "block.create.polished_dark_scoria_wall": "磨制深色熔渣墙", + "block.create.polished_dolomite": "磨制白云岩", + "block.create.polished_dolomite_slab": "磨制白云岩台阶", + "block.create.polished_dolomite_stairs": "磨制白云岩楼梯", + "block.create.polished_dolomite_wall": "磨制白云岩墙", + "block.create.polished_gabbro": "磨制辉长岩", + "block.create.polished_gabbro_slab": "磨制辉长岩台阶", + "block.create.polished_gabbro_stairs": "磨制辉长岩楼梯", + "block.create.polished_gabbro_wall": "磨制辉长岩墙", + "block.create.polished_limestone": "磨制石灰岩", + "block.create.polished_limestone_slab": "磨制石灰岩台阶", + "block.create.polished_limestone_stairs": "磨制石灰岩楼梯", + "block.create.polished_limestone_wall": "磨制石灰岩墙", + "block.create.polished_scoria": "磨制熔渣", + "block.create.polished_scoria_slab": "磨制熔渣台阶", + "block.create.polished_scoria_stairs": "磨制熔渣楼梯", + "block.create.polished_scoria_wall": "磨制熔渣墙", + "block.create.polished_weathered_limestone": "磨制风化石灰岩", + "block.create.polished_weathered_limestone_slab": "磨制风化石灰岩台阶", + "block.create.polished_weathered_limestone_stairs": "磨制风化石灰岩楼梯", + "block.create.polished_weathered_limestone_wall": "磨制风化石灰岩墙", + "block.create.portable_storage_interface": "移动式存储接口", + "block.create.powered_latch": "锁存器", + "block.create.powered_toggle_latch": "T触发器", + "block.create.pulley_magnet": "传送带磁铁", + "block.create.pulse_repeater": "脉冲中继器", + "block.create.purple_seat": "UNLOCALIZED: Purple Seat", + "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", + "block.create.radial_chassis": "旋转底盘", + "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", + "block.create.redstone_contact": "信号检测器", + "block.create.redstone_link": "无限红石信号终端", +>>>>>>> mc1.15/dev "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "绳索", @@ -351,9 +551,16 @@ "block.create.weathered_limestone_cobblestone_wall": "风化石ç�°å²©åœ†çŸ³å¢™", "block.create.weathered_limestone_pillar": "竖纹风化石ç�°å²©", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", +<<<<<<< HEAD "block.create.zinc_block": "锌å�—", "block.create.zinc_ore": "锌矿石", +======= + "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", + "block.create.zinc_block": "锌块", + "block.create.zinc_ore": "锌矿石", +>>>>>>> mc1.15/dev "entity.create.contraption": "结构", "entity.create.seat": "UNLOCALIZED: Seat", @@ -643,6 +850,7 @@ "create.logistics.filter": "过滤器", "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", +<<<<<<< HEAD "create.logistics.firstFrequency": "频é�“. #1", "create.logistics.secondFrequency": "频é�“. #2", @@ -714,6 +922,77 @@ "create.schematic.tool.deploy.description.3": "按ä½�Ctrl鼠标滚动更改è·�离.", "create.schematic.tool.move.description.0": "水平移动è“�图", "create.schematic.tool.move.description.1": "选定è“�图,然å�ŽæŒ‰ä½�Ctrl鼠标滚动移动.", +======= + "create.logistics.firstFrequency": "频道. #1", + "create.logistics.secondFrequency": "频道. #2", + + "create.gui.goggles.generator_stats": "产能器状态:", + "create.gui.goggles.kinetic_stats": "动能状态:", + "create.gui.goggles.at_current_speed": "当前速度应力值", + "create.gui.goggles.base_value": "应力基础值", + "create.gui.gauge.info_header": "仪表信息:", + "create.gui.speedometer.title": "旋转速度", + "create.gui.stressometer.title": "网络应力", + "create.gui.stressometer.capacity": "剩余应力", + "create.gui.stressometer.overstressed": "超载", + "create.gui.stressometer.no_rotation": "无旋转", + "create.gui.contraptions.not_fast_enough": "显然 %1$s 没有足够的转速.", + "create.gui.contraptions.network_overstressed": "显然装置过载,减速高应力消耗的装置或者添加更多动力", + "create.gui.adjustable_crate.title": "板条箱", + "create.gui.adjustable_crate.storageSpace": "储存空间", + "create.gui.stockpile_switch.title": "储存开关", + "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", + "create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", + "create.gui.sequenced_gearshift.title": "可编程齿轮箱", + "create.gui.sequenced_gearshift.instruction": "指令", + "create.gui.sequenced_gearshift.instruction.turn_angle": "旋转", + "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "角度", + "create.gui.sequenced_gearshift.instruction.turn_distance": "驱动活塞", + "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "距离", + "create.gui.sequenced_gearshift.instruction.wait": "等待", + "create.gui.sequenced_gearshift.instruction.wait.duration": "间隔", + "create.gui.sequenced_gearshift.instruction.end": "停止", + "create.gui.sequenced_gearshift.speed": "速度, 速度方向", + "create.gui.sequenced_gearshift.speed.forward": "一倍速, 正向", + "create.gui.sequenced_gearshift.speed.forward_fast": "两倍速, 正向", + "create.gui.sequenced_gearshift.speed.back": "一倍速, 反向", + "create.gui.sequenced_gearshift.speed.back_fast": "两倍速, 反向", + + "create.schematicAndQuill.dimensions": "蓝图尺寸: %1$sx%2$sx%3$s", + "create.schematicAndQuill.firstPos": "第一个位置.", + "create.schematicAndQuill.secondPos": "第二个位置.", + "create.schematicAndQuill.noTarget": "按住Ctrl选择空气方块.", + "create.schematicAndQuill.abort": "删除选择.", + "create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", + "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately", + "create.schematicAndQuill.fallbackName": "我的蓝图", + "create.schematicAndQuill.saved": "另存为 %1$s", + + "create.schematic.invalid": "[!] 无效的项目", + "create.schematic.position": "位置", + "create.schematic.rotation": "旋转", + "create.schematic.rotation.none": "无", + "create.schematic.rotation.cw90": "顺时针90", + "create.schematic.rotation.cw180": "顺时针180", + "create.schematic.rotation.cw270": "顺时针270", + "create.schematic.mirror": "镜像", + "create.schematic.mirror.none": "无", + "create.schematic.mirror.frontBack": "前后", + "create.schematic.mirror.leftRight": "左右", + "create.schematic.tool.deploy": "部署", + "create.schematic.tool.move": "移动 XZ", + "create.schematic.tool.movey": "移动 Y", + "create.schematic.tool.rotate": "旋转", + "create.schematic.tool.print": "打印", + "create.schematic.tool.flip": "翻转", + "create.schematic.tool.deploy.description.0": "将结构移到某个位置.", + "create.schematic.tool.deploy.description.1": "在地面上单击鼠标右键以放置.", + "create.schematic.tool.deploy.description.2": "按住Ctrl以固定距离选择.", + "create.schematic.tool.deploy.description.3": "按住Ctrl鼠标滚动更改距离.", + "create.schematic.tool.move.description.0": "水平移动蓝图", + "create.schematic.tool.move.description.1": "选定蓝图,然后按住Ctrl鼠标滚动移动.", +>>>>>>> mc1.15/dev "create.schematic.tool.move.description.2": "", "create.schematic.tool.move.description.3": "", "create.schematic.tool.movey.description.0": "垂直移动è“�图", @@ -733,6 +1012,7 @@ "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", +<<<<<<< HEAD "create.schematics.synchronizing": "正在å�Œæ­¥...", "create.schematics.uploadTooLarge": "ä½ çš„è“�图太大", "create.schematics.maxAllowedSize": "å…�许的最大è“�图文件大å°�为:", @@ -818,6 +1098,117 @@ "create.tooltip.holdKey": "按ä½� [%1$s]", "create.tooltip.holdKeyOrKey": "按ä½� [%1$s] 或 [%2$s]", +======= + "create.schematics.synchronizing": "正在同步...", + "create.schematics.uploadTooLarge": "你的蓝图太大", + "create.schematics.maxAllowedSize": "允许的最大蓝图文件大小为:", + + "create.gui.schematicTable.title": "蓝图桌", + "create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files", + "create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder", + "create.gui.schematicTable.availableSchematics": "可用蓝图", + "create.gui.schematicTable.noSchematics": "没有保存的蓝图", + "create.gui.schematicTable.uploading": "正在上传...", + "create.gui.schematicTable.finished": "上传完成!", + "create.gui.schematicannon.title": "蓝图加农炮", + "create.gui.schematicannon.listPrinter": "物品清单打印机", + "create.gui.schematicannon.gunpowderLevel": "火药 %1$s%%", + "create.gui.schematicannon.shotsRemaining": "发射进度: %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "备份: %1$s", + "create.gui.schematicannon.optionEnabled": "当前启用", + "create.gui.schematicannon.optionDisabled": "当前禁用", + "create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings", + "create.gui.schematicannon.option.dontReplaceSolid": "不要替换方块", + "create.gui.schematicannon.option.replaceWithSolid": "用固体方块替换工作区域内的方块", + "create.gui.schematicannon.option.replaceWithAny": "用任何方块替换工作区域内的方块", + "create.gui.schematicannon.option.replaceWithEmpty": "用空气替换工作区域内的方块", + "create.gui.schematicannon.option.skipMissing": "绕过缺少的方块", + "create.gui.schematicannon.option.skipTileEntities": "保护存储方块", + "create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon", + "create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic", + "create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.", + "create.gui.schematicannon.option.skipMissing.description": "如果缺失材料, 蓝图大炮将忽略当前缺失材料并且使用其他已有材料继续工作", + "create.gui.schematicannon.option.skipTileEntities.description": "蓝图将避免更换存储方块,如箱子.", + "create.gui.schematicannon.option.dontReplaceSolid.description": "蓝图加农炮将不会替换工作范围内的任何固体方块.", + "create.gui.schematicannon.option.replaceWithSolid.description": "蓝图加农炮会使用所提供的固体方块来替换工作区域内的其他固体方块", + "create.gui.schematicannon.option.replaceWithAny.description": "蓝图加农炮会使用任何所提供的方块来替换工作区域内的固体方块", + "create.gui.schematicannon.option.replaceWithEmpty.description": "蓝图加农炮将清理和替换工作区域内所有原本的方块.", + + "create.schematicannon.status.idle": "闲置", + "create.schematicannon.status.ready": "准备", + "create.schematicannon.status.running": "运行", + "create.schematicannon.status.finished": "完成", + "create.schematicannon.status.paused": "已暂停", + "create.schematicannon.status.stopped": "停止", + "create.schematicannon.status.noGunpowder": "火药消耗完毕", + "create.schematicannon.status.targetNotLoaded": "方块未加载", + "create.schematicannon.status.targetOutsideRange": "定位目标太远", + "create.schematicannon.status.searching": "搜索", + "create.schematicannon.status.skipping": "跳过", + "create.schematicannon.status.missingBlock": "缺少方块:", + "create.schematicannon.status.placing": "建筑中", + "create.schematicannon.status.clearing": "清除方块中", + "create.schematicannon.status.schematicInvalid": "蓝图无效", + "create.schematicannon.status.schematicNotPlaced": "蓝图未部署", + "create.schematicannon.status.schematicExpired": "蓝图文件已过期", + + "create.gui.filter.blacklist": "黑名单", + "create.gui.filter.blacklist.description": "只通过不在黑名单中的物品,如果黑名单为空,所有物品都可以通过", + "create.gui.filter.whitelist": "白名单", + "create.gui.filter.whitelist.description": "只通过在白名单中的物品,如果白名单为空,所有物品都无法通过", + "create.gui.filter.respect_data": "匹配物品属性", + "create.gui.filter.respect_data.description": "只有物品的耐久、附魔等其他属性相同时才可以匹配", + "create.gui.filter.ignore_data": "忽视物品属性", + "create.gui.filter.ignore_data.description": "匹配时忽视物品的耐久、附魔等其他属性", + + "create.item_attributes.placeable": "可放置", + "create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable", + "create.item_attributes.consumable": "可食用", + "create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten", + "create.item_attributes.smeltable": "可被熔炉烧制", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", + "create.item_attributes.washable": "可被筛洗", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", + "create.item_attributes.smokable": "可被烟熏", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", + "create.item_attributes.blastable": "可被高炉冶炼", + "create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace", + "create.item_attributes.enchanted": "已被附魔", + "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", + "create.item_attributes.damaged": "已损坏", + "create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged", + "create.item_attributes.badly_damaged": "严重受损", + "create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged", + "create.item_attributes.not_stackable": "无法堆叠", + "create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked", + "create.item_attributes.equipable": "可装备", + "create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped", + "create.item_attributes.furnace_fuel": "是燃料", + "create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel", + "create.item_attributes.in_tag": "标签是%1$s", + "create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s", + "create.item_attributes.in_item_group": "属于 %1$s", + "create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'", + "create.item_attributes.added_by": "由%1$s添加", + "create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s", + + "create.gui.attribute_filter.no_selected_attributes": "没有标记任何属性", + "create.gui.attribute_filter.selected_attributes": "已选择的属性:", + "create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List", + "create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List", + "create.gui.attribute_filter.whitelist_disjunctive": "任意匹配白名单 (任何)", + "create.gui.attribute_filter.whitelist_disjunctive.description": "只要有其中一项属性符合,就可以通过", + "create.gui.attribute_filter.whitelist_conjunctive": "全匹配白名单 (所有)", + "create.gui.attribute_filter.whitelist_conjunctive.description": "只有所有属性都匹配才可以通过", + "create.gui.attribute_filter.blacklist": "黑名单", + "create.gui.attribute_filter.blacklist.description": "只要没有上述属性,就可以通过", + "create.gui.attribute_filter.add_reference_item": "添加参考物品", + + "create.tooltip.holdKey": "按住 [%1$s]", + "create.tooltip.holdKeyOrKey": "按住 [%1$s] 或 [%2$s]", +>>>>>>> mc1.15/dev "create.tooltip.keyShift": "Shift", "create.tooltip.keyCtrl": "Ctrl", "create.tooltip.speedRequirement": "需求速度: %1$s", diff --git a/src/generated/resources/assets/create/models/block/belt_observer/detect.json b/src/generated/resources/assets/create/models/block/belt_observer/detect.json deleted file mode 100644 index 2d895145a..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/detect.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base", - "textures": { - "texture": "create:block/belt_observer_detect" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/detect_belt.json b/src/generated/resources/assets/create/models/block/belt_observer/detect_belt.json deleted file mode 100644 index 457f5d21d..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/detect_belt.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt", - "textures": { - "texture": "create:block/belt_observer_detect" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/detect_belt_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/detect_belt_powered.json deleted file mode 100644 index a0b2b28d3..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/detect_belt_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt_powered", - "textures": { - "texture": "create:block/belt_observer_detect_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/detect_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/detect_powered.json deleted file mode 100644 index 5e47b062d..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/detect_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_powered", - "textures": { - "texture": "create:block/belt_observer_detect_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/eject.json b/src/generated/resources/assets/create/models/block/belt_observer/eject.json deleted file mode 100644 index b3ca66e24..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/eject.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base", - "textures": { - "texture": "create:block/belt_observer_eject" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/eject_belt.json b/src/generated/resources/assets/create/models/block/belt_observer/eject_belt.json deleted file mode 100644 index a9f7029e7..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/eject_belt.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt", - "textures": { - "texture": "create:block/belt_observer_eject" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/eject_belt_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/eject_belt_powered.json deleted file mode 100644 index 77cc7bee9..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/eject_belt_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt_powered", - "textures": { - "texture": "create:block/belt_observer_eject_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/eject_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/eject_powered.json deleted file mode 100644 index ba74df7ba..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/eject_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_powered", - "textures": { - "texture": "create:block/belt_observer_eject_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/pulse.json b/src/generated/resources/assets/create/models/block/belt_observer/pulse.json deleted file mode 100644 index 96053ebdd..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/pulse.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base", - "textures": { - "texture": "create:block/belt_observer_pulse" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt.json b/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt.json deleted file mode 100644 index 17c00b4d2..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt", - "textures": { - "texture": "create:block/belt_observer_pulse" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt_powered.json deleted file mode 100644 index 5b36ec7ed..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/pulse_belt_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt_powered", - "textures": { - "texture": "create:block/belt_observer_pulse_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/pulse_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/pulse_powered.json deleted file mode 100644 index 316f2a16f..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/pulse_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_powered", - "textures": { - "texture": "create:block/belt_observer_pulse_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/split.json b/src/generated/resources/assets/create/models/block/belt_observer/split.json deleted file mode 100644 index 2c36d0dce..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/split.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base", - "textures": { - "texture": "create:block/belt_observer_split" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/split_belt.json b/src/generated/resources/assets/create/models/block/belt_observer/split_belt.json deleted file mode 100644 index d6e303816..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/split_belt.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt", - "textures": { - "texture": "create:block/belt_observer_split" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/split_belt_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/split_belt_powered.json deleted file mode 100644 index 1ae9418ca..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/split_belt_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt_powered", - "textures": { - "texture": "create:block/belt_observer_split_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_observer/split_powered.json b/src/generated/resources/assets/create/models/block/belt_observer/split_powered.json deleted file mode 100644 index 3b2229601..000000000 --- a/src/generated/resources/assets/create/models/block/belt_observer/split_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_powered", - "textures": { - "texture": "create:block/belt_observer_split_powered" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/black_valve_handle.json b/src/generated/resources/assets/create/models/block/black_valve_handle.json new file mode 100644 index 000000000..ab80a3b74 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/black_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_black" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/blue_valve_handle.json b/src/generated/resources/assets/create/models/block/blue_valve_handle.json new file mode 100644 index 000000000..fdd760222 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/blue_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_blue" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brown_valve_handle.json b/src/generated/resources/assets/create/models/block/brown_valve_handle.json new file mode 100644 index 000000000..f3c7519cc --- /dev/null +++ b/src/generated/resources/assets/create/models/block/brown_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_brown" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/copper_valve_handle.json b/src/generated/resources/assets/create/models/block/copper_valve_handle.json new file mode 100644 index 000000000..c57f42889 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/copper_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_copper" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/cyan_valve_handle.json b/src/generated/resources/assets/create/models/block/cyan_valve_handle.json new file mode 100644 index 000000000..b05a779c1 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/cyan_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_cyan" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/gray_valve_handle.json b/src/generated/resources/assets/create/models/block/gray_valve_handle.json new file mode 100644 index 000000000..91dd5ef30 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/gray_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_gray" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/green_valve_handle.json b/src/generated/resources/assets/create/models/block/green_valve_handle.json new file mode 100644 index 000000000..6da85080d --- /dev/null +++ b/src/generated/resources/assets/create/models/block/green_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_green" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/light_blue_valve_handle.json b/src/generated/resources/assets/create/models/block/light_blue_valve_handle.json new file mode 100644 index 000000000..3362ca403 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/light_blue_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_light_blue" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/light_gray_valve_handle.json b/src/generated/resources/assets/create/models/block/light_gray_valve_handle.json new file mode 100644 index 000000000..ad69c973a --- /dev/null +++ b/src/generated/resources/assets/create/models/block/light_gray_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_light_gray" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/lime_valve_handle.json b/src/generated/resources/assets/create/models/block/lime_valve_handle.json new file mode 100644 index 000000000..e00bd0ec8 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/lime_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_lime" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/magenta_valve_handle.json b/src/generated/resources/assets/create/models/block/magenta_valve_handle.json new file mode 100644 index 000000000..44cc26395 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/magenta_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_magenta" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/orange_valve_handle.json b/src/generated/resources/assets/create/models/block/orange_valve_handle.json new file mode 100644 index 000000000..a06b206b2 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/orange_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_orange" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/pink_valve_handle.json b/src/generated/resources/assets/create/models/block/pink_valve_handle.json new file mode 100644 index 000000000..ddbd94eaa --- /dev/null +++ b/src/generated/resources/assets/create/models/block/pink_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_pink" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/purple_valve_handle.json b/src/generated/resources/assets/create/models/block/purple_valve_handle.json new file mode 100644 index 000000000..a2449a3bf --- /dev/null +++ b/src/generated/resources/assets/create/models/block/purple_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_purple" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/red_valve_handle.json b/src/generated/resources/assets/create/models/block/red_valve_handle.json new file mode 100644 index 000000000..d4465688b --- /dev/null +++ b/src/generated/resources/assets/create/models/block/red_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_red" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/white_valve_handle.json b/src/generated/resources/assets/create/models/block/white_valve_handle.json new file mode 100644 index 000000000..6c867367f --- /dev/null +++ b/src/generated/resources/assets/create/models/block/white_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_white" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/yellow_valve_handle.json b/src/generated/resources/assets/create/models/block/yellow_valve_handle.json new file mode 100644 index 000000000..0b5c669fd --- /dev/null +++ b/src/generated/resources/assets/create/models/block/yellow_valve_handle.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/valve_handle", + "textures": { + "3": "create:block/valve_handle/valve_handle_yellow" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/belt_observer.json b/src/generated/resources/assets/create/models/item/belt_observer.json deleted file mode 100644 index 84c140675..000000000 --- a/src/generated/resources/assets/create/models/item/belt_observer.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "create:block/belt_observer/item" -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/black_valve_handle.json b/src/generated/resources/assets/create/models/item/black_valve_handle.json new file mode 100644 index 000000000..7407f374e --- /dev/null +++ b/src/generated/resources/assets/create/models/item/black_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/black_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/blue_valve_handle.json b/src/generated/resources/assets/create/models/item/blue_valve_handle.json new file mode 100644 index 000000000..945f59227 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/blue_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/blue_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/brown_valve_handle.json b/src/generated/resources/assets/create/models/item/brown_valve_handle.json new file mode 100644 index 000000000..ae74f78c1 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/brown_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/brown_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/content_observer.json b/src/generated/resources/assets/create/models/item/content_observer.json new file mode 100644 index 000000000..01c7ba5ef --- /dev/null +++ b/src/generated/resources/assets/create/models/item/content_observer.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/content_observer/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/copper_valve_handle.json b/src/generated/resources/assets/create/models/item/copper_valve_handle.json new file mode 100644 index 000000000..45f592b30 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/copper_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/copper_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/cyan_valve_handle.json b/src/generated/resources/assets/create/models/item/cyan_valve_handle.json new file mode 100644 index 000000000..90274434f --- /dev/null +++ b/src/generated/resources/assets/create/models/item/cyan_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/cyan_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/fluid_valve.json b/src/generated/resources/assets/create/models/item/fluid_valve.json new file mode 100644 index 000000000..b31acf275 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/fluid_valve.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/fluid_valve/item" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/gray_valve_handle.json b/src/generated/resources/assets/create/models/item/gray_valve_handle.json new file mode 100644 index 000000000..8b9d7dc23 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/gray_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/gray_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/green_valve_handle.json b/src/generated/resources/assets/create/models/item/green_valve_handle.json new file mode 100644 index 000000000..87f376e1d --- /dev/null +++ b/src/generated/resources/assets/create/models/item/green_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/green_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/light_blue_valve_handle.json b/src/generated/resources/assets/create/models/item/light_blue_valve_handle.json new file mode 100644 index 000000000..b9a68f054 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/light_blue_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/light_blue_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/light_gray_valve_handle.json b/src/generated/resources/assets/create/models/item/light_gray_valve_handle.json new file mode 100644 index 000000000..1b3bd3a5d --- /dev/null +++ b/src/generated/resources/assets/create/models/item/light_gray_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/light_gray_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/lime_valve_handle.json b/src/generated/resources/assets/create/models/item/lime_valve_handle.json new file mode 100644 index 000000000..98d457c68 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/lime_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/lime_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/magenta_valve_handle.json b/src/generated/resources/assets/create/models/item/magenta_valve_handle.json new file mode 100644 index 000000000..14b0c57d0 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/magenta_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/magenta_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/orange_valve_handle.json b/src/generated/resources/assets/create/models/item/orange_valve_handle.json new file mode 100644 index 000000000..e8d275537 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/orange_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/orange_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/pink_valve_handle.json b/src/generated/resources/assets/create/models/item/pink_valve_handle.json new file mode 100644 index 000000000..2b7db5fa0 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/pink_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/pink_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/portable_storage_interface.json b/src/generated/resources/assets/create/models/item/portable_storage_interface.json index 87d2165ba..3330b9ffd 100644 --- a/src/generated/resources/assets/create/models/item/portable_storage_interface.json +++ b/src/generated/resources/assets/create/models/item/portable_storage_interface.json @@ -1,3 +1,3 @@ { - "parent": "create:block/portable_storage_interface" + "parent": "create:block/portable_storage_interface/item" } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/purple_valve_handle.json b/src/generated/resources/assets/create/models/item/purple_valve_handle.json new file mode 100644 index 000000000..89f8cddd1 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/purple_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/purple_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/red_valve_handle.json b/src/generated/resources/assets/create/models/item/red_valve_handle.json new file mode 100644 index 000000000..1bbed3331 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/red_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/red_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/white_valve_handle.json b/src/generated/resources/assets/create/models/item/white_valve_handle.json new file mode 100644 index 000000000..d81403c93 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/white_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/white_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/yellow_valve_handle.json b/src/generated/resources/assets/create/models/item/yellow_valve_handle.json new file mode 100644 index 000000000..eda359168 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/yellow_valve_handle.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/yellow_valve_handle" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json similarity index 81% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json index 9e9f647d0..84dde5a75 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting/logistics/belt_observer" + "create:crafting/logistics/content_observer" ] }, "criteria": { @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting/logistics/belt_observer" + "recipe": "create:crafting/logistics/content_observer" } } }, diff --git a/src/generated/resources/data/create/loot_tables/blocks/black_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/black_valve_handle.json new file mode 100644 index 000000000..1861b0337 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/black_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:black_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/blue_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/blue_valve_handle.json new file mode 100644 index 000000000..c8a0e64d9 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/blue_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:blue_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/brown_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/brown_valve_handle.json new file mode 100644 index 000000000..2b3845dcb --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/brown_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:brown_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/content_observer.json b/src/generated/resources/data/create/loot_tables/blocks/content_observer.json new file mode 100644 index 000000000..09c12c01b --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/content_observer.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:content_observer" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/copper_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/copper_valve_handle.json new file mode 100644 index 000000000..86d70bc02 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/copper_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:copper_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/cyan_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/cyan_valve_handle.json new file mode 100644 index 000000000..08650e062 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/cyan_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:cyan_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/belt_observer.json b/src/generated/resources/data/create/loot_tables/blocks/fluid_valve.json similarity index 86% rename from src/generated/resources/data/create/loot_tables/blocks/belt_observer.json rename to src/generated/resources/data/create/loot_tables/blocks/fluid_valve.json index 3919e58e4..3dc9088e1 100644 --- a/src/generated/resources/data/create/loot_tables/blocks/belt_observer.json +++ b/src/generated/resources/data/create/loot_tables/blocks/fluid_valve.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "create:belt_observer" + "name": "create:fluid_valve" } ], "conditions": [ diff --git a/src/generated/resources/data/create/loot_tables/blocks/gray_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/gray_valve_handle.json new file mode 100644 index 000000000..db996c7d2 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/gray_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:gray_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/green_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/green_valve_handle.json new file mode 100644 index 000000000..3138cc7e0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/green_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:green_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/light_blue_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/light_blue_valve_handle.json new file mode 100644 index 000000000..6d3005ae2 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/light_blue_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:light_blue_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/light_gray_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/light_gray_valve_handle.json new file mode 100644 index 000000000..92a453917 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/light_gray_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:light_gray_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/lime_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/lime_valve_handle.json new file mode 100644 index 000000000..b0f193da4 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/lime_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:lime_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/magenta_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/magenta_valve_handle.json new file mode 100644 index 000000000..33188b6b5 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/magenta_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:magenta_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/orange_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/orange_valve_handle.json new file mode 100644 index 000000000..537e63db0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/orange_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:orange_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/pink_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/pink_valve_handle.json new file mode 100644 index 000000000..f73647fdb --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/pink_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:pink_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/purple_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/purple_valve_handle.json new file mode 100644 index 000000000..e6d6e7ca9 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/purple_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:purple_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/red_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/red_valve_handle.json new file mode 100644 index 000000000..d4090bf79 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/red_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:red_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/white_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/white_valve_handle.json new file mode 100644 index 000000000..dcb5f3a1f --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/white_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:white_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/yellow_valve_handle.json b/src/generated/resources/data/create/loot_tables/blocks/yellow_valve_handle.json new file mode 100644 index 000000000..0359a3354 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/yellow_valve_handle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:yellow_valve_handle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/belt_observer.json b/src/generated/resources/data/create/recipes/crafting/logistics/content_observer.json similarity index 89% rename from src/generated/resources/data/create/recipes/crafting/logistics/belt_observer.json rename to src/generated/resources/data/create/recipes/crafting/logistics/content_observer.json index c802d8aaa..6bc6b13f4 100644 --- a/src/generated/resources/data/create/recipes/crafting/logistics/belt_observer.json +++ b/src/generated/resources/data/create/recipes/crafting/logistics/content_observer.json @@ -19,6 +19,6 @@ } }, "result": { - "item": "create:belt_observer" + "item": "create:content_observer" } } \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/blocks/brittle.json b/src/generated/resources/data/create/tags/blocks/brittle.json index ca0269645..dba3575c4 100644 --- a/src/generated/resources/data/create/tags/blocks/brittle.json +++ b/src/generated/resources/data/create/tags/blocks/brittle.json @@ -3,6 +3,23 @@ "values": [ "create:nozzle", "create:hand_crank", + "create:white_valve_handle", + "create:orange_valve_handle", + "create:magenta_valve_handle", + "create:light_blue_valve_handle", + "create:yellow_valve_handle", + "create:lime_valve_handle", + "create:pink_valve_handle", + "create:gray_valve_handle", + "create:light_gray_valve_handle", + "create:cyan_valve_handle", + "create:purple_valve_handle", + "create:blue_valve_handle", + "create:brown_valve_handle", + "create:green_valve_handle", + "create:red_valve_handle", + "create:black_valve_handle", + "create:copper_valve_handle", "create:rope", "create:pulley_magnet", "create:furnace_engine", diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 471788239..295e3242a 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -69,6 +69,10 @@ public class AllBlockPartials { SYMMETRY_PLANE = get("symmetry_effect/plane"), SYMMETRY_CROSSPLANE = get("symmetry_effect/crossplane"), SYMMETRY_TRIPLEPLANE = get("symmetry_effect/tripleplane"), + PORTABLE_STORAGE_INTERFACE_MIDDLE = get("portable_storage_interface/block_middle"), + PORTABLE_STORAGE_INTERFACE_MIDDLE_POWERED = get("portable_storage_interface/block_middle_powered"), + PORTABLE_STORAGE_INTERFACE_TOP = get("portable_storage_interface/block_top"), + ARM_COG = get("mechanical_arm/cog"), ARM_BASE = get("mechanical_arm/base"), ARM_LOWER_BODY = get("mechanical_arm/lower_body"), ARM_UPPER_BODY = get("mechanical_arm/upper_body"), ARM_HEAD = get("mechanical_arm/head"), ARM_CLAW_BASE = get("mechanical_arm/claw_base"), @@ -78,7 +82,7 @@ public class AllBlockPartials { FLAG_LONG_IN = get("mechanical_arm/flag/long_in"), FLAG_LONG_OUT = get("mechanical_arm/flag/long_out"), MECHANICAL_PUMP_ARROW = get("mechanical_pump/arrow"), MECHANICAL_PUMP_COG = get("mechanical_pump/cog"), - FLUID_PIPE_CASING = get("fluid_pipe/casing"), + FLUID_PIPE_CASING = get("fluid_pipe/casing"), FLUID_VALVE_POINTER = get("fluid_valve/pointer"), SPOUT_TOP = get("spout/top"), SPOUT_MIDDLE = get("spout/middle"), SPOUT_BOTTOM = get("spout/bottom"), @@ -157,6 +161,11 @@ public class AllBlockPartials { return CreateClient.bufferCache.renderPartial(this, referenceState); } + public SuperByteBuffer renderOnDirectionalSouth(BlockState referenceState) { + Direction facing = referenceState.get(FACING); + return renderOnDirectionalSouth(referenceState, facing); + } + public SuperByteBuffer renderOnDirectional(BlockState referenceState) { Direction facing = referenceState.get(FACING); return renderOnDirectional(referenceState, facing); @@ -164,10 +173,10 @@ public class AllBlockPartials { public SuperByteBuffer renderOnHorizontal(BlockState referenceState) { Direction facing = referenceState.get(HORIZONTAL_FACING); - return renderOnDirectional(referenceState, facing); + return renderOnDirectionalSouth(referenceState, facing); } - public SuperByteBuffer renderOnDirectional(BlockState referenceState, Direction facing) { + public SuperByteBuffer renderOnDirectionalSouth(BlockState referenceState, Direction facing) { MatrixStack ms = new MatrixStack(); // TODO 1.15 find a way to cache this model matrix computation MatrixStacker.of(ms) @@ -178,4 +187,15 @@ public class AllBlockPartials { return CreateClient.bufferCache.renderDirectionalPartial(this, referenceState, facing, ms); } + public SuperByteBuffer renderOnDirectional(BlockState referenceState, Direction facing) { + MatrixStack ms = new MatrixStack(); + // TODO 1.15 find a way to cache this model matrix computation + MatrixStacker.of(ms) + .centre() + .rotateY(AngleHelper.horizontalAngle(facing)) + .rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90) + .unCentre(); + return CreateClient.bufferCache.renderDirectionalPartial(this, referenceState, facing, ms); + } + } diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index ca8e6c7c4..a291eadeb 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -20,6 +20,7 @@ import com.simibubi.create.content.contraptions.components.actors.HarvesterMovem import com.simibubi.create.content.contraptions.components.actors.PloughBlock; import com.simibubi.create.content.contraptions.components.actors.PloughMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceBlock; +import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceMovement; import com.simibubi.create.content.contraptions.components.actors.SawMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.SeatBlock; import com.simibubi.create.content.contraptions.components.actors.SeatMovementBehaviour; @@ -27,6 +28,7 @@ import com.simibubi.create.content.contraptions.components.clock.CuckooClockBloc import com.simibubi.create.content.contraptions.components.crafter.CrafterCTBehaviour; import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlock; import com.simibubi.create.content.contraptions.components.crank.HandCrankBlock; +import com.simibubi.create.content.contraptions.components.crank.AllValveHandles; import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelBlock; import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock; import com.simibubi.create.content.contraptions.components.deployer.DeployerBlock; @@ -64,12 +66,14 @@ import com.simibubi.create.content.contraptions.fluids.PumpBlock; 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; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidValveBlock; import com.simibubi.create.content.contraptions.fluids.pipes.GlassFluidPipeBlock; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankGenerator; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankItem; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankModel; import com.simibubi.create.content.contraptions.processing.BasinBlock; +import com.simibubi.create.content.contraptions.processing.BasinMovementBehaviour; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem; import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlock; @@ -91,7 +95,6 @@ import com.simibubi.create.content.contraptions.relays.encased.GearshiftBlock; import com.simibubi.create.content.contraptions.relays.gauge.GaugeBlock; import com.simibubi.create.content.contraptions.relays.gauge.GaugeGenerator; import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlock; -import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverBlock; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock; import com.simibubi.create.content.logistics.block.belts.tunnel.BrassTunnelBlock; import com.simibubi.create.content.logistics.block.belts.tunnel.BrassTunnelCTBehaviour; @@ -120,6 +123,7 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.ArmBlock; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmItem; import com.simibubi.create.content.logistics.block.redstone.AnalogLeverBlock; import com.simibubi.create.content.logistics.block.redstone.ContactMovementBehaviour; +import com.simibubi.create.content.logistics.block.redstone.ContentObserverBlock; import com.simibubi.create.content.logistics.block.redstone.NixieTubeBlock; import com.simibubi.create.content.logistics.block.redstone.NixieTubeGenerator; import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock; @@ -137,8 +141,8 @@ import com.simibubi.create.foundation.data.ModelGen; import com.simibubi.create.foundation.data.SharedProperties; import com.simibubi.create.foundation.utility.DyeHelper; import com.simibubi.create.foundation.worldgen.OxidizingBlock; +import com.tterrag.registrate.providers.RegistrateRecipeProvider; import com.tterrag.registrate.util.entry.BlockEntry; - import net.minecraft.block.AbstractBlock; import net.minecraft.advancements.criterion.InventoryChangeTrigger; import net.minecraft.advancements.criterion.ItemPredicate; @@ -409,6 +413,7 @@ public class AllBlocks { public static final BlockEntry BASIN = REGISTRATE.block("basin", BasinBlock::new) .initialProperties(SharedProperties::stone) .blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.standardModel(ctx, prov))) + .onRegister(addMovementBehaviour(new BasinMovementBehaviour())) .simpleItem() .register(); @@ -494,6 +499,20 @@ public class AllBlocks { .transform(customItemModel()) .register(); + public static final BlockEntry FLUID_VALVE = REGISTRATE.block("fluid_valve", FluidValveBlock::new) + .initialProperties(SharedProperties::softMetal) + .blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p, + (state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal", + state.get(FluidValveBlock.ENABLED) ? "open" : "closed"))) + .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) + .item() + .transform(customItemModel()) + .register(); + + static { + AllValveHandles.register(REGISTRATE); + } + public static final BlockEntry FLUID_TANK = REGISTRATE.block("fluid_tank", FluidTankBlock::new) .initialProperties(SharedProperties::softMetal) .properties(AbstractBlock.Properties::nonOpaque) @@ -671,9 +690,10 @@ public class AllBlocks { public static final BlockEntry PORTABLE_STORAGE_INTERFACE = REGISTRATE.block("portable_storage_interface", PortableStorageInterfaceBlock::new) .initialProperties(SharedProperties::stone) -// .onRegister(addMovementBehaviour(new StorageInterfaceMovement())) - .blockstate(BlockStateGen.directionalBlockProvider(false)) - .simpleItem() + .blockstate((c, p) -> p.directionalBlock(c.get(), AssetLookup.partialBaseModel(c, p))) + .onRegister(addMovementBehaviour(new PortableStorageInterfaceMovement())) + .item() + .transform(customItemModel()) .register(); public static final BlockEntry MECHANICAL_HARVESTER = @@ -713,24 +733,14 @@ public class AllBlocks { .patternLine("-") .key('#', DyeHelper.getWoolOfDye(colour)) .key('-', ItemTags.WOODEN_SLABS) - .addCriterion("has_wool", - new InventoryChangeTrigger.Instance(AndPredicate.EMPTY, MinMaxBounds.IntBound.UNBOUNDED, - MinMaxBounds.IntBound.UNBOUNDED, MinMaxBounds.IntBound.UNBOUNDED, - new ItemPredicate[] { ItemPredicate.Builder.create() - .tag(ItemTags.WOOL) - .build() })) + .addCriterion("has_wool", RegistrateRecipeProvider.hasItem(ItemTags.WOOL)) .build(p, Create.asResource("crafting/kinetics/" + c.getName())); ShapedRecipeBuilder.shapedRecipe(c.get()) .patternLine("#") .patternLine("-") .key('#', DyeHelper.getTagOfDye(colour)) .key('-', AllItemTags.SEATS.tag) - .addCriterion("has_seat", - new InventoryChangeTrigger.Instance(AndPredicate.EMPTY, MinMaxBounds.IntBound.UNBOUNDED, - MinMaxBounds.IntBound.UNBOUNDED, MinMaxBounds.IntBound.UNBOUNDED, - new ItemPredicate[] { ItemPredicate.Builder.create() - .tag(AllItemTags.SEATS.tag) - .build() })) + .addCriterion("has_seat", RegistrateRecipeProvider.hasItem(AllItemTags.SEATS.tag)) .build(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_seat")); }) .tag(AllBlockTags.SEATS.tag) @@ -882,12 +892,12 @@ public class AllBlocks { .transform(customItemModel("_", "block")) .register(); - public static final BlockEntry BELT_OBSERVER = - REGISTRATE.block("belt_observer", BeltObserverBlock::new) + public static final BlockEntry CONTENT_OBSERVER = + REGISTRATE.block("content_observer", ContentObserverBlock::new) .initialProperties(SharedProperties::stone) - .blockstate(BlockStateGen.beltObserver()) + .blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p))) .item() - .transform(customItemModel()) + .transform(customItemModel("_", "block")) .register(); public static final BlockEntry STOCKPILE_SWITCH = diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 7b1739db2..f8b275fe1 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -32,8 +32,7 @@ public class AllShapes { EIGHT_VOXEL_POLE = shape(4, 0, 4, 12, 16, 12).forAxis(), FURNACE_ENGINE = shape(1, 1, 0, 15, 15, 16).add(0, 0, 9, 16, 16, 14) .forHorizontal(Direction.SOUTH), - PORTABLE_STORAGE_INTERFACE = shape(0, 0, 0, 16, 12, 16).add(3, 12, 3, 13, 16, 13) - .forDirectional(), + 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(0, 0, 14, 16, 16, 16) .forHorizontalAxis(), @@ -48,11 +47,17 @@ public class AllShapes { .forDirectional(), CRANK = shape(5, 0, 5, 11, 6, 11).add(1, 3, 1, 15, 8, 15) .forDirectional(), + VALVE_HANDLE = shape(1, 0, 1, 15, 5, 15) + .forDirectional(), CART_ASSEMBLER = shape(0, 12, 0, 16, 16, 16).add(-2, 0, 1, 18, 14, 15) .forHorizontalAxis(), STOCKPILE_SWITCH = shape(0, 0, 0, 16, 2, 16).add(1, 0, 1, 15, 16, 15) .add(0, 14, 0, 16, 16, 16) - .add(3, 3, -1, 13, 13, 2) + .add(3, 3, -2, 13, 13, 2) + .forHorizontal(NORTH), + CONTENT_OBSERVER = shape(0, 0, 0, 16, 6, 16).add(1, 0, 1, 15, 16, 15) + .add(0, 14, 0, 16, 16, 16) + .add(3, 3, -2, 13, 13, 2) .forHorizontal(NORTH), NIXIE_TUBE = shape(0, 0, 0, 16, 4, 16).add(9, 0, 5, 15, 15, 11) .add(1, 0, 5, 7, 15, 11) @@ -68,16 +73,14 @@ public class AllShapes { .add(2, 6, 2, 14, 10, 14) .add(0, 10, 0, 16, 13, 16) .forDirectional(UP), - BELT_FUNNEL_RETRACTED = - shape(2, -5, 14, 12, 14, 18) - .add(0, -5, 8, 16, 16, 14) + BELT_FUNNEL_RETRACTED = shape(2, -5, 14, 12, 14, 18).add(0, -5, 8, 16, 16, 14) .forHorizontal(NORTH), - BELT_FUNNEL_EXTENDED = - shape(2, -4, 14, 14, 14, 18) - .add(3, -4, 10, 13, 13, 14) + BELT_FUNNEL_EXTENDED = shape(2, -4, 14, 14, 14, 18).add(3, -4, 10, 13, 13, 14) .add(2, -4, 6, 14, 14, 10) .add(0, -5, 0, 16, 16, 6) .forHorizontal(NORTH), + FLUID_VALVE = shape(3, -1, 3, 13, 17, 13).add(2, 2, 2, 14, 14, 14) + .forAxis(), PUMP = shape(2, 0, 2, 14, 5, 14).add(4, 0, 4, 12, 16, 12) .add(3, 12, 3, 13, 16, 13) .forDirectional(Direction.UP) diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 70e537b4a..3c64fc2f4 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -5,10 +5,13 @@ import com.simibubi.create.content.contraptions.components.actors.DrillRenderer; import com.simibubi.create.content.contraptions.components.actors.DrillTileEntity; import com.simibubi.create.content.contraptions.components.actors.HarvesterRenderer; import com.simibubi.create.content.contraptions.components.actors.HarvesterTileEntity; +import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceRenderer; +import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceTileEntity; import com.simibubi.create.content.contraptions.components.clock.CuckooClockRenderer; import com.simibubi.create.content.contraptions.components.clock.CuckooClockTileEntity; import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterRenderer; import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity; +import com.simibubi.create.content.contraptions.components.crank.AllValveHandles; import com.simibubi.create.content.contraptions.components.crank.HandCrankRenderer; import com.simibubi.create.content.contraptions.components.crank.HandCrankTileEntity; import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerTileEntity; @@ -48,6 +51,8 @@ import com.simibubi.create.content.contraptions.fluids.PumpTileEntity; 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; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidValveRenderer; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidValveTileEntity; 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.FluidTankRenderer; @@ -73,8 +78,6 @@ import com.simibubi.create.content.contraptions.relays.gauge.StressGaugeTileEnti import com.simibubi.create.content.contraptions.relays.gearbox.GearboxRenderer; import com.simibubi.create.content.contraptions.relays.gearbox.GearboxTileEntity; import com.simibubi.create.content.contraptions.relays.gearbox.GearshiftTileEntity; -import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverRenderer; -import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverTileEntity; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelRenderer; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelTileEntity; import com.simibubi.create.content.logistics.block.belts.tunnel.BrassTunnelTileEntity; @@ -93,6 +96,7 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.ArmRenderer; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity; import com.simibubi.create.content.logistics.block.redstone.AnalogLeverRenderer; import com.simibubi.create.content.logistics.block.redstone.AnalogLeverTileEntity; +import com.simibubi.create.content.logistics.block.redstone.ContentObserverTileEntity; import com.simibubi.create.content.logistics.block.redstone.NixieTubeRenderer; import com.simibubi.create.content.logistics.block.redstone.NixieTubeTileEntity; import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkTileEntity; @@ -107,371 +111,387 @@ public class AllTileEntities { // Schematics public static final TileEntityEntry SCHEMATICANNON = Create.registrate() - .tileEntity("schematicannon", SchematicannonTileEntity::new) - .validBlocks(AllBlocks.SCHEMATICANNON) - .renderer(() -> SchematicannonRenderer::new) - .register(); + .tileEntity("schematicannon", SchematicannonTileEntity::new) + .validBlocks(AllBlocks.SCHEMATICANNON) + .renderer(() -> SchematicannonRenderer::new) + .register(); public static final TileEntityEntry SCHEMATIC_TABLE = Create.registrate() - .tileEntity("schematic_table", SchematicTableTileEntity::new) - .validBlocks(AllBlocks.SCHEMATIC_TABLE) - //.renderer(() -> renderer) - .register(); + .tileEntity("schematic_table", SchematicTableTileEntity::new) + .validBlocks(AllBlocks.SCHEMATIC_TABLE) + // .renderer(() -> renderer) + .register(); // Kinetics public static final TileEntityEntry SIMPLE_KINETIC = Create.registrate() - .tileEntity("simple_kinetic", SimpleKineticTileEntity::new) - .validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL, AllBlocks.ENCASED_SHAFT) - .renderer(() -> KineticTileEntityRenderer::new) - .register(); + .tileEntity("simple_kinetic", SimpleKineticTileEntity::new) + .validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL, AllBlocks.ENCASED_SHAFT) + .renderer(() -> KineticTileEntityRenderer::new) + .register(); public static final TileEntityEntry MOTOR = Create.registrate() - .tileEntity("motor", CreativeMotorTileEntity::new) - .validBlocks(AllBlocks.CREATIVE_MOTOR) - .renderer(() -> CreativeMotorRenderer::new) - .register(); + .tileEntity("motor", CreativeMotorTileEntity::new) + .validBlocks(AllBlocks.CREATIVE_MOTOR) + .renderer(() -> CreativeMotorRenderer::new) + .register(); public static final TileEntityEntry GEARBOX = Create.registrate() - .tileEntity("gearbox", GearboxTileEntity::new) - .validBlocks(AllBlocks.GEARBOX) - .renderer(() -> GearboxRenderer::new) - .register(); + .tileEntity("gearbox", GearboxTileEntity::new) + .validBlocks(AllBlocks.GEARBOX) + .renderer(() -> GearboxRenderer::new) + .register(); public static final TileEntityEntry ENCASED_SHAFT = Create.registrate() - .tileEntity("encased_shaft", EncasedShaftTileEntity::new) - .validBlocks(AllBlocks.ENCASED_SHAFT, AllBlocks.ENCASED_BELT) - .renderer(() -> EncasedShaftRenderer::new) - .register(); + .tileEntity("encased_shaft", EncasedShaftTileEntity::new) + .validBlocks(AllBlocks.ENCASED_SHAFT, AllBlocks.ENCASED_BELT) + .renderer(() -> EncasedShaftRenderer::new) + .register(); public static final TileEntityEntry ADJUSTABLE_PULLEY = Create.registrate() - .tileEntity("adjustable_pulley", AdjustablePulleyTileEntity::new) - .validBlocks(AllBlocks.ADJUSTABLE_PULLEY) - .renderer(() -> EncasedShaftRenderer::new) - .register(); + .tileEntity("adjustable_pulley", AdjustablePulleyTileEntity::new) + .validBlocks(AllBlocks.ADJUSTABLE_PULLEY) + .renderer(() -> EncasedShaftRenderer::new) + .register(); public static final TileEntityEntry ENCASED_FAN = Create.registrate() - .tileEntity("encased_fan", EncasedFanTileEntity::new) - .validBlocks(AllBlocks.ENCASED_FAN) - .renderer(() -> EncasedFanRenderer::new) - .register(); + .tileEntity("encased_fan", EncasedFanTileEntity::new) + .validBlocks(AllBlocks.ENCASED_FAN) + .renderer(() -> EncasedFanRenderer::new) + .register(); public static final TileEntityEntry NOZZLE = Create.registrate() - .tileEntity("nozzle", NozzleTileEntity::new) - .validBlocks(AllBlocks.NOZZLE) - //.renderer(() -> renderer) - .register(); + .tileEntity("nozzle", NozzleTileEntity::new) + .validBlocks(AllBlocks.NOZZLE) + // .renderer(() -> renderer) + .register(); public static final TileEntityEntry CLUTCH = Create.registrate() - .tileEntity("clutch", ClutchTileEntity::new) - .validBlocks(AllBlocks.CLUTCH) - .renderer(() -> SplitShaftRenderer::new) - .register(); + .tileEntity("clutch", ClutchTileEntity::new) + .validBlocks(AllBlocks.CLUTCH) + .renderer(() -> SplitShaftRenderer::new) + .register(); public static final TileEntityEntry GEARSHIFT = Create.registrate() - .tileEntity("gearshift", GearshiftTileEntity::new) - .validBlocks(AllBlocks.GEARSHIFT) - .renderer(() -> SplitShaftRenderer::new) - .register(); + .tileEntity("gearshift", GearshiftTileEntity::new) + .validBlocks(AllBlocks.GEARSHIFT) + .renderer(() -> SplitShaftRenderer::new) + .register(); public static final TileEntityEntry TURNTABLE = Create.registrate() - .tileEntity("turntable", TurntableTileEntity::new) - .validBlocks(AllBlocks.TURNTABLE) - .renderer(() -> KineticTileEntityRenderer::new) - .register(); + .tileEntity("turntable", TurntableTileEntity::new) + .validBlocks(AllBlocks.TURNTABLE) + .renderer(() -> KineticTileEntityRenderer::new) + .register(); public static final TileEntityEntry HAND_CRANK = Create.registrate() - .tileEntity("hand_crank", HandCrankTileEntity::new) - .validBlocks(AllBlocks.HAND_CRANK) - .renderer(() -> HandCrankRenderer::new) - .register(); + .tileEntity("hand_crank", HandCrankTileEntity::new) + .validBlocks(AllBlocks.HAND_CRANK) + .validBlocks(AllValveHandles.variants) + .renderer(() -> HandCrankRenderer::new) + .register(); public static final TileEntityEntry CUCKOO_CLOCK = Create.registrate() - .tileEntity("cuckoo_clock", CuckooClockTileEntity::new) - .validBlocks(AllBlocks.CUCKOO_CLOCK, AllBlocks.MYSTERIOUS_CUCKOO_CLOCK) - .renderer(() -> CuckooClockRenderer::new) - .register(); + .tileEntity("cuckoo_clock", CuckooClockTileEntity::new) + .validBlocks(AllBlocks.CUCKOO_CLOCK, AllBlocks.MYSTERIOUS_CUCKOO_CLOCK) + .renderer(() -> CuckooClockRenderer::new) + .register(); public static final TileEntityEntry MECHANICAL_PUMP = Create.registrate() - .tileEntity("mechanical_pump", PumpTileEntity::new) - .validBlocks(AllBlocks.MECHANICAL_PUMP) - .renderer(() -> PumpRenderer::new) - .register(); + .tileEntity("mechanical_pump", PumpTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_PUMP) + .renderer(() -> PumpRenderer::new) + .register(); public static final TileEntityEntry FLUID_PIPE = Create.registrate() - .tileEntity("fluid_pipe", FluidPipeTileEntity::new) - .validBlocks(AllBlocks.FLUID_PIPE) - .register(); + .tileEntity("fluid_pipe", FluidPipeTileEntity::new) + .validBlocks(AllBlocks.FLUID_PIPE) + .register(); public static final TileEntityEntry ENCASED_FLUID_PIPE = Create.registrate() - .tileEntity("encased_fluid_pipe", StraightPipeTileEntity::new) - .validBlocks(AllBlocks.ENCASED_FLUID_PIPE) - .register(); + .tileEntity("encased_fluid_pipe", StraightPipeTileEntity::new) + .validBlocks(AllBlocks.ENCASED_FLUID_PIPE) + .register(); public static final TileEntityEntry GLASS_FLUID_PIPE = Create.registrate() - .tileEntity("glass_fluid_pipe", StraightPipeTileEntity::new) - .validBlocks(AllBlocks.GLASS_FLUID_PIPE) - .renderer(() -> TransparentStraightPipeRenderer::new) - .register(); + .tileEntity("glass_fluid_pipe", StraightPipeTileEntity::new) + .validBlocks(AllBlocks.GLASS_FLUID_PIPE) + .renderer(() -> TransparentStraightPipeRenderer::new) + .register(); + + public static final TileEntityEntry FLUID_VALVE = Create.registrate() + .tileEntity("fluid_valve", FluidValveTileEntity::new) + .validBlocks(AllBlocks.FLUID_VALVE) + .renderer(() -> FluidValveRenderer::new) + .register(); public static final TileEntityEntry FLUID_TANK = Create.registrate() - .tileEntity("fluid_tank", FluidTankTileEntity::new) - .validBlocks(AllBlocks.FLUID_TANK) - .renderer(() -> FluidTankRenderer::new) - .register(); - + .tileEntity("fluid_tank", FluidTankTileEntity::new) + .validBlocks(AllBlocks.FLUID_TANK) + .renderer(() -> FluidTankRenderer::new) + .register(); + public static final TileEntityEntry SPOUT = Create.registrate() - .tileEntity("spout", SpoutTileEntity::new) - .validBlocks(AllBlocks.SPOUT) - .renderer(() -> SpoutRenderer::new) - .register(); + .tileEntity("spout", SpoutTileEntity::new) + .validBlocks(AllBlocks.SPOUT) + .renderer(() -> SpoutRenderer::new) + .register(); public static final TileEntityEntry BELT = Create.registrate() - .tileEntity("belt", BeltTileEntity::new) - .validBlocks(AllBlocks.BELT) - .renderer(() -> BeltRenderer::new) - .register(); + .tileEntity("belt", BeltTileEntity::new) + .validBlocks(AllBlocks.BELT) + .renderer(() -> BeltRenderer::new) + .register(); public static final TileEntityEntry CHUTE = Create.registrate() - .tileEntity("chute", ChuteTileEntity::new) - .validBlocks(AllBlocks.CHUTE) - .renderer(() -> ChuteRenderer::new) - .register(); + .tileEntity("chute", ChuteTileEntity::new) + .validBlocks(AllBlocks.CHUTE) + .renderer(() -> ChuteRenderer::new) + .register(); public static final TileEntityEntry ANDESITE_TUNNEL = Create.registrate() - .tileEntity("andesite_tunnel", BeltTunnelTileEntity::new) - .validBlocks(AllBlocks.ANDESITE_TUNNEL) - .renderer(() -> BeltTunnelRenderer::new) - .register(); + .tileEntity("andesite_tunnel", BeltTunnelTileEntity::new) + .validBlocks(AllBlocks.ANDESITE_TUNNEL) + .renderer(() -> BeltTunnelRenderer::new) + .register(); public static final TileEntityEntry BRASS_TUNNEL = Create.registrate() - .tileEntity("brass_tunnel", BrassTunnelTileEntity::new) - .validBlocks(AllBlocks.BRASS_TUNNEL) - .renderer(() -> BeltTunnelRenderer::new) - .register(); + .tileEntity("brass_tunnel", BrassTunnelTileEntity::new) + .validBlocks(AllBlocks.BRASS_TUNNEL) + .renderer(() -> BeltTunnelRenderer::new) + .register(); public static final TileEntityEntry MECHANICAL_ARM = Create.registrate() - .tileEntity("mechanical_arm", ArmTileEntity::new) - .validBlocks(AllBlocks.MECHANICAL_ARM) - .renderer(() -> ArmRenderer::new) - .register(); + .tileEntity("mechanical_arm", ArmTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_ARM) + .renderer(() -> ArmRenderer::new) + .register(); public static final TileEntityEntry MECHANICAL_PISTON = Create.registrate() - .tileEntity("mechanical_piston", MechanicalPistonTileEntity::new) - .validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON) - .renderer(() -> MechanicalPistonRenderer::new) - .register(); + .tileEntity("mechanical_piston", MechanicalPistonTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON) + .renderer(() -> MechanicalPistonRenderer::new) + .register(); public static final TileEntityEntry MECHANICAL_BEARING = Create.registrate() - .tileEntity("mechanical_bearing", MechanicalBearingTileEntity::new) - .validBlocks(AllBlocks.MECHANICAL_BEARING) - .renderer(() -> BearingRenderer::new) - .register(); + .tileEntity("mechanical_bearing", MechanicalBearingTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_BEARING) + .renderer(() -> BearingRenderer::new) + .register(); public static final TileEntityEntry CLOCKWORK_BEARING = Create.registrate() - .tileEntity("clockwork_bearing", ClockworkBearingTileEntity::new) - .validBlocks(AllBlocks.CLOCKWORK_BEARING) - .renderer(() -> BearingRenderer::new) - .register(); + .tileEntity("clockwork_bearing", ClockworkBearingTileEntity::new) + .validBlocks(AllBlocks.CLOCKWORK_BEARING) + .renderer(() -> BearingRenderer::new) + .register(); public static final TileEntityEntry ROPE_PULLEY = Create.registrate() - .tileEntity("rope_pulley", PulleyTileEntity::new) - .validBlocks(AllBlocks.ROPE_PULLEY) - .renderer(() -> PulleyRenderer::new) - .register(); + .tileEntity("rope_pulley", PulleyTileEntity::new) + .validBlocks(AllBlocks.ROPE_PULLEY) + .renderer(() -> PulleyRenderer::new) + .register(); public static final TileEntityEntry CHASSIS = Create.registrate() - .tileEntity("chassis", ChassisTileEntity::new) - .validBlocks(AllBlocks.RADIAL_CHASSIS, AllBlocks.LINEAR_CHASSIS, AllBlocks.SECONDARY_LINEAR_CHASSIS) - //.renderer(() -> renderer) - .register(); + .tileEntity("chassis", ChassisTileEntity::new) + .validBlocks(AllBlocks.RADIAL_CHASSIS, AllBlocks.LINEAR_CHASSIS, AllBlocks.SECONDARY_LINEAR_CHASSIS) + // .renderer(() -> renderer) + .register(); public static final TileEntityEntry DRILL = Create.registrate() - .tileEntity("drill", DrillTileEntity::new) - .validBlocks(AllBlocks.MECHANICAL_DRILL) - .renderer(() -> DrillRenderer::new) - .register(); + .tileEntity("drill", DrillTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_DRILL) + .renderer(() -> DrillRenderer::new) + .register(); public static final TileEntityEntry SAW = Create.registrate() - .tileEntity("saw", SawTileEntity::new) - .validBlocks(AllBlocks.MECHANICAL_SAW) - .renderer(() -> SawRenderer::new) - .register(); + .tileEntity("saw", SawTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_SAW) + .renderer(() -> SawRenderer::new) + .register(); public static final TileEntityEntry HARVESTER = Create.registrate() - .tileEntity("harvester", HarvesterTileEntity::new) - .validBlocks(AllBlocks.MECHANICAL_HARVESTER) - .renderer(() -> HarvesterRenderer::new) + .tileEntity("harvester", HarvesterTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_HARVESTER) + .renderer(() -> HarvesterRenderer::new) + .register(); + + public static final TileEntityEntry PORTABLE_STORAGE_INTERFACE = + Create.registrate() + .tileEntity("portable_storage_interface", PortableStorageInterfaceTileEntity::new) + .validBlocks(AllBlocks.PORTABLE_STORAGE_INTERFACE) + .renderer(() -> PortableStorageInterfaceRenderer::new) .register(); public static final TileEntityEntry FLYWHEEL = Create.registrate() - .tileEntity("flywheel", FlywheelTileEntity::new) - .validBlocks(AllBlocks.FLYWHEEL) - .renderer(() -> FlywheelRenderer::new) - .register(); + .tileEntity("flywheel", FlywheelTileEntity::new) + .validBlocks(AllBlocks.FLYWHEEL) + .renderer(() -> FlywheelRenderer::new) + .register(); public static final TileEntityEntry FURNACE_ENGINE = Create.registrate() - .tileEntity("furnace_engine", FurnaceEngineTileEntity::new) - .validBlocks(AllBlocks.FURNACE_ENGINE) - .renderer(() -> EngineRenderer::new) - .register(); + .tileEntity("furnace_engine", FurnaceEngineTileEntity::new) + .validBlocks(AllBlocks.FURNACE_ENGINE) + .renderer(() -> EngineRenderer::new) + .register(); public static final TileEntityEntry MILLSTONE = Create.registrate() - .tileEntity("millstone", MillstoneTileEntity::new) - .validBlocks(AllBlocks.MILLSTONE) - .renderer(() -> MillstoneRenderer::new) - .register(); + .tileEntity("millstone", MillstoneTileEntity::new) + .validBlocks(AllBlocks.MILLSTONE) + .renderer(() -> MillstoneRenderer::new) + .register(); public static final TileEntityEntry CRUSHING_WHEEL = Create.registrate() - .tileEntity("crushing_wheel", CrushingWheelTileEntity::new) - .validBlocks(AllBlocks.CRUSHING_WHEEL) - .renderer(() -> KineticTileEntityRenderer::new) - .register(); + .tileEntity("crushing_wheel", CrushingWheelTileEntity::new) + .validBlocks(AllBlocks.CRUSHING_WHEEL) + .renderer(() -> KineticTileEntityRenderer::new) + .register(); - public static final TileEntityEntry CRUSHING_WHEEL_CONTROLLER = Create.registrate() + public static final TileEntityEntry CRUSHING_WHEEL_CONTROLLER = + Create.registrate() .tileEntity("crushing_wheel_controller", CrushingWheelControllerTileEntity::new) .validBlocks(AllBlocks.CRUSHING_WHEEL_CONTROLLER) - //.renderer(() -> renderer) + // .renderer(() -> renderer) .register(); public static final TileEntityEntry WATER_WHEEL = Create.registrate() - .tileEntity("water_wheel", WaterWheelTileEntity::new) - .validBlocks(AllBlocks.WATER_WHEEL) - .renderer(() -> KineticTileEntityRenderer::new) - .register(); + .tileEntity("water_wheel", WaterWheelTileEntity::new) + .validBlocks(AllBlocks.WATER_WHEEL) + .renderer(() -> KineticTileEntityRenderer::new) + .register(); public static final TileEntityEntry MECHANICAL_PRESS = Create.registrate() - .tileEntity("mechanical_press", MechanicalPressTileEntity::new) - .validBlocks(AllBlocks.MECHANICAL_PRESS) - .renderer(() -> MechanicalPressRenderer::new) - .register(); + .tileEntity("mechanical_press", MechanicalPressTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_PRESS) + .renderer(() -> MechanicalPressRenderer::new) + .register(); public static final TileEntityEntry MECHANICAL_MIXER = Create.registrate() - .tileEntity("mechanical_mixer", MechanicalMixerTileEntity::new) - .validBlocks(AllBlocks.MECHANICAL_MIXER) - .renderer(() -> MechanicalMixerRenderer::new) - .register(); + .tileEntity("mechanical_mixer", MechanicalMixerTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_MIXER) + .renderer(() -> MechanicalMixerRenderer::new) + .register(); public static final TileEntityEntry DEPLOYER = Create.registrate() - .tileEntity("deployer", DeployerTileEntity::new) - .validBlocks(AllBlocks.DEPLOYER) - .renderer(() -> DeployerRenderer::new) - .register(); + .tileEntity("deployer", DeployerTileEntity::new) + .validBlocks(AllBlocks.DEPLOYER) + .renderer(() -> DeployerRenderer::new) + .register(); public static final TileEntityEntry BASIN = Create.registrate() - .tileEntity("basin", BasinTileEntity::new) - .validBlocks(AllBlocks.BASIN) - .renderer(() -> BasinRenderer::new) - .register(); + .tileEntity("basin", BasinTileEntity::new) + .validBlocks(AllBlocks.BASIN) + .renderer(() -> BasinRenderer::new) + .register(); public static final TileEntityEntry HEATER = Create.registrate() - .tileEntity("blaze_heater", BlazeBurnerTileEntity::new) - .validBlocks(AllBlocks.BLAZE_BURNER) - .renderer(() -> BlazeBurnerRenderer::new) - .register(); + .tileEntity("blaze_heater", BlazeBurnerTileEntity::new) + .validBlocks(AllBlocks.BLAZE_BURNER) + .renderer(() -> BlazeBurnerRenderer::new) + .register(); public static final TileEntityEntry MECHANICAL_CRAFTER = Create.registrate() - .tileEntity("mechanical_crafter", MechanicalCrafterTileEntity::new) - .validBlocks(AllBlocks.MECHANICAL_CRAFTER) - .renderer(() -> MechanicalCrafterRenderer::new) - .register(); + .tileEntity("mechanical_crafter", MechanicalCrafterTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_CRAFTER) + .renderer(() -> MechanicalCrafterRenderer::new) + .register(); public static final TileEntityEntry SEQUENCED_GEARSHIFT = Create.registrate() - .tileEntity("sequenced_gearshift", SequencedGearshiftTileEntity::new) - .validBlocks(AllBlocks.SEQUENCED_GEARSHIFT) - .renderer(() -> SplitShaftRenderer::new) - .register(); + .tileEntity("sequenced_gearshift", SequencedGearshiftTileEntity::new) + .validBlocks(AllBlocks.SEQUENCED_GEARSHIFT) + .renderer(() -> SplitShaftRenderer::new) + .register(); public static final TileEntityEntry ROTATION_SPEED_CONTROLLER = Create.registrate() - .tileEntity("rotation_speed_controller", SpeedControllerTileEntity::new) - .validBlocks(AllBlocks.ROTATION_SPEED_CONTROLLER) - .renderer(() -> SpeedControllerRenderer::new) - .register(); + .tileEntity("rotation_speed_controller", SpeedControllerTileEntity::new) + .validBlocks(AllBlocks.ROTATION_SPEED_CONTROLLER) + .renderer(() -> SpeedControllerRenderer::new) + .register(); public static final TileEntityEntry SPEEDOMETER = Create.registrate() - .tileEntity("speedometer", SpeedGaugeTileEntity::new) - .validBlocks(AllBlocks.SPEEDOMETER) - .renderer(() -> GaugeRenderer::speed) - .register(); + .tileEntity("speedometer", SpeedGaugeTileEntity::new) + .validBlocks(AllBlocks.SPEEDOMETER) + .renderer(() -> GaugeRenderer::speed) + .register(); public static final TileEntityEntry STRESSOMETER = Create.registrate() - .tileEntity("stressometer", StressGaugeTileEntity::new) - .validBlocks(AllBlocks.STRESSOMETER) - .renderer(() -> GaugeRenderer::stress) - .register(); + .tileEntity("stressometer", StressGaugeTileEntity::new) + .validBlocks(AllBlocks.STRESSOMETER) + .renderer(() -> GaugeRenderer::stress) + .register(); public static final TileEntityEntry ANALOG_LEVER = Create.registrate() - .tileEntity("analog_lever", AnalogLeverTileEntity::new) - .validBlocks(AllBlocks.ANALOG_LEVER) - .renderer(() -> AnalogLeverRenderer::new) - .register(); + .tileEntity("analog_lever", AnalogLeverTileEntity::new) + .validBlocks(AllBlocks.ANALOG_LEVER) + .renderer(() -> AnalogLeverRenderer::new) + .register(); public static final TileEntityEntry CART_ASSEMBLER = Create.registrate() - .tileEntity("cart_assembler", CartAssemblerTileEntity::new) - .validBlocks(AllBlocks.CART_ASSEMBLER) - //.renderer(() -> renderer) - .register(); + .tileEntity("cart_assembler", CartAssemblerTileEntity::new) + .validBlocks(AllBlocks.CART_ASSEMBLER) + // .renderer(() -> renderer) + .register(); // Logistics public static final TileEntityEntry REDSTONE_LINK = Create.registrate() - .tileEntity("redstone_link", RedstoneLinkTileEntity::new) - .validBlocks(AllBlocks.REDSTONE_LINK) - .renderer(() -> SmartTileEntityRenderer::new) - .register(); + .tileEntity("redstone_link", RedstoneLinkTileEntity::new) + .validBlocks(AllBlocks.REDSTONE_LINK) + .renderer(() -> SmartTileEntityRenderer::new) + .register(); public static final TileEntityEntry NIXIE_TUBE = Create.registrate() - .tileEntity("nixie_tube", NixieTubeTileEntity::new) - .validBlocks(AllBlocks.NIXIE_TUBE) - .renderer(() -> NixieTubeRenderer::new) - .register(); + .tileEntity("nixie_tube", NixieTubeTileEntity::new) + .validBlocks(AllBlocks.NIXIE_TUBE) + .renderer(() -> NixieTubeRenderer::new) + .register(); public static final TileEntityEntry STOCKPILE_SWITCH = Create.registrate() - .tileEntity("stockpile_switch", StockpileSwitchTileEntity::new) - .validBlocks(AllBlocks.STOCKPILE_SWITCH) - //.renderer(() -> renderer) - .register(); + .tileEntity("stockpile_switch", StockpileSwitchTileEntity::new) + .validBlocks(AllBlocks.STOCKPILE_SWITCH) + .renderer(() -> SmartTileEntityRenderer::new) + .register(); public static final TileEntityEntry ADJUSTABLE_CRATE = Create.registrate() - .tileEntity("adjustable_crate", AdjustableCrateTileEntity::new) - .validBlocks(AllBlocks.ADJUSTABLE_CRATE) - //.renderer(() -> renderer) - .register(); + .tileEntity("adjustable_crate", AdjustableCrateTileEntity::new) + .validBlocks(AllBlocks.ADJUSTABLE_CRATE) + // .renderer(() -> renderer) + .register(); public static final TileEntityEntry CREATIVE_CRATE = Create.registrate() - .tileEntity("creative_crate", CreativeCrateTileEntity::new) - .validBlocks(AllBlocks.CREATIVE_CRATE) - .renderer(() -> SmartTileEntityRenderer::new) - .register(); + .tileEntity("creative_crate", CreativeCrateTileEntity::new) + .validBlocks(AllBlocks.CREATIVE_CRATE) + .renderer(() -> SmartTileEntityRenderer::new) + .register(); public static final TileEntityEntry DEPOT = Create.registrate() - .tileEntity("depot", DepotTileEntity::new) - .validBlocks(AllBlocks.DEPOT) - .renderer(() -> DepotRenderer::new) - .register(); + .tileEntity("depot", DepotTileEntity::new) + .validBlocks(AllBlocks.DEPOT) + .renderer(() -> DepotRenderer::new) + .register(); public static final TileEntityEntry FUNNEL = Create.registrate() - .tileEntity("funnel", FunnelTileEntity::new) - .validBlocks(AllBlocks.BRASS_FUNNEL, AllBlocks.BRASS_BELT_FUNNEL, AllBlocks.ANDESITE_FUNNEL, AllBlocks.ANDESITE_BELT_FUNNEL) - .renderer(() -> FunnelRenderer::new) - .register(); + .tileEntity("funnel", FunnelTileEntity::new) + .validBlocks(AllBlocks.BRASS_FUNNEL, AllBlocks.BRASS_BELT_FUNNEL, AllBlocks.ANDESITE_FUNNEL, + AllBlocks.ANDESITE_BELT_FUNNEL) + .renderer(() -> FunnelRenderer::new) + .register(); - public static final TileEntityEntry BELT_OBSERVER = Create.registrate() - .tileEntity("belt_observer", BeltObserverTileEntity::new) - .validBlocks(AllBlocks.BELT_OBSERVER) - .renderer(() -> BeltObserverRenderer::new) - .register(); + public static final TileEntityEntry CONTENT_OBSERVER = Create.registrate() + .tileEntity("content_observer", ContentObserverTileEntity::new) + .validBlocks(AllBlocks.CONTENT_OBSERVER) + .renderer(() -> SmartTileEntityRenderer::new) + .register(); public static final TileEntityEntry ADJUSTABLE_REPEATER = Create.registrate() - .tileEntity("adjustable_repeater", AdjustableRepeaterTileEntity::new) - .validBlocks(AllBlocks.ADJUSTABLE_REPEATER) - .renderer(() -> AdjustableRepeaterRenderer::new) - .register(); + .tileEntity("adjustable_repeater", AdjustableRepeaterTileEntity::new) + .validBlocks(AllBlocks.ADJUSTABLE_REPEATER) + .renderer(() -> AdjustableRepeaterRenderer::new) + .register(); - public static final TileEntityEntry ADJUSTABLE_PULSE_REPEATER = Create.registrate() + public static final TileEntityEntry ADJUSTABLE_PULSE_REPEATER = + Create.registrate() .tileEntity("adjustable_pulse_repeater", AdjustablePulseRepeaterTileEntity::new) .validBlocks(AllBlocks.ADJUSTABLE_PULSE_REPEATER) .renderer(() -> AdjustableRepeaterRenderer::new) .register(); - public static void register() { - } + public static void register() {} } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java index dd623508c..e3e4bc013 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java @@ -1,5 +1,8 @@ package com.simibubi.create.content.contraptions.base; +import com.simibubi.create.foundation.utility.DirectionHelper; +import com.simibubi.create.foundation.utility.Iterate; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.item.BlockItemUseContext; @@ -46,49 +49,38 @@ public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBloc BlockPos pos = context.getPos(); World world = context.getWorld(); boolean alongFirst = false; + Axis faceAxis = facing.getAxis(); - if (facing.getAxis() - .isHorizontal()) { - alongFirst = facing.getAxis() == Axis.Z; + if (faceAxis.isHorizontal()) { + alongFirst = faceAxis == Axis.Z; + Direction positivePerpendicular = DirectionHelper.getPositivePerpendicular(faceAxis); - Block blockAbove = world.getBlockState(pos.offset(Direction.UP)) - .getBlock(); - boolean shaftAbove = blockAbove instanceof IRotate && ((IRotate) blockAbove).hasShaftTowards(world, - pos.up(), world.getBlockState(pos.up()), Direction.DOWN); - Block blockBelow = world.getBlockState(pos.offset(Direction.DOWN)) - .getBlock(); - boolean shaftBelow = blockBelow instanceof IRotate && ((IRotate) blockBelow).hasShaftTowards(world, - pos.down(), world.getBlockState(pos.down()), Direction.UP); + boolean shaftAbove = prefersConnectionTo(world, pos, Direction.UP, true); + boolean shaftBelow = prefersConnectionTo(world, pos, Direction.DOWN, true); + boolean preferLeft = prefersConnectionTo(world, pos, positivePerpendicular, false); + boolean preferRight = prefersConnectionTo(world, pos, positivePerpendicular.getOpposite(), false); - if (shaftAbove || shaftBelow) - alongFirst = facing.getAxis() == Axis.X; + if (shaftAbove || shaftBelow || preferLeft || preferRight) + alongFirst = faceAxis == Axis.X; } - if (facing.getAxis() - .isVertical()) { + if (faceAxis.isVertical()) { alongFirst = getAxisAlignmentForPlacement(context); Direction prefferedSide = null; - for (Direction side : Direction.values()) { - if (side.getAxis() - .isVertical()) + + for (Direction side : Iterate.horizontalDirections) { + if (!prefersConnectionTo(world, pos, side, true) + && !prefersConnectionTo(world, pos, side.rotateY(), false)) continue; - 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 (prefferedSide != null && prefferedSide.getAxis() != side.getAxis()) { - prefferedSide = null; - break; - } else { - prefferedSide = side; - } + if (prefferedSide != null && prefferedSide.getAxis() != side.getAxis()) { + prefferedSide = null; + break; } + prefferedSide = side; } - if (prefferedSide != null) { + + if (prefferedSide != null) alongFirst = prefferedSide.getAxis() == Axis.X; - } } return this.getDefaultState() @@ -96,6 +88,16 @@ public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBloc .with(AXIS_ALONG_FIRST_COORDINATE, alongFirst); } + protected boolean prefersConnectionTo(IWorldReader reader, BlockPos pos, Direction facing, boolean shaftAxis) { + if (!shaftAxis) + return false; + BlockPos neighbourPos = pos.offset(facing); + BlockState blockState = reader.getBlockState(neighbourPos); + Block block = blockState.getBlock(); + return block instanceof IRotate + && ((IRotate) block).hasShaftTowards(reader, neighbourPos, blockState, facing.getOpposite()); + } + @Override public Axis getRotationAxis(BlockState state) { Axis pistonAxis = state.get(FACING) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java index 2ff91b4b0..40945edf1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java @@ -27,11 +27,11 @@ public class DrillRenderer extends KineticTileEntityRenderer { @Override protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { - return AllBlockPartials.DRILL_HEAD.renderOnDirectional(te.getBlockState()); + return AllBlockPartials.DRILL_HEAD.renderOnDirectionalSouth(te.getBlockState()); } protected static SuperByteBuffer getRotatingModel(BlockState state) { - return AllBlockPartials.DRILL_HEAD.renderOnDirectional(state); + return AllBlockPartials.DRILL_HEAD.renderOnDirectionalSouth(state); } public static void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal, diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java index a992df339..078b33117 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java @@ -1,27 +1,41 @@ package com.simibubi.create.content.contraptions.components.actors; +import javax.annotation.ParametersAreNonnullByDefault; + import com.simibubi.create.AllShapes; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.block.ProperDirectionalBlock; +import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.BlockState; import net.minecraft.item.BlockItemUseContext; +import net.minecraft.tileentity.TileEntity; 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 javax.annotation.ParametersAreNonnullByDefault; -import mcp.MethodsReturnNonnullByDefault; +import net.minecraft.world.World; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class PortableStorageInterfaceBlock extends ProperDirectionalBlock { +public class PortableStorageInterfaceBlock extends ProperDirectionalBlock + implements ITE { public PortableStorageInterfaceBlock(Properties p_i48415_1_) { super(p_i48415_1_); } + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.PORTABLE_STORAGE_INTERFACE.create(); + } + @Override public BlockState getStateForPlacement(BlockItemUseContext context) { return getDefaultState().with(FACING, context.getNearestLookingDirection() @@ -33,4 +47,23 @@ public class PortableStorageInterfaceBlock extends ProperDirectionalBlock { return AllShapes.PORTABLE_STORAGE_INTERFACE.get(state.get(FACING)); } + @Override + public boolean hasComparatorInputOverride(BlockState state) { + return true; + } + + @Override + public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) { + try { + return getTileEntity(worldIn, pos).isConnected() ? 15 : 0; + } catch (TileEntityException e) { + } + return 0; + } + + @Override + public Class getTileEntityClass() { + return PortableStorageInterfaceTileEntity.class; + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java new file mode 100644 index 000000000..f91b4dca7 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java @@ -0,0 +1,148 @@ +package com.simibubi.create.content.contraptions.components.actors; + +import java.util.Optional; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; +import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public class PortableStorageInterfaceMovement extends MovementBehaviour { + + static final String _workingPos_ = "WorkingPos"; + static final String _clientPrevPos_ = "ClientPrevPos"; + + @Override + public Vec3d getActiveAreaOffset(MovementContext context) { + return new Vec3d(context.state.get(PortableStorageInterfaceBlock.FACING) + .getDirectionVec()).scale(1.85f); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal, + IRenderTypeBuffer buffer) { + PortableStorageInterfaceRenderer.renderInContraption(context, ms, msLocal, buffer); + } + + @Override + public void visitNewPosition(MovementContext context, BlockPos pos) { + context.data.remove(_workingPos_); + if (findInterface(context, pos)) + context.stall = true; + } + + protected boolean findInterface(MovementContext context, BlockPos pos) { + Optional currentFacingIfValid = getCurrentFacingIfValid(context); + if (!currentFacingIfValid.isPresent()) + return false; + + Direction currentFacing = currentFacingIfValid.get(); + PortableStorageInterfaceTileEntity psi = findStationaryInterface(context.world, pos, currentFacing); + if (psi == null) + return false; + + if (psi.isTransferring() && !context.world.isRemote) + return false; + context.data.put(_workingPos_, NBTUtil.writeBlockPos(psi.getPos())); + if (!context.world.isRemote) { + Vec3d diff = VecHelper.getCenterOf(psi.getPos()) + .subtract(context.position); + diff = VecHelper.project(diff, new Vec3d(currentFacing.getDirectionVec())); + float distance = (float) (diff.length() + 1.85f - 1); + psi.startTransferringTo(context.contraption, distance); + } else { + context.data.put(_clientPrevPos_, NBTUtil.writeBlockPos(pos)); + } + return true; + } + + @Override + public void tick(MovementContext context) { + if (context.world.isRemote) { + boolean stalled = context.contraption.stalled; + if (stalled && !context.data.contains(_workingPos_)) { + BlockPos pos = new BlockPos(context.position); + if (!context.data.contains(_clientPrevPos_) + || !NBTUtil.readBlockPos(context.data.getCompound(_clientPrevPos_)) + .equals(pos)) + findInterface(context, pos); + } + if (!stalled) + reset(context); + return; + } + + if (!context.data.contains(_workingPos_)) + return; + + BlockPos pos = NBTUtil.readBlockPos(context.data.getCompound(_workingPos_)); + Optional currentFacingIfValid = getCurrentFacingIfValid(context); + if (!currentFacingIfValid.isPresent()) + return; + + PortableStorageInterfaceTileEntity stationaryInterface = + getStationaryInterfaceAt(context.world, pos, currentFacingIfValid.get()); + if (stationaryInterface == null || !stationaryInterface.isTransferring()) { + reset(context); + return; + } + } + + @Override + public void stopMoving(MovementContext context) { + reset(context); + } + + public void reset(MovementContext context) { + context.data.remove(_clientPrevPos_); + context.data.remove(_workingPos_); + context.stall = false; + } + + private PortableStorageInterfaceTileEntity findStationaryInterface(World world, BlockPos pos, Direction facing) { + for (int i = 0; i < 2; i++) { + PortableStorageInterfaceTileEntity interfaceAt = + getStationaryInterfaceAt(world, pos.offset(facing, i), facing); + if (interfaceAt == null) + continue; + return interfaceAt; + } + return null; + } + + private PortableStorageInterfaceTileEntity getStationaryInterfaceAt(World world, BlockPos pos, Direction facing) { + TileEntity te = world.getTileEntity(pos); + if (!(te instanceof PortableStorageInterfaceTileEntity)) + return null; + BlockState blockState = world.getBlockState(pos); + if (!AllBlocks.PORTABLE_STORAGE_INTERFACE.has(blockState)) + return null; + if (blockState.get(PortableStorageInterfaceBlock.FACING) != facing.getOpposite()) + return null; + return (PortableStorageInterfaceTileEntity) te; + } + + private Optional getCurrentFacingIfValid(MovementContext context) { + Vec3d directionVec = new Vec3d(context.state.get(PortableStorageInterfaceBlock.FACING) + .getDirectionVec()); + directionVec = VecHelper.rotate(directionVec, context.rotation.x, context.rotation.y, context.rotation.z); + Direction facingFromVector = Direction.getFacingFromVector(directionVec.x, directionVec.y, directionVec.z); + if (directionVec.distanceTo(new Vec3d(facingFromVector.getDirectionVec())) > 1 / 8f) + return Optional.empty(); + return Optional.of(facingFromVector); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceRenderer.java new file mode 100644 index 000000000..9efa6b692 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceRenderer.java @@ -0,0 +1,112 @@ +package com.simibubi.create.content.contraptions.components.actors; + +import java.util.function.Consumer; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; +import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.MatrixStacker; +import com.simibubi.create.foundation.utility.SuperByteBuffer; + +import net.minecraft.block.BlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; + +public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer { + + public PortableStorageInterfaceRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + @Override + protected void renderSafe(PortableStorageInterfaceTileEntity te, float partialTicks, MatrixStack ms, + IRenderTypeBuffer buffer, int light, int overlay) { + BlockState blockState = te.getBlockState(); + float progress = te.getExtensionDistance(partialTicks); + IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); + render(blockState, progress, te.isConnected(), sbb -> sbb.light(light).renderInto(ms, vb), ms); + } + + public static void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal, + IRenderTypeBuffer buffer) { + BlockState blockState = context.state; + PortableStorageInterfaceTileEntity te = getTargetPSI(context); + IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); + float renderPartialTicks = Minecraft.getInstance() + .getRenderPartialTicks(); + + float progress = 0; + boolean lit = false; + if (te != null) { + progress = te.getExtensionDistance(renderPartialTicks); + lit = te.isConnected(); + } + + render(blockState, progress, lit, sbb -> sbb.light(msLocal.peek() + .getModel()) + .renderInto(ms, vb), ms, msLocal); + } + + protected static PortableStorageInterfaceTileEntity getTargetPSI(MovementContext context) { + String _workingPos_ = PortableStorageInterfaceMovement._workingPos_; + if (!context.contraption.stalled || !context.data.contains(_workingPos_)) + return null; + + BlockPos pos = NBTUtil.readBlockPos(context.data.getCompound(_workingPos_)); + TileEntity tileEntity = context.world.getTileEntity(pos); + if (!(tileEntity instanceof PortableStorageInterfaceTileEntity)) + return null; + + PortableStorageInterfaceTileEntity psi = (PortableStorageInterfaceTileEntity) tileEntity; + if (!psi.isTransferring()) + return null; + return psi; + } + + private static void render(BlockState blockState, float progress, boolean lit, + Consumer drawCallback, MatrixStack... matrixStacks) { + for (MatrixStack ms : matrixStacks) + ms.push(); + + SuperByteBuffer middle = AllBlockPartials.PORTABLE_STORAGE_INTERFACE_MIDDLE.renderOn(blockState); + SuperByteBuffer top = AllBlockPartials.PORTABLE_STORAGE_INTERFACE_TOP.renderOn(blockState); + if (lit) + middle = AllBlockPartials.PORTABLE_STORAGE_INTERFACE_MIDDLE_POWERED.renderOn(blockState); + + Direction facing = blockState.get(PortableStorageInterfaceBlock.FACING); + for (MatrixStack ms : matrixStacks) + MatrixStacker.of(ms) + .centre() + .rotateY(AngleHelper.horizontalAngle(facing)) + .rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90) + .unCentre(); + + for (MatrixStack ms : matrixStacks) { + ms.translate(0, progress / 2f, 0); + ms.push(); + ms.translate(0, 6 / 16f, 0); + } + + drawCallback.accept(middle); + + for (MatrixStack ms : matrixStacks) { + ms.pop(); + ms.translate(0, progress / 2f, 0); + } + + drawCallback.accept(top); + + for (MatrixStack ms : matrixStacks) + ms.pop(); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceTileEntity.java new file mode 100644 index 000000000..9c5e3abcd --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceTileEntity.java @@ -0,0 +1,161 @@ +package com.simibubi.create.content.contraptions.components.actors; + +import java.util.List; + +import com.simibubi.create.content.contraptions.components.structureMovement.Contraption; +import com.simibubi.create.foundation.config.AllConfigs; +import com.simibubi.create.foundation.item.ItemHandlerWrapper; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.LerpedFloat; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +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.items.IItemHandlerModifiable; + +public class PortableStorageInterfaceTileEntity extends SmartTileEntity { + + protected int transferTimer; + protected float distance; + protected LazyOptional capability; + protected LerpedFloat connectionAnimation; + + public PortableStorageInterfaceTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + transferTimer = 0; + capability = LazyOptional.empty(); + connectionAnimation = LerpedFloat.linear().startWithValue(0); + } + + public void startTransferringTo(Contraption contraption, float distance) { + capability.invalidate(); + capability = LazyOptional.of(() -> new InterfaceItemHandler(contraption.inventory)); + this.distance = distance; + startConnecting(); + notifyUpdate(); + } + + @Override + public void tick() { + super.tick(); + boolean wasConnected = isConnected(); + + if (transferTimer > 0) { + transferTimer--; + if (transferTimer == 0) + capability.invalidate(); + } + + boolean isConnected = isConnected(); + if (wasConnected != isConnected && !world.isRemote) + markDirty(); + + float progress = 0; + int timeUnit = getTransferTimeout() / 2; + if (isConnected) + progress = 1; + else if (transferTimer >= timeUnit * 3) + progress = MathHelper.lerp((transferTimer - timeUnit * 3) / (float) timeUnit, 1, 0); + else if (transferTimer < timeUnit) + progress = MathHelper.lerp(transferTimer / (float) timeUnit, 0, 1); + connectionAnimation.setValue(progress); + } + + @Override + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); + transferTimer = compound.getInt("Timer"); + distance = compound.getFloat("Distance"); + } + + @Override + protected void write(CompoundNBT compound, boolean clientPacket) { + super.write(compound, clientPacket); + compound.putInt("Timer", transferTimer); + compound.putFloat("Distance", distance); + } + + @Override + @OnlyIn(Dist.CLIENT) + public AxisAlignedBB getRenderBoundingBox() { + return super.getRenderBoundingBox().grow(2); + } + + public boolean isTransferring() { + return transferTimer != 0; + } + + boolean isConnected() { + int timeUnit = getTransferTimeout() / 2; + return transferTimer >= timeUnit && transferTimer <= timeUnit * 3; + } + + float getExtensionDistance(float partialTicks) { + return connectionAnimation.getValue(partialTicks) * distance / 2; + } + + float getConnectionDistance() { + return distance; + } + + @Override + public LazyOptional getCapability(Capability cap, Direction side) { + if (isItemHandlerCap(cap)) + return capability.cast(); + return super.getCapability(cap, side); + } + + public void startConnecting() { + transferTimer = getTransferTimeout() * 2; + } + + public void onContentTransferred() { + int timeUnit = getTransferTimeout() / 2; + transferTimer = timeUnit * 3; + sendData(); + } + + protected Integer getTransferTimeout() { + return AllConfigs.SERVER.logistics.psiTimeout.get(); + } + + @Override + public void addBehaviours(List behaviours) {} + + class InterfaceItemHandler extends ItemHandlerWrapper { + + public InterfaceItemHandler(IItemHandlerModifiable wrapped) { + super(wrapped); + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (!isConnected()) + return ItemStack.EMPTY; + ItemStack extractItem = super.extractItem(slot, amount, simulate); + if (!simulate && !extractItem.isEmpty()) + onContentTransferred(); + return extractItem; + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + if (!isConnected()) + return stack; + ItemStack insertItem = super.insertItem(slot, stack, simulate); + if (!simulate && !insertItem.equals(stack, false)) + onContentTransferred(); + return insertItem; + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java index 17fb5bae5..505ebb9d0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java @@ -2,14 +2,19 @@ package com.simibubi.create.content.contraptions.components.actors; import java.util.List; +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; + import com.simibubi.create.AllShapes; +import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.MobEntity; +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; @@ -25,11 +30,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; - -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; -import mcp.MethodsReturnNonnullByDefault; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class SeatBlock extends Block { @@ -56,7 +56,7 @@ public class SeatBlock extends Block { @Override public void onLanded(IBlockReader reader, Entity entity) { BlockPos pos = entity.getBlockPos(); - if (entity instanceof PlayerEntity || !(entity instanceof LivingEntity) || isSeatOccupied(entity.world, pos)) { + if (entity instanceof PlayerEntity || !(entity instanceof LivingEntity) || !canBePickedUp(entity) || isSeatOccupied(entity.world, pos)) { Blocks.PINK_BED.onLanded(reader, entity); return; } @@ -67,7 +67,8 @@ public class SeatBlock extends Block { } @Override - public PathNodeType getAiPathNodeType(BlockState state, IBlockReader world, BlockPos pos, @Nullable MobEntity entity) { + public PathNodeType getAiPathNodeType(BlockState state, IBlockReader world, BlockPos pos, + @Nullable MobEntity entity) { return PathNodeType.RAIL; } @@ -76,7 +77,7 @@ public class SeatBlock extends Block { ISelectionContext p_220053_4_) { return AllShapes.SEAT; } - + @Override public VoxelShape getCollisionShape(BlockState p_220071_1_, IBlockReader p_220071_2_, BlockPos p_220071_3_, ISelectionContext p_220071_4_) { @@ -113,6 +114,11 @@ public class SeatBlock extends Block { .isEmpty(); } + public static boolean canBePickedUp(Entity passenger) { + return !(passenger instanceof PlayerEntity) + && (passenger instanceof LivingEntity || passenger instanceof AbstractMinecartEntity); + } + public static void sitDown(World world, BlockPos pos, Entity entity) { if (world.isRemote) return; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java index 26e8d17f3..3b8474266 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java @@ -12,8 +12,6 @@ import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; import net.minecraft.block.SlabBlock; import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; import net.minecraft.state.properties.SlabType; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -73,12 +71,10 @@ public class SeatMovementBehaviour extends MovementBehaviour { if (solid) return; - List entitiesWithinAABB = context.world.getEntitiesWithinAABB(LivingEntity.class, - new AxisAlignedBB(pos).shrink(1 / 16f), e -> !(e instanceof PlayerEntity)); - if (entitiesWithinAABB.isEmpty()) - return; - LivingEntity passenger = entitiesWithinAABB.get(0); - contraptionEntity.addSittingPassenger(passenger, index); + List nearbyEntities = context.world.getEntitiesWithinAABB(Entity.class, + new AxisAlignedBB(pos).shrink(1 / 16f), SeatBlock::canBePickedUp); + if (!nearbyEntities.isEmpty()) + contraptionEntity.addSittingPassenger(nearbyEntities.get(0), index); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockRenderer.java index b99b6d784..6e8250e35 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockRenderer.java @@ -95,7 +95,7 @@ public class CuckooClockRenderer extends KineticTileEntityRenderer { } private SuperByteBuffer transform(AllBlockPartials partial, KineticTileEntity te) { - return partial.renderOnDirectional(te.getBlockState(), te.getBlockState() + return partial.renderOnDirectionalSouth(te.getBlockState(), te.getBlockState() .get(CuckooClockBlock.HORIZONTAL_FACING) .getOpposite()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/AllValveHandles.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/AllValveHandles.java new file mode 100644 index 000000000..a6faae88f --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/AllValveHandles.java @@ -0,0 +1,36 @@ +package com.simibubi.create.content.contraptions.components.crank; + +import com.simibubi.create.AllTags; +import com.simibubi.create.foundation.config.StressConfigDefaults; +import com.simibubi.create.foundation.data.CreateRegistrate; +import com.simibubi.create.foundation.data.SharedProperties; +import com.tterrag.registrate.util.entry.BlockEntry; +import net.minecraft.item.DyeColor; + +import java.util.ArrayList; +import java.util.List; + +public class AllValveHandles { + private static final List types = new ArrayList<>(); + static { + for (DyeColor color : DyeColor.values()) + types.add(color.getName()); + types.add("copper"); + } + public static final BlockEntry[] variants = new BlockEntry[types.size()]; + + public static void register(CreateRegistrate registrate) { + for (int i = 0; i < variants.length; i++) { + String type = types.get(i); + variants[i] = registrate.block(type + "_valve_handle", properties -> new ValveHandleBlock(properties, type.equals("copper"))) + .initialProperties(SharedProperties::softMetal) + .blockstate((c, p) -> p.directionalBlock(c.get(), p.models() + .withExistingParent(type + "_valve_handle", p.modLoc("block/valve_handle")) + .texture("3", p.modLoc("block/valve_handle/valve_handle_" + type)))) + .transform(StressConfigDefaults.setCapacity(32.0)) + .tag(AllTags.AllBlockTags.BRITTLE.tag) + .simpleItem() + .register(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java index da13c072d..7df494c09 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.components.crank; +import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock; @@ -22,6 +23,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; public class HandCrankBlock extends DirectionalKineticBlock implements ITE { @@ -33,6 +36,15 @@ public class HandCrankBlock extends DirectionalKineticBlock implements ITE p_149666_2_) { + if (group != ItemGroup.SEARCH && !inCreativeTab) + return; + super.fillItemGroup(group, p_149666_2_); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { + return AllShapes.VALVE_HANDLE.get(state.get(FACING)); + } + + @Override + @OnlyIn(Dist.CLIENT) + public AllBlockPartials getRenderedHandle() { + return null; + } + + @Override + public int getRotationSpeed() { + return 16; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java index c3c72b410..62c998801 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java @@ -24,6 +24,10 @@ import com.simibubi.create.content.contraptions.components.deployer.DeployerTile import com.simibubi.create.content.curiosities.tools.SandPaperItem; import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld; +import net.minecraft.block.BeehiveBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -36,7 +40,6 @@ import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.BucketItem; -import net.minecraft.item.FlintAndSteelItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; @@ -94,7 +97,8 @@ public class DeployerHandler { static boolean shouldActivate(ItemStack held, World world, BlockPos targetPos) { if (held.getItem() instanceof BlockItem) - if (world.getBlockState(targetPos).getBlock() == ((BlockItem) held.getItem()).getBlock()) + if (world.getBlockState(targetPos) + .getBlock() == ((BlockItem) held.getItem()).getBlock()) return false; if (held.getItem() instanceof BucketItem) { @@ -154,7 +158,8 @@ public class DeployerHandler { } if (!success && stack.isFood() && entity instanceof PlayerEntity) { PlayerEntity playerEntity = (PlayerEntity) entity; - if (playerEntity.canEat(item.getFood().canEatWhenFull())) { + if (playerEntity.canEat(item.getFood() + .canEatWhenFull())) { playerEntity.onFoodEaten(world, stack); player.spawnedItemEffects = stack.copy(); success = true; @@ -253,8 +258,11 @@ public class DeployerHandler { boolean flag1 = !(player.isSneaking() && holdingSomething) || (stack.doesSneakBypassUse(world, clickedPos, player)); + if (clickedState.getBlock() instanceof BeehiveBlock) + return; // Beehives assume a lot about the usage context. Crashes to side-effects + // Use on block - if (useBlock != DENY && flag1 && clickedState.getBlock() instanceof BeehiveBlock && clickedState.onUse(world, player, hand, result) == ActionResultType.SUCCESS) + if (useBlock != DENY && flag1 && clickedState.onUse(world, player, hand, result) == ActionResultType.SUCCESS) return; if (stack.isEmpty()) return; @@ -303,7 +311,7 @@ public class DeployerHandler { private static boolean safeTryHarvestBlock(PlayerInteractionManager interactionManager, BlockPos clickedPos) { BlockState state = interactionManager.world.getBlockState(clickedPos); - if(!(state.getBlock() instanceof BeehiveBlock)) + if (!(state.getBlock() instanceof BeehiveBlock)) return interactionManager.tryHarvestBlock(clickedPos); else { harvestBeehive(interactionManager, state, clickedPos); @@ -311,19 +319,24 @@ public class DeployerHandler { return true; } - private static void harvestBeehive(PlayerInteractionManager interactionManager, BlockState state, BlockPos clickedPos) { - // Modified code from PlayerInteractionManager, Block and BeehiveBlock to handle deployers breaking beehives without crash. + private static void harvestBeehive(PlayerInteractionManager interactionManager, BlockState state, + BlockPos clickedPos) { + // Modified code from PlayerInteractionManager, Block and BeehiveBlock to handle + // deployers breaking beehives without crash. ItemStack itemstack = interactionManager.player.getHeldItemMainhand(); ItemStack itemstack1 = itemstack.copy(); boolean flag1 = state.canHarvestBlock(interactionManager.world, clickedPos, interactionManager.player); itemstack.onBlockDestroyed(interactionManager.world, state, clickedPos, interactionManager.player); if (itemstack.isEmpty() && !itemstack1.isEmpty()) - net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(interactionManager.player, itemstack1, Hand.MAIN_HAND); + net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(interactionManager.player, itemstack1, + Hand.MAIN_HAND); - boolean flag = state.removedByPlayer(interactionManager.world, clickedPos, interactionManager.player, flag1, interactionManager.world.getFluidState(clickedPos)); + boolean flag = state.removedByPlayer(interactionManager.world, clickedPos, interactionManager.player, flag1, + interactionManager.world.getFluidState(clickedPos)); if (flag) - state.getBlock().onPlayerDestroy(interactionManager.world, clickedPos, state); + state.getBlock() + .onPlayerDestroy(interactionManager.world, clickedPos, state); if (flag && flag1) { interactionManager.player.addStat(Stats.BLOCK_MINED.get(state.getBlock())); @@ -333,12 +346,13 @@ public class DeployerHandler { Block.spawnDrops(state, interactionManager.world, clickedPos, te, interactionManager.player, heldItem); if (!interactionManager.world.isRemote && te instanceof BeehiveTileEntity) { - BeehiveTileEntity beehivetileentity = (BeehiveTileEntity)te; + BeehiveTileEntity beehivetileentity = (BeehiveTileEntity) te; if (EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, heldItem) == 0) { interactionManager.world.updateComparatorOutputLevel(clickedPos, state.getBlock()); } - CriteriaTriggers.BEE_NEST_DESTROYED.test((ServerPlayerEntity)interactionManager.player, state.getBlock(), heldItem, beehivetileentity.getBeeCount()); + CriteriaTriggers.BEE_NEST_DESTROYED.test((ServerPlayerEntity) interactionManager.player, + state.getBlock(), heldItem, beehivetileentity.getBeeCount()); } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java index 1e32f3189..d4b1e9f73 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java @@ -13,6 +13,7 @@ import com.simibubi.create.content.logistics.InWorldProcessing.Type; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.VecHelper; @@ -305,7 +306,7 @@ public class AirCurrent { InWorldProcessing.spawnParticlesForProcessing(world, handler.getWorldPositionOf(transported), processingType); if (world.isRemote) - return null; + return TransportedResult.doNothing(); return InWorldProcessing.applyProcessing(transported, world, processingType); }); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanRenderer.java index 06523df54..957ec69e7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanRenderer.java @@ -34,9 +34,9 @@ public class EncasedFanRenderer extends KineticTileEntityRenderer { int lightInFront = WorldRenderer.getLightmapCoordinates(te.getWorld(), te.getPos().offset(direction)); SuperByteBuffer shaftHalf = - AllBlockPartials.SHAFT_HALF.renderOnDirectional(te.getBlockState(), direction.getOpposite()); + AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(te.getBlockState(), direction.getOpposite()); SuperByteBuffer fanInner = - AllBlockPartials.ENCASED_FAN_INNER.renderOnDirectional(te.getBlockState(), direction.getOpposite()); + AllBlockPartials.ENCASED_FAN_INNER.renderOnDirectionalSouth(te.getBlockState(), direction.getOpposite()); float time = AnimationTickHolder.getRenderTick(); float speed = te.getSpeed() * 5; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelRenderer.java index 9b25502b2..9632779d4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelRenderer.java @@ -75,7 +75,7 @@ public class FlywheelRenderer extends KineticTileEntityRenderer { @Override protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { - return AllBlockPartials.SHAFT_HALF.renderOnDirectional(te.getBlockState(), te.getBlockState() + return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(te.getBlockState(), te.getBlockState() .get(HORIZONTAL_FACING) .getOpposite()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorRenderer.java index 937e7558b..0993097d0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorRenderer.java @@ -15,7 +15,7 @@ public class CreativeMotorRenderer extends KineticTileEntityRenderer { @Override protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { - return AllBlockPartials.SHAFT_HALF.renderOnDirectional(te.getBlockState()); + return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(te.getBlockState()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java index 73f3c343f..2409faab5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java @@ -87,7 +87,7 @@ public class SawRenderer extends SafeTileEntityRenderer { protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { BlockState state = te.getBlockState(); if (state.get(FACING).getAxis().isHorizontal()) - return AllBlockPartials.SHAFT_HALF.renderOnDirectional(state.rotate(Rotation.CLOCKWISE_180)); + return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(state.rotate(Rotation.CLOCKWISE_180)); return CreateClient.bufferCache.renderBlockIn(KineticTileEntityRenderer.KINETIC_TILE, getRenderedBlockState(te)); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingRenderer.java index eb3584ff4..82c793e94 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingRenderer.java @@ -42,7 +42,7 @@ public class BearingRenderer extends KineticTileEntityRenderer { @Override protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { - return AllBlockPartials.SHAFT_HALF.renderOnDirectional(te.getBlockState(), te.getBlockState() + return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(te.getBlockState(), te.getBlockState() .get(BearingBlock.FACING) .getOpposite()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerTileEntity.java index 2638f75bf..4e98a97be 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerTileEntity.java @@ -10,9 +10,12 @@ import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.INamedIconOptions; import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollOptionBehaviour; import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.VecHelper; +import net.minecraft.state.properties.RailShape; import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.Vec3d; public class CartAssemblerTileEntity extends SmartTileEntity { private static final int assemblyCooldown = 8; @@ -24,11 +27,11 @@ public class CartAssemblerTileEntity extends SmartTileEntity { super(type); ticksSinceMinecartUpdate = assemblyCooldown; } - + @Override public void tick() { super.tick(); - if(ticksSinceMinecartUpdate < assemblyCooldown) { + if (ticksSinceMinecartUpdate < assemblyCooldown) { ticksSinceMinecartUpdate++; } } @@ -36,15 +39,36 @@ public class CartAssemblerTileEntity extends SmartTileEntity { @Override public void addBehaviours(List behaviours) { movementMode = new ScrollOptionBehaviour<>(CartMovementMode.class, - Lang.translate("contraptions.cart_movement_mode"), this, getMovementModeSlot()); + Lang.translate("contraptions.cart_movement_mode"), this, getMovementModeSlot()); movementMode.requiresWrench(); behaviours.add(movementMode); } protected ValueBoxTransform getMovementModeSlot() { - return new CenteredSideValueBoxTransform((state, d) -> d == Direction.UP); + return new CartAssemblerValueBoxTransform(); } + private class CartAssemblerValueBoxTransform extends CenteredSideValueBoxTransform { + + public CartAssemblerValueBoxTransform() { + super((state, d) -> { + if (d.getAxis() + .isVertical()) + return false; + if (!state.has(CartAssemblerBlock.RAIL_SHAPE)) + return false; + RailShape railShape = state.get(CartAssemblerBlock.RAIL_SHAPE); + return (d.getAxis() == Axis.X) == (railShape == RailShape.NORTH_SOUTH); + }); + } + + @Override + protected Vec3d getSouthLocation() { + return VecHelper.voxelSpace(8, 8, 18); + } + + } + public static enum CartMovementMode implements INamedIconOptions { ROTATE(AllIcons.I_CART_ROTATE), @@ -71,11 +95,11 @@ public class CartAssemblerTileEntity extends SmartTileEntity { return translationKey; } } - + public void resetTicksSinceMinecartUpdate() { ticksSinceMinecartUpdate = 0; } - + public boolean isMinecartUpdateValid() { return ticksSinceMinecartUpdate >= assemblyCooldown; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java index bc1de8681..6365ac1ae 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java @@ -26,6 +26,11 @@ public class PulleyRenderer extends KineticTileEntityRenderer { public PulleyRenderer(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, @@ -77,7 +82,7 @@ public class PulleyRenderer extends KineticTileEntityRenderer { @Override protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { BlockState blockState = te.getBlockState(); - return AllBlockPartials.ROPE_COIL.renderOnDirectional(blockState, horizontalFacing(blockState)); + return AllBlockPartials.ROPE_COIL.renderOnDirectionalSouth(blockState, horizontalFacing(blockState)); } public Direction horizontalFacing(BlockState blockState) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java index 18fa2cf35..55ec5624b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java @@ -40,7 +40,7 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { public double getMaxRenderDistanceSquared() { return super.getMaxRenderDistanceSquared() + offset * offset; } - + @Override protected void assemble() { if (!(world.getBlockState(pos) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartTrain.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartTrain.java index ce1f96cbe..f5e75eec1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartTrain.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartTrain.java @@ -2,9 +2,11 @@ package com.simibubi.create.content.contraptions.components.structureMovement.tr import java.util.ArrayList; import java.util.Collections; +import java.util.List; import java.util.UUID; import com.simibubi.create.CreateClient; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; @@ -55,6 +57,8 @@ public class MinecartTrain { // SOFT collision - modify motion of carts with stressed links @t+1 double sharedMotion = 0; int participants = 0; + boolean stall = false; + for (int i = 0; i < couplings.size(); i++) { MinecartCoupling minecartCoupling = couplings.get(i); boolean last = i + 1 == couplings.size(); @@ -64,6 +68,14 @@ public class MinecartTrain { sharedMotion += minecartCoupling.mainCart.get() .getMotion() .length(); + + List passengers = minecartCoupling.mainCart.get().getPassengers(); + if (!passengers.isEmpty() && passengers.get(0) instanceof ContraptionEntity) + if (((ContraptionEntity) passengers.get(0)).isStalled()) { + stall = true; + break; + } + if (last) { participants++; @@ -137,6 +149,12 @@ public class MinecartTrain { MinecartCoupling minecartCoupling = couplings.get(i); if (!minecartCoupling.areBothEndsPresent()) continue; + + if (stall) { + minecartCoupling.asCouple().forEach(ame -> ame.setMotion(Vec3d.ZERO)); + continue; + } + double stress = getStressOfCoupling(minecartCoupling); if (stress > maxStress) { maxStress = stress; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetwork.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetwork.java index 0e9492909..9fcdb4b3e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetwork.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetwork.java @@ -10,6 +10,7 @@ import java.util.Map; import java.util.Set; import com.google.common.collect.ImmutableList; +import com.simibubi.create.content.contraptions.KineticDebugger; import com.simibubi.create.foundation.utility.BlockFace; import com.simibubi.create.foundation.utility.Pair; @@ -218,6 +219,9 @@ public class FluidNetwork { continue; for (Direction face : FluidPropagator.getPipeConnections(currentState, pipe)) { + if (!pipe.canTransferToward(FluidStack.EMPTY, world.getBlockState(currentPos), face, false)) + continue; + BlockFace blockFace = new BlockFace(currentPos, face); BlockPos connectedPos = blockFace.getConnectedPos(); @@ -229,7 +233,8 @@ public class FluidNetwork { continue; if (collectEndpoint(world, blockFace, openEnds, distance)) continue; - if (FluidPropagator.getPipe(world, connectedPos) == null) + FluidPipeBehaviour pipeBehaviour = FluidPropagator.getPipe(world, connectedPos); + if (pipeBehaviour == null) continue; if (visited.contains(connectedPos)) continue; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java index 9c861bb2e..7e630a56f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java @@ -218,6 +218,8 @@ class FluidNetworkFlow { if (entry.getValue() != pulling) continue; Direction face = entry.getKey(); + if (!pipe.canTransferToward(fluidStack, state, face, false)) + continue; BlockFace addedBlockFace = new BlockFace(currentPos.offset(face), face.getOpposite()); if (skipping && !canSkip(previousFlow, addedBlockFace)) { allFlowsComplete = false; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java index 1f0281fc9..59826a7b5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java @@ -15,6 +15,7 @@ import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.utility.BlockFace; +import com.simibubi.create.foundation.utility.Debug; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.outliner.Outline.OutlineParams; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java index 6b0deac58..f50320aa0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java @@ -45,14 +45,14 @@ public class PumpRenderer extends KineticTileEntityRenderer { .rotateY(yRot) .rotateZ(angle) .translateBack(rotationOffset); - arrow.renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + arrow.light(light).renderInto(ms, buffer.getBuffer(RenderType.getSolid())); ms.pop(); } } @Override protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { - return AllBlockPartials.MECHANICAL_PUMP_COG.renderOnDirectional(te.getBlockState()); + return AllBlockPartials.MECHANICAL_PUMP_COG.renderOnDirectionalSouth(te.getBlockState()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java index a97ee37b3..5b15356fd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java @@ -3,9 +3,9 @@ package com.simibubi.create.content.contraptions.fluids.actors; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.foundation.fluid.FluidRenderer; +import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour.TankSegment; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; -import com.simibubi.create.foundation.utility.LerpedFloat; -import com.simibubi.create.foundation.utility.Pair; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.RenderType; @@ -27,9 +27,13 @@ public class SpoutRenderer extends SafeTileEntityRenderer { protected void renderSafe(SpoutTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - Pair fluid = te.getFluid(); - FluidStack fluidStack = fluid.getFirst(); - float level = fluid.getSecond() + SmartFluidTankBehaviour tank = te.tank; + if (tank == null) + return; + + TankSegment primaryTank = tank.getPrimaryTank(); + FluidStack fluidStack = primaryTank.getRenderedFluid(); + float level = primaryTank.getFluidLevel() .getValue(partialTicks); if (!fluidStack.isEmpty() && level != 0) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java index adf17c240..5838579a5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java @@ -7,16 +7,13 @@ import java.util.ArrayList; import java.util.List; import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; -import com.simibubi.create.foundation.fluid.SmartFluidTank; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult; import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; -import com.simibubi.create.foundation.utility.LerpedFloat; -import com.simibubi.create.foundation.utility.LerpedFloat.Chaser; -import com.simibubi.create.foundation.utility.Pair; +import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -33,58 +30,22 @@ import net.minecraftforge.common.capabilities.Capability; 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.templates.FluidTank; - -// FIXME: Quite similar to FluidTankTileEntity, create a behaviour public class SpoutTileEntity extends SmartTileEntity { - protected FluidTank tank; - protected LazyOptional capability; - protected LerpedFloat fluidLevel; - protected FluidStack renderedFluid; - public static final int FILLING_TIME = 20; - protected int processingTicks; - - private static final int SYNC_RATE = 8; - protected int syncCooldown; - protected boolean queuedSync; - - protected boolean sendSplash; + protected BeltProcessingBehaviour beltProcessing; + protected int processingTicks; + protected boolean sendSplash; + + SmartFluidTankBehaviour tank; public SpoutTileEntity(TileEntityType tileEntityTypeIn) { super(tileEntityTypeIn); - tank = new SmartFluidTank(1000, this::onFluidStackChanged); - capability = LazyOptional.of(() -> tank); - fluidLevel = LerpedFloat.linear() - .startWithValue(0) - .chase(0, .25, Chaser.EXP); - renderedFluid = FluidStack.EMPTY; processingTicks = -1; } - protected void onFluidStackChanged(FluidStack newFluidStack) { - if (!hasWorld()) - return; - fluidLevel.chase(tank.getFluidAmount() / (float) tank.getCapacity(), .25, Chaser.EXP); - if (!world.isRemote) { - markDirty(); - sendData(); - } - } - - @Override - public void initialize() { - super.initialize(); - if (!world.isRemote) { - fluidLevel.forceNextSync(); - onFluidStackChanged(tank.getFluid()); - } - } - @Override public AxisAlignedBB getRenderBoundingBox() { return super.getRenderBoundingBox().expand(0, -2, 0); @@ -92,9 +53,13 @@ public class SpoutTileEntity extends SmartTileEntity { @Override public void addBehaviours(List behaviours) { + tank = SmartFluidTankBehaviour.single(this, 1000); + behaviours.add(tank); + beltProcessing = new BeltProcessingBehaviour(this).whenItemEnters(this::onItemReceived) .whileItemHeld(this::whenItemHeld); behaviours.add(beltProcessing); + } protected ProcessingResult onItemReceived(TransportedItemStack transported, @@ -103,7 +68,7 @@ public class SpoutTileEntity extends SmartTileEntity { return PASS; if (tank.isEmpty()) return HOLD; - if (FillingBySpout.getRequiredAmountForItem(world, transported.stack, tank.getFluid()) == -1) + if (FillingBySpout.getRequiredAmountForItem(world, transported.stack, getCurrentFluidInTank()) == -1) return PASS; return HOLD; } @@ -116,7 +81,7 @@ public class SpoutTileEntity extends SmartTileEntity { return PASS; if (tank.isEmpty()) return HOLD; - FluidStack fluid = tank.getFluid(); + FluidStack fluid = getCurrentFluidInTank(); int requiredAmountForItem = FillingBySpout.getRequiredAmountForItem(world, transported.stack, fluid.copy()); if (requiredAmountForItem == -1) return PASS; @@ -125,8 +90,7 @@ public class SpoutTileEntity extends SmartTileEntity { if (processingTicks == -1) { processingTicks = FILLING_TIME; - markDirty(); - sendData(); + notifyUpdate(); return HOLD; } @@ -143,24 +107,20 @@ public class SpoutTileEntity extends SmartTileEntity { handler.handleProcessingOnItem(transported, TransportedResult.convertToAndLeaveHeld(outList, held)); } - tank.setFluid(fluid); + tank.getPrimaryHandler().setFluid(fluid); sendSplash = true; - markDirty(); - sendData(); + notifyUpdate(); return PASS; } - @Override - public void remove() { - capability.invalidate(); - super.remove(); + private FluidStack getCurrentFluidInTank() { + return tank.getPrimaryHandler().getFluid(); } @Override protected void write(CompoundNBT compound, boolean clientPacket) { super.write(compound, clientPacket); - compound.put("TankContent", tank.writeToNBT(new CompoundNBT())); - compound.put("Level", fluidLevel.writeNBT()); + compound.putInt("ProcessingTicks", processingTicks); if (sendSplash && clientPacket) { compound.putBoolean("Splash", true); @@ -171,61 +131,27 @@ public class SpoutTileEntity extends SmartTileEntity { @Override protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { super.fromTag(state, compound, clientPacket); - tank.readFromNBT(compound.getCompound("TankContent")); - fluidLevel.readNBT(compound.getCompound("Level"), clientPacket); processingTicks = compound.getInt("ProcessingTicks"); - if (!tank.getFluid() - .isEmpty()) - renderedFluid = tank.getFluid(); - if (!clientPacket) return; if (compound.contains("Splash")) - spawnSplash(renderedFluid); + spawnSplash(tank.getPrimaryTank().getRenderedFluid()); } @Override public LazyOptional getCapability(Capability cap, Direction side) { if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY && side != Direction.DOWN) - return capability.cast(); + return tank.getCapability().cast(); return super.getCapability(cap, side); } - public Pair getFluid() { - return Pair.of(renderedFluid, fluidLevel); - } - - public void sendDataImmediately() { - syncCooldown = 0; - queuedSync = false; - sendData(); - } - - @Override + public void tick() { super.tick(); if (processingTicks >= 0) processingTicks--; if (processingTicks >= 8 && world.isRemote) - spawnProcessingParticles(renderedFluid); - if (syncCooldown > 0) { - syncCooldown--; - if (syncCooldown == 0 && queuedSync) - sendData(); - } - if (fluidLevel != null) - fluidLevel.tickChaser(); - } - - @Override - public void sendData() { - if (syncCooldown > 0) { - queuedSync = true; - return; - } - super.sendData(); - queuedSync = false; - syncCooldown = SYNC_RATE; + spawnProcessingParticles(tank.getPrimaryTank().getRenderedFluid()); } protected void spawnProcessingParticles(FluidStack fluid) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveBlock.java new file mode 100644 index 000000000..c56476060 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveBlock.java @@ -0,0 +1,73 @@ +package com.simibubi.create.content.contraptions.fluids.pipes; + +import com.simibubi.create.AllShapes; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock; +import com.simibubi.create.foundation.utility.Iterate; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer.Builder; +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; + +public class FluidValveBlock extends DirectionalAxisKineticBlock { + + public static final BooleanProperty ENABLED = BooleanProperty.create("enabled"); + + public FluidValveBlock(Properties properties) { + super(properties); + setDefaultState(getDefaultState().with(ENABLED, false)); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, + ISelectionContext p_220053_4_) { + return AllShapes.FLUID_VALVE.get(getPipeAxis(state)); + } + + @Override + protected void fillStateContainer(Builder builder) { + super.fillStateContainer(builder.add(ENABLED)); + } + + @Override + protected boolean prefersConnectionTo(IWorldReader reader, BlockPos pos, Direction facing, boolean shaftAxis) { + if (!shaftAxis) { + BlockPos offset = pos.offset(facing); + BlockState blockState = reader.getBlockState(offset); + return FluidPipeBlock.canConnectTo(reader, offset, blockState, facing); + } + return super.prefersConnectionTo(reader, pos, facing, shaftAxis); + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.FLUID_VALVE.create(); + } + + public static Axis getPipeAxis(BlockState state) { + if (!(state.getBlock() instanceof FluidValveBlock)) + return null; + Direction facing = state.get(FACING); + boolean alongFirst = !state.get(AXIS_ALONG_FIRST_COORDINATE); + for (Axis axis : Iterate.axes) { + if (axis == facing.getAxis()) + continue; + if (!alongFirst) { + alongFirst = true; + continue; + } + return axis; + } + return null; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveRenderer.java new file mode 100644 index 000000000..c50f78bb4 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveRenderer.java @@ -0,0 +1,60 @@ +package com.simibubi.create.content.contraptions.fluids.pipes; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; +import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.MatrixStacker; +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; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.MathHelper; + +public class FluidValveRenderer extends KineticTileEntityRenderer { + + public FluidValveRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + @Override + protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, + int light, int overlay) { + super.renderSafe(te, partialTicks, ms, buffer, light, overlay); + BlockState blockState = te.getBlockState(); + SuperByteBuffer pointer = AllBlockPartials.FLUID_VALVE_POINTER.renderOn(blockState); + Direction facing = blockState.get(FluidValveBlock.FACING); + + if (!(te instanceof FluidValveTileEntity)) + return; + FluidValveTileEntity valve = (FluidValveTileEntity) te; + float pointerRotation = MathHelper.lerp(valve.pointer.getValue(partialTicks), 0, -90); + Axis pipeAxis = FluidValveBlock.getPipeAxis(blockState); + Axis shaftAxis = KineticTileEntityRenderer.getRotationAxisOf(te); + + int pointerRotationOffset = 0; + if (pipeAxis.isHorizontal() && shaftAxis == Axis.Z || pipeAxis.isVertical()) + pointerRotationOffset = 90; + + MatrixStacker.of(ms) + .centre() + .rotateY(AngleHelper.horizontalAngle(facing)) + .rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90) + .rotateY(pointerRotationOffset + pointerRotation) + .unCentre(); + + pointer.light(light) + .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + } + + @Override + protected BlockState getRenderedBlockState(KineticTileEntity te) { + return KineticTileEntityRenderer.shaft(KineticTileEntityRenderer.getRotationAxisOf(te)); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveTileEntity.java new file mode 100644 index 000000000..b3d3efc27 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveTileEntity.java @@ -0,0 +1,128 @@ +package com.simibubi.create.content.contraptions.fluids.pipes; + +import java.util.List; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour; +import com.simibubi.create.content.contraptions.fluids.FluidPipeBehaviour; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.LerpedFloat; +import com.simibubi.create.foundation.utility.LerpedFloat.Chaser; + +import net.minecraft.block.BlockState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.AxisDirection; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.ILightReader; +import net.minecraftforge.fluids.FluidStack; + +public class FluidValveTileEntity extends KineticTileEntity { + + LerpedFloat pointer; + + public FluidValveTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + pointer = LerpedFloat.linear() + .startWithValue(0).chase(0, 0, Chaser.LINEAR); + } + + @Override + public void onSpeedChanged(float previousSpeed) { + super.onSpeedChanged(previousSpeed); + float speed = getSpeed(); + pointer.chase(speed > 0 ? 1 : 0, getChaseSpeed(), Chaser.LINEAR); + sendData(); + } + + @Override + public void tick() { + super.tick(); + pointer.tickChaser(); + + if (world.isRemote) + return; + + BlockState blockState = getBlockState(); + if (!(blockState.getBlock() instanceof FluidValveBlock)) + return; + boolean stateOpen = blockState.get(FluidValveBlock.ENABLED); + + if (stateOpen && pointer.getValue() == 0) { + switchToBlockState(world, pos, blockState.with(FluidValveBlock.ENABLED, false)); + return; + } + if (!stateOpen && pointer.getValue() == 1) { + switchToBlockState(world, pos, blockState.with(FluidValveBlock.ENABLED, true)); + return; + } + } + + private float getChaseSpeed() { + return MathHelper.clamp(Math.abs(getSpeed()) / 16 / 20, 0, 1); + } + + @Override + protected void write(CompoundNBT compound, boolean clientPacket) { + super.write(compound, clientPacket); + compound.put("Pointer", pointer.writeNBT()); + } + + @Override + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); + pointer.readNBT(compound.getCompound("Pointer"), clientPacket); + } + + @Override + public void addBehaviours(List behaviours) { + behaviours.add(new ValvePipeBehaviour(this)); + behaviours.add(new ValvePipeAttachmentBehaviour(this)); + } + + class ValvePipeBehaviour extends FluidPipeBehaviour { + + public ValvePipeBehaviour(SmartTileEntity te) { + super(te); + } + + @Override + public boolean isConnectedTo(BlockState state, Direction direction) { + return FluidValveBlock.getPipeAxis(state) == direction.getAxis(); + } + + @Override + public boolean canTransferToward(FluidStack fluid, BlockState state, Direction direction, boolean inbound) { + if (state.has(FluidValveBlock.ENABLED) && state.get(FluidValveBlock.ENABLED)) + return super.canTransferToward(fluid, state, direction, inbound); + return false; + } + + } + + class ValvePipeAttachmentBehaviour extends FluidPipeAttachmentBehaviour { + + public ValvePipeAttachmentBehaviour(SmartTileEntity te) { + super(te); + } + + @Override + public AttachmentTypes getAttachment(ILightReader world, BlockPos pos, BlockState state, Direction direction) { + AttachmentTypes attachment = super.getAttachment(world, pos, state, direction); + + BlockState facingState = world.getBlockState(pos.offset(direction)); + if (AllBlocks.FLUID_VALVE.has(facingState) + && FluidValveBlock.getPipeAxis(facingState) == FluidValveBlock.getPipeAxis(state) + && direction.getAxisDirection() == AxisDirection.NEGATIVE) + return AttachmentTypes.NONE; + + return attachment; + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java index 83f3bae69..33d1dad10 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java @@ -36,19 +36,18 @@ public class GlassFluidPipeBlock extends AxisPipeBlock { public TileEntity createTileEntity(BlockState state, IBlockReader world) { return AllTileEntities.GLASS_FLUID_PIPE.create(); } - + @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { BlockState newState = state; World world = context.getWorld(); BlockPos pos = context.getPos(); - if (!state.get(ALT)) - newState = state.with(ALT, true); - else - newState = toRegularPipe(world, pos, state); +// if (!state.get(ALT)) +// newState = state.with(ALT, true); +// else + newState = toRegularPipe(world, pos, state); world.setBlockState(pos, newState, 3); return ActionResultType.SUCCESS; } - } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java index b95dc387d..8d53cd8b6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java @@ -56,6 +56,10 @@ public class StraightPipeTileEntity extends SmartTileEntity { return AttachmentTypes.NONE; } } + if (otherState.getBlock() instanceof FluidValveBlock + && FluidValveBlock.getPipeAxis(otherState) == direction.getAxis()) + return AttachmentTypes.NONE; + return attachment; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java index d952c4693..d54609102 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java @@ -100,6 +100,9 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE tankCapability = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, ray.getFace()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java new file mode 100644 index 000000000..39b6f3d3b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java @@ -0,0 +1,55 @@ +package com.simibubi.create.content.contraptions.processing; + +import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; +import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import com.simibubi.create.foundation.utility.VecHelper; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Direction; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.items.ItemStackHandler; + +import java.util.HashMap; +import java.util.Map; + +public class BasinMovementBehaviour extends MovementBehaviour { + public Map getOrReadInventory(MovementContext context) { + Map map = new HashMap<>(); + map.put("InputItems", new ItemStackHandler(9)); + map.put("OutputItems", new ItemStackHandler(8)); + map.forEach((s, h) -> h.deserializeNBT(context.tileData.getCompound(s))); + return map; + } + + @Override + public boolean hasSpecialMovementRenderer() { + return false; + } + + @Override + public void tick(MovementContext context) { + super.tick(context); + if (context.temporaryData == null || (boolean) context.temporaryData) { + Vec3d facingVec = VecHelper.rotate(new Vec3d(Direction.UP.getDirectionVec()), context.rotation.x, context.rotation.y, context.rotation.z); + facingVec.normalize(); + if (Direction.getFacingFromVector(facingVec.x, facingVec.y, facingVec.z) == Direction.DOWN) + dump(context, facingVec); + } + } + + private void dump(MovementContext context, Vec3d facingVec) { + getOrReadInventory(context).forEach((key, itemStackHandler) -> { + for (int i = 0; i < itemStackHandler.getSlots(); i++) { + if (itemStackHandler.getStackInSlot(i).isEmpty()) + continue; + ItemEntity itemEntity = new ItemEntity(context.world, context.position.x, context.position.y, context.position.z, itemStackHandler.getStackInSlot(i)); + itemEntity.setMotion(facingVec.scale(.05)); + context.world.addEntity(itemEntity); + itemStackHandler.setStackInSlot(i, ItemStack.EMPTY); + } + context.tileData.put(key, itemStackHandler.serializeNBT()); + }); + context.contraption.customRenderTEs.stream().filter(te -> te.getPos().equals(context.localPos) && te instanceof BasinTileEntity).forEach(te -> ((BasinTileEntity) te).readOnlyItems(context.tileData)); + context.temporaryData = false; // did already dump, so can't any more + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java index 610af7156..1e0482853 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java @@ -3,6 +3,9 @@ package com.simibubi.create.content.contraptions.processing; import java.util.Random; import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.foundation.fluid.FluidRenderer; +import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour.TankSegment; import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; import com.simibubi.create.foundation.utility.VecHelper; @@ -14,6 +17,8 @@ import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemStackHandler; @@ -28,6 +33,8 @@ public class BasinRenderer extends SmartTileEntityRenderer { int light, int overlay) { super.renderSafe(basin, partialTicks, ms, buffer, light, overlay); + float fluidSurface = renderFluids(basin, partialTicks, ms, buffer, light, overlay); + ms.push(); BlockPos pos = basin.getPos(); ms.translate(.5, .2f, .5); @@ -57,4 +64,58 @@ public class BasinRenderer extends SmartTileEntityRenderer { } + protected float renderFluids(BasinTileEntity basin, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, + int light, int overlay) { + SmartFluidTankBehaviour inputFluids = basin.getBehaviour(SmartFluidTankBehaviour.INPUT); + SmartFluidTankBehaviour outputFluids = basin.getBehaviour(SmartFluidTankBehaviour.OUTPUT); + SmartFluidTankBehaviour[] tanks = { inputFluids, outputFluids }; + int renderedFluids = 0; + float totalUnits = 0; + + for (SmartFluidTankBehaviour behaviour : tanks) { + if (behaviour == null) + continue; + for (TankSegment tankSegment : behaviour.getTanks()) { + if (tankSegment.getRenderedFluid() + .isEmpty()) + continue; + totalUnits += tankSegment.getTotalUnits(partialTicks); + renderedFluids++; + } + } + + if (renderedFluids == 0) + return 0; + if (totalUnits == 0) + return 0; + + float fluidLevel = MathHelper.clamp(totalUnits / 2000, 0, 1); + + float xMin = 2 / 16f; + float xMax = 2 / 16f; + final float yMin = 2 / 16f; + final float yMax = yMin + 12 / 16f * fluidLevel; + final float zMin = 2 / 16f; + final float zMax = 14 / 16f; + + for (SmartFluidTankBehaviour behaviour : tanks) { + if (behaviour == null) + continue; + for (TankSegment tankSegment : behaviour.getTanks()) { + FluidStack renderedFluid = tankSegment.getRenderedFluid(); + if (renderedFluid.isEmpty()) + continue; + + float partial = tankSegment.getTotalUnits(partialTicks) / totalUnits; + xMax += partial * 12 / 16f; + FluidRenderer.renderTiledFluidBB(renderedFluid, xMin, yMin, zMin, xMax, yMax, zMax, buffer, ms, light, + false); + + xMin = xMax; + } + } + + return fluidLevel; + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java index 838afd50f..6da0b979b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java @@ -5,18 +5,18 @@ import java.util.Optional; import javax.annotation.Nonnull; -import com.simibubi.create.content.contraptions.fluids.CombinedFluidHandler; +import com.simibubi.create.foundation.fluid.CombinedTankWrapper; import com.simibubi.create.foundation.item.SmartInventory; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.ListNBT; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; @@ -27,6 +27,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.wrapper.CombinedInvWrapper; @@ -34,20 +35,25 @@ import net.minecraftforge.items.wrapper.CombinedInvWrapper; public class BasinTileEntity extends SmartTileEntity implements ITickableTileEntity { public BasinInputInventory inputInventory; + public SmartFluidTankBehaviour inputTank; + protected SmartInventory outputInventory; + protected SmartFluidTankBehaviour outputTank; + protected LazyOptional itemCapability; - protected LazyOptional fluidCapability; - - private boolean contentsChanged; + protected LazyOptional fluidCapability; + private FilteringBehaviour filtering; + private boolean contentsChanged; public BasinTileEntity(TileEntityType type) { super(type); inputInventory = new BasinInputInventory(9, this); - inputInventory.withMaxStackSize(8).forbidExtraction(); + inputInventory.withMaxStackSize(8) + .forbidExtraction(); outputInventory = new SmartInventory(9, this).forbidInsertion(); itemCapability = LazyOptional.of(() -> new CombinedInvWrapper(inputInventory, outputInventory)); - fluidCapability = LazyOptional.of(() -> new CombinedFluidHandler(9, 1000)); + contentsChanged = true; } @@ -58,6 +64,16 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt .withCallback(newFilter -> contentsChanged = true) .forRecipes(); behaviours.add(filtering); + + inputTank = new SmartFluidTankBehaviour(SmartFluidTankBehaviour.INPUT, this, 2, 1000, true).forbidExtraction(); + outputTank = new SmartFluidTankBehaviour(SmartFluidTankBehaviour.OUTPUT, this, 2, 1000, true).forbidInsertion(); + behaviours.add(inputTank); + behaviours.add(outputTank); + fluidCapability = LazyOptional.of(() -> { + LazyOptional inputCap = inputTank.getCapability(); + LazyOptional outputCap = outputTank.getCapability(); + return new CombinedTankWrapper(inputCap.orElse(null), outputCap.orElse(null)); + }); } @Override @@ -65,9 +81,6 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt super.fromTag(state, compound, clientPacket); inputInventory.deserializeNBT(compound.getCompound("InputItems")); outputInventory.deserializeNBT(compound.getCompound("OutputItems")); - if (compound.contains("fluids")) - fluidCapability - .ifPresent(combinedFluidHandler -> combinedFluidHandler.readFromNBT(compound.getList("fluids", 10))); } @Override @@ -75,10 +88,6 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt super.write(compound, clientPacket); compound.put("InputItems", inputInventory.serializeNBT()); compound.put("OutputItems", outputInventory.serializeNBT()); - fluidCapability.ifPresent(combinedFuidHandler -> { - ListNBT nbt = combinedFuidHandler.getListNBT(); - compound.put("fluids", nbt); - }); } public void onEmptied() { @@ -105,6 +114,7 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt @Override public void tick() { + super.tick(); if (!contentsChanged) return; contentsChanged = false; @@ -123,15 +133,15 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt public FilteringBehaviour getFilter() { return filtering; } - + public void notifyChangeOfContents() { contentsChanged = true; } - + public SmartInventory getInputInventory() { return inputInventory; } - + public SmartInventory getOutputInventory() { return outputInventory; } @@ -157,4 +167,8 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt } + public void readOnlyItems(CompoundNBT compound) { + inputInventory.deserializeNBT(compound.getCompound("InputItems")); + outputInventory.deserializeNBT(compound.getCompound("OutputItems")); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftBlock.java index 8f6fc42a3..3341651f4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftBlock.java @@ -141,5 +141,15 @@ public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implemen public Class getTileEntityClass() { return SequencedGearshiftTileEntity.class; } + + @Override + public boolean hasComparatorInputOverride(BlockState p_149740_1_) { + return true; + } + + @Override + public int getComparatorInputOverride(BlockState state, World world, BlockPos pos) { + return state.get(STATE).intValue(); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java index 1bbef6837..8c0e03ae2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java @@ -4,11 +4,15 @@ import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.gui.AbstractSimiScreen; import com.simibubi.create.foundation.gui.AllGuiTextures; +import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.gui.GuiGameElement; +import com.simibubi.create.foundation.gui.widgets.IconButton; import com.simibubi.create.foundation.gui.widgets.ScrollInput; import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.utility.Lang; + +import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; import net.minecraft.nbt.ListNBT; import net.minecraft.util.math.BlockPos; @@ -20,6 +24,7 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { private final ItemStack renderedItem = AllBlocks.SEQUENCED_GEARSHIFT.asStack(); private final AllGuiTextures background = AllGuiTextures.SEQUENCER; + private IconButton confirmButton; private final ITextComponent title = Lang.translate("gui.sequenced_gearshift.title"); private ListNBT compareTag; @@ -49,9 +54,9 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { } public void initInputsOfRow(int row) { - int x = guiLeft + 28; - int y = guiTop + 29; - int rowHeight = 18; + int x = guiLeft + 30; + int y = guiTop + 18; + int rowHeight = 22; Vector rowInputs = inputs.get(row); rowInputs.forEach(widgets::remove); @@ -60,16 +65,16 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { Instruction instruction = instructions.get(row); ScrollInput type = - new SelectionScrollInput(x, y + rowHeight * row, 50, 14).forOptions(SequencerInstructions.getOptions()) - .calling(state -> instructionUpdated(index, state)) - .setState(instruction.instruction.ordinal()) - .titled(Lang.translate("gui.sequenced_gearshift.instruction")); + new SelectionScrollInput(x, y + rowHeight * row, 50, 18).forOptions(SequencerInstructions.getOptions()) + .calling(state -> instructionUpdated(index, state)) + .setState(instruction.instruction.ordinal()) + .titled(Lang.translate("gui.sequenced_gearshift.instruction")); ScrollInput value = - new ScrollInput(x + 54, y + rowHeight * row, 30, 14).calling(state -> instruction.value = state); - ScrollInput direction = new SelectionScrollInput(x + 88, y + rowHeight * row, 18, 14) - .forOptions(InstructionSpeedModifiers.getOptions()) - .calling(state -> instruction.speedModifier = InstructionSpeedModifiers.values()[state]) - .titled(Lang.translate("gui.sequenced_gearshift.speed")); + new ScrollInput(x + 58, y + rowHeight * row, 28, 18).calling(state -> instruction.value = state); + ScrollInput direction = new SelectionScrollInput(x + 88, y + rowHeight * row, 28, 18) + .forOptions(InstructionSpeedModifiers.getOptions()) + .calling(state -> instruction.speedModifier = InstructionSpeedModifiers.values()[state]) + .titled(Lang.translate("gui.sequenced_gearshift.speed")); rowInputs.add(type); rowInputs.add(value); @@ -77,6 +82,10 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { widgets.addAll(rowInputs); updateParamsOfRow(row); + + confirmButton = + new IconButton(guiLeft + background.width - 33, guiTop + background.height - 24, AllIcons.I_CONFIRM); + widgets.add(confirmButton); } public void updateParamsOfRow(int row) { @@ -90,10 +99,10 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { value.active = value.visible = hasValue; if (hasValue) value.withRange(1, def.maxValue + 1) - .titled(Lang.translate(def.parameterKey)) - .withShiftStep(def.shiftStep) - .setState(instruction.value) - .onChanged(); + .titled(Lang.translate(def.parameterKey)) + .withShiftStep(def.shiftStep) + .setState(instruction.value) + .onChanged(); if (def == SequencerInstructions.WAIT) { value.withStepFunction(context -> { int v = context.currentValue; @@ -120,34 +129,32 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { for (int row = 0; row < instructions.capacity(); row++) { AllGuiTextures toDraw = AllGuiTextures.SEQUENCER_EMPTY; int yOffset = toDraw.height * row; - - if (row < instructions.size()) { - Instruction instruction = instructions.get(row); - SequencerInstructions def = instruction.instruction; - def.background.draw(matrixStack, guiLeft + 14, guiTop + 29 + yOffset); - - label(matrixStack, 32, 6 + yOffset, Lang.translate(def.translationKey)); - if (def.hasValueParameter) { - ITextComponent text = ITextComponent.of(def.formatValue(instruction.value)); - int stringWidth = textRenderer.getWidth(text); - label(matrixStack, 85 + (12 - stringWidth / 2), 6 + yOffset, text); - } - if (def.hasSpeedParameter) - label(matrixStack, 120, 6 + yOffset, instruction.speedModifier.label); - + if (row >= instructions.size()) { + toDraw.draw(matrixStack, guiLeft, guiTop + 14 + yOffset); continue; } - toDraw.draw(matrixStack, guiLeft + 14, guiTop + 29 + yOffset); + Instruction instruction = instructions.get(row); + SequencerInstructions def = instruction.instruction; + def.background.draw(matrixStack, guiLeft, guiTop + 14 + yOffset); + + label(matrixStack, 36, yOffset - 3, Lang.translate(def.translationKey)); + if (def.hasValueParameter) { + String text = def.formatValue(instruction.value); + int stringWidth = textRenderer.getStringWidth(text); + label(matrixStack, 90 + (12 - stringWidth / 2), yOffset - 3, ITextComponent.of(text)); + } + if (def.hasSpeedParameter) + label(matrixStack, 127, yOffset - 3, instruction.speedModifier.label); } textRenderer.drawWithShadow(matrixStack, title, guiLeft - 3 + (background.width - textRenderer.getWidth(title)) / 2, guiTop + 10, - hFontColor); + hFontColor); GuiGameElement.of(renderedItem) - .at(guiLeft + background.width + 20, guiTop + 50) - .scale(5) - .render(matrixStack); + .at(guiLeft + background.width + 20, guiTop + 50) + .scale(5) + .render(matrixStack); } private void label(MatrixStack matrixStack, int x, int y, ITextComponent text) { @@ -186,4 +193,14 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { } } + @Override + public boolean mouseClicked(double x, double y, int button) { + if (confirmButton.isHovered()) { + Minecraft.getInstance().player.closeScreen(); + return true; + } + + return super.mouseClicked(x, y, button); + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencerInstructions.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencerInstructions.java index 5986b7d89..61708774d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencerInstructions.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencerInstructions.java @@ -10,7 +10,7 @@ import net.minecraft.util.text.ITextComponent; public enum SequencerInstructions { TURN_ANGLE("angle", AllGuiTextures.SEQUENCER_INSTRUCTION, true, true, 360, 45, 90), - TURN_DISTANCE("distance", AllGuiTextures.SEQUENCER_INSTRUCTION, true, true, 50, 5, 5), + TURN_DISTANCE("distance", AllGuiTextures.SEQUENCER_INSTRUCTION, true, true, 128, 5, 5), WAIT("duration", AllGuiTextures.SEQUENCER_WAIT, true, false, 600, 20, 10), END("", AllGuiTextures.SEQUENCER_END), diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index fedbb8ed9..e6349013d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -160,7 +160,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE { public BeltRenderer(TileEntityRendererDispatcher dispatcher) { super(dispatcher); } + + @Override + public boolean isGlobalRenderer(BeltTileEntity te) { + return BeltBlock.canTransportObjects(te.getBlockState()); + } @Override protected void renderSafe(BeltTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java index 35df6b622..a5cc46616 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java @@ -76,7 +76,7 @@ public class BeltTileEntity extends KineticTileEntity { casing = CasingType.NONE; color = -1; } - + @Override public void addBehaviours(List behaviours) { super.addBehaviours(behaviours); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftRenderer.java index 6d04e0b0e..f2f4a7bfa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftRenderer.java @@ -47,7 +47,7 @@ public class SplitShaftRenderer extends KineticTileEntityRenderer { angle = angle / 180f * (float) Math.PI; SuperByteBuffer superByteBuffer = - AllBlockPartials.SHAFT_HALF.renderOnDirectional(te.getBlockState(), direction); + AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(te.getBlockState(), direction); kineticRotationTransform(superByteBuffer, te, axis, angle, light); superByteBuffer.renderInto(ms, buffer.getBuffer(RenderType.getSolid())); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxRenderer.java index 2983b8673..e1a9211ea 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxRenderer.java @@ -33,7 +33,7 @@ public class GearboxRenderer extends KineticTileEntityRenderer { if (boxAxis == axis) continue; - SuperByteBuffer shaft = AllBlockPartials.SHAFT_HALF.renderOnDirectional(te.getBlockState(), direction); + SuperByteBuffer shaft = AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouth(te.getBlockState(), direction); float offset = getRotationOffsetForPosition(te, pos, axis); float angle = (time * te.getSpeed() * 3f / 10) % 360; diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryHandler.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryHandler.java index ea7002b13..6b52b89a3 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryHandler.java @@ -13,7 +13,6 @@ import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.renderer.ActiveRenderInfo; -import net.minecraft.client.renderer.Atlases; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.model.IBakedModel; @@ -103,7 +102,7 @@ public class SymmetryHandler { double speed = 1 / 16d; yShift = MathHelper.sin((float) (AnimationTickHolder.getRenderTick() * speed)) / 5f; - IRenderTypeBuffer buffer = Minecraft.getInstance() + IRenderTypeBuffer.Impl buffer = Minecraft.getInstance() .getBufferBuilders() .getEntityVertexConsumers(); ActiveRenderInfo info = mc.gameRenderer.getActiveRenderInfo(); @@ -117,7 +116,7 @@ public class SymmetryHandler { mirror.applyModelTransform(ms); IBakedModel model = mirror.getModel() .get(); - IVertexBuilder builder = buffer.getBuffer(RenderType.getTranslucent()); + IVertexBuilder builder = buffer.getBuffer(RenderType.getSolid()); mc.getBlockRendererDispatcher() .getBlockModelRenderer() @@ -125,11 +124,7 @@ public class SymmetryHandler { player.world.getRandom(), MathHelper.getPositionRandom(pos), OverlayTexture.DEFAULT_UV, EmptyModelData.INSTANCE); - Minecraft.getInstance() - .getBufferBuilders() - .getEntityVertexConsumers() - .draw(Atlases.getEntityTranslucentCull()); // FIXME new equivalent of getEntityTranslucent() ? - + buffer.draw(); ms.pop(); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java index e71370e9d..dbe80940c 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java @@ -2,10 +2,16 @@ package com.simibubi.create.content.curiosities.symmetry; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; -import com.simibubi.create.content.curiosities.symmetry.mirror.*; +import com.simibubi.create.content.curiosities.symmetry.mirror.CrossPlaneMirror; +import com.simibubi.create.content.curiosities.symmetry.mirror.EmptyMirror; +import com.simibubi.create.content.curiosities.symmetry.mirror.PlaneMirror; +import com.simibubi.create.content.curiosities.symmetry.mirror.SymmetryMirror; +import com.simibubi.create.content.curiosities.symmetry.mirror.TriplePlaneMirror; import com.simibubi.create.foundation.gui.AbstractSimiScreen; import com.simibubi.create.foundation.gui.AllGuiTextures; +import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.gui.GuiGameElement; +import com.simibubi.create.foundation.gui.widgets.IconButton; import com.simibubi.create.foundation.gui.widgets.Label; import com.simibubi.create.foundation.gui.widgets.ScrollInput; import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput; @@ -14,6 +20,7 @@ import com.simibubi.create.foundation.networking.NbtPacket; import com.simibubi.create.foundation.utility.Lang; import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.Hand; @@ -27,6 +34,7 @@ public class SymmetryWandScreen extends AbstractSimiScreen { private Label labelType; private ScrollInput areaAlign; private Label labelAlign; + private IconButton confirmButton; private final ITextComponent mirrorType = Lang.translate("gui.symmetryWand.mirrorType"); private final ITextComponent orientation = Lang.translate("gui.symmetryWand.orientation"); @@ -49,16 +57,17 @@ public class SymmetryWandScreen extends AbstractSimiScreen { @Override public void init() { super.init(); - this.setWindowSize(AllGuiTextures.WAND_SYMMETRY.width + 50, AllGuiTextures.WAND_SYMMETRY.height + 50); + AllGuiTextures background = AllGuiTextures.WAND_OF_SYMMETRY; + this.setWindowSize(background.width + 50, background.height + 50); - labelType = new Label(guiLeft + 122, guiTop + 15, "").colored(0xFFFFFFFF) + labelType = new Label(guiLeft + 49, guiTop + 26, "").colored(0xFFFFFFFF) .withShadow(); - labelAlign = new Label(guiLeft + 122, guiTop + 35, "").colored(0xFFFFFFFF) + labelAlign = new Label(guiLeft + 49, guiTop + 48, "").colored(0xFFFFFFFF) .withShadow(); int state = currentElement instanceof TriplePlaneMirror ? 2 : currentElement instanceof CrossPlaneMirror ? 1 : 0; - areaType = new SelectionScrollInput(guiLeft + 119, guiTop + 12, 70, 14).forOptions(SymmetryMirror.getMirrors()) + areaType = new SelectionScrollInput(guiLeft + 45, guiTop + 21, 109, 18).forOptions(SymmetryMirror.getMirrors()) .titled(mirrorType.copy()) .writingTo(labelType) .setState(state); @@ -87,15 +96,17 @@ public class SymmetryWandScreen extends AbstractSimiScreen { widgets.add(labelAlign); widgets.add(areaType); widgets.add(labelType); + + confirmButton = new IconButton(guiLeft + background.width - 33, guiTop + background.height - 24, AllIcons.I_CONFIRM); + widgets.add(confirmButton); } private void initAlign(SymmetryMirror element) { - if (areaAlign != null) { + if (areaAlign != null) widgets.remove(areaAlign); - } - areaAlign = new SelectionScrollInput(guiLeft + 119, guiTop + 32, 70, 14).forOptions(element.getAlignToolTips()) + areaAlign = new SelectionScrollInput(guiLeft + 45, guiTop + 43, 109, 18).forOptions(element.getAlignToolTips()) .titled(orientation.copy()) .writingTo(labelAlign) .setState(element.getOrientationIndex()) @@ -106,28 +117,24 @@ public class SymmetryWandScreen extends AbstractSimiScreen { @Override protected void renderWindow(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { - AllGuiTextures.WAND_SYMMETRY.draw(matrixStack, this, guiLeft, guiTop); + AllGuiTextures.WAND_OF_SYMMETRY.draw(matrixStack, this, guiLeft, guiTop); - int x = guiLeft + 63; - int y = guiTop + 15; - - textRenderer.draw(matrixStack, mirrorType, x - 5, y, AllGuiTextures.FONT_COLOR); - textRenderer.draw(matrixStack, orientation, x - 5, y + 20, AllGuiTextures.FONT_COLOR); + textRenderer.drawWithShadow(matrixStack, wand.getDisplayName(), guiLeft + 11, guiTop + 3, 0xffffff); renderBlock(matrixStack); - GuiGameElement.of(wand) - .at(guiLeft + 200, guiTop + 170) - .scale(4) - .rotate(-70, 20, 20) - .render(matrixStack); + .at(guiLeft + 170, guiTop + 200) + .scale(4) + .rotate(-70, 20, 20) + .render(matrixStack); } protected void renderBlock(MatrixStack ms) { ms.push(); ms.translate(guiLeft + 18, guiTop + 11, 20); + ms.translate(guiLeft + 25.5f, guiTop + 21, 20); ms.multiply(new Vector3f(.3f, 1f, 0f).getDegreesQuaternion(-22.5f)); - ms.scale(32, -32, 32); + ms.scale(16, -16, 16); currentElement.applyModelTransform(ms); // RenderSystem.multMatrix(ms.peek().getModel()); GuiGameElement.of(currentElement.getModel()) @@ -146,5 +153,15 @@ public class SymmetryWandScreen extends AbstractSimiScreen { client.player.setHeldItem(hand, heldItem); super.removed(); } + + @Override + public boolean mouseClicked(double x, double y, int button) { + if (confirmButton.isHovered()) { + Minecraft.getInstance().player.closeScreen(); + return true; + } + + return super.mouseClicked(x, y, button); + } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperScreen.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperScreen.java index 384545469..c2f8659c2 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperScreen.java @@ -6,6 +6,7 @@ import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.foundation.gui.AbstractSimiScreen; import com.simibubi.create.foundation.gui.AllGuiTextures; +import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.gui.GuiGameElement; import com.simibubi.create.foundation.gui.widgets.IconButton; import com.simibubi.create.foundation.networking.AllPackets; @@ -15,7 +16,6 @@ import com.simibubi.create.foundation.utility.Lang; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.texture.AtlasTexture; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.NBTUtil; @@ -24,14 +24,14 @@ import net.minecraft.util.math.vector.Quaternion; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; -@SuppressWarnings("deprecation") public class ZapperScreen extends AbstractSimiScreen { protected ItemStack zapper; protected boolean offhand; protected float animationProgress; protected AllGuiTextures background; - + private IconButton confirmButton; + protected final ITextComponent patternSection = Lang.translate("gui.blockzapper.patternSection"); protected ITextComponent title; @@ -45,7 +45,7 @@ public class ZapperScreen extends AbstractSimiScreen { this.zapper = zapper; this.offhand = offhand; title = StringTextComponent.EMPTY; - brightColor = 0xCCDDFF; + brightColor = 0xfefefe; fontColor = AllGuiTextures.FONT_COLOR; } @@ -55,6 +55,9 @@ public class ZapperScreen extends AbstractSimiScreen { setWindowSize(background.width + 40, background.height); super.init(); widgets.clear(); + + confirmButton = new IconButton(guiLeft + background.width - 53, guiTop + background.height - 24, AllIcons.I_CONFIRM); + widgets.add(confirmButton); int i = guiLeft - 20; int j = guiTop; @@ -65,7 +68,7 @@ public class ZapperScreen extends AbstractSimiScreen { for (int col = 0; col <= 2; col++) { int id = patternButtons.size(); PlacementPatterns pattern = PlacementPatterns.values()[id]; - patternButtons.add(new IconButton(i + 147 + col * 18, j + 23 + row * 18, pattern.icon)); + patternButtons.add(new IconButton(i + background.width - 76 + col * 18, j + 19 + row * 18, pattern.icon)); patternButtons.get(id) .setToolTip(Lang.translate("gui.blockzapper.pattern." + pattern.translationKey)); } @@ -86,17 +89,12 @@ public class ZapperScreen extends AbstractSimiScreen { background.draw(matrixStack, this, i, j); drawOnBackground(matrixStack, i, j); - client.getTextureManager() - .bindTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE); - RenderSystem.enableBlend(); - renderBlock(matrixStack); renderZapper(matrixStack); } protected void drawOnBackground(MatrixStack matrixStack, int i, int j) { - textRenderer.drawWithShadow(matrixStack, title, i + 8, j + 10, brightColor); - textRenderer.draw(matrixStack, patternSection, i + 148, j + 11, fontColor); + textRenderer.drawWithShadow(matrixStack, title, i + 11, j + 3, brightColor); } @Override @@ -126,20 +124,25 @@ public class ZapperScreen extends AbstractSimiScreen { nbt.putString("Pattern", PlacementPatterns.values()[patternButtons.indexOf(patternButton)].name()); } } + + if (confirmButton.isHovered()) { + Minecraft.getInstance().player.closeScreen(); + return true; + } return super.mouseClicked(x, y, button); } protected void renderZapper(MatrixStack matrixStack) { GuiGameElement.of(zapper) - .at((this.width - this.sWidth) / 2 + 210, this.height / 2 - this.sHeight / 4) + .at((this.width - this.sWidth) / 2 + 220, this.height / 2 - this.sHeight / 4 + 30) .scale(4) .render(matrixStack); } protected void renderBlock(MatrixStack matrixStack) { matrixStack.push(); - matrixStack.translate(guiLeft + 1.7f, guiTop + 48, 120); + matrixStack.translate(guiLeft + 7f, guiTop + 43.5f, 120); matrixStack.multiply(new Quaternion( -30f, .5f, .9f, -.1f)); matrixStack.scale(20, 20, 20); diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/blockzapper/BlockzapperScreen.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/blockzapper/BlockzapperScreen.java index 436d045e7..475e113f1 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/blockzapper/BlockzapperScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/blockzapper/BlockzapperScreen.java @@ -45,26 +45,26 @@ public class BlockzapperScreen extends ZapperScreen { int j = guiTop; CompoundNBT nbt = zapper.getOrCreateTag(); - replaceModeIndicator = new Indicator(i + 51, j + 36, StringTextComponent.EMPTY); - replaceModeButton = new IconButton(i + 51, j + 41, AllIcons.I_REPLACE_SOLID); + replaceModeIndicator = new Indicator(i + 49, j + 67, StringTextComponent.EMPTY); + replaceModeButton = new IconButton(i + 49, j + 73, AllIcons.I_REPLACE_SOLID); if (nbt.contains("Replace") && nbt.getBoolean("Replace")) replaceModeIndicator.state = State.ON; replaceModeButton.setToolTip(Lang.translate("gui.blockzapper.replaceMode")); - spreadDiagonallyIndicator = new Indicator(i + 74, j + 36, StringTextComponent.EMPTY); - spreadDiagonallyButton = new IconButton(i + 74, j + 41, AllIcons.I_FOLLOW_DIAGONAL); + spreadDiagonallyIndicator = new Indicator(i + 8, j + 67, StringTextComponent.EMPTY); + spreadDiagonallyButton = new IconButton(i + 8, j + 73, AllIcons.I_FOLLOW_DIAGONAL); if (nbt.contains("SearchDiagonal") && nbt.getBoolean("SearchDiagonal")) spreadDiagonallyIndicator.state = State.ON; spreadDiagonallyButton.setToolTip(Lang.translate("gui.blockzapper.searchDiagonal")); - spreadMaterialIndicator = new Indicator(i + 92, j + 36, StringTextComponent.EMPTY); - spreadMaterialButton = new IconButton(i + 92, j + 41, AllIcons.I_FOLLOW_MATERIAL); + spreadMaterialIndicator = new Indicator(i + 26, j + 67, StringTextComponent.EMPTY); + spreadMaterialButton = new IconButton(i + 26, j + 73, AllIcons.I_FOLLOW_MATERIAL); if (nbt.contains("SearchFuzzy") && nbt.getBoolean("SearchFuzzy")) spreadMaterialIndicator.state = State.ON; spreadMaterialButton.setToolTip(Lang.translate("gui.blockzapper.searchFuzzy")); - spreadRangeLabel = new Label(i + 119, j + 46, "").withShadow().withSuffix("m"); - spreadRangeInput = new ScrollInput(i + 115, j + 43, 22, 14).withRange(1, BlockzapperItem.getMaxAoe(zapper)) + spreadRangeLabel = new Label(i + 79, j + 78, "").withShadow().withSuffix("m"); + spreadRangeInput = new ScrollInput(i + 73, j + 73, 26, 18).withRange(1, BlockzapperItem.getMaxAoe(zapper)) .setState(1).titled(Lang.translate("gui.blockzapper.range")).writingTo(spreadRangeLabel); if (nbt.contains("SearchDistance")) diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperScreen.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperScreen.java index c6b099360..da6efd39d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperScreen.java @@ -40,8 +40,7 @@ public class WorldshaperScreen extends ZapperScreen { public WorldshaperScreen(ItemStack zapper, boolean offhand) { super(AllGuiTextures.TERRAINZAPPER, zapper, offhand); - brightColor = 0xDFF6FF; - fontColor = 0x436B77; + fontColor = 0x767676; title = Lang.translate("gui.terrainzapper.title"); nbt = zapper.getOrCreateTag(); } @@ -53,8 +52,8 @@ public class WorldshaperScreen extends ZapperScreen { i = guiLeft - 20; j = guiTop; - brushLabel = new Label(i + 58, j + 28, "").withShadow(); - brushInput = new SelectionScrollInput(i + 55, j + 25, 78, 14).forOptions(brushOptions) + brushLabel = new Label(i + 61, j + 23, "").withShadow(); + brushInput = new SelectionScrollInput(i + 56, j + 18, 77, 18).forOptions(brushOptions) .titled(Lang.translate("gui.terrainzapper.brush")) .writingTo(brushLabel) .calling(this::brushChanged); @@ -70,7 +69,7 @@ public class WorldshaperScreen extends ZapperScreen { TerrainTools[] toolValues = TerrainTools.values(); for (int id = 0; id < toolValues.length; id++) { TerrainTools tool = toolValues[id]; - toolButtons.add(new IconButton(i + 8 + id * 18, j + 76, tool.icon)); + toolButtons.add(new IconButton(i + 7 + id * 18, j + 77, tool.icon)); toolButtons.get(id) .setToolTip(Lang.translate("gui.terrainzapper.tool." + tool.translationKey)); } @@ -84,7 +83,7 @@ public class WorldshaperScreen extends ZapperScreen { PlacementOptions[] placementValues = PlacementOptions.values(); for (int id = 0; id < placementValues.length; id++) { PlacementOptions option = placementValues[id]; - placementButtons.add(new IconButton(i + 147 + id * 18, j + 76, option.icon)); + placementButtons.add(new IconButton(i + 136 + id * 18, j + 77, option.icon)); placementButtons.get(id) .setToolTip(Lang.translate("gui.terrainzapper.placement." + option.translationKey)); } @@ -116,15 +115,15 @@ public class WorldshaperScreen extends ZapperScreen { Brush currentBrush = TerrainBrushes.values()[brushInput.getState()].get(); for (int index = 0; index < 3; index++) { - Label label = new Label(i + 62 + 18 * index, j + 46, "").withShadow(); + Label label = new Label(i + 65 + 20 * index, j + 43, "").withShadow(); brushParamLabels.add(label); int indexFinal = index; - ScrollInput input = new ScrollInput(i + 55 + 18 * index, j + 43, 14, 14) + ScrollInput input = new ScrollInput(i + 56 + 20 * index, j + 38, 18, 18) .withRange(currentBrush.getMin(index), currentBrush.getMax(index) + 1) .writingTo(label) .titled(currentBrush.getParamLabel(index).copy()) .calling(state -> { - label.x = i + 62 + 18 * indexFinal - textRenderer.getWidth(label.text) / 2; + label.x = i + 65 + 20 * indexFinal - textRenderer.getWidth(label.text) / 2; }); input.setState(params[index]); input.onChanged(); @@ -177,12 +176,11 @@ public class WorldshaperScreen extends ZapperScreen { super.drawOnBackground(matrixStack, i, j); Brush currentBrush = TerrainBrushes.values()[brushInput.getState()].get(); - for (int index = 2; index >= currentBrush.amtParams; index--) { - AllGuiTextures.TERRAINZAPPER_INACTIVE_PARAM.draw(matrixStack, i + 55 + index * 18, j + 43); - } + for (int index = 2; index >= currentBrush.amtParams; index--) + AllGuiTextures.TERRAINZAPPER_INACTIVE_PARAM.draw(matrixStack, i + 56 + 20 * index, j + 38); - textRenderer.draw(matrixStack, toolSection, i + 8, j + 64, fontColor); - textRenderer.draw(matrixStack, placementSection, i + 148, j + 64, fontColor); + textRenderer.draw(matrixStack, toolSection, i + 7, j + 66, fontColor); + textRenderer.draw(matrixStack, placementSection, i + 136, j + 66, fontColor); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverRenderer.java deleted file mode 100644 index 0461fd6cd..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverRenderer.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.simibubi.create.content.logistics.block.belts.observer; - -import com.mojang.blaze3d.matrix.MatrixStack; -import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer; -import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; - -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; -import net.minecraft.state.properties.BlockStateProperties; - -public class BeltObserverRenderer extends SafeTileEntityRenderer { - - public BeltObserverRenderer(TileEntityRendererDispatcher dispatcher) { - super(dispatcher); - } - - @Override - protected void renderSafe(BeltObserverTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, - int light, int overlay) { - light = WorldRenderer.getLightmapCoordinates(te.getWorld(), - te.getPos().up().offset(te.getBlockState().get(BlockStateProperties.HORIZONTAL_FACING))); - - FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java index bad751b12..b14ac9b8a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java @@ -307,19 +307,19 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor private boolean handleDownwardOutput(boolean simulate) { BlockState blockState = getBlockState(); ChuteTileEntity targetChute = getTargetChute(blockState); + Direction direction = blockState.get(ChuteBlock.FACING); if (targetChute != null) { boolean canInsert = targetChute.item.isEmpty(); if (!simulate && canInsert) { - targetChute.setItem(item, 1); + targetChute.setItem(item, direction == Direction.DOWN ? 1 : .51f); setItem(ItemStack.EMPTY); } return canInsert; } // Diagonal chutes can only insert into other chutes - if (blockState.get(ChuteBlock.FACING) - .getAxis() + if (direction.getAxis() .isHorizontal()) return false; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java index 920756862..0b5aa1222 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java @@ -99,7 +99,7 @@ public abstract class BeltFunnelBlock extends HorizontalInteractionFunnelBlock { return true; if (!(stateBelow.getBlock() instanceof BeltBlock)) return false; - if (!BeltBlock.canTransport(stateBelow)) + if (!BeltBlock.canTransportObjects(stateBelow)) return false; return true; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java index 6382e2a95..6b15d9b36 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java @@ -126,6 +126,11 @@ public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE< return toInsert; if (simulate) inserter.simulate(); + if (!simulate) { + TileEntity tileEntity = worldIn.getTileEntity(pos); + if (tileEntity instanceof FunnelTileEntity) + ((FunnelTileEntity) tileEntity).onTransfer(toInsert); + } return inserter.insert(toInsert); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java index bbeb2197f..03cef0f24 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java @@ -108,6 +108,8 @@ public class FunnelTileEntity extends SmartTileEntity { ItemStack stack = autoExtractor.extract(amountToExtract, filter, amountThreshold); if (stack.isEmpty()) return; + + onTransfer(stack); invManipulation.insert(stack); startCooldown(); } @@ -142,6 +144,7 @@ public class FunnelTileEntity extends SmartTileEntity { if (stack.isEmpty()) return; flap(false); + onTransfer(stack); inputBehaviour.handleInsertion(stack, facing, false); startCooldown(); } @@ -160,6 +163,7 @@ public class FunnelTileEntity extends SmartTileEntity { return ignore; flap(true); + onTransfer(toInsert); if (remainder.isEmpty()) return TransportedResult.removeItem(); @@ -216,6 +220,8 @@ public class FunnelTileEntity extends SmartTileEntity { return inserted; if (simulate) invManipulation.simulate(); + if (!simulate) + onTransfer(inserted); return invManipulation.insert(inserted); } @@ -253,5 +259,9 @@ public class FunnelTileEntity extends SmartTileEntity { public double getMaxRenderDistanceSquared() { return hasFlap() ? super.getMaxRenderDistanceSquared() : 64; } + + public void onTransfer(ItemStack stack) { + AllBlocks.CONTENT_OBSERVER.get().onFunnelTransfer(world, pos, stack); + } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java index 0a3ad5136..5b7db777c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java @@ -40,17 +40,17 @@ public class AdjustableCrateContainer extends Container { private void init() { doubleCrate = te.isDoubleCrate(); - int x = doubleCrate ? 52 : 124; + int x = doubleCrate ? 51 : 123; int maxCol = doubleCrate ? 8 : 4; for (int row = 0; row < 4; ++row) { for (int col = 0; col < maxCol; ++col) { - this.addSlot(new SlotItemHandler(te.inventory, col + row * maxCol, x + col * 18, 25 + row * 18)); + this.addSlot(new SlotItemHandler(te.inventory, col + row * maxCol, x + col * 18, 20 + row * 18)); } } // player Slots int xOffset = 58; - int yOffset = 157; + int yOffset = 155; for (int row = 0; row < 3; ++row) { for (int col = 0; col < 9; ++col) { this.addSlot(new Slot(playerInventory, col + row * 9 + 9, xOffset + col * 18, yOffset + row * 18)); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java index b4ca788ef..e530b2420 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.logistics.block.inventories; -import static com.simibubi.create.foundation.gui.AllGuiTextures.FLEXCRATE; -import static com.simibubi.create.foundation.gui.AllGuiTextures.FLEXCRATE_DOUBLE; +import static com.simibubi.create.foundation.gui.AllGuiTextures.ADJUSTABLE_CRATE; +import static com.simibubi.create.foundation.gui.AllGuiTextures.ADJUSTABLE_DOUBLE_CRATE; import static com.simibubi.create.foundation.gui.AllGuiTextures.PLAYER_INVENTORY; import java.util.ArrayList; @@ -44,11 +44,11 @@ public class AdjustableCrateScreen extends AbstractSimiContainerScreen(); - extraAreas.add(new Rectangle2d(guiLeft + FLEXCRATE.width + 110, guiTop + 46, 71, 70)); + extraAreas.add(new Rectangle2d(guiLeft + ADJUSTABLE_CRATE.width + 110, guiTop + 46, 71, 70)); } @Override @@ -69,18 +69,17 @@ public class AdjustableCrateScreen extends AbstractSimiContainerScreen slot * 64) continue; int slotsPerRow = (container.doubleCrate ? 8 : 4); - int x = crateLeft + 23 + (slot % slotsPerRow) * 18; - int y = crateTop + 24 + (slot / slotsPerRow) * 18; - AllGuiTextures.FLEXCRATE_LOCKED_SLOT.draw(matrixStack, this, x, y); + int x = crateLeft + 22 + (slot % slotsPerRow) * 18; + int y = crateTop + 19 + (slot / slotsPerRow) * 18; + AllGuiTextures.ADJUSTABLE_CRATE_LOCKED_SLOT.draw(matrixStack, this, x, y); } GuiGameElement.of(renderedItem) - .at(guiLeft + FLEXCRATE.width + 110, guiTop + 40) + .at(guiLeft + ADJUSTABLE_CRATE.width + 110, guiTop + 40) .scale(5) .render(matrixStack); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java index 5e46d4fcf..70377bb47 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java @@ -11,6 +11,7 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.components.saw.SawBlock; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock; import com.simibubi.create.content.logistics.block.funnel.FunnelBlock; +import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; @@ -346,6 +347,11 @@ public abstract class ArmInteractionPoint { return stack; if (simulate) inserter.simulate(); + if (!simulate) { + TileEntity tileEntity = world.getTileEntity(pos); + if (tileEntity instanceof FunnelTileEntity) + ((FunnelTileEntity) tileEntity).onTransfer(stack); + } return inserter.insert(stack); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java new file mode 100644 index 000000000..689d48caf --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java @@ -0,0 +1,156 @@ +package com.simibubi.create.content.logistics.block.redstone; + +import java.util.Random; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllShapes; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.wrench.IWrenchable; +import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; +import com.simibubi.create.foundation.block.ITE; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; +import com.simibubi.create.foundation.utility.Iterate; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +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.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.items.CapabilityItemHandler; + +public class ContentObserverBlock extends HorizontalBlock implements ITE, IWrenchable { + + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + + public ContentObserverBlock(Properties properties) { + super(properties); + setDefaultState(getDefaultState().with(POWERED, false)); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, + ISelectionContext p_220053_4_) { + return AllShapes.CONTENT_OBSERVER.get(state.get(HORIZONTAL_FACING)); + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.CONTENT_OBSERVER.create(); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + protected void fillStateContainer(Builder builder) { + builder.add(POWERED, HORIZONTAL_FACING); + super.fillStateContainer(builder); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + BlockState state = getDefaultState(); + + Direction preferredFacing = null; + for (Direction face : Iterate.horizontalDirections) { + BlockPos offsetPos = context.getPos() + .offset(face); + World world = context.getWorld(); + boolean canDetect = false; + TileEntity tileEntity = world.getTileEntity(offsetPos); + + if (TileEntityBehaviour.get(tileEntity, TransportedItemStackHandlerBehaviour.TYPE) != null) + canDetect = true; + else if (tileEntity != null && tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + .isPresent()) + canDetect = true; + else if (tileEntity instanceof FunnelTileEntity) + canDetect = true; + + if (canDetect) { + if (preferredFacing != null) { + preferredFacing = null; + break; + } + preferredFacing = face; + } + + } + + if (preferredFacing != null) + return state.with(HORIZONTAL_FACING, preferredFacing); + return state.with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing() + .getOpposite()); + } + + @Override + public boolean canProvidePower(BlockState state) { + return state.get(POWERED); + } + + @Override + public int getWeakPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) { + return canProvidePower(blockState) && (side == null || side != blockState.get(HORIZONTAL_FACING) + .getOpposite()) ? 15 : 0; + } + + @Override + public void scheduledTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { + worldIn.setBlockState(pos, state.with(POWERED, false), 2); + worldIn.notifyNeighborsOfStateChange(pos, this); + } + + @Override + public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, Direction side) { + return side != state.get(HORIZONTAL_FACING) + .getOpposite(); + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) { + TileEntityBehaviour.destroy(worldIn, pos, FilteringBehaviour.TYPE); + worldIn.removeTileEntity(pos); + } + } + + public void onFunnelTransfer(World world, BlockPos funnelPos, ItemStack transferred) { + for (Direction direction : Iterate.horizontalDirections) { + BlockPos detectorPos = funnelPos.offset(direction); + BlockState detectorState = world.getBlockState(detectorPos); + if (!AllBlocks.CONTENT_OBSERVER.has(detectorState)) + continue; + if (detectorState.get(HORIZONTAL_FACING) != direction.getOpposite()) + continue; + withTileEntityDo(world, detectorPos, te -> { + FilteringBehaviour filteringBehaviour = TileEntityBehaviour.get(te, FilteringBehaviour.TYPE); + if (filteringBehaviour == null) + return; + if (!filteringBehaviour.test(transferred)) + return; + te.activate(4); + }); + } + } + + @Override + public Class getTileEntityClass() { + return ContentObserverTileEntity.class; + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverTileEntity.java new file mode 100644 index 000000000..83759928b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverTileEntity.java @@ -0,0 +1,108 @@ +package com.simibubi.create.content.logistics.block.redstone; + +import java.util.List; + +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; +import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour.InterfaceProvider; + +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.BlockPos; +import net.minecraft.util.math.Vec3d; + +public class ContentObserverTileEntity extends SmartTileEntity { + + private static final int DEFAULT_DELAY = 6; + private FilteringBehaviour filtering; + private InvManipulationBehaviour observedInventory; + public int turnOffTicks = 0; + + public ContentObserverTileEntity(TileEntityType type) { + super(type); + setLazyTickRate(20); + } + + @Override + public void addBehaviours(List behaviours) { + filtering = new FilteringBehaviour(this, new FilteredDetectorFilterSlot()).moveText(new Vec3d(0, 5, 0)); + behaviours.add(filtering); + + observedInventory = new InvManipulationBehaviour(this, InterfaceProvider.towardBlockFacing()).bypassSidedness(); + behaviours.add(observedInventory); + } + + @Override + public void tick() { + super.tick(); + BlockState state = getBlockState(); + if (turnOffTicks > 0) { + turnOffTicks--; + if (turnOffTicks == 0) + world.getPendingBlockTicks() + .scheduleTick(pos, state.getBlock(), 1); + } + + if (!isActive()) + return; + + Direction facing = state.get(ContentObserverBlock.HORIZONTAL_FACING); + BlockPos targetPos = pos.offset(facing); + + TransportedItemStackHandlerBehaviour behaviour = + TileEntityBehaviour.get(world, targetPos, TransportedItemStackHandlerBehaviour.TYPE); + if (behaviour != null) { + behaviour.handleCenteredProcessingOnAllItems(.45f, stack -> { + if (!filtering.test(stack.stack) || turnOffTicks == 6) + return TransportedResult.doNothing(); + + activate(); + return TransportedResult.doNothing(); + }); + return; + } + + if (!observedInventory.simulate() + .extract() + .isEmpty()) { + activate(); + return; + } + } + + public void activate() { + activate(DEFAULT_DELAY); + } + + public void activate(int ticks) { + BlockState state = getBlockState(); + turnOffTicks = ticks; + if (state.get(ContentObserverBlock.POWERED)) + return; + world.setBlockState(pos, state.with(ContentObserverBlock.POWERED, true)); + world.notifyNeighborsOfStateChange(pos, state.getBlock()); + } + + private boolean isActive() { + return true; + } + + @Override + public void write(CompoundNBT compound, boolean clientPacket) { + compound.putInt("TurnOff", turnOffTicks); + super.write(compound, clientPacket); + } + + @Override + protected void read(CompoundNBT compound, boolean clientPacket) { + turnOffTicks = compound.getInt("TurnOff"); + super.read(compound, clientPacket); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverFilterSlot.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java similarity index 80% rename from src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverFilterSlot.java rename to src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java index 19c3e9074..85c340826 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.logistics.block.belts.observer; +package com.simibubi.create.content.logistics.block.redstone; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; @@ -10,9 +10,8 @@ import net.minecraft.block.BlockState; import net.minecraft.block.HorizontalBlock; import net.minecraft.util.math.vector.Vector3d; -public class BeltObserverFilterSlot extends ValueBoxTransform { - - Vector3d position = VecHelper.voxelSpace(8f, 14.5f, 16f); +public class FilteredDetectorFilterSlot extends ValueBoxTransform { + Vector3d position = VecHelper.voxelSpace(8f, 15.5f, 11f); @Override protected Vector3d getLocalOffset(BlockState state) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java index 1dff71e17..a701a2b07 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java @@ -80,7 +80,7 @@ public class StockpileSwitchBlock extends HorizontalBlock implements ITE { + lastModification = 0; + offBelow.titled(Lang.translate("gui.stockpile_switch.move_to_upper_at", state)); + if (onAbove.getState() <= state) { + onAbove.setState(state + 1); + onAbove.onChanged(); + } + }) + .setState((int) (te.offWhenBelow * 100)); + + onAbove = new ScrollInput(guiLeft + 36, guiTop + 18, 102, 18).withRange(1, 101) + .titled(StringTextComponent.EMPTY.copy()) + .calling(state -> { + lastModification = 0; + onAbove.titled(Lang.translate("gui.stockpile_switch.move_to_lower_at", state)); + if (offBelow.getState() >= state) { + offBelow.setState(state - 1); + offBelow.onChanged(); + } + }) + .setState((int) (te.onWhenAbove * 100)); onAbove.onChanged(); offBelow.onChanged(); - widgets.addAll(Arrays.asList(offBelowLabel, offBelow, onAbove, onAboveLabel)); + + widgets.add(onAbove); + widgets.add(offBelow); + + confirmButton = + new IconButton(guiLeft + background.width - 33, guiTop + background.height - 24, AllIcons.I_CONFIRM); + widgets.add(confirmButton); + + flipSignals = new IconButton(guiLeft + 14, guiTop + 40, AllIcons.I_FLIP); + flipSignals.setToolTip(invertSignal); + widgets.add(flipSignals); } @Override protected void renderWindow(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { - int hFontColor = 0xD3CBBE; - int fontColor = 0x4B3A22; STOCKSWITCH.draw(matrixStack, this, guiLeft, guiTop); - textRenderer.drawWithShadow(matrixStack, title, guiLeft - 3 + (STOCKSWITCH.width - textRenderer.getWidth(title)) / 2, - guiTop + 10, hFontColor); - textRenderer.draw(matrixStack, onAbove.getState() == 100 ? startAt : startAbove, guiLeft + 13, guiTop + 55, fontColor); - textRenderer.draw(matrixStack, offBelow.getState() == 0 ? stopAt : stopBelow, guiLeft + 13, guiTop + 72, fontColor); + + AllGuiTextures.STOCKSWITCH_POWERED_LANE.draw(matrixStack, this, guiLeft + 36, guiTop + (te.isInverted() ? 18 : 40)); + AllGuiTextures.STOCKSWITCH_UNPOWERED_LANE.draw(matrixStack, this, guiLeft + 36, guiTop + (te.isInverted() ? 40 : 18)); + textRenderer.drawWithShadow(matrixStack, title, guiLeft - 3 + (STOCKSWITCH.width - textRenderer.getWidth(title)) / 2, guiTop + 3, + 0xffffff); AllGuiTextures sprite = AllGuiTextures.STOCKSWITCH_INTERVAL; - float lowerBound = offBelow.getState() / 100f * (sprite.width - 20) + 10; - float upperBound = onAbove.getState() / 100f * (sprite.width - 20) + 10; + float lowerBound = offBelow.getState(); + float upperBound = onAbove.getState(); sprite.bind(); - drawTexture(matrixStack, (int) (guiLeft + lowerBound), guiTop + 26, (int) (sprite.startX + lowerBound), sprite.startY, - (int) (upperBound - lowerBound), sprite.height); + drawTexture(matrixStack, (int) (guiLeft + upperBound) + 37, guiTop + 18, (int) (sprite.startX + upperBound), sprite.startY, + (int) (sprite.width - upperBound), sprite.height); + drawTexture(matrixStack, guiLeft + 37, guiTop + 40, sprite.startX, sprite.startY, (int) (lowerBound), sprite.height); - sprite = AllGuiTextures.STOCKSWITCH_INTERVAL_END; - sprite.bind(); - drawTexture(matrixStack, (int) (guiLeft + upperBound), guiTop + 26, (int) (sprite.startX + upperBound), sprite.startY, - (int) (sprite.width - upperBound), sprite.height); + AllGuiTextures.STOCKSWITCH_ARROW_UP.draw(matrixStack, this, (int) (guiLeft + lowerBound + 36) - 2, guiTop + 35); + AllGuiTextures.STOCKSWITCH_ARROW_DOWN.draw(matrixStack, this, (int) (guiLeft + upperBound + 36) - 3, guiTop + 17); - AllGuiTextures.STOCKSWITCH_BOUND_LEFT.draw(matrixStack, this, (int) (guiLeft + lowerBound) - 1, guiTop + 24); - AllGuiTextures.STOCKSWITCH_BOUND_RIGHT.draw(matrixStack, this, (int) (guiLeft + upperBound) - 5, guiTop + 24); - - AllGuiTextures cursor = - te.powered ? AllGuiTextures.STOCKSWITCH_CURSOR_ON : AllGuiTextures.STOCKSWITCH_CURSOR_OFF; - matrixStack.push(); - matrixStack.translate((cursorPos * (sprite.width - 20) + 10), 0, 0); - cursor.draw(matrixStack, this, guiLeft - 4, guiTop + 24); - matrixStack.pop(); + if (te.currentLevel != -1) { + AllGuiTextures cursor = AllGuiTextures.STOCKSWITCH_CURSOR; + matrixStack.push(); + matrixStack.translate(Math.min(99, this.cursor.getValue(partialTicks) * sprite.width), + cursorLane.getValue(partialTicks) * 22, 0); + cursor.draw(matrixStack, this, guiLeft + 34, guiTop + 19); + matrixStack.pop(); + } matrixStack.push(); GuiGameElement.of(renderedItem) @@ -130,25 +170,39 @@ public class StockpileSwitchScreen extends AbstractSimiScreen { public void tick() { super.tick(); - if (te.currentLevel == -1) - cursorPos = 0; - else - cursorPos += (te.currentLevel - cursorPos) / 4; + cursor.chase(te.getLevelForDisplay(), 1 / 4f, Chaser.EXP); + cursor.tickChaser(); + cursorLane.chase(te.getState() ? 1 : 0, 1 / 4f, Chaser.EXP); + cursorLane.tickChaser(); if (lastModification >= 0) lastModification++; if (lastModification >= 20) { lastModification = -1; - AllPackets.channel.sendToServer( - new ConfigureStockswitchPacket(te.getPos(), offBelow.getState() / 100f, onAbove.getState() / 100f)); + send(te.isInverted()); } } @Override public void removed() { - AllPackets.channel.sendToServer( - new ConfigureStockswitchPacket(te.getPos(), offBelow.getState() / 100f, onAbove.getState() / 100f)); + send(te.isInverted()); + } + + protected void send(boolean invert) { + AllPackets.channel.sendToServer(new ConfigureStockswitchPacket(te.getPos(), offBelow.getState() / 100f, + onAbove.getState() / 100f, invert)); + } + + @Override + public boolean mouseClicked(double x, double y, int button) { + if (flipSignals.isHovered()) + send(!te.isInverted()); + if (confirmButton.isHovered()) { + Minecraft.getInstance().player.closeScreen(); + return true; + } + return super.mouseClicked(x, y, button); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java index bfb05e52a..ea5067279 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java @@ -4,17 +4,16 @@ import java.util.List; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour.InterfaceProvider; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; -import net.minecraft.state.properties.BlockStateProperties; -import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraft.util.math.vector.Vector3d; import net.minecraftforge.items.IItemHandler; public class StockpileSwitchTileEntity extends SmartTileEntity { @@ -22,27 +21,30 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { public float onWhenAbove; public float offWhenBelow; public float currentLevel; - public boolean powered; - private LazyOptional observedInventory; + private boolean state; + private boolean inverted; + + private FilteringBehaviour filtering; + private InvManipulationBehaviour observedInventory; public StockpileSwitchTileEntity(TileEntityType typeIn) { super(typeIn); onWhenAbove = .75f; offWhenBelow = .25f; currentLevel = -1; - powered = false; - observedInventory = LazyOptional.empty(); + state = false; + inverted = false; setLazyTickRate(10); } @Override - protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { + protected void fromTag(BlockState blockState, CompoundNBT compound, boolean clientPacket) { onWhenAbove = compound.getFloat("OnAbove"); offWhenBelow = compound.getFloat("OffBelow"); currentLevel = compound.getFloat("Current"); - powered = compound.getBoolean("Powered"); - - super.fromTag(state, compound, clientPacket); + state = compound.getBoolean("Powered"); + inverted = compound.getBoolean("Inverted"); + super.fromTag(blockState, compound, clientPacket); } @Override @@ -50,8 +52,8 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { compound.putFloat("OnAbove", onWhenAbove); compound.putFloat("OffBelow", offWhenBelow); compound.putFloat("Current", currentLevel); - compound.putBoolean("Powered", powered); - + compound.putBoolean("Powered", state); + compound.putBoolean("Inverted", inverted); super.write(compound, clientPacket); } @@ -60,19 +62,21 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { } public void updateCurrentLevel() { - if (!observedInventory.isPresent()) { - if (!findNewInventory() && currentLevel != -1) { - world.setBlockState(pos, getBlockState().with(StockpileSwitchBlock.INDICATOR, 0), 3); - currentLevel = -1; - powered = false; - world.updateNeighbors(pos, getBlockState().getBlock()); - } + boolean changed = false; + if (!observedInventory.hasInventory()) { + if (currentLevel == -1) + return; + world.setBlockState(pos, getBlockState().with(StockpileSwitchBlock.INDICATOR, 0), 3); + currentLevel = -1; + state = false; + world.updateNeighbors(pos, getBlockState().getBlock()); + sendData(); return; } float occupied = 0; float totalSpace = 0; - IItemHandler inv = observedInventory.orElse(null); + IItemHandler inv = observedInventory.getInventory(); for (int slot = 0; slot < inv.getSlots(); slot++) { ItemStack stackInSlot = inv.getStackInSlot(slot); @@ -83,18 +87,23 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { continue; totalSpace += 1; - occupied += count * (1f / space); + + if (filtering.test(stackInSlot)) + occupied += count * (1f / space); } - currentLevel = (float) occupied / totalSpace; + float level = (float) occupied / totalSpace; + if (currentLevel != level) + changed = true; + currentLevel = level; currentLevel = MathHelper.clamp(currentLevel, 0, 1); - boolean previouslyPowered = powered; - if (powered && currentLevel <= offWhenBelow) - powered = false; - else if (!powered && currentLevel >= onWhenAbove) - powered = true; - boolean update = previouslyPowered != powered; + boolean previouslyPowered = state; + if (state && currentLevel <= offWhenBelow) + state = false; + else if (!state && currentLevel >= onWhenAbove) + state = true; + boolean update = previouslyPowered != state; int displayLevel = 0; if (currentLevel > 0) @@ -102,6 +111,8 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { world.setBlockState(pos, getBlockState().with(StockpileSwitchBlock.INDICATOR, displayLevel), update ? 3 : 2); if (update) world.updateNeighbors(pos, getBlockState().getBlock()); + if (changed || update) + sendData(); } @Override @@ -109,36 +120,39 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { super.lazyTick(); if (world.isRemote) return; - findNewInventory(); updateCurrentLevel(); } - private boolean findNewInventory() { - observedInventory = LazyOptional.empty(); - BlockPos invPos = getPos().offset(getBlockState().get(BlockStateProperties.HORIZONTAL_FACING)); - - if (!world.isBlockPresent(invPos)) - return false; - BlockState invState = world.getBlockState(invPos); - - if (!invState.hasTileEntity()) - return false; - TileEntity invTE = world.getTileEntity(invPos); - if (invTE == null) - return false; - - observedInventory = invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY); - if (observedInventory.isPresent()) { - updateCurrentLevel(); - return true; - } - - return false; - } - @Override public void addBehaviours(List behaviours) { + filtering = new FilteringBehaviour(this, new FilteredDetectorFilterSlot()).moveText(new Vector3d(0, 5, 0)) + .withCallback($ -> updateCurrentLevel()); + behaviours.add(filtering); + observedInventory = new InvManipulationBehaviour(this, InterfaceProvider.towardBlockFacing()).bypassSidedness(); + behaviours.add(observedInventory); } + public float getLevelForDisplay() { + return currentLevel == -1 ? 0 : currentLevel; + } + + public boolean getState() { + return state; + } + + public boolean isPowered() { + return inverted != state; + } + + public boolean isInverted() { + return inverted; + } + + public void setInverted(boolean inverted) { + if (inverted == this.inverted) + return; + this.inverted = inverted; + world.updateNeighbors(pos, getBlockState().getBlock()); + } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java index f4ee5a43f..3078b45f6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java @@ -43,8 +43,8 @@ public abstract class AbstractFilterScreen ex super.init(); widgets.clear(); - resetButton = new IconButton(guiLeft + 15, guiTop + background.height - 30, AllIcons.I_TRASH); - confirmButton = new IconButton(guiLeft + 159, guiTop + background.height - 30, AllIcons.I_CONFIRM); + resetButton = new IconButton(guiLeft + background.width - 62, guiTop + background.height - 24, AllIcons.I_TRASH); + confirmButton = new IconButton(guiLeft + background.width - 33, guiTop + background.height - 24, AllIcons.I_CONFIRM); widgets.add(resetButton); widgets.add(confirmButton); @@ -59,16 +59,8 @@ public abstract class AbstractFilterScreen ex int invX = x + 50; int invY = y + background.height + 10; PLAYER_INVENTORY.draw(ms, this, invX, invY); - textRenderer.draw(ms, playerInventory.getDisplayName(), invX + 7, invY + 6, 0x666666); - textRenderer.draw(ms, I18n.format(container.filterItem.getTranslationKey()), x + 15, y + 9, 0x5B5037); - - /*RenderHelper.enableGuiDepthLighting(); - RenderSystem.pushMatrix(); - RenderSystem.translated(guiLeft + background.width + 0, guiTop + background.height - 60, 0); - RenderSystem.scaled(5, 5, 5); - itemRenderer.renderItemIntoGUI(container.filterItem, 0, 0); - RenderSystem.popMatrix();*/ + textRenderer.draw(ms, I18n.format(container.filterItem.getTranslationKey()), x + 15, y + 3, 0xdedede); GuiGameElement.of(container.filterItem) .at(guiLeft + background.width, guiTop +background.height -60) diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java index 710e29ca5..0f8204619 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.simibubi.create.AllContainerTypes; +import com.simibubi.create.foundation.utility.Pair; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; @@ -27,7 +28,7 @@ public class AttributeFilterContainer extends AbstractFilterContainer { } WhitelistMode whitelistMode; - List selectedAttributes; + List> selectedAttributes; public AttributeFilterContainer(int id, PlayerInventory inv, PacketBuffer extraData) { super(AllContainerTypes.ATTRIBUTE_FILTER.type, id, inv, extraData); @@ -37,21 +38,21 @@ public class AttributeFilterContainer extends AbstractFilterContainer { super(AllContainerTypes.ATTRIBUTE_FILTER.type, id, inv, stack); } - public void appendSelectedAttribute(ItemAttribute itemAttribute) { - selectedAttributes.add(itemAttribute); + public void appendSelectedAttribute(ItemAttribute itemAttribute, boolean inverted) { + selectedAttributes.add(Pair.of(itemAttribute, inverted)); } @Override protected void clearContents() { selectedAttributes.clear(); } - + @Override protected void init() { super.init(); ItemStack stack = new ItemStack(Items.NAME_TAG); stack.setDisplayName( - new StringTextComponent("Selected Tags").formatted(TextFormatting.RESET, TextFormatting.BLUE)); + new StringTextComponent("Selected Tags").formatted(TextFormatting.RESET, TextFormatting.BLUE)); filterInventory.setStackInSlot(1, stack); } @@ -61,8 +62,8 @@ public class AttributeFilterContainer extends AbstractFilterContainer { } protected void addFilterSlots() { - this.addSlot(new SlotItemHandler(filterInventory, 0, 16, 23)); - this.addSlot(new SlotItemHandler(filterInventory, 1, 59, 56) { + this.addSlot(new SlotItemHandler(filterInventory, 0, 16, 22)); + this.addSlot(new SlotItemHandler(filterInventory, 1, 22, 57) { @Override public boolean canTakeStack(PlayerEntity playerIn) { return false; @@ -110,29 +111,37 @@ public class AttributeFilterContainer extends AbstractFilterContainer { @Override protected int getInventoryOffset() { - return 86; + return 83; } @Override protected void readData(ItemStack filterItem) { selectedAttributes = new ArrayList<>(); - whitelistMode = WhitelistMode.values()[filterItem.getOrCreateTag().getInt("WhitelistMode")]; - ListNBT attributes = filterItem.getOrCreateTag().getList("MatchedAttributes", NBT.TAG_COMPOUND); - attributes.forEach(inbt -> selectedAttributes.add(ItemAttribute.fromNBT((CompoundNBT) inbt))); + whitelistMode = WhitelistMode.values()[filterItem.getOrCreateTag() + .getInt("WhitelistMode")]; + ListNBT attributes = filterItem.getOrCreateTag() + .getList("MatchedAttributes", NBT.TAG_COMPOUND); + attributes.forEach(inbt -> { + CompoundNBT compound = (CompoundNBT) inbt; + selectedAttributes.add(Pair.of(ItemAttribute.fromNBT(compound), compound.getBoolean("Inverted"))); + }); } @Override protected void saveData(ItemStack filterItem) { - filterItem.getOrCreateTag().putInt("WhitelistMode", whitelistMode.ordinal()); + filterItem.getOrCreateTag() + .putInt("WhitelistMode", whitelistMode.ordinal()); ListNBT attributes = new ListNBT(); selectedAttributes.forEach(at -> { if (at == null) return; CompoundNBT compoundNBT = new CompoundNBT(); - at.serializeNBT(compoundNBT); + at.getFirst().serializeNBT(compoundNBT); + compoundNBT.putBoolean("Inverted", at.getSecond()); attributes.add(compoundNBT); }); - filterItem.getOrCreateTag().put("MatchedAttributes", attributes); + filterItem.getOrCreateTag() + .put("MatchedAttributes", attributes); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java index ebb1e4e54..567fefeaf 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java @@ -17,6 +17,7 @@ import com.simibubi.create.foundation.gui.widgets.Label; import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.Pair; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; @@ -33,6 +34,10 @@ public class AttributeFilterScreen extends AbstractFilterScreen { - }); + attributeSelectorLabel = new Label(x + 43, y + 26, "").colored(0xF3EBDE).withShadow(); + attributeSelector = new SelectionScrollInput(x + 39, y + 21, 137, 18); + attributeSelector.forOptions(Arrays.asList(StringTextComponent.EMPTY)); + attributeSelector.removeCallback(); referenceItemChanged(container.filterInventory.getStackInSlot(0)); widgets.add(attributeSelector); @@ -91,8 +98,8 @@ public class AttributeFilterScreen extends AbstractFilterScreen selectedAttributes.add(new StringTextComponent("- ").append(at.format()).formatted(TextFormatting.GRAY))); + .add((container.selectedAttributes.isEmpty() ? noSelectedT : selectedT).copy().formatted(TextFormatting.YELLOW)); + container.selectedAttributes.forEach(at -> selectedAttributes.add(new StringTextComponent("- ").append(at.toString()).formatted(TextFormatting.GRAY))); } @@ -104,17 +111,20 @@ public class AttributeFilterScreen extends AbstractFilterScreen { }); return; } add.active = true; + + addInverted.active = true; attributeSelector.titled(stack.getDisplayName().copy().append("...")); attributesOfItem.clear(); for (ItemAttribute itemAttribute : ItemAttribute.types) - attributesOfItem.addAll(itemAttribute.listAttributesOf(stack, this.client.world)); - List options = attributesOfItem.stream().map(ItemAttribute::format).collect(Collectors.toList()); + attributesOfItem.addAll(itemAttribute.listAttributesOf(stack, client.world)); + List options = attributesOfItem.stream().map(a -> a.format(false)).collect(Collectors.toList()); attributeSelector.forOptions(options); attributeSelector.active = true; attributeSelector.visible = true; @@ -122,17 +132,20 @@ public class AttributeFilterScreen extends AbstractFilterScreen { attributeSelectorLabel.setTextAndTrim(options.get(i), true, 112); ItemAttribute selected = attributesOfItem.get(i); - for (ItemAttribute existing : container.selectedAttributes) { + for (Pair existing : container.selectedAttributes) { CompoundNBT testTag = new CompoundNBT(); CompoundNBT testTag2 = new CompoundNBT(); - existing.serializeNBT(testTag); + existing.getFirst() + .serializeNBT(testTag); selected.serializeNBT(testTag2); if (testTag.equals(testTag2)) { add.active = false; + addInverted.active = false; return; } } add.active = true; + addInverted.active = true; }); attributeSelector.onChanged(); } @@ -144,8 +157,8 @@ public class AttributeFilterScreen extends AbstractFilterScreen= attributesOfItem.size()) + return false; + add.active = false; + addInverted.active = false; + CompoundNBT tag = new CompoundNBT(); + ItemAttribute itemAttribute = attributesOfItem.get(index); + itemAttribute.serializeNBT(tag); + AllPackets.channel + .sendToServer(new FilterScreenPacket(inverted ? Option.ADD_INVERTED_TAG : Option.ADD_TAG, tag)); + container.appendSelectedAttribute(itemAttribute, inverted); + if (container.selectedAttributes.size() == 1) + selectedAttributes.set(0, selectedT.copy().formatted(TextFormatting.YELLOW)); + selectedAttributes.add(new StringTextComponent("- ").append(itemAttribute.format(inverted)).formatted(TextFormatting.GRAY)); + return true; + } + @Override protected void contentsCleared() { selectedAttributes.clear(); selectedAttributes.add(noSelectedT.copy().formatted(TextFormatting.YELLOW)); - if (!lastItemScanned.isEmpty()) + if (!lastItemScanned.isEmpty()) { add.active = true; + addInverted.active = true; + } } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterContainer.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterContainer.java index 6356878cd..483ac1190 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterContainer.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterContainer.java @@ -24,8 +24,8 @@ public class FilterContainer extends AbstractFilterContainer { @Override protected void addFilterSlots() { - int x = 16; - int y = 21; + int x = 23; + int y = 20; for (int row = 0; row < 2; ++row) for (int col = 0; col < 9; ++col) @@ -39,7 +39,7 @@ public class FilterContainer extends AbstractFilterContainer { @Override protected int getInventoryOffset() { - return 100; + return 97; } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java index 29c3f7fce..ef6a20337 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import javax.annotation.Nonnull; + import com.simibubi.create.AllItems; import com.simibubi.create.AllKeys; import com.simibubi.create.content.logistics.item.filter.AttributeFilterContainer.WhitelistMode; @@ -36,8 +38,6 @@ import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; -import javax.annotation.Nonnull; - public class FilterItem extends Item implements INamedContainerProvider { private FilterType type; @@ -119,12 +119,14 @@ public class FilterItem extends Item implements INamedContainerProvider { ListNBT attributes = filter.getOrCreateTag() .getList("MatchedAttributes", NBT.TAG_COMPOUND); for (INBT inbt : attributes) { - ItemAttribute attribute = ItemAttribute.fromNBT((CompoundNBT) inbt); + CompoundNBT compound = (CompoundNBT) inbt; + ItemAttribute attribute = ItemAttribute.fromNBT(compound); + boolean inverted = compound.getBoolean("Inverted"); if (count > 3) { list.add(new StringTextComponent("- ...").formatted(TextFormatting.DARK_GRAY)); break; } - list.add(new StringTextComponent("- ").append(attribute.format())); + list.add(new StringTextComponent("- ").append(attribute.format(inverted))); count++; } @@ -209,8 +211,9 @@ public class FilterItem extends Item implements INamedContainerProvider { ListNBT attributes = filter.getOrCreateTag() .getList("MatchedAttributes", NBT.TAG_COMPOUND); for (INBT inbt : attributes) { - ItemAttribute attribute = ItemAttribute.fromNBT((CompoundNBT) inbt); - boolean matches = attribute.appliesTo(stack, world); + CompoundNBT compound = (CompoundNBT) inbt; + ItemAttribute attribute = ItemAttribute.fromNBT(compound); + boolean matches = attribute.appliesTo(stack, world) != compound.getBoolean("Inverted"); if (matches) { switch (whitelistMode) { diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreen.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreen.java index 619c19ea3..517d8c37a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreen.java @@ -44,20 +44,20 @@ public class FilterScreen extends AbstractFilterScreen { int x = guiLeft; int y = guiTop; - blacklist = new IconButton(x + 58, y + 72, AllIcons.I_BLACKLIST); + blacklist = new IconButton(x + 18, y + 73, AllIcons.I_BLACKLIST); blacklist.setToolTip(blacklistN); - whitelist = new IconButton(x + 76, y + 72, AllIcons.I_WHITELIST); + whitelist = new IconButton(x + 36, y + 73, AllIcons.I_WHITELIST); whitelist.setToolTip(whitelistN); - blacklistIndicator = new Indicator(x + 58, y + 67, StringTextComponent.EMPTY); - whitelistIndicator = new Indicator(x + 76, y + 67, StringTextComponent.EMPTY); + blacklistIndicator = new Indicator(x + 18, y + 67, StringTextComponent.EMPTY); + whitelistIndicator = new Indicator(x + 36, y + 67, StringTextComponent.EMPTY); widgets.addAll(Arrays.asList(blacklist, whitelist, blacklistIndicator, whitelistIndicator)); - respectNBT = new IconButton(x + 98, y + 72, AllIcons.I_RESPECT_NBT); + respectNBT = new IconButton(x + 60, y + 73, AllIcons.I_RESPECT_NBT); respectNBT.setToolTip(respectDataN); - ignoreNBT = new IconButton(x + 116, y + 72, AllIcons.I_IGNORE_NBT); + ignoreNBT = new IconButton(x + 78, y + 73, AllIcons.I_IGNORE_NBT); ignoreNBT.setToolTip(ignoreDataN); - respectNBTIndicator = new Indicator(x + 98, y + 67, StringTextComponent.EMPTY); - ignoreNBTIndicator = new Indicator(x + 116, y + 67, StringTextComponent.EMPTY); + respectNBTIndicator = new Indicator(x + 60, y + 67, StringTextComponent.EMPTY); + ignoreNBTIndicator = new Indicator(x + 78, y + 67, StringTextComponent.EMPTY); widgets.addAll(Arrays.asList(respectNBT, ignoreNBT, respectNBTIndicator, ignoreNBTIndicator)); handleIndicators(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreenPacket.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreenPacket.java index 8d49abeb4..984f455ec 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreenPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreenPacket.java @@ -13,7 +13,7 @@ import net.minecraftforge.fml.network.NetworkEvent.Context; public class FilterScreenPacket extends SimplePacketBase { enum Option { - CLEAR, WHITELIST, WHITELIST2, BLACKLIST, RESPECT_DATA, IGNORE_DATA, ADD_TAG; + CLEAR, WHITELIST, WHITELIST2, BLACKLIST, RESPECT_DATA, IGNORE_DATA, ADD_TAG, ADD_INVERTED_TAG; } private Option option; @@ -75,7 +75,9 @@ public class FilterScreenPacket extends SimplePacketBase { if (option == Option.BLACKLIST) c.whitelistMode = WhitelistMode.BLACKLIST; if (option == Option.ADD_TAG) - c.appendSelectedAttribute(ItemAttribute.fromNBT(data)); + c.appendSelectedAttribute(ItemAttribute.fromNBT(data), false); + if (option == Option.ADD_INVERTED_TAG) + c.appendSelectedAttribute(ItemAttribute.fromNBT(data), true); } }); diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java index aff220b79..6cf9ca7c1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/ItemAttribute.java @@ -13,6 +13,7 @@ import net.minecraft.util.text.TranslationTextComponent; import org.apache.commons.lang3.StringUtils; import com.google.common.base.Predicates; +import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.logistics.InWorldProcessing; import com.simibubi.create.foundation.utility.Lang; @@ -43,7 +44,7 @@ public interface ItemAttribute { static ItemAttribute standard = register(StandardTraits.DUMMY); static ItemAttribute inTag = register(new InTag(new ResourceLocation("dummy"))); static ItemAttribute inItemGroup = register(new InItemGroup(ItemGroup.MISC)); - static ItemAttribute addedBy = register(new AddedBy("dummy")); + static ItemAttribute addedBy = register(new InItemGroup.AddedBy("dummy")); static ItemAttribute register(ItemAttribute attributeType) { types.add(attributeType); @@ -96,8 +97,9 @@ public interface ItemAttribute { } @OnlyIn(value = Dist.CLIENT) - default TranslationTextComponent format() { - return Lang.translate("item_attributes." + getTranslationKey(), getTranslationParameters()); + default TranslationTextComponent format(boolean inverted) { + return Lang.translate("item_attributes." + getTranslationKey() + (inverted ? ".inverted" : ""), + getTranslationParameters()); } public static enum StandardTraits implements ItemAttribute { @@ -112,6 +114,8 @@ public interface ItemAttribute { EQUIPABLE(s -> s.getEquipmentSlot() != null), FURNACE_FUEL(AbstractFurnaceTileEntity::isFuel), WASHABLE(InWorldProcessing::isWashable), + CRUSHABLE((s, w) -> testRecipe(s, w, AllRecipeTypes.CRUSHING.getType()) + || testRecipe(s, w, AllRecipeTypes.MILLING.getType())), SMELTABLE((s, w) -> testRecipe(s, w, IRecipeType.SMELTING)), SMOKABLE((s, w) -> testRecipe(s, w, IRecipeType.SMOKING)), BLASTABLE((s, w) -> testRecipe(s, w, IRecipeType.BLASTING)); @@ -126,9 +130,11 @@ public interface ItemAttribute { private static boolean testRecipe(ItemStack s, World w, IRecipeType> smelting) { RECIPE_WRAPPER.setInventorySlotContents(0, s.copy()); - return w.getRecipeManager().getRecipe(smelting, RECIPE_WRAPPER, w).isPresent(); + return w.getRecipeManager() + .getRecipe(smelting, RECIPE_WRAPPER, w) + .isPresent(); } - + private StandardTraits(BiPredicate test) { this.testWithWorld = test; } @@ -194,12 +200,18 @@ public interface ItemAttribute { @Override public boolean appliesTo(ItemStack stack) { - return stack.getItem().getTags().contains(tagName); + return stack.getItem() + .getTags() + .contains(tagName); } @Override public List listAttributesOf(ItemStack stack) { - return stack.getItem().getTags().stream().map(InTag::new).collect(Collectors.toList()); + return stack.getItem() + .getTags() + .stream() + .map(InTag::new) + .collect(Collectors.toList()); } @Override @@ -241,7 +253,8 @@ public interface ItemAttribute { @Override public List listAttributesOf(ItemStack stack) { - ItemGroup group = stack.getItem().getGroup(); + ItemGroup group = stack.getItem() + .getGroup(); return group == null ? Collections.emptyList() : Arrays.asList(new InItemGroup(group)); } @@ -250,9 +263,11 @@ public interface ItemAttribute { return "in_item_group"; } + @Override @OnlyIn(value = Dist.CLIENT) - public TranslationTextComponent format() { - return Lang.translate("item_attributes." + getTranslationKey(), group.getTranslationKey()); + public TranslationTextComponent format(boolean inverted) { + return Lang.translate("item_attributes." + getTranslationKey() + (inverted ? ".inverted" : ""), + group.getTranslationKey()); } @Override @@ -264,7 +279,8 @@ public interface ItemAttribute { public ItemAttribute readNBT(CompoundNBT nbt) { String readPath = nbt.getString("path"); for (ItemGroup group : ItemGroup.GROUPS) - if (group.getPath().equals(readPath)) + if (group.getPath() + .equals(readPath)) return new InItemGroup(group); return null; } @@ -281,12 +297,14 @@ public interface ItemAttribute { @Override public boolean appliesTo(ItemStack stack) { - return modId.equals(stack.getItem().getCreatorModId(stack)); + return modId.equals(stack.getItem() + .getCreatorModId(stack)); } @Override public List listAttributesOf(ItemStack stack) { - String id = stack.getItem().getCreatorModId(stack); + String id = stack.getItem() + .getCreatorModId(stack); return id == null ? Collections.emptyList() : Arrays.asList(new AddedBy(id)); } @@ -297,9 +315,11 @@ public interface ItemAttribute { @Override public Object[] getTranslationParameters() { - Optional modContainerById = ModList.get().getModContainerById(modId); - String name = modContainerById.map(ModContainer::getModInfo).map(IModInfo::getDisplayName) - .orElse(StringUtils.capitalize(modId)); + Optional modContainerById = ModList.get() + .getModContainerById(modId); + String name = modContainerById.map(ModContainer::getModInfo) + .map(IModInfo::getDisplayName) + .orElse(StringUtils.capitalize(modId)); return new Object[] { name }; } diff --git a/src/main/java/com/simibubi/create/content/logistics/packet/ConfigureStockswitchPacket.java b/src/main/java/com/simibubi/create/content/logistics/packet/ConfigureStockswitchPacket.java index 3f6febd1f..7822cc9f9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/packet/ConfigureStockswitchPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/packet/ConfigureStockswitchPacket.java @@ -10,11 +10,13 @@ public class ConfigureStockswitchPacket extends TileEntityConfigurationPacket maxSize * 1000) { - Minecraft.getInstance().player.sendMessage(Lang.translate("schematics.uploadTooLarge").append(" (" + size / 1000 + " KB)."), Minecraft.getInstance().player.getUniqueID()); - Minecraft.getInstance().player.sendMessage(Lang.translate("schematics.maxAllowedSize").append(" " + maxSize + " KB"), Minecraft.getInstance().player.getUniqueID()); + if (!validateSizeLimitation(size)) return; - } in = Files.newInputStream(path, StandardOpenOption.READ); activeUploads.put(schematic, in); @@ -82,6 +80,21 @@ public class ClientSchematicLoader { } } + public static boolean validateSizeLimitation(long size) { + if (Minecraft.getInstance().isSingleplayer()) + return true; + Integer maxSize = AllConfigs.SERVER.schematics.maxTotalSchematicSize.get(); + if (size > maxSize * 1000) { + ClientPlayerEntity player = Minecraft.getInstance().player; + player.sendMessage(new StringTextComponent( + Lang.translate("schematics.uploadTooLarge") + " (" + size / 1000 + " KB)."), player.getUniqueID()); + player.sendMessage( + new StringTextComponent(Lang.translate("schematics.maxAllowedSize") + " " + maxSize + " KB"), player.getUniqueID()); + return false; + } + return true; + } + private void continueUpload(String schematic) { if (activeUploads.containsKey(schematic)) { Integer maxPacketSize = AllConfigs.SERVER.schematics.maxSchematicPacketSize.get(); diff --git a/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java b/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java index c97d56bab..d43801421 100644 --- a/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java +++ b/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java @@ -14,7 +14,10 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Stream; +import org.apache.commons.io.IOUtils; + import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; import com.simibubi.create.Create; import com.simibubi.create.content.schematics.block.SchematicTableTileEntity; import com.simibubi.create.content.schematics.item.SchematicItem; @@ -23,12 +26,17 @@ import com.simibubi.create.foundation.config.CSchematics; import com.simibubi.create.foundation.utility.FilesHelper; import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; +import net.minecraft.world.gen.feature.template.Template; public class ServerSchematicLoader { @@ -92,17 +100,12 @@ public class ServerSchematicLoader { // Unsupported Format if (!schematic.endsWith(".nbt")) { Create.logger.warn("Attempted Schematic Upload with non-supported Format: " + playerSchematicId); + return; } // Too big - Integer maxFileSize = getConfig().maxTotalSchematicSize.get(); - if (size > maxFileSize * 1000) { - player.sendMessage(new TranslationTextComponent("create.schematics.uploadTooLarge") - .append(new StringTextComponent(" (" + size / 1000 + " KB).")), player.getUniqueID()); - player.sendMessage(new TranslationTextComponent("create.schematics.maxAllowedSize") - .append(new StringTextComponent(" " + maxFileSize + " KB")), player.getUniqueID()); + if (!validateSchematicSizeOnServer(player, size)) return; - } // Skip existing Uploads if (activeUploads.containsKey(playerSchematicId)) @@ -134,8 +137,7 @@ public class ServerSchematicLoader { // Open Stream OutputStream writer = Files.newOutputStream(Paths.get(getSchematicPath(), playerSchematicId), StandardOpenOption.CREATE_NEW); - activeUploads.put(playerSchematicId, - new SchematicUploadEntry(writer, size, player.getServerWorld(), pos)); + activeUploads.put(playerSchematicId, new SchematicUploadEntry(writer, size, player.getServerWorld(), pos)); // Notify Tile Entity table.startUpload(schematic); @@ -146,6 +148,18 @@ public class ServerSchematicLoader { } } + protected boolean validateSchematicSizeOnServer(ServerPlayerEntity player, long size) { + Integer maxFileSize = getConfig().maxTotalSchematicSize.get(); + if (size > maxFileSize * 1000) { + player.sendMessage(new TranslationTextComponent("create.schematics.uploadTooLarge") + .append(new StringTextComponent(" (" + size / 1000 + " KB).")), player.getUniqueID()); + player.sendMessage(new TranslationTextComponent("create.schematics.maxAllowedSize") + .append(new StringTextComponent(" " + maxFileSize + " KB")), player.getUniqueID()); + return false; + } + return true; + } + public CSchematics getConfig() { return AllConfigs.SERVER.schematics; } @@ -231,7 +245,7 @@ public class ServerSchematicLoader { SchematicUploadEntry removed = activeUploads.remove(playerSchematicId); World world = removed.world; BlockPos pos = removed.tablePos; - + Create.logger.info("New Schematic Uploaded: " + playerSchematicId); if (pos == null) return; @@ -252,6 +266,62 @@ public class ServerSchematicLoader { e.printStackTrace(); } } - } + + public void handleInstantSchematic(ServerPlayerEntity player, String schematic, World world, BlockPos pos, + BlockPos bounds) { + String playerPath = getSchematicPath() + "/" + player.getName().getUnformattedComponentText(); + String playerSchematicId = player.getName().getUnformattedComponentText() + "/" + schematic; + FilesHelper.createFolderIfMissing(playerPath); + + // Unsupported Format + if (!schematic.endsWith(".nbt")) { + Create.logger.warn("Attempted Schematic Upload with non-supported Format: " + playerSchematicId); + return; + } + + // Not holding S&Q + if (!AllItems.SCHEMATIC_AND_QUILL.isIn(player.getHeldItemMainhand())) + return; + + try { + // Delete schematic with same name + Path path = Paths.get(getSchematicPath(), playerSchematicId); + Files.deleteIfExists(path); + + // Too many Schematics + Stream list = Files.list(Paths.get(playerPath)); + if (list.count() >= getConfig().maxSchematics.get()) { + Stream list2 = Files.list(Paths.get(playerPath)); + Optional lastFilePath = list2.filter(f -> !Files.isDirectory(f)) + .min(Comparator.comparingLong(f -> f.toFile() + .lastModified())); + list2.close(); + if (lastFilePath.isPresent()) + Files.deleteIfExists(lastFilePath.get()); + } + list.close(); + + Template t = new Template(); + t.takeBlocksFromWorld(world, pos, bounds, true, Blocks.AIR); + + OutputStream outputStream = null; + try { + outputStream = Files.newOutputStream(path, StandardOpenOption.CREATE); + CompoundNBT nbttagcompound = t.writeToNBT(new CompoundNBT()); + CompressedStreamTools.writeCompressed(nbttagcompound, outputStream); + player.setHeldItem(Hand.MAIN_HAND, SchematicItem.create(schematic, player.getName().getUnformattedComponentText())); + + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (outputStream != null) + IOUtils.closeQuietly(outputStream); + } + } catch (IOException e) { + Create.logger.error("Exception Thrown in direct Schematic Upload: " + playerSchematicId); + e.printStackTrace(); + } + } + } diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableContainer.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableContainer.java index 4b13a0d4f..fe9bf1dea 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableContainer.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableContainer.java @@ -41,7 +41,7 @@ public class SchematicTableContainer extends Container { } protected void init() { - inputSlot = new SlotItemHandler(te.inventory, 0, -9, 40) { + inputSlot = new SlotItemHandler(te.inventory, 0, -35, 41) { @Override public boolean isItemValid(ItemStack stack) { return AllItems.EMPTY_SCHEMATIC.isIn(stack) || AllItems.SCHEMATIC_AND_QUILL.isIn(stack) @@ -49,7 +49,7 @@ public class SchematicTableContainer extends Container { } }; - outputSlot = new SlotItemHandler(te.inventory, 1, 75, 40) { + outputSlot = new SlotItemHandler(te.inventory, 1, 110, 41) { @Override public boolean isItemValid(ItemStack stack) { return false; diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java index e4cc8f3f6..cb816c27e 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java @@ -41,6 +41,8 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen availableSchematics = CreateClient.schematicSender.getAvailableSchematics(); - schematicsLabel = new Label(mainLeft + 36, mainTop + 26, "").withShadow(); + schematicsLabel = new Label(mainLeft + 49, mainTop + 26, "").withShadow(); schematicsLabel.text = StringTextComponent.EMPTY; if (!availableSchematics.isEmpty()) { schematicsArea = - new SelectionScrollInput(mainLeft + 33, mainTop + 23, 134, 14).forOptions(availableSchematics) + new SelectionScrollInput(mainLeft + 45, mainTop + 21, 139, 18).forOptions(availableSchematics) .titled(availableSchematicsTitle.copy()) .writingTo(schematicsLabel); widgets.add(schematicsArea); widgets.add(schematicsLabel); } - confirmButton = new IconButton(mainLeft + 69, mainTop + 55, AllIcons.I_CONFIRM); - folderButton = new IconButton(mainLeft + 204, mainTop + 6, AllIcons.I_OPEN_FOLDER); - refreshButton = new IconButton(mainLeft + 204, mainTop + 26, AllIcons.I_REFRESH); + confirmButton = new IconButton(mainLeft + 44, mainTop + 56, AllIcons.I_CONFIRM); + + folderButton = new IconButton(mainLeft + 21, mainTop + 21, AllIcons.I_OPEN_FOLDER); + folderButton.setToolTip(folder); + refreshButton = new IconButton(mainLeft + 207, mainTop + 21, AllIcons.I_REFRESH); + refreshButton.setToolTip(refresh); + widgets.add(confirmButton); widgets.add(folderButton); widgets.add(refreshButton); @@ -100,13 +106,13 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen { public SchematicannonRenderer(TileEntityRendererDispatcher dispatcher) { super(dispatcher); } + + @Override + public boolean isGlobalRenderer(SchematicannonTileEntity p_188185_1_) { + return true; + } @Override protected void renderSafe(SchematicannonTileEntity tileEntityIn, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - Minecraft.getInstance().getTextureManager().bindTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE); - double yaw = 0; double pitch = 40; double recoil = 0; @@ -96,8 +96,8 @@ public class SchematicannonRenderer extends SafeTileEntityRenderer launched.totalTicks - 10) { + if ((launched.ticksRemaining + 1 - partialTicks) > launched.totalTicks - 10) recoil = Math.max(recoil, (launched.ticksRemaining + 1 - partialTicks) - launched.totalTicks + 10); - } // Render particles for launch if (launched.ticksRemaining == launched.totalTicks && tileEntityIn.firstRenderTick) { diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonScreen.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonScreen.java index 4db1f78bc..56c7a3ffa 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonScreen.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonScreen.java @@ -16,6 +16,8 @@ import com.simibubi.create.foundation.item.ItemDescription.Palette; import com.simibubi.create.foundation.item.TooltipHelper; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.utility.Lang; + +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.widget.Widget; import net.minecraft.client.renderer.Rectangle2d; import net.minecraft.entity.player.PlayerInventory; @@ -24,16 +26,21 @@ import net.minecraft.util.text.IFormattableTextComponent; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Vector; +import static net.minecraft.util.text.TextFormatting.DARK_PURPLE; import static net.minecraft.util.text.TextFormatting.GRAY; public class SchematicannonScreen extends AbstractSimiContainerScreen { + private static final AllGuiTextures BG_BOTTOM = AllGuiTextures.SCHEMATICANNON_BOTTOM; + private static final AllGuiTextures BG_TOP = AllGuiTextures.SCHEMATICANNON_TOP; + protected Vector replaceLevelIndicators; protected Vector replaceLevelButtons; @@ -50,27 +57,37 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen extraAreas; + protected List placementSettingWidgets; private final ITextComponent title = Lang.translate("gui.schematicannon.title"); - private final ITextComponent settingsTitle = Lang.translate("gui.schematicannon.settingsTitle"); private final ITextComponent listPrinter = Lang.translate("gui.schematicannon.listPrinter"); private final String _gunpowderLevel = "gui.schematicannon.gunpowderLevel"; private final String _shotsRemaining = "gui.schematicannon.shotsRemaining"; + private final String _showSettings = "gui.schematicannon.showOptions"; private final String _shotsRemainingWithBackup = "gui.schematicannon.shotsRemainingWithBackup"; + private final String _slotGunpowder = "gui.schematicannon.slot.gunpowder"; + private final String _slotListPrinter = "gui.schematicannon.slot.listPrinter"; + private final String _slotSchematic = "gui.schematicannon.slot.schematic"; + private final ITextComponent optionEnabled = Lang.translate("gui.schematicannon.optionEnabled"); private final ITextComponent optionDisabled = Lang.translate("gui.schematicannon.optionDisabled"); private final ItemStack renderedItem = AllBlocks.SCHEMATICANNON.asStack(); + private IconButton confirmButton; + private IconButton showSettingsButton; + private Indicator showSettingsIndicator; + public SchematicannonScreen(SchematicannonContainer container, PlayerInventory inventory, - ITextComponent p_i51105_3_) { + ITextComponent p_i51105_3_) { super(container, inventory, p_i51105_3_); + placementSettingWidgets = new ArrayList<>(); } @Override protected void init() { - setWindowSize(AllGuiTextures.SCHEMATICANNON_BG.width + 50, AllGuiTextures.SCHEMATICANNON_BG.height + 80); + setWindowSize(BG_TOP.width + 50, BG_BOTTOM.height + BG_TOP.height + 80); super.init(); int x = guiLeft + 20; @@ -79,19 +96,45 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen(); + extraAreas.add(new Rectangle2d(guiLeft + 240, guiTop + 88, 84, 113)); + + confirmButton = new IconButton(x + 180, guiTop + 117, AllIcons.I_CONFIRM); + widgets.add(confirmButton); + showSettingsButton = new IconButton(guiLeft + 29, guiTop + 117, AllIcons.I_PLACEMENT_SETTINGS); + showSettingsButton.setToolTip(Lang.translate(_showSettings)); + widgets.add(showSettingsButton); + showSettingsIndicator = new Indicator(guiLeft + 29, guiTop + 111, StringTextComponent.EMPTY); + widgets.add(showSettingsIndicator); + + tick(); + } + + private void initPlacementSettings() { + widgets.removeAll(placementSettingWidgets); + placementSettingWidgets.clear(); + + if (placementSettingsHidden()) + return; + + int x = guiLeft + 20; + int y = guiTop; // Replace settings replaceLevelButtons = new Vector<>(4); replaceLevelIndicators = new Vector<>(4); + /* +<<<<<<< HEAD List icons = ImmutableList .of(AllIcons.I_DONT_REPLACE, AllIcons.I_REPLACE_SOLID, AllIcons.I_REPLACE_ANY, AllIcons.I_REPLACE_EMPTY); @@ -105,37 +148,51 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen icons = ImmutableList.of(AllIcons.I_DONT_REPLACE, AllIcons.I_REPLACE_SOLID, + AllIcons.I_REPLACE_ANY, AllIcons.I_REPLACE_EMPTY); + List toolTips = ImmutableList.of(Lang.translate("gui.schematicannon.option.dontReplaceSolid"), + Lang.translate("gui.schematicannon.option.replaceWithSolid"), + Lang.translate("gui.schematicannon.option.replaceWithAny"), + Lang.translate("gui.schematicannon.option.replaceWithEmpty")); + + for (int i = 0; i < 4; i++) { + replaceLevelIndicators.add(new Indicator(x + 33 + i * 18, y + 111, StringTextComponent.EMPTY)); + replaceLevelButtons.add(new IconButton(x + 33 + i * 18, y + 117, icons.get(i))); + replaceLevelButtons.get(i) + .setToolTip(toolTips.get(i)); } - widgets.addAll(replaceLevelButtons); - widgets.addAll(replaceLevelIndicators); + placementSettingWidgets.addAll(replaceLevelButtons); + placementSettingWidgets.addAll(replaceLevelIndicators); // Other Settings - skipMissingButton = new IconButton(x + 106, y + 101, AllIcons.I_SKIP_MISSING); + skipMissingButton = new IconButton(x + 111, y + 117, AllIcons.I_SKIP_MISSING); skipMissingButton.setToolTip(Lang.translate("gui.schematicannon.option.skipMissing")); - skipMissingIndicator = new Indicator(x + 106, y + 96, StringTextComponent.EMPTY); - Collections.addAll(widgets, skipMissingButton, skipMissingIndicator); + skipMissingIndicator = new Indicator(x + 111, y + 111, StringTextComponent.EMPTY); + Collections.addAll(placementSettingWidgets, skipMissingButton, skipMissingIndicator); - skipTilesButton = new IconButton(x + 124, y + 101, AllIcons.I_SKIP_TILES); + skipTilesButton = new IconButton(x + 129, y + 117, AllIcons.I_SKIP_TILES); skipTilesButton.setToolTip(Lang.translate("gui.schematicannon.option.skipTileEntities")); - skipTilesIndicator = new Indicator(x + 124, y + 96, StringTextComponent.EMPTY); - Collections.addAll(widgets, skipTilesButton, skipTilesIndicator); + skipTilesIndicator = new Indicator(x + 129, y + 111, StringTextComponent.EMPTY); + Collections.addAll(placementSettingWidgets, skipTilesButton, skipTilesIndicator); - extraAreas = new ArrayList<>(); - extraAreas.add(new Rectangle2d(guiLeft + 240, guiTop + 88, 84, 113)); + widgets.addAll(placementSettingWidgets); + } - tick(); + protected boolean placementSettingsHidden() { + return showSettingsIndicator.state == State.OFF; } @Override public void tick() { - SchematicannonTileEntity te = container.getTileEntity(); - replaceLevelIndicators.get(0).state = te.replaceMode == 0 ? State.ON : State.OFF; - for (int replaceMode = 1; replaceMode < replaceLevelButtons.size(); replaceMode++) - replaceLevelIndicators.get(replaceMode).state = replaceMode <= te.replaceMode ? State.ON : State.OFF; - skipMissingIndicator.state = te.skipMissing ? State.ON : State.OFF; - skipTilesIndicator.state = !te.replaceTileEntities ? State.ON : State.OFF; + if (!placementSettingsHidden()) { + for (int replaceMode = 0; replaceMode < replaceLevelButtons.size(); replaceMode++) + replaceLevelIndicators.get(replaceMode).state = replaceMode == te.replaceMode ? State.ON : State.OFF; + skipMissingIndicator.state = te.skipMissing ? State.ON : State.OFF; + skipTilesIndicator.state = !te.replaceTileEntities ? State.ON : State.OFF; + } playIndicator.state = State.OFF; pauseIndicator.state = State.OFF; @@ -170,12 +227,18 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen tip = button.getToolTip(); tip.add((enabled ? optionEnabled : optionDisabled).copy().formatted(TextFormatting.BLUE)); TooltipHelper.cutString(Lang.translate("gui.schematicannon.option." + tooltipKey + ".description"), GRAY, GRAY).forEach(s -> tip.add(new StringTextComponent(s).formatted(GRAY))); + } @Override protected void renderWindow(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { AllGuiTextures.PLAYER_INVENTORY.draw(matrixStack, this, guiLeft - 10, guiTop + 145); - AllGuiTextures.SCHEMATICANNON_BG.draw(matrixStack, this, guiLeft + 20, guiTop); + BG_TOP.draw(matrixStack, this, guiLeft + 20, guiTop); + BG_BOTTOM.draw(matrixStack, this, guiLeft + 20, guiTop + BG_TOP.height); SchematicannonTileEntity te = container.getTileEntity(); renderPrintingProgress(matrixStack, te.schematicProgress); @@ -212,7 +277,7 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen= fuelX && mouseY >= fuelY && mouseX <= fuelX + AllGuiTextures.SCHEMATICANNON_FUEL.width + && mouseY <= fuelY + AllGuiTextures.SCHEMATICANNON_FUEL.height) { + List tooltip = getFuelLevelTooltip(te); + renderTooltip(matrixStack, tooltip, mouseX, mouseY); + } + + if (hoveredSlot != null && !hoveredSlot.getHasStack()) { + if (hoveredSlot.getSlotIndex() == 0) + renderTooltip(matrixStack, + TooltipHelper.cutString(Lang.translate(_slotSchematic), TextFormatting.GRAY, TextFormatting.BLUE), + mouseX, mouseY); + if (hoveredSlot.getSlotIndex() == 2) + renderTooltip(matrixStack, + TooltipHelper.cutString(Lang.translate(_slotListPrinter), TextFormatting.GRAY, TextFormatting.BLUE), + mouseX, mouseY); + if (hoveredSlot.getSlotIndex() == 4) + renderTooltip(matrixStack, + TooltipHelper.cutString(Lang.translate(_slotGunpowder), TextFormatting.GRAY, TextFormatting.BLUE), + mouseX, mouseY); } if (te.missingItem != null) { - int missingBlockX = guiLeft + 145, missingBlockY = guiTop + 25; + int missingBlockX = guiLeft + 150, missingBlockY = guiTop + 46; if (mouseX >= missingBlockX && mouseY >= missingBlockY && mouseX <= missingBlockX + 16 + /* +<<<<<<< HEAD && mouseY <= missingBlockY + 16) { renderTooltip(matrixStack, te.missingItem, mouseX, mouseY); } @@ -307,25 +401,68 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen= paperX && mouseY >= paperY && mouseX <= paperX + 16 && mouseY <= paperY + 16) { renderTooltip(matrixStack, listPrinter, mouseX, mouseY); } +=======*/ + && mouseY <= missingBlockY + 16) { + renderTooltip(matrixStack, te.missingItem, mouseX, mouseY); + } + } + + int paperX = guiLeft + 132, paperY = guiTop + 19; + if (mouseX >= paperX && mouseY >= paperY && mouseX <= paperX + 16 && mouseY <= paperY + 16) + renderTooltip(matrixStack, listPrinter, mouseX, mouseY); super.renderWindowForeground(matrixStack, mouseX, mouseY, partialTicks); } - @Override - public boolean mouseClicked(double x, double y, int button) { + protected List getFuelLevelTooltip(SchematicannonTileEntity te) { + double fuelUsageRate = te.getFuelUsageRate(); + int shotsLeft = (int) (te.fuelLevel / fuelUsageRate); + int shotsLeftWithItems = (int) (shotsLeft + te.inventory.getStackInSlot(4) + .getCount() * (te.getFuelAddedByGunPowder() / fuelUsageRate)); + List tooltip = new ArrayList<>(); - for (int replaceMode = 0; replaceMode < replaceLevelButtons.size(); replaceMode++) { - if (!replaceLevelButtons.get(replaceMode).isHovered()) - continue; - if (container.getTileEntity().replaceMode == replaceMode) - continue; - sendOptionUpdate(Option.values()[replaceMode], true); + if (te.hasCreativeCrate) { + tooltip.add(Lang.translate(_gunpowderLevel, "" + 100)); + tooltip.add(new StringTextComponent("(").append( new TranslationTextComponent(AllBlocks.CREATIVE_CRATE.get() + .getTranslationKey())).append(")").formatted(DARK_PURPLE)); + return tooltip; } - if (skipMissingButton.isHovered()) - sendOptionUpdate(Option.SKIP_MISSING, !container.getTileEntity().skipMissing); - if (skipTilesButton.isHovered()) - sendOptionUpdate(Option.SKIP_TILES, !container.getTileEntity().replaceTileEntities); + float f = te.fuelLevel * 100; + tooltip.add(Lang.translate(_gunpowderLevel, "" + (int) f)); + tooltip.add(Lang.translate(_shotsRemaining, "" + TextFormatting.BLUE + shotsLeft).formatted(GRAY)); + if (shotsLeftWithItems != shotsLeft) + tooltip + .add(Lang.translate(_shotsRemainingWithBackup, "" + TextFormatting.BLUE + shotsLeftWithItems).formatted(GRAY)); + return tooltip; + } + + @Override + public boolean mouseClicked(double x, double y, int button) { + if (showSettingsButton.isHovered()) { + showSettingsIndicator.state = placementSettingsHidden() ? State.GREEN : State.OFF; + initPlacementSettings(); + } + + if (confirmButton.isHovered()) { + Minecraft.getInstance().player.closeScreen(); + return true; + } + + if (!placementSettingsHidden()) { + for (int replaceMode = 0; replaceMode < replaceLevelButtons.size(); replaceMode++) { + if (!replaceLevelButtons.get(replaceMode) + .isHovered()) + continue; + if (container.getTileEntity().replaceMode == replaceMode) + continue; + sendOptionUpdate(Option.values()[replaceMode], true); + } + if (skipMissingButton.isHovered()) + sendOptionUpdate(Option.SKIP_MISSING, !container.getTileEntity().skipMissing); + if (skipTilesButton.isHovered()) + sendOptionUpdate(Option.SKIP_TILES, !container.getTileEntity().replaceTileEntities); + } if (playButton.isHovered() && playButton.active) sendOptionUpdate(Option.PLAY, true); @@ -343,8 +480,8 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen { - }); - guiScreenIn.setTitle(Lang.translate("schematicAndQuill.prompt")); - guiScreenIn.setButtonTextConfirm(Lang.translate("action.saveToFile")); - guiScreenIn.setButtonTextAbort(Lang.translate("action.discard")); - ScreenOpener.open(guiScreenIn); + ScreenOpener.open(new SchematicPromptScreen()); return; } @@ -128,6 +125,13 @@ public class SchematicAndQuillHandler { firstPos = selectedPos; Lang.sendStatus(player, "schematicAndQuill.firstPos"); } + + public void discard() { + ClientPlayerEntity player = Minecraft.getInstance().player; + firstPos = null; + secondPos = null; + Lang.sendStatus(player, "schematicAndQuill.abort"); + } public void tick() { if (!isActive()) @@ -200,11 +204,13 @@ public class SchematicAndQuillHandler { && Minecraft.getInstance().currentScreen == null; } - public void saveSchematic(String string) { + public void saveSchematic(String string, boolean convertImmediately) { Template t = new Template(); MutableBoundingBox bb = new MutableBoundingBox(firstPos, secondPos); - t.takeBlocksFromWorld(Minecraft.getInstance().world, new BlockPos(bb.minX, bb.minY, bb.minZ), - new BlockPos(bb.getXSize(), bb.getYSize(), bb.getZSize()), true, Blocks.AIR); + BlockPos origin = new BlockPos(bb.minX, bb.minY, bb.minZ); + BlockPos bounds = new BlockPos(bb.getXSize(), bb.getYSize(), bb.getZSize()); + + t.takeBlocksFromWorld(Minecraft.getInstance().world, origin, bounds, true, Blocks.AIR); if (string.isEmpty()) string = Lang.translate("schematicAndQuill.fallbackName").getUnformattedComponentText(); @@ -214,9 +220,10 @@ public class SchematicAndQuillHandler { String filename = FilesHelper.findFirstValidFilename(string, folderPath, "nbt"); String filepath = folderPath + "/" + filename; + Path path = Paths.get(filepath); OutputStream outputStream = null; try { - outputStream = Files.newOutputStream(Paths.get(filepath), StandardOpenOption.CREATE); + outputStream = Files.newOutputStream(path, StandardOpenOption.CREATE); CompoundNBT nbttagcompound = t.writeToNBT(new CompoundNBT()); CompressedStreamTools.writeCompressed(nbttagcompound, outputStream); } catch (IOException e) { @@ -228,6 +235,23 @@ public class SchematicAndQuillHandler { firstPos = null; secondPos = null; Lang.sendStatus(Minecraft.getInstance().player, "schematicAndQuill.saved", filepath); + + if (!convertImmediately) + return; + if (!Files.exists(path)) { + Create.logger.fatal("Missing Schematic file: " + path.toString()); + return; + } + try { + if (!ClientSchematicLoader.validateSizeLimitation(Files.size(path))) + return; + AllPackets.channel.sendToServer(new InstantSchematicPacket(filename, origin, bounds)); + + } catch (IOException e) { + Create.logger.fatal("Error finding Schematic file: " + path.toString()); + e.printStackTrace(); + return; + } } private Outliner outliner() { diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java index b834ee2aa..d22bd935f 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java @@ -9,11 +9,14 @@ import com.simibubi.create.AllItems; import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.gui.AbstractSimiScreen; import com.simibubi.create.foundation.gui.AllGuiTextures; +import com.simibubi.create.foundation.gui.AllIcons; +import com.simibubi.create.foundation.gui.widgets.IconButton; import com.simibubi.create.foundation.gui.widgets.Label; import com.simibubi.create.foundation.gui.widgets.ScrollInput; import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput; import com.simibubi.create.foundation.utility.Lang; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTUtil; @@ -30,12 +33,12 @@ public class SchematicEditScreen extends AbstractSimiScreen { private TextFieldWidget xInput; private TextFieldWidget yInput; private TextFieldWidget zInput; + private IconButton confirmButton; private final List rotationOptions = Lang.translatedOptions("schematic.rotation", "none", "cw90", "cw180", "cw270"); private final List mirrorOptions = Lang.translatedOptions("schematic.mirror", "none", "leftRight", "frontBack"); - private final ITextComponent positionLabel = Lang.translate("schematic.position"); private final ITextComponent rotationLabel = Lang.translate("schematic.rotation"); private final ITextComponent mirrorLabel = Lang.translate("schematic.mirror"); @@ -45,16 +48,18 @@ public class SchematicEditScreen extends AbstractSimiScreen { @Override protected void init() { - setWindowSize(AllGuiTextures.SCHEMATIC.width + 50, AllGuiTextures.SCHEMATIC.height); + AllGuiTextures background = AllGuiTextures.SCHEMATIC; + setWindowSize(background.width + 50, background.height); int x = guiLeft; int y = guiTop; handler = CreateClient.schematicHandler; - xInput = new TextFieldWidget(textRenderer, x + 75, y + 32, 32, 10, StringTextComponent.EMPTY); - yInput = new TextFieldWidget(textRenderer, x + 115, y + 32, 32, 10, StringTextComponent.EMPTY); - zInput = new TextFieldWidget(textRenderer, x + 155, y + 32, 32, 10, StringTextComponent.EMPTY); + xInput = new TextFieldWidget(textRenderer, x + 50, y + 26, 34, 10, StringTextComponent.EMPTY); + yInput = new TextFieldWidget(textRenderer, x + 90, y + 26, 34, 10, StringTextComponent.EMPTY); + zInput = new TextFieldWidget(textRenderer, x + 130, y + 26, 34, 10, StringTextComponent.EMPTY); - BlockPos anchor = handler.getTransformation().getAnchor(); + BlockPos anchor = handler.getTransformation() + .getAnchor(); if (handler.isDeployed()) { xInput.setText("" + anchor.getX()); yInput.setText("" + anchor.getY()); @@ -84,18 +89,29 @@ public class SchematicEditScreen extends AbstractSimiScreen { }); } - PlacementSettings settings = handler.getTransformation().toSettings(); - Label labelR = new Label(x + 99, y + 52, "").withShadow(); - rotationArea = new SelectionScrollInput(x + 96, y + 49, 94, 14).forOptions(rotationOptions).titled(new StringTextComponent("Rotation")) - .setState(settings.getRotation().ordinal()).writingTo(labelR); + PlacementSettings settings = handler.getTransformation() + .toSettings(); + Label labelR = new Label(x + 50, y + 48, "").withShadow(); + rotationArea = new SelectionScrollInput(x + 45, y + 43, 118, 18).forOptions(rotationOptions) + .titled(rotationLabel.copy()) + .setState(settings.getRotation() + .ordinal()) + .writingTo(labelR); - Label labelM = new Label(x + 99, y + 72, "").withShadow(); - mirrorArea = new SelectionScrollInput(x + 96, y + 69, 94, 14).forOptions(mirrorOptions).titled(new StringTextComponent("Mirror")) - .setState(settings.getMirror().ordinal()).writingTo(labelM); + Label labelM = new Label(x + 50, y + 70, "").withShadow(); + mirrorArea = new SelectionScrollInput(x + 45, y + 65, 118, 18).forOptions(mirrorOptions) + .titled(mirrorLabel.copy()) + .setState(settings.getMirror() + .ordinal()) + .writingTo(labelM); Collections.addAll(widgets, xInput, yInput, zInput); Collections.addAll(widgets, labelR, labelM, rotationArea, mirrorArea); + confirmButton = + new IconButton(guiLeft + background.width - 33, guiTop + background.height - 24, AllIcons.I_CONFIRM); + widgets.add(confirmButton); + super.init(); } @@ -134,16 +150,11 @@ public class SchematicEditScreen extends AbstractSimiScreen { int x = guiLeft; int y = guiTop; AllGuiTextures.SCHEMATIC.draw(matrixStack, this, x, y); - textRenderer.drawWithShadow(matrixStack, handler.getCurrentSchematicName(), - x + 103 - textRenderer.getStringWidth(handler.getCurrentSchematicName()) / 2, y + 10, 0xDDEEFF); - - textRenderer.draw(matrixStack, positionLabel, x + 10, y + 32, AllGuiTextures.FONT_COLOR); - textRenderer.draw(matrixStack, rotationLabel, x + 10, y + 52, AllGuiTextures.FONT_COLOR); - textRenderer.draw(matrixStack, mirrorLabel, x + 10, y + 72, AllGuiTextures.FONT_COLOR); + x + 93 - textRenderer.getStringWidth(handler.getCurrentSchematicName()) / 2, y + 3, 0xffffff); matrixStack.push(); - matrixStack.translate(guiLeft + 220, guiTop + 20, 0); + matrixStack.translate(guiLeft + 200, guiTop + 80, 0); matrixStack.scale(3, 3, 3); itemRenderer.renderItemIntoGUI(new ItemStack(AllItems.SCHEMATIC.get()), 0, 0); matrixStack.pop(); @@ -155,7 +166,7 @@ public class SchematicEditScreen extends AbstractSimiScreen { BlockPos newLocation = null; try { newLocation = new BlockPos(Integer.parseInt(xInput.getText()), Integer.parseInt(yInput.getText()), - Integer.parseInt(zInput.getText())); + Integer.parseInt(zInput.getText())); } catch (NumberFormatException e) { validCoords = false; } @@ -163,19 +174,31 @@ public class SchematicEditScreen extends AbstractSimiScreen { PlacementSettings settings = new PlacementSettings(); settings.setRotation(Rotation.values()[rotationArea.getState()]); settings.setMirror(Mirror.values()[mirrorArea.getState()]); - + if (validCoords && newLocation != null) { ItemStack item = handler.getActiveSchematicItem(); if (item != null) { - item.getTag().putBoolean("Deployed", true); - item.getTag().put("Anchor", NBTUtil.writeBlockPos(newLocation)); + item.getTag() + .putBoolean("Deployed", true); + item.getTag() + .put("Anchor", NBTUtil.writeBlockPos(newLocation)); } - handler.getTransformation().init(newLocation, settings, handler.getBounds()); + handler.getTransformation() + .init(newLocation, settings, handler.getBounds()); handler.markDirty(); handler.deploy(); } + } + @Override + public boolean mouseClicked(double x, double y, int button) { + if (confirmButton.isHovered()) { + Minecraft.getInstance().player.closeScreen(); + return true; + } + + return super.mouseClicked(x, y, button); } } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicHotbarSlotOverlay.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicHotbarSlotOverlay.java index 63250ae0a..a020db9c0 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicHotbarSlotOverlay.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicHotbarSlotOverlay.java @@ -12,10 +12,10 @@ public class SchematicHotbarSlotOverlay extends AbstractGui { public void renderOn(MatrixStack matrixStack, int slot) { MainWindow mainWindow = Minecraft.getInstance().getWindow(); - int x = mainWindow.getScaledWidth() / 2 - 92; - int y = mainWindow.getScaledHeight() - 23; + int x = mainWindow.getScaledWidth() / 2 - 88; + int y = mainWindow.getScaledHeight() - 19; RenderSystem.enableAlphaTest(); - AllGuiTextures.BLUEPRINT_SLOT.draw(matrixStack, this, x + 20 * slot, y); + AllGuiTextures.SCHEMATIC_SLOT.draw(matrixStack, this, x + 20 * slot, y); RenderSystem.disableAlphaTest(); } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicPromptScreen.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicPromptScreen.java new file mode 100644 index 000000000..df3617635 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicPromptScreen.java @@ -0,0 +1,103 @@ +package com.simibubi.create.content.schematics.client; + +import org.lwjgl.glfw.GLFW; + +import com.simibubi.create.AllItems; +import com.simibubi.create.CreateClient; +import com.simibubi.create.foundation.gui.AbstractSimiScreen; +import com.simibubi.create.foundation.gui.AllGuiTextures; +import com.simibubi.create.foundation.gui.AllIcons; +import com.simibubi.create.foundation.gui.widgets.IconButton; +import com.simibubi.create.foundation.utility.Lang; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.widget.TextFieldWidget; + +public class SchematicPromptScreen extends AbstractSimiScreen { + + private final String title = Lang.translate("schematicAndQuill.title"); + private final String convertLabel = Lang.translate("schematicAndQuill.convert"); + private final String abortLabel = Lang.translate("action.discard"); + private final String confirmLabel = Lang.translate("action.saveToFile"); + + private TextFieldWidget nameField; + private IconButton confirm; + private IconButton abort; + private IconButton convert; + + @Override + public void init() { + super.init(); + AllGuiTextures background = AllGuiTextures.SCHEMATIC_PROMPT; + setWindowSize(background.width, background.height + 30); + + nameField = new TextFieldWidget(font, guiLeft + 49, guiTop + 26, 131, 10, ""); + nameField.setTextColor(-1); + nameField.setDisabledTextColour(-1); + nameField.setEnableBackgroundDrawing(false); + nameField.setMaxStringLength(35); + nameField.changeFocus(true); + + abort = new IconButton(guiLeft + 7, guiTop + 53, AllIcons.I_TRASH); + abort.setToolTip(abortLabel); + widgets.add(abort); + + confirm = new IconButton(guiLeft + 158, guiTop + 53, AllIcons.I_CONFIRM); + confirm.setToolTip(confirmLabel); + widgets.add(confirm); + + convert = new IconButton(guiLeft + 180, guiTop + 53, AllIcons.I_SCHEMATIC); + convert.setToolTip(convertLabel); + widgets.add(convert); + + widgets.add(confirm); + widgets.add(convert); + widgets.add(abort); + widgets.add(nameField); + } + + @Override + public void renderWindow(int mouseX, int mouseY, float partialTicks) { + AllGuiTextures.SCHEMATIC_PROMPT.draw(this, guiLeft, guiTop); + font.drawStringWithShadow(title, guiLeft + (sWidth / 2) - (font.getStringWidth(title) / 2), guiTop + 3, + 0xffffff); + itemRenderer.renderItemIntoGUI(AllItems.SCHEMATIC.asStack(), guiLeft + 22, guiTop + 23); + } + + @Override + public boolean keyPressed(int keyCode, int p_keyPressed_2_, int p_keyPressed_3_) { + if (keyCode == GLFW.GLFW_KEY_ENTER) { + confirm(false); + return true; + } + if (keyCode == 256 && this.shouldCloseOnEsc()) { + this.onClose(); + return true; + } + return nameField.keyPressed(keyCode, p_keyPressed_2_, p_keyPressed_3_); + } + + @Override + public boolean mouseClicked(double x, double y, int button) { + if (confirm.isHovered()) { + confirm(false); + return true; + } + if (abort.isHovered()) { + CreateClient.schematicAndQuillHandler.discard(); + Minecraft.getInstance().player.closeScreen(); + return true; + } + if (convert.isHovered()) { + confirm(true); + return true; + } + return super.mouseClicked(x, y, button); + } + + private void confirm(boolean convertImmediately) { + CreateClient.schematicAndQuillHandler.saveSchematic(nameField.getText(), convertImmediately); + Minecraft.getInstance().player.closeScreen(); + } + +} diff --git a/src/main/java/com/simibubi/create/content/schematics/packet/InstantSchematicPacket.java b/src/main/java/com/simibubi/create/content/schematics/packet/InstantSchematicPacket.java new file mode 100644 index 000000000..30a4fdcba --- /dev/null +++ b/src/main/java/com/simibubi/create/content/schematics/packet/InstantSchematicPacket.java @@ -0,0 +1,52 @@ +package com.simibubi.create.content.schematics.packet; + +import java.util.function.Supplier; + +import com.simibubi.create.Create; +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.NetworkEvent.Context; + +public class InstantSchematicPacket extends SimplePacketBase { + + private String name; + private BlockPos origin; + private BlockPos bounds; + + public InstantSchematicPacket(String name, BlockPos origin, BlockPos bounds) { + this.name = name; + this.origin = origin; + this.bounds = bounds; + } + + public InstantSchematicPacket(PacketBuffer buffer) { + name = buffer.readString(32767); + origin = buffer.readBlockPos(); + bounds = buffer.readBlockPos(); + } + + @Override + public void write(PacketBuffer buffer) { + buffer.writeString(name); + buffer.writeBlockPos(origin); + buffer.writeBlockPos(bounds); + } + + @Override + public void handle(Supplier context) { + context.get() + .enqueueWork(() -> { + ServerPlayerEntity player = context.get() + .getSender(); + if (player == null) + return; + Create.schematicReceiver.handleInstantSchematic(player, name, player.world, origin, bounds); + }); + context.get() + .setPacketHandled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/config/CLogistics.java b/src/main/java/com/simibubi/create/foundation/config/CLogistics.java index a784769cc..4fa8cc416 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CLogistics.java +++ b/src/main/java/com/simibubi/create/foundation/config/CLogistics.java @@ -4,6 +4,7 @@ public class CLogistics extends ConfigBase { public ConfigInt defaultExtractionLimit = i(64, 1, 64, "defaultExtractionLimit", Comments.defaultExtractionLimit); public ConfigInt defaultExtractionTimer = i(8, 1, "defaultExtractionTimer", Comments.defaultExtractionTimer); + public ConfigInt psiTimeout = i(20, 1, "psiTimeout", Comments.psiTimeout); public ConfigInt mechanicalArmRange = i(5, 1, "mechanicalArmRange", Comments.mechanicalArmRange); public ConfigInt linkRange = i(128, 1, "linkRange", Comments.linkRange); @@ -18,6 +19,7 @@ public class CLogistics extends ConfigBase { static String defaultExtractionTimer = "The amount of ticks a funnel waits between item transferrals, when it is not re-activated by redstone."; static String linkRange = "Maximum possible range in blocks of redstone link connections."; + static String psiTimeout = "The amount of ticks a portable storage interface waits for transfers until letting contraptions move along."; static String mechanicalArmRange = "Maximum distance in blocks a Mechanical Arm can reach across."; } diff --git a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java index 89d2125ea..8463c4561 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java @@ -21,7 +21,6 @@ import com.simibubi.create.content.contraptions.components.structureMovement.mou import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock; import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; -import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverBlock; import com.simibubi.create.content.palettes.PavedBlock; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Pointing; @@ -233,48 +232,6 @@ public class BlockStateGen { }); } - public static NonNullBiConsumer, RegistrateBlockstateProvider> beltObserver() { - return (c, p) -> { - - Map> models = new IdentityHashMap<>(); - Map baseModels = new HashMap<>(); - - for (boolean powered : Iterate.trueAndFalse) { - for (boolean belt : Iterate.trueAndFalse) { - String suffix = (belt ? "_belt" : "") + (powered ? "_powered" : ""); - baseModels.put(suffix, p.modLoc("block/belt_observer/base" + suffix)); - } - } - - for (BeltObserverBlock.Mode mode : BeltObserverBlock.Mode.values()) { - String modeName = mode.getString(); - HashMap map = new HashMap<>(); - for (boolean powered : Iterate.trueAndFalse) { - for (boolean belt : Iterate.trueAndFalse) { - String suffix = (belt ? "_belt" : "") + (powered ? "_powered" : ""); - map.put(suffix, p.models() - .withExistingParent("block/belt_observer/" + modeName + suffix, baseModels.get(suffix)) - .texture("texture", - p.modLoc("block/belt_observer_" + modeName + (powered ? "_powered" : "")))); - } - } - models.put(mode, map); - } - - p.getVariantBuilder(c.get()) - .forAllStates(state -> { - String suffix = (state.get(BeltObserverBlock.BELT) ? "_belt" : "") - + (state.get(BeltObserverBlock.POWERED) ? "_powered" : ""); - return ConfiguredModel.builder() - .modelFile(models.get(state.get(BeltObserverBlock.MODE)) - .get(suffix)) - .rotationY((int) state.get(BeltObserverBlock.HORIZONTAL_FACING) - .getHorizontalAngle()) - .build(); - }); - }; - } - public static NonNullBiConsumer, RegistrateBlockstateProvider> linearChassis() { return (c, p) -> { ResourceLocation side = p.modLoc("block/" + c.getName() + "_side"); diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index 3dc167f38..d9a767717 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -656,7 +656,7 @@ public class StandardRecipeGen extends CreateRecipeProvider { .patternLine("B B") .patternLine("BBB")), - BELT_OBSERVER = create(AllBlocks.BELT_OBSERVER).unlockedBy(AllItems.BELT_CONNECTOR::get) + BELT_OBSERVER = create(AllBlocks.CONTENT_OBSERVER).unlockedBy(AllItems.BELT_CONNECTOR::get) .viaShaped(b -> b.key('B', I.brassCasing()) .key('R', I.redstone()) .key('I', I.iron()) diff --git a/src/main/java/com/simibubi/create/foundation/fluid/CombinedTankWrapper.java b/src/main/java/com/simibubi/create/foundation/fluid/CombinedTankWrapper.java new file mode 100644 index 000000000..2a5bb5661 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/fluid/CombinedTankWrapper.java @@ -0,0 +1,143 @@ +package com.simibubi.create.foundation.fluid; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.wrapper.EmptyHandler; + +/** + * Combines multiple IFluidHandlers into one interface (See CombinedInvWrapper + * for items) + */ +public class CombinedTankWrapper implements IFluidHandler { + + protected final IFluidHandler[] itemHandler; + protected final int[] baseIndex; + protected final int tankCount; + protected boolean enforceVariety; + + public CombinedTankWrapper(IFluidHandler... fluidHandlers) { + this.itemHandler = fluidHandlers; + this.baseIndex = new int[fluidHandlers.length]; + int index = 0; + for (int i = 0; i < fluidHandlers.length; i++) { + index += fluidHandlers[i].getTanks(); + baseIndex[i] = index; + } + this.tankCount = index; + } + + public CombinedTankWrapper enforceVariety() { + enforceVariety = true; + return this; + } + + @Override + public int getTanks() { + return tankCount; + } + + @Override + public FluidStack getFluidInTank(int tank) { + int index = getIndexForSlot(tank); + IFluidHandler handler = getHandlerFromIndex(index); + tank = getSlotFromIndex(tank, index); + return handler.getFluidInTank(tank); + } + + @Override + public int getTankCapacity(int tank) { + int index = getIndexForSlot(tank); + IFluidHandler handler = getHandlerFromIndex(index); + int localSlot = getSlotFromIndex(tank, index); + return handler.getTankCapacity(localSlot); + } + + @Override + public boolean isFluidValid(int tank, FluidStack stack) { + int index = getIndexForSlot(tank); + IFluidHandler handler = getHandlerFromIndex(index); + int localSlot = getSlotFromIndex(tank, index); + return handler.isFluidValid(localSlot, stack); + } + + @Override + public int fill(FluidStack resource, FluidAction action) { + int filled = 0; + resource = resource.copy(); + + for (IFluidHandler iFluidHandler : itemHandler) { + boolean skipRest = false; + int filledIntoCurrent = iFluidHandler.fill(resource, action); + + for (int i = 0; i < iFluidHandler.getTanks(); i++) + if (iFluidHandler.getFluidInTank(i).isFluidEqual(resource) && enforceVariety) + skipRest = true; + + resource.shrink(filledIntoCurrent); + filled += filledIntoCurrent; + + if (resource.isEmpty() || skipRest) + break; + } + + return filled; + } + + @Override + public FluidStack drain(FluidStack resource, FluidAction action) { + FluidStack drained = FluidStack.EMPTY; + resource = resource.copy(); + + for (IFluidHandler iFluidHandler : itemHandler) { + FluidStack drainedFromCurrent = iFluidHandler.drain(resource, action); + int amount = drainedFromCurrent.getAmount(); + resource.shrink(amount); + + if (!drainedFromCurrent.isEmpty()) + drained = new FluidStack(drainedFromCurrent.getFluid(), amount + drained.getAmount()); + if (resource.isEmpty()) + break; + } + + return drained; + } + + @Override + public FluidStack drain(int maxDrain, FluidAction action) { + FluidStack drained = FluidStack.EMPTY; + + for (IFluidHandler iFluidHandler : itemHandler) { + FluidStack drainedFromCurrent = iFluidHandler.drain(maxDrain, action); + int amount = drainedFromCurrent.getAmount(); + maxDrain -= amount; + + if (!drainedFromCurrent.isEmpty()) + drained = new FluidStack(drainedFromCurrent.getFluid(), amount + drained.getAmount()); + if (maxDrain == 0) + break; + } + + return drained; + } + + protected int getIndexForSlot(int slot) { + if (slot < 0) + return -1; + for (int i = 0; i < baseIndex.length; i++) + if (slot - baseIndex[i] < 0) + return i; + return -1; + } + + protected IFluidHandler getHandlerFromIndex(int index) { + if (index < 0 || index >= itemHandler.length) + return (IFluidHandler) EmptyHandler.INSTANCE; + return itemHandler[index]; + } + + protected int getSlotFromIndex(int slot, int index) { + if (index <= 0 || index >= baseIndex.length) + return slot; + return slot - baseIndex[index - 1]; + } +} diff --git a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java index 0276412c0..e7897e033 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java @@ -14,43 +14,47 @@ public enum AllGuiTextures { // Inventories PLAYER_INVENTORY("player_inventory.png", 176, 108), - WAND_SYMMETRY("wand_symmetry.png", 207, 58), - BLOCKZAPPER("zapper.png", 217, 70), - TERRAINZAPPER("zapper.png", 0, 70, 217, 105), - TERRAINZAPPER_INACTIVE_PARAM("zapper.png", 0, 175, 14, 14), + WAND_OF_SYMMETRY("curiosities.png", 188, 99), + BLOCKZAPPER("curiosities.png", 0, 99, 214, 97), + TERRAINZAPPER("curiosities_2.png", 0, 0, 234, 101), + TERRAINZAPPER_INACTIVE_PARAM("curiosities_2.png", 238, 0, 18, 18), - SCHEMATIC_TABLE("schematic_table.png", 207, 89), - SCHEMATIC_TABLE_PROGRESS("schematic_table.png", 209, 0, 24, 17), - SCHEMATIC("schematic.png", 207, 95), + SCHEMATIC("schematics.png", 192, 121), + SCHEMATIC_SLOT("widgets.png", 54, 0, 16, 16), + SCHEMATIC_PROMPT("schematics_2.png", 213, 77), + HUD_BACKGROUND("overlay.png", 0, 0, 16, 16), - SCHEMATICANNON_BG("schematicannon.png", 247, 161), - SCHEMATICANNON_BG_FUEL("schematicannon.png", 247, 161), - SCHEMATICANNON_PROGRESS("schematicannon.png", 0, 161, 121, 16), - SCHEMATICANNON_PROGRESS_2("schematicannon.png", 122, 161, 16, 15), - SCHEMATICANNON_HIGHLIGHT("schematicannon.png", 0, 182, 28, 28), - SCHEMATICANNON_FUEL("schematicannon.png", 0, 215, 82, 4), - SCHEMATICANNON_FUEL_CREATIVE("schematicannon.png", 0, 219, 82, 4), + SCHEMATIC_TABLE("schematics.png", 0, 121, 214, 83), + SCHEMATIC_TABLE_PROGRESS("schematics.png", 0, 204, 84, 16), - FLEXCRATE("flex_crate_and_stockpile_switch.png", 125, 129), - FLEXCRATE_DOUBLE("double_flexcrate.png", 197, 129), - FLEXCRATE_LOCKED_SLOT("flex_crate_and_stockpile_switch.png", 138, 0, 18, 18), + SCHEMATICANNON_TOP("schematics_2.png", 0, 77, 213, 42), + SCHEMATICANNON_BOTTOM("schematics_2.png", 0, 119, 213, 99), + SCHEMATICANNON_PROGRESS("schematics_2.png", 76, 239, 114, 16), + SCHEMATICANNON_CHECKLIST_PROGRESS("schematics_2.png", 191, 240, 16, 14), + SCHEMATICANNON_HIGHLIGHT("schematics_2.png", 1, 229, 26, 26), + SCHEMATICANNON_FUEL("schematics_2.png", 28, 222, 47, 16), + SCHEMATICANNON_FUEL_CREATIVE("schematics_2.png", 28, 239, 47, 16), - STOCKSWITCH("flex_crate_and_stockpile_switch.png", 0, 129, 205, 93), - STOCKSWITCH_INTERVAL("flex_crate_and_stockpile_switch.png", 0, 222, 198, 17), - STOCKSWITCH_INTERVAL_END("flex_crate_and_stockpile_switch.png", 0, 239, 198, 17), - STOCKSWITCH_CURSOR_ON("flex_crate_and_stockpile_switch.png", 218, 129, 8, 21), - STOCKSWITCH_CURSOR_OFF("flex_crate_and_stockpile_switch.png", 226, 129, 8, 21), - STOCKSWITCH_BOUND_LEFT("flex_crate_and_stockpile_switch.png", 234, 129, 7, 21), - STOCKSWITCH_BOUND_RIGHT("flex_crate_and_stockpile_switch.png", 241, 129, 7, 21), + STOCKSWITCH("logistics.png", 182, 93), + STOCKSWITCH_ARROW_UP("logistics.png", 191, 0, 7, 24), + STOCKSWITCH_ARROW_DOWN("logistics.png", 198, 0, 7, 24), + STOCKSWITCH_CURSOR("logistics.png", 206, 0, 7, 16), + STOCKSWITCH_INTERVAL("logistics.png", 0, 93, 100, 18), + STOCKSWITCH_UNPOWERED_LANE("logistics.png", 36, 18, 102, 18), + STOCKSWITCH_POWERED_LANE("logistics.png", 36, 40, 102, 18), - FILTER("filter.png", 200, 100), - ATTRIBUTE_FILTER("filter.png", 0, 100, 200, 86), + ADJUSTABLE_CRATE("logistics_2.png", 124, 127), + ADJUSTABLE_DOUBLE_CRATE("logistics_2.png", 0, 127, 196, 127), + ADJUSTABLE_CRATE_LOCKED_SLOT("logistics_2.png", 125, 109, 18, 18), - SEQUENCER("sequencer.png", 156, 128), - SEQUENCER_INSTRUCTION("sequencer.png", 14, 47, 131, 18), - SEQUENCER_WAIT("sequencer.png", 14, 65, 131, 18), - SEQUENCER_END("sequencer.png", 14, 83, 131, 18), - SEQUENCER_EMPTY("sequencer.png", 14, 101, 131, 18), + FILTER("filters.png", 214, 97), + ATTRIBUTE_FILTER("filters.png", 0, 97, 241, 83), + + SEQUENCER("sequencer.png", 173, 159), + SEQUENCER_INSTRUCTION("sequencer.png", 0, 14, 162, 22), + SEQUENCER_WAIT("sequencer.png", 0, 58, 162, 22), + SEQUENCER_END("sequencer.png", 0, 80, 162, 22), + SEQUENCER_EMPTY("sequencer.png", 0, 102, 162, 22), // JEI JEI_SLOT("jei/widgets.png", 18, 18), @@ -65,19 +69,14 @@ public enum AllGuiTextures { BLOCKZAPPER_UPGRADE_RECIPE("jei/widgets.png", 0, 75, 144, 66), // Widgets - PALETTE_BUTTON("palette_picker.png", 0, 236, 20, 20), - TEXT_INPUT("widgets.png", 0, 28, 194, 47), BUTTON("widgets.png", 18, 18), BUTTON_HOVER("widgets.png", 18, 0, 18, 18), BUTTON_DOWN("widgets.png", 36, 0, 18, 18), - INDICATOR("widgets.png", 0, 18, 18, 5), - INDICATOR_WHITE("widgets.png", 18, 18, 18, 5), - INDICATOR_GREEN("widgets.png", 0, 23, 18, 5), - INDICATOR_YELLOW("widgets.png", 18, 23, 18, 5), - INDICATOR_RED("widgets.png", 36, 23, 18, 5), - GRAY("background.png", 0, 0, 16, 16), - - BLUEPRINT_SLOT("widgets.png", 90, 0, 24, 24), + INDICATOR("widgets.png", 0, 18, 18, 6), + INDICATOR_WHITE("widgets.png", 18, 18, 18, 6), + INDICATOR_GREEN("widgets.png", 36, 18, 18, 6), + INDICATOR_YELLOW("widgets.png", 54, 18, 18, 6), + INDICATOR_RED("widgets.png", 72, 18, 18, 6), ; diff --git a/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java b/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java index a5a197b1b..c99e71f65 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java @@ -92,10 +92,14 @@ public class AllIcons { I_ARM_ROUND_ROBIN = next(), I_ARM_FORCED_ROUND_ROBIN = next(), I_ARM_PREFER_FIRST = next(), + + I_ADD_INVERTED_ATTRIBUTE = next(), + I_FLIP = next(), I_PLAY = newRow(), I_PAUSE = next(), I_STOP = next(), + I_PLACEMENT_SETTINGS = next(), I_PATTERN_SOLID = newRow(), I_PATTERN_CHECKERED = next(), @@ -105,7 +109,9 @@ public class AllIcons { I_PATTERN_CHANCE_50 = newRow(), I_PATTERN_CHANCE_75 = next(), I_FOLLOW_DIAGONAL = next(), - I_FOLLOW_MATERIAL = next(); + I_FOLLOW_MATERIAL = next(), + + I_SCHEMATIC = newRow(); public AllIcons(int x, int y) { iconX = x * 16; diff --git a/src/main/java/com/simibubi/create/foundation/gui/ToolSelectionScreen.java b/src/main/java/com/simibubi/create/foundation/gui/ToolSelectionScreen.java index 3110dc9c0..1fbeb89ec 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/ToolSelectionScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/ToolSelectionScreen.java @@ -66,7 +66,7 @@ public class ToolSelectionScreen extends Screen { matrixStack.push(); matrixStack.translate(0, -yOffset, focused ? 100 : 0); - AllGuiTextures gray = AllGuiTextures.GRAY; + AllGuiTextures gray = AllGuiTextures.HUD_BACKGROUND; RenderSystem.enableBlend(); RenderSystem.color4f(1, 1, 1, focused ? 7 / 8f : 1 / 2f); diff --git a/src/main/java/com/simibubi/create/foundation/gui/widgets/ScrollInput.java b/src/main/java/com/simibubi/create/foundation/gui/widgets/ScrollInput.java index fe1c9baa6..eee8b3968 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/widgets/ScrollInput.java +++ b/src/main/java/com/simibubi/create/foundation/gui/widgets/ScrollInput.java @@ -47,6 +47,11 @@ public class ScrollInput extends AbstractSimiWidget { this.onScroll = onScroll; return this; } + + public ScrollInput removeCallback() { + this.onScroll = null; + return this; + } public ScrollInput titled(IFormattableTextComponent title) { this.title = title; diff --git a/src/main/java/com/simibubi/create/foundation/item/IItemHandlerModifiableIntermediate.java b/src/main/java/com/simibubi/create/foundation/item/IItemHandlerModifiableIntermediate.java new file mode 100644 index 000000000..9e035eb1f --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/item/IItemHandlerModifiableIntermediate.java @@ -0,0 +1,15 @@ +package com.simibubi.create.foundation.item; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandlerModifiable; + +interface IItemHandlerModifiableIntermediate extends IItemHandlerModifiable { + + @Override + public default ItemStack getStackInSlot(int slot) { + return getStackInSlotIntermediate(slot); + } + + public ItemStack getStackInSlotIntermediate(int slot); + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/foundation/item/ItemHandlerWrapper.java b/src/main/java/com/simibubi/create/foundation/item/ItemHandlerWrapper.java new file mode 100644 index 000000000..6a2190269 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/item/ItemHandlerWrapper.java @@ -0,0 +1,49 @@ +package com.simibubi.create.foundation.item; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandlerModifiable; + +public class ItemHandlerWrapper implements IItemHandlerModifiable { + + private IItemHandlerModifiable wrapped; + + public ItemHandlerWrapper(IItemHandlerModifiable wrapped) { + this.wrapped = wrapped; + } + + @Override + public int getSlots() { + return wrapped.getSlots(); + } + + @Override + public ItemStack getStackInSlot(int slot) { + return wrapped.getStackInSlot(slot); + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + return wrapped.insertItem(slot, stack, simulate); + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + return wrapped.extractItem(slot, amount, simulate); + } + + @Override + public int getSlotLimit(int slot) { + return wrapped.getSlotLimit(slot); + } + + @Override + public boolean isItemValid(int slot, ItemStack stack) { + return wrapped.isItemValid(slot, stack); + } + + @Override + public void setStackInSlot(int slot, ItemStack stack) { + wrapped.setStackInSlot(slot, stack); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/item/SmartInventory.java b/src/main/java/com/simibubi/create/foundation/item/SmartInventory.java index 71ddba451..7e5050848 100644 --- a/src/main/java/com/simibubi/create/foundation/item/SmartInventory.java +++ b/src/main/java/com/simibubi/create/foundation/item/SmartInventory.java @@ -7,11 +7,10 @@ import com.simibubi.create.foundation.tileEntity.SyncedTileEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraftforge.common.util.INBTSerializable; -import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.RecipeWrapper; -public class SmartInventory extends RecipeWrapper implements IItemHandlerModifiable, INBTSerializable { +public class SmartInventory extends RecipeWrapper implements IItemHandlerModifiableIntermediate, INBTSerializable { private boolean extractionAllowed; private boolean insertionAllowed; @@ -83,6 +82,11 @@ public class SmartInventory extends RecipeWrapper implements IItemHandlerModifia inv.setStackInSlot(slot, stack); } + @Override + public ItemStack getStackInSlot(int slot) { + return super.getStackInSlot(slot); + } + public int getStackLimit(int slot, @Nonnull ItemStack stack) { return Math.min(getSlotLimit(slot), stack.getMaxStackSize()); } @@ -118,4 +122,9 @@ public class SmartInventory extends RecipeWrapper implements IItemHandlerModifia } + @Override + public ItemStack getStackInSlotIntermediate(int slot) { + return getStackInSlot(slot); + } + } diff --git a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java index 5200f3255..ed8de400c 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java +++ b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java @@ -23,6 +23,7 @@ import com.simibubi.create.content.logistics.item.filter.FilterScreenPacket; import com.simibubi.create.content.logistics.packet.ConfigureFlexcratePacket; import com.simibubi.create.content.logistics.packet.ConfigureStockswitchPacket; import com.simibubi.create.content.schematics.packet.ConfigureSchematicannonPacket; +import com.simibubi.create.content.schematics.packet.InstantSchematicPacket; import com.simibubi.create.content.schematics.packet.SchematicPlacePacket; import com.simibubi.create.content.schematics.packet.SchematicUploadPacket; import com.simibubi.create.foundation.command.ConfigureConfigPacket; @@ -55,6 +56,7 @@ public enum AllPackets { PLACE_ARM(ArmPlacementPacket.class, ArmPlacementPacket::new), MINECART_COUPLING_CREATION(MinecartCouplingCreationPacket.class, MinecartCouplingCreationPacket::new), PERSISTANT_DATA_REQUEST(PersistantDataPacketRequest.class, PersistantDataPacketRequest::new), + INSTANT_SCHEMATIC(InstantSchematicPacket.class, InstantSchematicPacket::new), // Server to Client SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new), diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java b/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java index 6864fd7c6..af52a4b24 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java @@ -12,6 +12,9 @@ import net.minecraft.block.BlockState; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntityType; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.items.CapabilityItemHandler; public abstract class SmartTileEntity extends SyncedTileEntity implements ITickableTileEntity { @@ -146,5 +149,13 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka return (T) behaviours.get(type); return null; } + + protected boolean isItemHandlerCap(Capability cap) { + return cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; + } + + protected boolean isFluidHandlerCap(Capability cap) { + return cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY; + } } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/BehaviourType.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/BehaviourType.java index 0942955f5..8b3f90827 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/BehaviourType.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/BehaviourType.java @@ -4,4 +4,18 @@ import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; public class BehaviourType { + private String name; + + public BehaviourType(String name) { + this.name = name; + } + + public BehaviourType() { + this(""); + } + + public String getName() { + return name; + } + } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java new file mode 100644 index 000000000..810f84b60 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java @@ -0,0 +1,264 @@ +package com.simibubi.create.foundation.tileEntity.behaviour.fluid; + +import java.util.function.Consumer; + +import org.apache.commons.lang3.mutable.MutableInt; + +import com.simibubi.create.foundation.fluid.CombinedTankWrapper; +import com.simibubi.create.foundation.fluid.SmartFluidTank; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; +import com.simibubi.create.foundation.utility.LerpedFloat; +import com.simibubi.create.foundation.utility.LerpedFloat.Chaser; +import com.simibubi.create.foundation.utility.NBTHelper; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraftforge.common.util.Constants.NBT; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public class SmartFluidTankBehaviour extends TileEntityBehaviour { + + public static BehaviourType + + TYPE = new BehaviourType<>(), INPUT = new BehaviourType<>("Input"), OUTPUT = new BehaviourType<>("Output"); + + private static final int SYNC_RATE = 8; + + protected int syncCooldown; + protected boolean queuedSync; + protected TankSegment[] tanks; + protected LazyOptional capability; + protected boolean extractionAllowed; + protected boolean insertionAllowed; + + private BehaviourType behaviourType; + + public static SmartFluidTankBehaviour single(SmartTileEntity te, int capacity) { + return new SmartFluidTankBehaviour(TYPE, te, 1, capacity, false); + } + + public SmartFluidTankBehaviour(BehaviourType type, SmartTileEntity te, int tanks, + int tankCapacity, boolean enforceVariety) { + super(te); + insertionAllowed = true; + extractionAllowed = true; + behaviourType = type; + this.tanks = new TankSegment[tanks]; + IFluidHandler[] handlers = new IFluidHandler[tanks]; + for (int i = 0; i < tanks; i++) { + TankSegment tankSegment = new TankSegment(tankCapacity); + this.tanks[i] = tankSegment; + handlers[i] = tankSegment.tank; + } + capability = LazyOptional.of(() -> new InternalFluidHandler(handlers, enforceVariety)); + } + + public SmartFluidTankBehaviour allowInsertion() { + insertionAllowed = true; + return this; + } + + public SmartFluidTankBehaviour allowExtraction() { + extractionAllowed = true; + return this; + } + + public SmartFluidTankBehaviour forbidInsertion() { + insertionAllowed = false; + return this; + } + + public SmartFluidTankBehaviour forbidExtraction() { + extractionAllowed = false; + return this; + } + + @Override + public void initialize() { + super.initialize(); + if (getWorld().isRemote) + return; + foreach(ts -> { + ts.fluidLevel.forceNextSync(); + ts.onFluidStackChanged(ts.tank.getFluid()); + }); + } + + @Override + public void tick() { + super.tick(); + + if (syncCooldown > 0) { + syncCooldown--; + if (syncCooldown == 0 && queuedSync) + tileEntity.sendData(); + } + + foreach(te -> { + LerpedFloat fluidLevel = te.getFluidLevel(); + if (fluidLevel != null) + fluidLevel.tickChaser(); + }); + } + + public void sendDataImmediately() { + syncCooldown = 0; + queuedSync = false; + tileEntity.sendData(); + } + + public void sendDataLazily() { + if (syncCooldown > 0) { + queuedSync = true; + return; + } + tileEntity.sendData(); + queuedSync = false; + syncCooldown = SYNC_RATE; + } + + @Override + public void remove() { + super.remove(); + capability.invalidate(); + } + + public SmartFluidTank getPrimaryHandler() { + return getPrimaryTank().tank; + } + + public TankSegment getPrimaryTank() { + return tanks[0]; + } + + public TankSegment[] getTanks() { + return tanks; + } + + public boolean isEmpty() { + for (TankSegment tankSegment : tanks) + if (!tankSegment.tank.isEmpty()) + return false; + return true; + } + + public void foreach(Consumer action) { + for (TankSegment tankSegment : tanks) + action.accept(tankSegment); + } + + public LazyOptional getCapability() { + return capability; + } + + @Override + public void write(CompoundNBT nbt, boolean clientPacket) { + super.write(nbt, clientPacket); + ListNBT tanksNBT = new ListNBT(); + foreach(ts -> tanksNBT.add(ts.writeNBT())); + nbt.put(getType().getName() + "Tanks", tanksNBT); + } + + @Override + public void read(CompoundNBT nbt, boolean clientPacket) { + super.read(nbt, clientPacket); + MutableInt index = new MutableInt(0); + NBTHelper.iterateCompoundList(nbt.getList(getType().getName() + "Tanks", NBT.TAG_COMPOUND), c -> { + if (index.intValue() >= tanks.length) + return; + tanks[index.intValue()].readNBT(c, clientPacket); + index.increment(); + }); + } + + class InternalFluidHandler extends CombinedTankWrapper { + + public InternalFluidHandler(IFluidHandler[] handlers, boolean enforceVariety) { + super(handlers); + if (enforceVariety) + enforceVariety(); + } + + @Override + public int fill(FluidStack resource, FluidAction action) { + if (!insertionAllowed) + return 0; + return super.fill(resource, action); + } + + @Override + public FluidStack drain(FluidStack resource, FluidAction action) { + if (!extractionAllowed) + return FluidStack.EMPTY; + return super.drain(resource, action); + } + + @Override + public FluidStack drain(int maxDrain, FluidAction action) { + if (!extractionAllowed) + return FluidStack.EMPTY; + return super.drain(maxDrain, action); + } + + } + + public class TankSegment { + + protected SmartFluidTank tank; + protected LerpedFloat fluidLevel; + protected FluidStack renderedFluid; + + public TankSegment(int capacity) { + tank = new SmartFluidTank(1000, f -> onFluidStackChanged(f)); + fluidLevel = LerpedFloat.linear() + .startWithValue(0) + .chase(0, .25, Chaser.EXP); + renderedFluid = FluidStack.EMPTY; + } + + protected void onFluidStackChanged(FluidStack newFluidStack) { + if (!tileEntity.hasWorld()) + return; + fluidLevel.chase(tank.getFluidAmount() / (float) tank.getCapacity(), .25, Chaser.EXP); + if (!getWorld().isRemote) + sendDataLazily(); + } + + public FluidStack getRenderedFluid() { + return renderedFluid; + } + + public LerpedFloat getFluidLevel() { + return fluidLevel; + } + + public float getTotalUnits(float partialTicks) { + return fluidLevel.getValue(partialTicks) * tank.getCapacity(); + } + + public CompoundNBT writeNBT() { + CompoundNBT compound = new CompoundNBT(); + compound.put("TankContent", tank.writeToNBT(new CompoundNBT())); + compound.put("Level", fluidLevel.writeNBT()); + return compound; + } + + public void readNBT(CompoundNBT compound, boolean clientPacket) { + tank.readFromNBT(compound.getCompound("TankContent")); + fluidLevel.readNBT(compound.getCompound("Level"), clientPacket); + if (!tank.getFluid() + .isEmpty()) + renderedFluid = tank.getFluid(); + } + + } + + @Override + public BehaviourType getType() { + return behaviourType; + } +} diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java index 703f8f608..eeecbff6c 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java @@ -3,6 +3,8 @@ package com.simibubi.create.foundation.tileEntity.behaviour.inventory; import java.util.function.Function; import java.util.function.Predicate; +import javax.annotation.Nullable; + import com.google.common.base.Predicates; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.item.ItemHelper; @@ -34,17 +36,19 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { protected InterfaceProvider target; protected LazyOptional targetCapability; protected boolean simulateNext; + protected boolean bypassSided; + private boolean findNewNextTick; private BehaviourType behaviourType; public static InvManipulationBehaviour forExtraction(SmartTileEntity te, InterfaceProvider target) { return new InvManipulationBehaviour(EXTRACT, te, target); } - + public static InvManipulationBehaviour forInsertion(SmartTileEntity te, InterfaceProvider target) { return new InvManipulationBehaviour(INSERT, te, target); } - + public InvManipulationBehaviour(SmartTileEntity te, InterfaceProvider target) { this(TYPE, te, target); } @@ -53,10 +57,16 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { InterfaceProvider target) { super(te); behaviourType = type; - setLazyTickRate(40); + setLazyTickRate(5); this.target = target; this.targetCapability = LazyOptional.empty(); simulateNext = false; + bypassSided = false; + } + + public InvManipulationBehaviour bypassSidedness() { + bypassSided = true; + return this; } /** @@ -71,6 +81,11 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { return targetCapability.isPresent(); } + @Nullable + public IItemHandler getInventory() { + return targetCapability.orElse(null); + } + public ItemStack extract() { return extract(getAmountFromFilter()); } @@ -124,11 +139,12 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { @Override public void initialize() { super.initialize(); - findNewCapability(); + findNewNextTick = true; } protected void onHandlerInvalidated(LazyOptional handler) { - findNewCapability(); + findNewNextTick = true; + targetCapability = LazyOptional.empty(); } @Override @@ -137,6 +153,15 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { if (!targetCapability.isPresent()) findNewCapability(); } + + @Override + public void tick() { + super.tick(); + if (findNewNextTick) { + findNewNextTick = false; + findNewCapability(); + } + } public int getAmountFromFilter() { int amount = -1; @@ -159,8 +184,8 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { TileEntity invTE = world.getTileEntity(pos); if (invTE == null) return; - targetCapability = - invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, targetBlockFace.getFace()); + targetCapability = bypassSided ? invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + : invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, targetBlockFace.getFace()); if (targetCapability.isPresent()) targetCapability.addListener(this::onHandlerInvalidated); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/DirectionHelper.java b/src/main/java/com/simibubi/create/foundation/utility/DirectionHelper.java index e9bd8eea0..17f134c80 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/DirectionHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/DirectionHelper.java @@ -8,6 +8,7 @@ import static net.minecraft.util.Direction.UP; import static net.minecraft.util.Direction.WEST; import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; /** * A bunch of methods that got stripped out of Direction in 1.15 @@ -73,4 +74,9 @@ public class DirectionHelper { return WEST; } } + + public static Direction getPositivePerpendicular(Axis horizontalAxis) { + return horizontalAxis == Axis.X ? SOUTH : EAST; + } + } diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index 0c2536fc2..7ef4f7db8 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -158,13 +158,10 @@ "create.gui.adjustable_crate.storageSpace": "Storage Space", "create.gui.stockpile_switch.title": "Stockpile Switch", - "create.gui.stockpile_switch.lowerLimit": "Lower Threshold", - "create.gui.stockpile_switch.upperLimit": "Upper Threshold", - "create.gui.stockpile_switch.startAt": "Start Signal at", - "create.gui.stockpile_switch.startAbove": "Start Signal above", - "create.gui.stockpile_switch.stopAt": "Stop Signal at", - "create.gui.stockpile_switch.stopBelow": "Stop Signal below", - + "create.gui.stockpile_switch.invert_signal": "Invert Signal", + "create.gui.stockpile_switch.move_to_lower_at": "Move to lower lane at %1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "Move to upper lane at %1$s%%", + "create.gui.sequenced_gearshift.title": "Sequenced Gearshift", "create.gui.sequenced_gearshift.instruction": "Instruction", "create.gui.sequenced_gearshift.instruction.turn_angle": "Turn", @@ -185,7 +182,8 @@ "create.schematicAndQuill.secondPos": "Second position set.", "create.schematicAndQuill.noTarget": "Hold [Ctrl] to select Air blocks.", "create.schematicAndQuill.abort": "Removed selection.", - "create.schematicAndQuill.prompt": "Enter a name for the Schematic:", + "create.schematicAndQuill.title": "Schematic Name:", + "create.schematicAndQuill.convert": "Save and Deploy Immediately", "create.schematicAndQuill.fallbackName": "My Schematic", "create.schematicAndQuill.saved": "Saved as %1$s", @@ -234,9 +232,12 @@ "create.schematic.tool.flip.description.3": "", "create.schematics.synchronizing": "Syncing...", - "create.schematics.uploadTooLarge": "Your schematic is too big.", + "create.schematics.uploadTooLarge": "Your schematic exceeds limitations specified by the server.", "create.schematics.maxAllowedSize": "The maximum allowed schematic file size is:", + "create.gui.schematicTable.title": "Schematic Table", + "create.gui.schematicTable.refresh": "Refresh Files", + "create.gui.schematicTable.open_folder": "Open Folder", "create.gui.schematicTable.title": "Schematic Table", "create.gui.schematicTable.availableSchematics": "Available Schematics", "create.gui.schematicTable.noSchematics": "No Schematics Saved", @@ -244,19 +245,23 @@ "create.gui.schematicTable.finished": "Upload Finished!", "create.gui.schematicannon.title": "Schematicannon", - "create.gui.schematicannon.settingsTitle": "Placement Settings", - "create.gui.schematicannon.listPrinter": "Material List Printer", + "create.gui.schematicannon.listPrinter": "Checklist Printer", "create.gui.schematicannon.gunpowderLevel": "Gunpowder at %1$s%%", "create.gui.schematicannon.shotsRemaining": "Shots left: %1$s", "create.gui.schematicannon.shotsRemainingWithBackup": "With backup: %1$s", "create.gui.schematicannon.optionEnabled": "Currently Enabled", "create.gui.schematicannon.optionDisabled": "Currently Disabled", + "create.gui.schematicannon.showOptions": "Show Printer Settings", "create.gui.schematicannon.option.dontReplaceSolid": "Don't Replace Solid Blocks", "create.gui.schematicannon.option.replaceWithSolid": "Replace Solid with Solid", "create.gui.schematicannon.option.replaceWithAny": "Replace Solid with Any", "create.gui.schematicannon.option.replaceWithEmpty": "Replace Solid with Empty", "create.gui.schematicannon.option.skipMissing": "Skip missing Blocks", "create.gui.schematicannon.option.skipTileEntities": "Protect Tile Entities", + + "create.gui.schematicannon.slot.gunpowder": "Add gunpowder to fuel the cannon", + "create.gui.schematicannon.slot.listPrinter": "Place books here to print a Checklist for your Schematic", + "create.gui.schematicannon.slot.schematic": "Add your Schematic here. Make sure it is deployed at a specific location.", "create.gui.schematicannon.option.skipMissing.description": "If the cannon cannot find a required Block for placement, it will continue at the next Location.", "create.gui.schematicannon.option.skipTileEntities.description": "The cannon will avoid replacing data holding blocks such as Chests.", @@ -293,23 +298,42 @@ "create.gui.filter.ignore_data.description": "Items match regardless of their attributes.", "create.item_attributes.placeable": "is placeable", + "create.item_attributes.placeable.inverted": "is not placeable", "create.item_attributes.consumable": "can be eaten", + "create.item_attributes.consumable.inverted": "cannot be eaten", "create.item_attributes.smeltable": "can be Smelted", + "create.item_attributes.smeltable.inverted": "cannot be Smelted", "create.item_attributes.washable": "can be Washed", + "create.item_attributes.washable.inverted": "cannot be Washed", "create.item_attributes.smokable": "can be Smoked", + "create.item_attributes.smokable.inverted": "cannot be Smoked", + "create.item_attributes.crushable": "can be Crushed", + "create.item_attributes.crushable.inverted": "cannot be Crushed", "create.item_attributes.blastable": "is smeltable in Blast Furnace", + "create.item_attributes.blastable.inverted": "is not smeltable in Blast Furnace", "create.item_attributes.enchanted": "is enchanted", + "create.item_attributes.enchanted.inverted": "is unenchanted", "create.item_attributes.damaged": "is damaged", + "create.item_attributes.damaged.inverted": "is not damaged", "create.item_attributes.badly_damaged": "is heavily damaged", + "create.item_attributes.badly_damaged.inverted": "is not heavily damaged", "create.item_attributes.not_stackable": "cannot stack", + "create.item_attributes.not_stackable.inverted": "can be stacked", "create.item_attributes.equipable": "can be equipped", + "create.item_attributes.equipable.inverted": "cannot be equipped", "create.item_attributes.furnace_fuel": "is furnace fuel", + "create.item_attributes.furnace_fuel.inverted": "is not furnace fuel", "create.item_attributes.in_tag": "is tagged %1$s", - "create.item_attributes.in_item_group": "belongs to %1$s", + "create.item_attributes.in_tag.inverted": "is not tagged %1$s", + "create.item_attributes.in_item_group": "is in group '%1$s'", + "create.item_attributes.in_item_group.inverted": "is not in group '%1$s'", "create.item_attributes.added_by": "was added by %1$s", + "create.item_attributes.added_by.inverted": "was not added by %1$s", "create.gui.attribute_filter.no_selected_attributes": "No attributes selected", "create.gui.attribute_filter.selected_attributes": "Selected attributes:", + "create.gui.attribute_filter.add_attribute": "Add attribute to List", + "create.gui.attribute_filter.add_inverted_attribute": "Add opposite attribute to List", "create.gui.attribute_filter.whitelist_disjunctive": "Whitelist (Any)", "create.gui.attribute_filter.whitelist_disjunctive.description": "Items pass if they have any of the selected attributes.", "create.gui.attribute_filter.whitelist_conjunctive": "Whitelist (All)", diff --git a/src/main/resources/assets/create/models/block/belt_observer/base.json b/src/main/resources/assets/create/models/block/belt_observer/base.json deleted file mode 100644 index 32c14f1ba..000000000 --- a/src/main/resources/assets/create/models/block/belt_observer/base.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "brass_casing": "create:block/brass_casing", - "extractor": "create:block/extractor", - "particle": "#texture", - "entity_detector_off": "#texture", - "entity_detector_front": "create:block/belt_observer_front" - }, - "elements": [ - { - "name": "Bottom", - "from": [0, 0, 0], - "to": [16, 2, 16], - "faces": { - "north": {"uv": [0, 14, 16, 16], "texture": "#brass_casing"}, - "east": {"uv": [0, 0, 2, 16], "rotation": 270, "texture": "#entity_detector_off"}, - "south": {"uv": [0, 14, 16, 16], "texture": "#brass_casing"}, - "west": {"uv": [14, 0, 16, 16], "rotation": 90, "texture": "#entity_detector_off"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#brass_casing"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#entity_detector_off"} - } - }, - { - "name": "Top", - "from": [0, 14, 0], - "to": [5, 16, 16], - "faces": { - "north": {"uv": [11, 0, 16, 2], "texture": "#brass_casing"}, - "east": {"uv": [14, 0, 16, 16], "rotation": 270, "texture": "#entity_detector_off"}, - "south": {"uv": [0, 0, 5, 2], "texture": "#brass_casing"}, - "west": {"uv": [0, 0, 2, 16], "rotation": 90, "texture": "#entity_detector_off"}, - "up": {"uv": [11, 0, 16, 16], "rotation": 180, "texture": "#entity_detector_off"}, - "down": {"uv": [0, 0, 5, 16], "texture": "#brass_casing"} - } - }, - { - "name": "Top", - "from": [11, 14, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 5, 2], "texture": "#brass_casing"}, - "east": {"uv": [14, 0, 16, 16], "rotation": 270, "texture": "#entity_detector_off"}, - "south": {"uv": [11, 0, 16, 2], "texture": "#brass_casing"}, - "west": {"uv": [0, 0, 2, 16], "rotation": 90, "texture": "#entity_detector_off"}, - "up": {"uv": [0, 0, 5, 16], "rotation": 180, "texture": "#entity_detector_off"}, - "down": {"uv": [0, 0, 5, 16], "texture": "#brass_casing"} - } - }, - { - "name": "Top", - "from": [5, 14, 0], - "to": [11, 16, 14], - "faces": { - "north": {"uv": [5, 0, 11, 2], "texture": "#brass_casing"}, - "east": {"uv": [14, 0, 16, 14], "rotation": 270, "texture": "#entity_detector_off"}, - "south": {"uv": [5, 1, 11, 3], "rotation": 180, "texture": "#entity_detector_off"}, - "west": {"uv": [0, 0, 2, 14], "rotation": 90, "texture": "#entity_detector_off"}, - "up": {"uv": [5, 2, 11, 16], "rotation": 180, "texture": "#entity_detector_off"}, - "down": {"uv": [5, 2, 11, 16], "texture": "#brass_casing"} - } - }, - { - "name": "Side", - "from": [0, 2, 0], - "to": [2, 14, 16], - "faces": { - "north": {"uv": [14, 2, 16, 14], "texture": "#brass_casing"}, - "east": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#brass_casing"}, - "south": {"uv": [0, 2, 2, 14], "texture": "#brass_casing"}, - "west": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#entity_detector_off"}, - "down": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"} - } - }, - { - "name": "Side", - "from": [14, 2, 0], - "to": [16, 14, 16], - "faces": { - "north": {"uv": [0, 2, 2, 14], "texture": "#brass_casing"}, - "east": {"uv": [2, 0, 14, 16], "rotation": 270, "texture": "#entity_detector_off"}, - "south": {"uv": [14, 2, 16, 14], "texture": "#brass_casing"}, - "west": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#brass_casing"}, - "down": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"} - } - }, - { - "name": "Center", - "from": [2, 2, 1], - "to": [14, 14, 17], - "faces": { - "north": {"uv": [2, 2, 14, 14], "texture": "#brass_casing"}, - "east": {"uv": [0, 2, 16, 14], "texture": "#entity_detector_front"}, - "south": {"uv": [2, 2, 14, 14], "texture": "#entity_detector_front"}, - "west": {"uv": [0, 2, 16, 14], "texture": "#entity_detector_front"}, - "up": {"uv": [0, 0, 12, 16], "texture": "#brass_casing"}, - "down": {"uv": [0, 0, 12, 16], "texture": "#brass_casing"} - } - }, - { - "name": "Filter", - "from": [5, 13, 13], - "to": [11, 15, 18], - "rotation": {"angle": 0, "axis": "x", "origin": [9, 15, 16]}, - "faces": { - "north": {"uv": [4, 1, 6, 7], "rotation": 270, "texture": "#extractor"}, - "east": {"uv": [4, 2, 6, 7], "rotation": 270, "texture": "#extractor"}, - "south": {"uv": [4, 1, 6, 7], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [4, 2, 6, 7], "rotation": 270, "texture": "#extractor"}, - "up": {"uv": [0, 9, 5, 15], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [5, 5, 11, 10], "texture": "#entity_detector_off"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_observer/base_belt.json b/src/main/resources/assets/create/models/block/belt_observer/base_belt.json deleted file mode 100644 index baed95503..000000000 --- a/src/main/resources/assets/create/models/block/belt_observer/base_belt.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "3": "create:block/extractor", - "brass_casing": "create:block/brass_casing", - "particle": "#texture", - "entity_detector_off": "#texture", - "entity_detector_front": "create:block/belt_observer_front" - }, - "elements": [ - { - "name": "Bottom", - "from": [0, 0, 0], - "to": [16, 2, 16], - "faces": { - "north": {"uv": [0, 14, 16, 16], "texture": "#brass_casing"}, - "east": {"uv": [0, 0, 2, 16], "rotation": 270, "texture": "#entity_detector_off"}, - "south": {"uv": [0, 14, 16, 16], "texture": "#brass_casing"}, - "west": {"uv": [14, 0, 16, 16], "rotation": 90, "texture": "#entity_detector_off"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#brass_casing"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#entity_detector_off"} - } - }, - { - "name": "Side", - "from": [0, 2, 0], - "to": [2, 14, 16], - "faces": { - "north": {"uv": [14, 2, 16, 14], "texture": "#brass_casing"}, - "east": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#brass_casing"}, - "south": {"uv": [0, 2, 2, 14], "texture": "#brass_casing"}, - "west": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#entity_detector_off"}, - "up": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"}, - "down": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"} - } - }, - { - "name": "Side", - "from": [14, 2, 0], - "to": [16, 14, 16], - "faces": { - "north": {"uv": [0, 2, 2, 14], "texture": "#brass_casing"}, - "east": {"uv": [2, 0, 14, 16], "rotation": 270, "texture": "#entity_detector_off"}, - "south": {"uv": [14, 2, 16, 14], "texture": "#brass_casing"}, - "west": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#brass_casing"}, - "up": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"}, - "down": {"uv": [0, 0, 2, 16], "texture": "#entity_detector_off"} - } - }, - { - "name": "Center", - "from": [2, 2, 1], - "to": [14, 14, 17], - "faces": { - "north": {"uv": [2, 2, 14, 14], "texture": "#brass_casing"}, - "east": {"uv": [0, 2, 16, 14], "texture": "#entity_detector_front"}, - "south": {"uv": [2, 2, 14, 14], "texture": "#entity_detector_front"}, - "west": {"uv": [0, 2, 16, 14], "texture": "#entity_detector_front"}, - "up": {"uv": [0, 0, 12, 16], "texture": "#brass_casing"}, - "down": {"uv": [0, 0, 12, 16], "texture": "#brass_casing"} - } - }, - { - "name": "Belt Thing", - "from": [1, 5, 16], - "to": [15, 11, 30], - "faces": { - "north": {"uv": [1, 0, 15, 6], "texture": "#entity_detector_off"}, - "east": {"uv": [1, 0, 15, 6], "texture": "#entity_detector_off"}, - "south": {"uv": [1, 0, 15, 6], "texture": "#entity_detector_off"}, - "west": {"uv": [2, 0, 16, 6], "texture": "#entity_detector_off"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#brass_casing"}, - "down": {"uv": [1, 1, 15, 15], "texture": "#brass_casing"} - } - }, - { - "name": "Top", - "from": [0, 14, 0], - "to": [5, 16, 16], - "faces": { - "north": {"uv": [11, 0, 16, 2], "texture": "#brass_casing"}, - "east": {"uv": [14, 0, 16, 16], "rotation": 270, "texture": "#entity_detector_off"}, - "south": {"uv": [0, 0, 5, 2], "texture": "#brass_casing"}, - "west": {"uv": [0, 0, 2, 16], "rotation": 90, "texture": "#entity_detector_off"}, - "up": {"uv": [11, 0, 16, 16], "rotation": 180, "texture": "#entity_detector_off"}, - "down": {"uv": [0, 0, 5, 16], "texture": "#entity_detector_off"} - } - }, - { - "name": "Top", - "from": [5, 14, 0], - "to": [11, 16, 14], - "faces": { - "north": {"uv": [5, 0, 11, 2], "texture": "#brass_casing"}, - "east": {"uv": [14, 0, 16, 14], "rotation": 270, "texture": "#entity_detector_off"}, - "south": {"uv": [5, 1, 11, 3], "rotation": 180, "texture": "#entity_detector_off"}, - "west": {"uv": [0, 0, 2, 14], "rotation": 90, "texture": "#entity_detector_off"}, - "up": {"uv": [5, 2, 11, 16], "rotation": 180, "texture": "#entity_detector_off"}, - "down": {"uv": [5, 2, 11, 16], "texture": "#entity_detector_off"} - } - }, - { - "name": "Top", - "from": [11, 14, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 5, 2], "texture": "#brass_casing"}, - "east": {"uv": [14, 0, 16, 16], "rotation": 270, "texture": "#entity_detector_off"}, - "south": {"uv": [11, 0, 16, 2], "texture": "#brass_casing"}, - "west": {"uv": [0, 0, 2, 16], "rotation": 90, "texture": "#entity_detector_off"}, - "up": {"uv": [0, 0, 5, 16], "rotation": 180, "texture": "#entity_detector_off"}, - "down": {"uv": [0, 0, 5, 16], "texture": "#entity_detector_off"} - } - }, - { - "name": "Filter", - "from": [5, 13, 13], - "to": [11, 15, 18], - "rotation": {"angle": 0, "axis": "y", "origin": [9, 15, 16]}, - "faces": { - "north": {"uv": [4, 1, 6, 7], "rotation": 270, "texture": "#3"}, - "east": {"uv": [4, 2, 6, 7], "rotation": 270, "texture": "#3"}, - "south": {"uv": [4, 1, 6, 7], "rotation": 270, "texture": "#3"}, - "west": {"uv": [4, 2, 6, 7], "rotation": 270, "texture": "#3"}, - "up": {"uv": [0, 9, 5, 15], "rotation": 90, "texture": "#3"}, - "down": {"uv": [5, 5, 11, 10], "texture": "#3"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_observer/base_belt_powered.json b/src/main/resources/assets/create/models/block/belt_observer/base_belt_powered.json deleted file mode 100644 index a81d7492c..000000000 --- a/src/main/resources/assets/create/models/block/belt_observer/base_belt_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base_belt", - "textures": { - "3": "create:block/extractor_powered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_observer/base_powered.json b/src/main/resources/assets/create/models/block/belt_observer/base_powered.json deleted file mode 100644 index 17177a585..000000000 --- a/src/main/resources/assets/create/models/block/belt_observer/base_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_observer/base", - "textures": { - "extractor": "create:block/extractor_powered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_observer/item.json b/src/main/resources/assets/create/models/block/belt_observer/item.json deleted file mode 100644 index c00967dc9..000000000 --- a/src/main/resources/assets/create/models/block/belt_observer/item.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", - "parent": "block/block", - "display": { - "gui": { - "rotation": [ 30, 45, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.625, 0.625, 0.625 ] - }, - "fixed": { - "rotation": [ 0, 180, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.5, 0.5, 0.5 ] - } - }, - "textures": { - "brass_casing": "create:block/brass_casing", - "entity_detector_off": "create:block/belt_observer_detect", - "entity_detector_front": "create:block/belt_observer_front" - }, - "elements": [ - { - "name": "Bottom", - "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "north": { "texture": "#brass_casing", "uv": [ 0, 14, 16, 16 ] }, - "east": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ], "rotation": 270 }, - "south": { "texture": "#brass_casing", "uv": [ 0, 14, 16, 16 ] }, - "west": { "texture": "#entity_detector_off", "uv": [ 14, 0, 16, 16 ], "rotation": 90 }, - "up": { "texture": "#brass_casing", "uv": [ 0, 0, 16, 16 ] }, - "down": { "texture": "#entity_detector_off", "uv": [ 0, 0, 16, 16 ] } - } - }, - { - "name": "Top", - "from": [ 0, 14, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "north": { "texture": "#brass_casing", "uv": [ 0, 0, 16, 2 ] }, - "east": { "texture": "#entity_detector_off", "uv": [ 14, 0, 16, 16 ], "rotation": 270 }, - "south": { "texture": "#brass_casing", "uv": [ 0, 0, 16, 2 ] }, - "west": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ], "rotation": 90 }, - "up": { "texture": "#entity_detector_off", "uv": [ 0, 0, 16, 16 ], "rotation": 180 }, - "down": { "texture": "#brass_casing", "uv": [ 0, 0, 16, 16 ] } - } - }, - { - "name": "Side", - "from": [ 0, 2, 0 ], - "to": [ 2, 14, 16 ], - "faces": { - "north": { "texture": "#brass_casing", "uv": [ 14, 2, 16, 14 ] }, - "east": { "texture": "#brass_casing", "uv": [ 2, 0, 14, 16 ], "rotation": 90 }, - "south": { "texture": "#brass_casing", "uv": [ 0, 2, 2, 14 ] }, - "west": { "texture": "#entity_detector_off", "uv": [ 2, 0, 14, 16 ], "rotation": 90 }, - "up": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ] }, - "down": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ] } - } - }, - { - "name": "Side", - "from": [ 14, 2, 0 ], - "to": [ 16, 14, 16 ], - "faces": { - "north": { "texture": "#brass_casing", "uv": [ 0, 2, 2, 14 ] }, - "east": { "texture": "#entity_detector_off", "uv": [ 2, 0, 14, 16 ], "rotation": 270 }, - "south": { "texture": "#brass_casing", "uv": [ 14, 2, 16, 14 ] }, - "west": { "texture": "#brass_casing", "uv": [ 2, 0, 14, 16 ], "rotation": 90 }, - "up": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ] }, - "down": { "texture": "#entity_detector_off", "uv": [ 0, 0, 2, 16 ] } - } - }, - { - "name": "Center", - "from": [ 2, 2, 1 ], - "to": [ 14, 14, 17 ], - "faces": { - "north": { "texture": "#brass_casing", "uv": [ 2, 2, 14, 14 ] }, - "east": { "texture": "#entity_detector_front", "uv": [ 0, 2, 16, 14 ] }, - "south": { "texture": "#entity_detector_front", "uv": [ 2, 2, 14, 14 ] }, - "west": { "texture": "#entity_detector_front", "uv": [ 0, 2, 16, 14 ] }, - "up": { "texture": "#brass_casing", "uv": [ 0, 0, 12, 16 ] }, - "down": { "texture": "#brass_casing", "uv": [ 0, 0, 12, 16 ] } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/content_observer/block.json b/src/main/resources/assets/create/models/block/content_observer/block.json new file mode 100644 index 000000000..4e3ce8d38 --- /dev/null +++ b/src/main/resources/assets/create/models/block/content_observer/block.json @@ -0,0 +1,80 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "5": "create:block/brass_casing_inner", + "8": "create:block/content_observer", + "9": "create:block/content_observer_inner", + "10": "create:block/filtered_detector_top", + "brass_casing": "create:block/brass_casing", + "particle": "create:block/brass_casing_side", + "1_brass_casing": "create:block/brass_casing_side", + "end": "create:block/filtered_detector_front" + }, + "elements": [ + { + "name": "Bottom Plate", + "from": [0, 0, 0], + "to": [16, 6, 16], + "faces": { + "north": {"uv": [0, 10, 16, 16], "texture": "#8"}, + "east": {"uv": [0, 10, 16, 16], "texture": "#8"}, + "south": {"uv": [0, 10, 16, 16], "texture": "#8"}, + "west": {"uv": [0, 10, 16, 16], "texture": "#8"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#9"}, + "down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#brass_casing"} + } + }, + { + "name": "Center", + "from": [0.9, 2, 0.9], + "to": [15.1, 14, 15.1], + "faces": { + "north": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"}, + "east": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"}, + "south": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"}, + "west": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"}, + "up": {"uv": [0, 0, 14, 14], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 0, 14, 14], "rotation": 270, "texture": "#5"} + } + }, + { + "name": "Indicator", + "from": [3.1, 3.1, -1.9], + "to": [12.9, 12.9, 1.1], + "faces": { + "north": {"uv": [0, 0, 10, 10], "texture": "#end"}, + "east": {"uv": [10, 0, 13, 10], "texture": "#end"}, + "west": {"uv": [10, 0, 13, 10], "texture": "#end"}, + "up": {"uv": [10, 0, 13, 10], "rotation": 90, "texture": "#end"}, + "down": {"uv": [10, 0, 13, 10], "rotation": 270, "texture": "#end"} + } + }, + { + "name": "Top Plate", + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1_brass_casing"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1_brass_casing"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1_brass_casing"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1_brass_casing"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#10"}, + "down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#brass_casing"} + } + } + ], + "display": { + "gui": { + "rotation": [30, -135, 0], + "scale": [0.625, 0.625, 0.625] + } + }, + "groups": [ + { + "name": "stockpile_switch", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/content_observer/block_powered.json b/src/main/resources/assets/create/models/block/content_observer/block_powered.json new file mode 100644 index 000000000..7ae7927b3 --- /dev/null +++ b/src/main/resources/assets/create/models/block/content_observer/block_powered.json @@ -0,0 +1,7 @@ +{ + "parent": "create:block/content_observer/block", + "textures": { + "8": "create:block/content_observer_powered", + "9": "create:block/content_observer_inner_powered" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/deployer/vertical.json b/src/main/resources/assets/create/models/block/deployer/vertical.json index e65b29b4f..3dda75643 100644 --- a/src/main/resources/assets/create/models/block/deployer/vertical.json +++ b/src/main/resources/assets/create/models/block/deployer/vertical.json @@ -7,7 +7,8 @@ "7": "create:block/piston_inner", "gearbox_top": "create:block/gearbox_top", "gearbox": "create:block/gearbox", - "andesite_casing_short": "create:block/andesite_casing_short" + "andesite_casing_short": "create:block/andesite_casing_short", + "particle": "create:block/gearbox_top" }, "elements": [ { diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/window.json b/src/main/resources/assets/create/models/block/fluid_pipe/window.json index 5cfccad79..ee5187561 100644 --- a/src/main/resources/assets/create/models/block/fluid_pipe/window.json +++ b/src/main/resources/assets/create/models/block/fluid_pipe/window.json @@ -20,8 +20,8 @@ }, { "name": "Inner", - "from": [4, 0, 11.5], - "to": [12, 16, 11.5], + "from": [4, 0, 11.9], + "to": [12, 16, 11.9], "shade": false, "faces": { "north": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"} @@ -29,17 +29,8 @@ }, { "name": "Inner", - "from": [4, 0, 4.5], - "to": [12, 16, 4.5], - "shade": false, - "faces": { - "south": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "Inner", - "from": [4.5, 0, 4], - "to": [4.5, 16, 12], + "from": [4.1, 0, 4], + "to": [4.1, 16, 12], "shade": false, "faces": { "east": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"} @@ -47,12 +38,53 @@ }, { "name": "Inner", - "from": [11.5, 0, 4], - "to": [11.5, 16, 12], + "from": [4, 0, 4.1], + "to": [12, 16, 4.1], + "shade": false, + "faces": { + "south": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Inner", + "from": [11.9, 0, 4], + "to": [11.9, 16, 12], "shade": false, "faces": { "west": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"} } + }, + { + "from": [4, 0, 4], + "to": [6, 16, 6], + "faces": { + "east": {"uv": [0, 14, 16, 16], "rotation": 90, "texture": "#0"}, + "south": {"uv": [0, 8, 16, 10], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [4, 0, 10], + "to": [6, 16, 12], + "faces": { + "north": {"uv": [0, 10, 16, 8], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 16, 16, 14], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [10, 0, 4], + "to": [12, 16, 6], + "faces": { + "south": {"uv": [0, 14, 16, 16], "rotation": 90, "texture": "#0"}, + "west": {"uv": [0, 8, 16, 10], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [10, 0, 10], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [0, 16, 16, 14], "rotation": 90, "texture": "#0"}, + "west": {"uv": [0, 10, 16, 8], "rotation": 90, "texture": "#0"} + } } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_valve/block_horizontal_closed.json b/src/main/resources/assets/create/models/block/fluid_valve/block_horizontal_closed.json new file mode 100644 index 000000000..2bfe51234 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_valve/block_horizontal_closed.json @@ -0,0 +1,44 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "create:block/fluid_valve", + "3": "create:block/fluid_pipe", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "ValveCenter", + "from": [2, 2, 2], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [24, 11, 11]}, + "faces": { + "north": {"uv": [0, 0, 6, 6], "texture": "#3"}, + "east": {"uv": [6, 0, 12, 6], "texture": "#2"}, + "south": {"uv": [0, 0, 6, 6], "texture": "#2"}, + "west": {"uv": [6, 0, 12, 6], "texture": "#2"}, + "up": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#3"}, + "down": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#3"} + } + }, + { + "from": [4, 14, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [0, 6, 4, 7], "texture": "#3"}, + "east": {"uv": [0, 6, 4, 7], "texture": "#3"}, + "south": {"uv": [0, 6, 4, 7], "texture": "#3"}, + "west": {"uv": [0, 6, 4, 7], "texture": "#3"} + } + }, + { + "from": [4, 0, 4], + "to": [12, 2, 12], + "faces": { + "north": {"uv": [0, 7, 4, 6], "texture": "#3"}, + "east": {"uv": [0, 7, 4, 6], "texture": "#3"}, + "south": {"uv": [0, 7, 4, 6], "texture": "#3"}, + "west": {"uv": [0, 7, 4, 6], "texture": "#3"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_valve/block_horizontal_open.json b/src/main/resources/assets/create/models/block/fluid_valve/block_horizontal_open.json new file mode 100644 index 000000000..3a705864b --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_valve/block_horizontal_open.json @@ -0,0 +1,44 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "create:block/fluid_valve", + "3": "create:block/fluid_pipe", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "ValveCenter", + "from": [2, 2, 2], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [24, 11, 11]}, + "faces": { + "north": {"uv": [0, 0, 6, 6], "texture": "#3"}, + "east": {"uv": [6, 0, 12, 6], "texture": "#2"}, + "south": {"uv": [0, 6, 6, 12], "texture": "#2"}, + "west": {"uv": [6, 0, 12, 6], "texture": "#2"}, + "up": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#3"}, + "down": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#3"} + } + }, + { + "from": [4, 14, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [0, 6, 4, 7], "texture": "#3"}, + "east": {"uv": [0, 6, 4, 7], "texture": "#3"}, + "south": {"uv": [0, 6, 4, 7], "texture": "#3"}, + "west": {"uv": [0, 6, 4, 7], "texture": "#3"} + } + }, + { + "from": [4, 0, 4], + "to": [12, 2, 12], + "faces": { + "north": {"uv": [0, 7, 4, 6], "texture": "#3"}, + "east": {"uv": [0, 7, 4, 6], "texture": "#3"}, + "south": {"uv": [0, 7, 4, 6], "texture": "#3"}, + "west": {"uv": [0, 7, 4, 6], "texture": "#3"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_valve/block_vertical_closed.json b/src/main/resources/assets/create/models/block/fluid_valve/block_vertical_closed.json new file mode 100644 index 000000000..db7e80b05 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_valve/block_vertical_closed.json @@ -0,0 +1,44 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "create:block/fluid_valve", + "3": "create:block/fluid_pipe", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "ValveCenter", + "from": [2, 2, 2], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [24, 11, 11]}, + "faces": { + "north": {"uv": [0, 0, 6, 6], "texture": "#3"}, + "east": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#3"}, + "south": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#2"}, + "west": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#3"}, + "up": {"uv": [6, 0, 12, 6], "rotation": 90, "texture": "#2"}, + "down": {"uv": [6, 0, 12, 6], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [0, 4, 4], + "to": [2, 12, 12], + "faces": { + "north": {"uv": [0, 6, 4, 7], "rotation": 90, "texture": "#3"}, + "south": {"uv": [0, 6, 4, 7], "rotation": 270, "texture": "#3"}, + "up": {"uv": [0, 6, 4, 7], "rotation": 270, "texture": "#3"}, + "down": {"uv": [0, 6, 4, 7], "rotation": 270, "texture": "#3"} + } + }, + { + "from": [14, 4, 4], + "to": [16, 12, 12], + "faces": { + "north": {"uv": [0, 7, 4, 6], "rotation": 90, "texture": "#3"}, + "south": {"uv": [0, 7, 4, 6], "rotation": 270, "texture": "#3"}, + "up": {"uv": [0, 7, 4, 6], "rotation": 270, "texture": "#3"}, + "down": {"uv": [0, 7, 4, 6], "rotation": 270, "texture": "#3"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_valve/block_vertical_open.json b/src/main/resources/assets/create/models/block/fluid_valve/block_vertical_open.json new file mode 100644 index 000000000..c4a17315a --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_valve/block_vertical_open.json @@ -0,0 +1,44 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "create:block/fluid_valve", + "3": "create:block/fluid_pipe", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "ValveCenter", + "from": [2, 2, 2], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [24, 11, 11]}, + "faces": { + "north": {"uv": [0, 0, 6, 6], "texture": "#3"}, + "east": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#3"}, + "south": {"uv": [0, 6, 6, 12], "rotation": 90, "texture": "#2"}, + "west": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#3"}, + "up": {"uv": [6, 0, 12, 6], "rotation": 90, "texture": "#2"}, + "down": {"uv": [6, 0, 12, 6], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [0, 4, 4], + "to": [2, 12, 12], + "faces": { + "north": {"uv": [0, 6, 4, 7], "rotation": 90, "texture": "#3"}, + "south": {"uv": [0, 6, 4, 7], "rotation": 270, "texture": "#3"}, + "up": {"uv": [0, 6, 4, 7], "rotation": 270, "texture": "#3"}, + "down": {"uv": [0, 6, 4, 7], "rotation": 270, "texture": "#3"} + } + }, + { + "from": [14, 4, 4], + "to": [16, 12, 12], + "faces": { + "north": {"uv": [0, 7, 4, 6], "rotation": 90, "texture": "#3"}, + "south": {"uv": [0, 7, 4, 6], "rotation": 270, "texture": "#3"}, + "up": {"uv": [0, 7, 4, 6], "rotation": 270, "texture": "#3"}, + "down": {"uv": [0, 7, 4, 6], "rotation": 270, "texture": "#3"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_valve/item.json b/src/main/resources/assets/create/models/block/fluid_valve/item.json new file mode 100644 index 000000000..576eb104c --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_valve/item.json @@ -0,0 +1,201 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "create:block/fluid_valve", + "3": "create:block/fluid_pipe", + "4": "create:block/pump", + "1_1": "create:block/axis_top", + "1_0": "create:block/axis", + "particle": "create:block/oxidized/copper_block_0" + }, + "elements": [ + { + "name": "ValveCenter", + "from": [2, 2, 2], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [24, 11, 11]}, + "faces": { + "north": {"uv": [6, 0, 12, 6], "texture": "#2"}, + "east": {"uv": [0, 0, 6, 6], "texture": "#3"}, + "south": {"uv": [6, 0, 12, 6], "texture": "#2"}, + "west": {"uv": [0, 0, 6, 6], "texture": "#3"}, + "up": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#2"}, + "down": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#3"} + } + }, + { + "name": "Axis", + "from": [6, 6, 0], + "to": [10, 10, 16], + "shade": false, + "faces": { + "north": {"uv": [6, 6, 10, 10], "rotation": 180, "texture": "#1_1"}, + "east": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#1_0"}, + "south": {"uv": [6, 6, 10, 10], "texture": "#1_1"}, + "west": {"uv": [6, 0, 10, 16], "rotation": 270, "texture": "#1_0"}, + "up": {"uv": [6, 0, 10, 16], "texture": "#1_0"}, + "down": {"uv": [6, 0, 10, 16], "rotation": 180, "texture": "#1_0"} + } + }, + { + "from": [2.5, 14.1, 9.5], + "to": [4.5, 15.1, 11.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12, 2, 13, 4], "rotation": 270, "texture": "#4"}, + "east": {"uv": [12, 2, 14, 3], "rotation": 180, "texture": "#4"}, + "south": {"uv": [12, 3, 14, 4], "texture": "#4"}, + "west": {"uv": [12, 3, 14, 4], "rotation": 180, "texture": "#4"}, + "up": {"uv": [12, 2, 14, 4], "rotation": 90, "texture": "#4"}, + "down": {"uv": [14, 2, 12, 4], "rotation": 90, "texture": "#4"} + } + }, + { + "from": [2.5, 14.1, 11.5], + "to": [6.5, 15.1, 13.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12, 0, 13, 4], "rotation": 90, "texture": "#4"}, + "east": {"uv": [14, 0, 16, 1], "rotation": 180, "texture": "#4"}, + "south": {"uv": [15, 0, 16, 4], "rotation": 90, "texture": "#4"}, + "west": {"uv": [12, 3, 14, 4], "texture": "#4"}, + "up": {"uv": [14, 0, 16, 4], "rotation": 90, "texture": "#4"}, + "down": {"uv": [16, 0, 14, 4], "rotation": 90, "texture": "#4"} + } + }, + { + "from": [9.5, 14.1, 2.5], + "to": [11.5, 15.1, 4.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [14, 3, 12, 4], "rotation": 180, "texture": "#4"}, + "east": {"uv": [14, 3, 12, 4], "texture": "#4"}, + "south": {"uv": [14, 2, 12, 3], "rotation": 180, "texture": "#4"}, + "west": {"uv": [12, 4, 13, 2], "rotation": 270, "texture": "#4"}, + "up": {"uv": [14, 2, 12, 4], "rotation": 180, "texture": "#4"}, + "down": {"uv": [12, 2, 14, 4], "texture": "#4"} + } + }, + { + "from": [11.5, 14.1, 2.5], + "to": [13.5, 15.1, 6.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [14, 3, 12, 4], "texture": "#4"}, + "east": {"uv": [15, 4, 16, 0], "rotation": 90, "texture": "#4"}, + "south": {"uv": [16, 0, 14, 1], "rotation": 180, "texture": "#4"}, + "west": {"uv": [12, 4, 13, 0], "rotation": 90, "texture": "#4"}, + "up": {"uv": [16, 0, 14, 4], "rotation": 180, "texture": "#4"}, + "down": {"uv": [14, 0, 16, 4], "texture": "#4"} + } + }, + { + "name": "Center", + "from": [6.5, 14, 6.5], + "to": [9.5, 16, 9.5], + "faces": { + "north": {"uv": [6, 8.5, 7.5, 9.5], "texture": "#2"}, + "east": {"uv": [6, 8.5, 7.5, 9.5], "texture": "#2"}, + "south": {"uv": [6, 8.5, 7.5, 9.5], "texture": "#2"}, + "west": {"uv": [6, 8.5, 7.5, 9.5], "texture": "#2"}, + "up": {"uv": [6, 10, 7.5, 11.5], "texture": "#2"} + } + }, + { + "name": "WestPointer", + "from": [7, 14, 9], + "to": [9, 15, 13], + "faces": { + "east": {"uv": [9.5, 9.5, 7.5, 10], "texture": "#2"}, + "south": {"uv": [7, 9.5, 7.5, 10], "texture": "#2"}, + "west": {"uv": [9.5, 9.5, 7.5, 10], "texture": "#2"}, + "up": {"uv": [9.5, 8.5, 7.5, 9.5], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "WestPointer", + "from": [7, 14, 3], + "to": [9, 15, 7], + "faces": { + "north": {"uv": [7.5, 9.5, 7, 10], "texture": "#2"}, + "east": {"uv": [9.5, 9.5, 7.5, 10], "texture": "#2"}, + "west": {"uv": [9.5, 9.5, 7.5, 10], "texture": "#2"}, + "up": {"uv": [9.5, 8.5, 7.5, 9.5], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [-1, 3, 3], + "to": [2, 13, 13], + "faces": { + "north": {"uv": [6, 5, 11, 6.5], "rotation": 270, "texture": "#3"}, + "south": {"uv": [6, 5, 11, 6.5], "rotation": 90, "texture": "#3"}, + "west": {"uv": [6, 0, 11, 5], "texture": "#3"}, + "up": {"uv": [6, 5, 11, 6.5], "rotation": 90, "texture": "#3"}, + "down": {"uv": [6, 5, 11, 6.5], "rotation": 90, "texture": "#3"} + } + }, + { + "from": [14, 3, 3], + "to": [17, 13, 13], + "faces": { + "north": {"uv": [6, 6.5, 11, 5], "rotation": 270, "texture": "#3"}, + "east": {"uv": [11, 0, 6, 5], "texture": "#3"}, + "south": {"uv": [6, 6.5, 11, 5], "rotation": 90, "texture": "#3"}, + "up": {"uv": [6, 6.5, 11, 5], "rotation": 90, "texture": "#3"}, + "down": {"uv": [6, 6.5, 11, 5], "rotation": 90, "texture": "#3"} + } + } + ], + "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, 135, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [0, + { + "name": "shaft", + "origin": [8, 8, 8], + "children": [1] + }, + { + "name": "Pointer", + "origin": [7.5, 14, 8], + "children": [ + { + "name": "arrow", + "origin": [8, 8, 8], + "children": [2, 3] + }, + { + "name": "arrow", + "origin": [8, 8, 8], + "children": [4, 5] + }, 6, 7, 8] + }, 9, 10] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_valve/pointer.json b/src/main/resources/assets/create/models/block/fluid_valve/pointer.json new file mode 100644 index 000000000..eb686e2a8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_valve/pointer.json @@ -0,0 +1,95 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "create:block/fluid_valve", + "4": "create:block/pump" + }, + "elements": [ + { + "from": [2.5, 14.1, 9.5], + "to": [4.5, 15.1, 11.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12, 2, 13, 4], "rotation": 270, "texture": "#4"}, + "east": {"uv": [12, 2, 14, 3], "rotation": 180, "texture": "#4"}, + "south": {"uv": [12, 3, 14, 4], "texture": "#4"}, + "west": {"uv": [12, 3, 14, 4], "rotation": 180, "texture": "#4"}, + "up": {"uv": [12, 2, 14, 4], "rotation": 90, "texture": "#4"}, + "down": {"uv": [14, 2, 12, 4], "rotation": 90, "texture": "#4"} + } + }, + { + "from": [2.5, 14.1, 11.5], + "to": [6.5, 15.1, 13.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12, 0, 13, 4], "rotation": 90, "texture": "#4"}, + "east": {"uv": [14, 0, 16, 1], "rotation": 180, "texture": "#4"}, + "south": {"uv": [15, 0, 16, 4], "rotation": 90, "texture": "#4"}, + "west": {"uv": [12, 3, 14, 4], "texture": "#4"}, + "up": {"uv": [14, 0, 16, 4], "rotation": 90, "texture": "#4"}, + "down": {"uv": [16, 0, 14, 4], "rotation": 90, "texture": "#4"} + } + }, + { + "from": [9.5, 14.1, 2.5], + "to": [11.5, 15.1, 4.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [14, 3, 12, 4], "rotation": 180, "texture": "#4"}, + "east": {"uv": [14, 3, 12, 4], "texture": "#4"}, + "south": {"uv": [14, 2, 12, 3], "rotation": 180, "texture": "#4"}, + "west": {"uv": [12, 4, 13, 2], "rotation": 270, "texture": "#4"}, + "up": {"uv": [14, 2, 12, 4], "rotation": 180, "texture": "#4"}, + "down": {"uv": [12, 2, 14, 4], "texture": "#4"} + } + }, + { + "from": [11.5, 14.1, 2.5], + "to": [13.5, 15.1, 6.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [14, 3, 12, 4], "texture": "#4"}, + "east": {"uv": [15, 4, 16, 0], "rotation": 90, "texture": "#4"}, + "south": {"uv": [16, 0, 14, 1], "rotation": 180, "texture": "#4"}, + "west": {"uv": [12, 4, 13, 0], "rotation": 90, "texture": "#4"}, + "up": {"uv": [16, 0, 14, 4], "rotation": 180, "texture": "#4"}, + "down": {"uv": [14, 0, 16, 4], "texture": "#4"} + } + }, + { + "name": "Center", + "from": [6.5, 14, 6.5], + "to": [9.5, 16, 9.5], + "faces": { + "north": {"uv": [6, 8.5, 7.5, 9.5], "texture": "#2"}, + "east": {"uv": [6, 8.5, 7.5, 9.5], "texture": "#2"}, + "south": {"uv": [6, 8.5, 7.5, 9.5], "texture": "#2"}, + "west": {"uv": [6, 8.5, 7.5, 9.5], "texture": "#2"}, + "up": {"uv": [6, 10, 7.5, 11.5], "texture": "#2"} + } + }, + { + "name": "WestPointer", + "from": [7, 14, 9], + "to": [9, 15, 13], + "faces": { + "east": {"uv": [9.5, 9.5, 7.5, 10], "texture": "#2"}, + "south": {"uv": [7, 9.5, 7.5, 10], "texture": "#2"}, + "west": {"uv": [9.5, 9.5, 7.5, 10], "texture": "#2"}, + "up": {"uv": [9.5, 8.5, 7.5, 9.5], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "WestPointer", + "from": [7, 14, 3], + "to": [9, 15, 7], + "faces": { + "north": {"uv": [7.5, 9.5, 7, 10], "texture": "#2"}, + "east": {"uv": [9.5, 9.5, 7.5, 10], "texture": "#2"}, + "west": {"uv": [9.5, 9.5, 7.5, 10], "texture": "#2"}, + "up": {"uv": [9.5, 8.5, 7.5, 9.5], "rotation": 90, "texture": "#2"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/portable_storage_interface/block.json b/src/main/resources/assets/create/models/block/portable_storage_interface/block.json new file mode 100644 index 000000000..79251958e --- /dev/null +++ b/src/main/resources/assets/create/models/block/portable_storage_interface/block.json @@ -0,0 +1,63 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/portable_storage_interface", + "1": "create:block/brass_casing", + "particle": "create:block/brass_casing" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 10, 8, 16], "texture": "#0"}, + "east": {"uv": [0, 10, 8, 16], "texture": "#0"}, + "south": {"uv": [0, 10, 8, 16], "texture": "#0"}, + "west": {"uv": [0, 10, 8, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "from": [0, 12, 1.9], + "to": [2, 14.1, 14.1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 20, 10]}, + "faces": { + "north": {"uv": [7, 10, 8, 11], "texture": "#0"}, + "south": {"uv": [0, 10, 1, 11], "texture": "#0"}, + "west": {"uv": [1, 9, 7, 10], "texture": "#0"}, + "up": {"uv": [0, 2, 2, 14], "texture": "#1"} + } + }, + { + "from": [14, 12, 2], + "to": [16, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 20, 6]}, + "faces": { + "north": {"uv": [0, 10, 1, 11], "texture": "#0"}, + "east": {"uv": [1, 9, 7, 10], "texture": "#0"}, + "south": {"uv": [7, 10, 8, 11], "texture": "#0"}, + "up": {"uv": [0, 2, 2, 14], "rotation": 180, "texture": "#1"} + } + }, + { + "from": [2, 12, 0], + "to": [14, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 20, 8]}, + "faces": { + "north": {"uv": [1, 9, 7, 10], "texture": "#0"}, + "east": {"uv": [0, 10, 8, 11], "texture": "#0"}, + "south": {"uv": [1, 9, 7, 10], "texture": "#0"}, + "west": {"uv": [0, 10, 8, 11], "texture": "#0"}, + "up": {"uv": [2, 0, 14, 16], "texture": "#1"} + } + } + ], + "groups": [ + { + "name": "Base", + "origin": [10, 20, 8], + "children": [0, 1, 2, 3] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/portable_storage_interface/block_middle.json b/src/main/resources/assets/create/models/block/portable_storage_interface/block_middle.json new file mode 100644 index 000000000..33d29a3ef --- /dev/null +++ b/src/main/resources/assets/create/models/block/portable_storage_interface/block_middle.json @@ -0,0 +1,28 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/portable_storage_interface", + "particle": "create:block/portable_storage_interface" + }, + "elements": [ + { + "from": [2, 0, 2], + "to": [14, 9, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 8, 10]}, + "faces": { + "north": {"uv": [1, 3.5, 7, 8], "texture": "#0"}, + "east": {"uv": [1, 3.5, 7, 8], "texture": "#0"}, + "south": {"uv": [1, 3.5, 7, 8], "texture": "#0"}, + "west": {"uv": [1, 3.5, 7, 8], "texture": "#0"}, + "up": {"uv": [1.5, 3.5, 2, 4], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Middle", + "origin": [10, 22, 10], + "children": [0] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/portable_storage_interface/block_middle_powered.json b/src/main/resources/assets/create/models/block/portable_storage_interface/block_middle_powered.json new file mode 100644 index 000000000..c64e3e1f3 --- /dev/null +++ b/src/main/resources/assets/create/models/block/portable_storage_interface/block_middle_powered.json @@ -0,0 +1,28 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/portable_storage_interface", + "particle": "create:block/portable_storage_interface" + }, + "elements": [ + { + "from": [2, 0, 2], + "to": [14, 9, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 8, 10]}, + "faces": { + "north": {"uv": [9, 3.5, 15, 8], "texture": "#0"}, + "east": {"uv": [9, 3.5, 15, 8], "texture": "#0"}, + "south": {"uv": [9, 3.5, 15, 8], "texture": "#0"}, + "west": {"uv": [9, 3.5, 15, 8], "texture": "#0"}, + "up": {"uv": [1.5, 3.5, 2, 4], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Middle", + "origin": [10, 22, 10], + "children": [0] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/portable_storage_interface/block_top.json b/src/main/resources/assets/create/models/block/portable_storage_interface/block_top.json new file mode 100644 index 000000000..88f35fcab --- /dev/null +++ b/src/main/resources/assets/create/models/block/portable_storage_interface/block_top.json @@ -0,0 +1,120 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/portable_storage_interface", + "particle": "create:block/portable_storage_interface" + }, + "elements": [ + { + "from": [3, 7, 3], + "to": [13, 14.1, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 15, 11]}, + "faces": { + "north": {"uv": [1.5, 0, 6.5, 3.5], "texture": "#0"}, + "east": {"uv": [1.5, 0, 6.5, 3.5], "texture": "#0"}, + "south": {"uv": [1.5, 0, 6.5, 3.5], "texture": "#0"}, + "west": {"uv": [1.5, 0, 6.5, 3.5], "texture": "#0"} + } + }, + { + "from": [1, 14, 1], + "to": [15, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [8.5, 15, 15.5, 16], "texture": "#0"}, + "east": {"uv": [8.5, 15, 15.5, 16], "texture": "#0"}, + "south": {"uv": [8.5, 15, 15.5, 16], "texture": "#0"}, + "west": {"uv": [8.5, 15, 15.5, 16], "texture": "#0"}, + "up": {"uv": [8.5, 8, 15.5, 15], "texture": "#0"}, + "down": {"uv": [8.5, 8, 15.5, 15], "texture": "#0"} + } + }, + { + "from": [4, 13.1, 13], + "to": [6, 15.1, 14], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 13]}, + "faces": { + "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "south": {"uv": [10, 15, 11, 16], "texture": "#0"}, + "west": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + }, + { + "from": [10, 13.1, 2], + "to": [12, 15.1, 3], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 3]}, + "faces": { + "north": {"uv": [10, 15, 11, 16], "texture": "#0"}, + "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + }, + { + "from": [2, 13.1, 4], + "to": [3, 15.1, 6], + "rotation": {"angle": 45, "axis": "z", "origin": [3, 14, 8]}, + "faces": { + "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [10, 15, 11, 16], "texture": "#0"} + } + }, + { + "from": [13, 13.1, 10], + "to": [14, 15.1, 12], + "rotation": {"angle": -45, "axis": "z", "origin": [13, 14, 8]}, + "faces": { + "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "east": {"uv": [10, 15, 11, 16], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + }, + { + "from": [10, 13.1, 13], + "to": [12, 15.1, 14], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 13]}, + "faces": { + "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "south": {"uv": [13, 15, 14, 16], "texture": "#0"}, + "west": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + }, + { + "from": [4, 13.1, 2], + "to": [6, 15.1, 3], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 3]}, + "faces": { + "north": {"uv": [13, 15, 14, 16], "texture": "#0"}, + "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + }, + { + "from": [2, 13.1, 10], + "to": [3, 15.1, 12], + "rotation": {"angle": 45, "axis": "z", "origin": [3, 14, 8]}, + "faces": { + "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [13, 15, 14, 16], "texture": "#0"} + } + }, + { + "from": [13, 13.1, 4], + "to": [14, 15.1, 6], + "rotation": {"angle": -45, "axis": "z", "origin": [13, 14, 8]}, + "faces": { + "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "east": {"uv": [13, 15, 14, 16], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Top", + "origin": [10, 22, 10], + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/portable_storage_interface/brass_casing.png b/src/main/resources/assets/create/models/block/portable_storage_interface/brass_casing.png new file mode 100644 index 000000000..fb657ce47 Binary files /dev/null and b/src/main/resources/assets/create/models/block/portable_storage_interface/brass_casing.png differ diff --git a/src/main/resources/assets/create/models/block/portable_storage_interface/item.json b/src/main/resources/assets/create/models/block/portable_storage_interface/item.json new file mode 100644 index 000000000..2b93d6cc3 --- /dev/null +++ b/src/main/resources/assets/create/models/block/portable_storage_interface/item.json @@ -0,0 +1,238 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/portable_storage_interface", + "1": "create:block/brass_casing", + "particle": "create:block/portable_storage_interface" + }, + "elements": [ + { + "from": [2, 10, 2], + "to": [14, 19, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 18, 10]}, + "faces": { + "north": {"uv": [1, 3.5, 7, 8], "texture": "#0"}, + "east": {"uv": [1, 3.5, 7, 8], "texture": "#0"}, + "south": {"uv": [1, 3.5, 7, 8], "texture": "#0"}, + "west": {"uv": [1, 3.5, 7, 8], "texture": "#0"}, + "up": {"uv": [1.5, 3.5, 2, 4], "texture": "#0"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 10, 8, 16], "texture": "#0"}, + "east": {"uv": [0, 10, 8, 16], "texture": "#0"}, + "south": {"uv": [0, 10, 8, 16], "texture": "#0"}, + "west": {"uv": [0, 10, 8, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#1"} + } + }, + { + "from": [0, 12, 1.9], + "to": [2, 14.1, 14.1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 20, 10]}, + "faces": { + "north": {"uv": [7, 10, 8, 11], "texture": "#0"}, + "south": {"uv": [0, 10, 1, 11], "texture": "#0"}, + "west": {"uv": [1, 9, 7, 10], "texture": "#0"}, + "up": {"uv": [0, 2, 2, 14], "texture": "#1"} + } + }, + { + "from": [14, 12, 2], + "to": [16, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 20, 6]}, + "faces": { + "north": {"uv": [0, 10, 1, 11], "texture": "#0"}, + "east": {"uv": [1, 9, 7, 10], "texture": "#0"}, + "south": {"uv": [7, 10, 8, 11], "texture": "#0"}, + "up": {"uv": [0, 2, 2, 14], "rotation": 180, "texture": "#1"} + } + }, + { + "from": [2, 12, 0], + "to": [14, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 20, 8]}, + "faces": { + "north": {"uv": [1, 9, 7, 10], "texture": "#0"}, + "east": {"uv": [0, 10, 8, 11], "texture": "#0"}, + "south": {"uv": [1, 9, 7, 10], "texture": "#0"}, + "west": {"uv": [0, 10, 8, 11], "texture": "#0"}, + "up": {"uv": [2, 0, 14, 16], "texture": "#1"} + } + }, + { + "from": [3, 16, 3], + "to": [13, 23.1, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 24, 11]}, + "faces": { + "north": {"uv": [1.5, 0, 6.5, 3.5], "texture": "#0"}, + "east": {"uv": [1.5, 0, 6.5, 3.5], "texture": "#0"}, + "south": {"uv": [1.5, 0, 6.5, 3.5], "texture": "#0"}, + "west": {"uv": [1.5, 0, 6.5, 3.5], "texture": "#0"} + } + }, + { + "from": [1, 23, 1], + "to": [15, 25, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 24, 8]}, + "faces": { + "north": {"uv": [8.5, 15, 15.5, 16], "texture": "#0"}, + "east": {"uv": [8.5, 15, 15.5, 16], "texture": "#0"}, + "south": {"uv": [8.5, 15, 15.5, 16], "texture": "#0"}, + "west": {"uv": [8.5, 15, 15.5, 16], "texture": "#0"}, + "up": {"uv": [8.5, 8, 15.5, 15], "texture": "#0"}, + "down": {"uv": [8.5, 8, 15.5, 15], "texture": "#0"} + } + }, + { + "from": [4, 22.1, 13], + "to": [6, 24.1, 14], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 23, 13]}, + "faces": { + "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "south": {"uv": [10, 15, 11, 16], "texture": "#0"}, + "west": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + }, + { + "from": [10, 22.1, 2], + "to": [12, 24.1, 3], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 23, 3]}, + "faces": { + "north": {"uv": [10, 15, 11, 16], "texture": "#0"}, + "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + }, + { + "from": [2, 22.1, 4], + "to": [3, 24.1, 6], + "rotation": {"angle": 45, "axis": "z", "origin": [3, 23, 8]}, + "faces": { + "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [10, 15, 11, 16], "texture": "#0"} + } + }, + { + "from": [13, 22.1, 10], + "to": [14, 24.1, 12], + "rotation": {"angle": -45, "axis": "z", "origin": [13, 23, 8]}, + "faces": { + "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "east": {"uv": [10, 15, 11, 16], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + }, + { + "from": [10, 22.1, 13], + "to": [12, 24.1, 14], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 23, 13]}, + "faces": { + "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "south": {"uv": [13, 15, 14, 16], "texture": "#0"}, + "west": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + }, + { + "from": [4, 22.1, 2], + "to": [6, 24.1, 3], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 23, 3]}, + "faces": { + "north": {"uv": [13, 15, 14, 16], "texture": "#0"}, + "east": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + }, + { + "from": [2, 22.1, 10], + "to": [3, 24.1, 12], + "rotation": {"angle": 45, "axis": "z", "origin": [3, 23, 8]}, + "faces": { + "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "west": {"uv": [13, 15, 14, 16], "texture": "#0"} + } + }, + { + "from": [13, 22.1, 4], + "to": [14, 24.1, 6], + "rotation": {"angle": -45, "axis": "z", "origin": [13, 23, 8]}, + "faces": { + "north": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"}, + "east": {"uv": [13, 15, 14, 16], "texture": "#0"}, + "south": {"uv": [7.5, 10, 8, 10.5], "texture": "#0"} + } + } + ], + "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], + "translation": [0, -1.75, 0], + "scale": [0.45, 0.45, 0.45] + }, + "head": { + "rotation": [-180, 0, 0], + "translation": [0, 22.25, 0] + }, + "fixed": { + "translation": [0, -1.25, 0], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "Middle", + "origin": [10, 22, 10], + "children": [0] + }, + { + "name": "block", + "origin": [8, 8, 8], + "children": [ + { + "name": "Base", + "origin": [10, 20, 8], + "children": [1, 2, 3, 4] + } + ] + }, + { + "name": "block_top", + "origin": [8, 8, 8], + "children": [ + { + "name": "Top", + "origin": [10, 22, 10], + "children": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/portable_storage_interface/portable_storage_interface.bbmodel b/src/main/resources/assets/create/models/block/portable_storage_interface/portable_storage_interface.bbmodel new file mode 100644 index 000000000..579e9291e --- /dev/null +++ b/src/main/resources/assets/create/models/block/portable_storage_interface/portable_storage_interface.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"item","ambientocclusion":true,"front_gui_light":false,"resolution":{"width":16,"height":16},"elements":[{"name":"cube","from":[2,10,2],"to":[14,19,14],"autouv":0,"color":4,"locked":false,"origin":[10,18,10],"faces":{"north":{"uv":[1,3.5,7,8],"texture":0},"east":{"uv":[1,3.5,7,8],"texture":0},"south":{"uv":[1,3.5,7,8],"texture":0},"west":{"uv":[1,3.5,7,8],"texture":0},"up":{"uv":[1.5,3.5,2,4],"texture":0},"down":{"uv":[0,0,12,12],"texture":null}},"uuid":"de312b34-6e0e-d92a-f0cc-2b14d972edb8"},{"name":"cube","from":[0,0,0],"to":[16,12,16],"autouv":0,"color":3,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0,10,8,16],"texture":0},"east":{"uv":[0,10,8,16],"texture":0},"south":{"uv":[0,10,8,16],"texture":0},"west":{"uv":[0,10,8,16],"texture":0},"up":{"uv":[0,0,16,16],"texture":1},"down":{"uv":[0,0,16,16],"texture":1}},"uuid":"d78fa319-b9a7-d009-a299-e17e3ecd7b4c"},{"name":"cube","from":[0,12,1.9],"to":[2,14.1,14.1],"autouv":0,"color":2,"locked":false,"origin":[8,20,10],"faces":{"north":{"uv":[7,10,8,11],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,10,1,11],"texture":0},"west":{"uv":[1,9,7,10],"texture":0},"up":{"uv":[0,2,2,14],"texture":1},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"e5ea8437-3bd2-3033-9cb1-bca2918ad937"},{"name":"cube","from":[14,12,2],"to":[16,14,14],"autouv":0,"color":4,"locked":false,"origin":[8,20,6],"faces":{"north":{"uv":[0,10,1,11],"texture":0},"east":{"uv":[1,9,7,10],"texture":0},"south":{"uv":[7,10,8,11],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,2,2,14],"rotation":180,"texture":1},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"ef15b8aa-40de-3212-db76-9fc6c9269236"},{"name":"cube","from":[2,12,0],"to":[14,14,16],"autouv":0,"color":0,"locked":false,"origin":[10,20,8],"faces":{"north":{"uv":[1,9,7,10],"texture":0},"east":{"uv":[0,10,8,11],"texture":0},"south":{"uv":[1,9,7,10],"texture":0},"west":{"uv":[0,10,8,11],"texture":0},"up":{"uv":[2,0,14,16],"texture":1},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"a11c9348-80ea-30fd-5b35-bf4fab00a286"},{"name":"cube","from":[3,16,3],"to":[13,23.1,13],"autouv":0,"color":2,"locked":false,"origin":[11,24,11],"faces":{"north":{"uv":[1.5,0,6.5,3.5],"texture":0},"east":{"uv":[1.5,0,6.5,3.5],"texture":0},"south":{"uv":[1.5,0,6.5,3.5],"texture":0},"west":{"uv":[1.5,0,6.5,3.5],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"6a52cb20-69df-718c-97da-3c42422e07e0"},{"name":"cube","from":[1,23,1],"to":[15,25,15],"autouv":0,"color":6,"locked":false,"origin":[8,24,8],"faces":{"north":{"uv":[8.5,15,15.5,16],"texture":0},"east":{"uv":[8.5,15,15.5,16],"texture":0},"south":{"uv":[8.5,15,15.5,16],"texture":0},"west":{"uv":[8.5,15,15.5,16],"texture":0},"up":{"uv":[8.5,8,15.5,15],"texture":0},"down":{"uv":[8.5,8,15.5,15],"texture":0}},"uuid":"323ba350-4ba9-9942-b94e-9918f2cb06bd"},{"name":"cube","from":[4,22.1,13],"to":[6,24.1,14],"autouv":0,"color":7,"locked":false,"rotation":[45,0,0],"origin":[8,23,13],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[7.5,10,8,10.5],"texture":0},"south":{"uv":[10,15,11,16],"texture":0},"west":{"uv":[7.5,10,8,10.5],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"1d3cd83e-6fc4-5767-4de6-42d59581a66b"},{"name":"cube","from":[10,22.1,2],"to":[12,24.1,3],"autouv":0,"color":5,"locked":false,"rotation":[-45,0,0],"origin":[8,23,3],"faces":{"north":{"uv":[10,15,11,16],"texture":0},"east":{"uv":[7.5,10,8,10.5],"texture":0},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[7.5,10,8,10.5],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"ff86b4f3-c6ea-e7e4-228a-a2b21aca7a25"},{"name":"cube","from":[2,22.1,4],"to":[3,24.1,6],"autouv":0,"color":7,"locked":false,"rotation":[0,0,45],"origin":[3,23,8],"faces":{"north":{"uv":[7.5,10,8,10.5],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[7.5,10,8,10.5],"texture":0},"west":{"uv":[10,15,11,16],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"f689fb7a-a97d-fd81-c390-380f16371935"},{"name":"cube","from":[13,22.1,10],"to":[14,24.1,12],"autouv":0,"color":6,"locked":false,"rotation":[0,0,-45],"origin":[13,23,8],"faces":{"north":{"uv":[7.5,10,8,10.5],"texture":0},"east":{"uv":[10,15,11,16],"texture":0},"south":{"uv":[7.5,10,8,10.5],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"848d1774-ecae-9eb6-f536-e332161c0954"},{"name":"cube","from":[10,22.1,13],"to":[12,24.1,14],"autouv":0,"color":6,"locked":false,"rotation":[45,0,0],"origin":[8,23,13],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[7.5,10,8,10.5],"texture":0},"south":{"uv":[13,15,14,16],"texture":0},"west":{"uv":[7.5,10,8,10.5],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"c71a2559-c9eb-ea19-f432-00ef36482906"},{"name":"cube","from":[4,22.1,2],"to":[6,24.1,3],"autouv":0,"color":7,"locked":false,"rotation":[-45,0,0],"origin":[8,23,3],"faces":{"north":{"uv":[13,15,14,16],"texture":0},"east":{"uv":[7.5,10,8,10.5],"texture":0},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[7.5,10,8,10.5],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"76250b0e-a72a-5cf0-e6fe-92819c986668"},{"name":"cube","from":[2,22.1,10],"to":[3,24.1,12],"autouv":0,"color":1,"locked":false,"rotation":[0,0,45],"origin":[3,23,8],"faces":{"north":{"uv":[7.5,10,8,10.5],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[7.5,10,8,10.5],"texture":0},"west":{"uv":[13,15,14,16],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"df73a796-af5b-89a2-cd8e-ba9c3babf799"},{"name":"cube","from":[13,22.1,4],"to":[14,24.1,6],"autouv":0,"color":6,"locked":false,"rotation":[0,0,-45],"origin":[13,23,8],"faces":{"north":{"uv":[7.5,10,8,10.5],"texture":0},"east":{"uv":[13,15,14,16],"texture":0},"south":{"uv":[7.5,10,8,10.5],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"3c79817e-58ff-9c30-ebcf-3bba7ec9e870"}],"outliner":[{"name":"Middle","uuid":"264b83b8-efae-9137-aa5e-0226a71ebafb","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[10,22,10],"children":["de312b34-6e0e-d92a-f0cc-2b14d972edb8"]},{"name":"block","uuid":"bd1a7e4e-8dfb-30c7-82be-0b25df157ef2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,8],"children":[{"name":"Base","uuid":"2cfb4e18-3aea-9f2f-2880-12edf0e1d861","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[10,20,8],"children":["d78fa319-b9a7-d009-a299-e17e3ecd7b4c","e5ea8437-3bd2-3033-9cb1-bca2918ad937","ef15b8aa-40de-3212-db76-9fc6c9269236","a11c9348-80ea-30fd-5b35-bf4fab00a286"]}]},{"name":"block_top","uuid":"0073ff5f-cbc9-63c3-ee64-74a557d08b5f","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,8],"children":[{"name":"Top","uuid":"c293d84e-c942-8907-cf16-62a51d3e9ef3","export":true,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"origin":[10,22,10],"children":["6a52cb20-69df-718c-97da-3c42422e07e0","323ba350-4ba9-9942-b94e-9918f2cb06bd","1d3cd83e-6fc4-5767-4de6-42d59581a66b","ff86b4f3-c6ea-e7e4-228a-a2b21aca7a25","f689fb7a-a97d-fd81-c390-380f16371935","848d1774-ecae-9eb6-f536-e332161c0954","c71a2559-c9eb-ea19-f432-00ef36482906","76250b0e-a72a-5cf0-e6fe-92819c986668","df73a796-af5b-89a2-cd8e-ba9c3babf799","3c79817e-58ff-9c30-ebcf-3bba7ec9e870"]}]}],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Forgespace 1.15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\portable_storage_interface.png","name":"portable_storage_interface.png","folder":"block","namespace":"create","id":"0","particle":true,"mode":"bitmap","saved":true,"uuid":"0539e8a0-cc65-561f-c3f4-7d4ec0ab322f","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAE2UlEQVRYR61XXWgcVRT+JtmdzM7+NDHRVh9U6EMTfWhMFJpKBDGSkgRSIWCC+OZDCyJowb6V4oNoRXwR1BdfRBJh0Qaa0GqqaOgPQv6w5KdapH3QxGyan01mJ7ObjJwzOZM7yRDoNAeWe++ZPfd8c36+uVeDIi2vvOo6Tok1uh4DzWWUv9F66OpPmmon8472drdUKiEWi7FK5qqO9JcGBnz7wEa0gW07MAydjUulTcRiZTyKjjZXN1CBRLEPADjR2upalgPTJACbgQiIjgBdvnIlNAJR7AMbUQosy4ZpGuxcDaHo9kpBFPsAgJeaX3aXV1ZwIJNh52uWhaRp8ig6SsFvw7+ERiCKfWCj403Nbm5hATXV1ey0UCggkUjwKDoCdP3GcCiAKPaBjY4ebXRVp2qBCRAaJyZGQgFEsfc36unpcYvFIui3l8TjcdCvt7c3ACKqvb9JV1eX+8yRIxgdH8fq4CCSANIAFqGhCi5mAaTa2tBQX4/JmRlks9kAANX+iYEBPAfgIICnAPy+Nf+6vX2Xvb9JZ2enu7ZqgbogffMaO81vgaCxBA35Yy8ikzFRYRjo7+8PAFDt37wxjAyAWgB3ARQA/ArgVlPzLnt/EyKRlRWLmY963WOyTR6FjIQZw7ggqr0PgEiEAFCbEQiKhFCq0LHwQhgXRLX3ARCJzOfuc9+TY+IDmnsRiAV4IYwLotr7AIhEZufmuO/JMfEBzUmEjKRFw7ggqr0PgEhkdu4/xGLl7DifX+U5iXBAqbThP9/JBVHtfQBEIuTUC3k5yJlI2Pr27cldJBbFPpTR9mSikIfd3d3uaj7PdfLZ6Uoszy7h/A9AZVUV/3tpcRHnXwMOHKrEu18scU2l0mn09fVp+wJAPYgQCCnc8q2DyQafLbb10k10rtDe63jWrTQ2YCEOEx4N01xkp07W8r+Psn9o1ILyVqTf+T1RvyP0XKJF5woG8PRhE1XpciQNnf2u2Y4PYKdOXf89vYRz2Wlt6uLrLoWWQj49PQ3Lstjetm0eKyoqoGkaF3NdXR2nhFJVd/K7IICLQ/dQcjz2czbcQLbNhNcRJCdbnkR942EMfj+Bs9/c0m5+2epSzomip6am2HE+TwS+Lel0GoZhMIB12+aaOHZKiUD2xzuoSui+Y71cQ0zfouQtUJxbvQz/5gq4cOY4rl2/ywDUFIyOjmJ+fj7gXBY1NTVobGwMT0HfwF+IxTWUiq4/ssP4dp2qz1QA1AWUd5KxsbFdby8AUqkUGhoaeEnp4C6QGqAIJHWv+CTcajooIpQWGhcLDj58p8mPwL4BoBSISA0IGKuwTUzLaw6++qTNrwE1BSMjI8jlcg+eAomAWmzilN5a8k/j/LIdiIBahJOTk1hfX3/wIqQaeDRT4YdZwh3WEWtOkQH8fPXOrjYkAFQPruvCcbx2purn1Jomamtrw9tQLUK1+Kjwdq6pMFUA+0JEBODxmoTPA2FvTjopwnNvPY+R8X+4DR+aiokJBQDlXa14AaLWAfHAB6df8AE81MeI2vCxQ0lUPuIx4F6S1L1br9DxnzP3AxGge+WFN3TMLazi08s63zFJSH/mhIOD1Sm8/61395RLLvOAbniMx4WCYqSPER1g6Rx5tmOTvyWfDxl8x/QA2Hi7xWbgH18qY70cbP8HnbEaXWM9SskAAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Forgespace 1.15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\brass_casing.png","name":"brass_casing.png","folder":"block","namespace":"create","id":"1","particle":false,"mode":"bitmap","saved":true,"uuid":"4871ad15-b223-c27e-7677-628b97f293d9","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABeUlEQVQ4T4VSv0/CUBC+J6WkVKUMGn9MSqJNkITEf0MXZTAOxsXB1Tg4Mzu4mejiYuLi/0IiJuiAbhocWojlQQFr7sqjfaUpt9x7vXtfv/vuY1eVkpeFAWBkNIVyNPp8GFu3OANWrZjehmlAebdATe1ve/I+t2JI917X/xFGh/egXmv5ADvlZaje1aiQVVOUlTSD4cCjHA78hnF5WpoGKKzNU3Ho/kmP3JEHaioA+un04fxoGz4aNjDUoGjqcPv0BkuLGcDmpEAgi7twdrgFrw0nALh/foe8phJA23EnYxCjMe2crhITZHByUIDPZj/Q4PrhBbAB48visJrXJCIIKup4RoBW8zcAuHmsSwyw2XF91XU1TWfMYoTj/U0fQGgQHUEAIH08CwZTIyQBhGcQDMgr4xFIg7gtCBG77oh8IbwQHUESMazBrDWKLcSKiI+jxhGAijpHJpPWGNZAWFfsPYmJ5ANjfSHRfXHFrsPAtjmwi71isndnQP8Dd8/5n9T5ysEAAAAASUVORK5CYII="}],"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],"translation":[0,-1.75,0],"scale":[0.45,0.45,0.45]},"head":{"rotation":[-180,0,0],"translation":[0,22.25,0]},"fixed":{"translation":[0,-1.25,0],"scale":[0.5,0.5,0.5]}}} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/portable_storage_interface/portable_storage_interface.png b/src/main/resources/assets/create/models/block/portable_storage_interface/portable_storage_interface.png new file mode 100644 index 000000000..0e9ade677 Binary files /dev/null and b/src/main/resources/assets/create/models/block/portable_storage_interface/portable_storage_interface.png differ diff --git a/src/main/resources/assets/create/models/block/stockpile_switch.json b/src/main/resources/assets/create/models/block/stockpile_switch.json index cfe456960..9439bb80c 100644 --- a/src/main/resources/assets/create/models/block/stockpile_switch.json +++ b/src/main/resources/assets/create/models/block/stockpile_switch.json @@ -4,10 +4,11 @@ "textures": { "5": "create:block/brass_casing_inner", "6": "create:block/brass_casing", + "7": "create:block/filtered_detector_top", "indicator": "create:block/indicator/0", "particle": "create:block/brass_casing_side", "brass_casing": "create:block/brass_casing_side", - "end": "create:block/stockpile_switch_end" + "end": "create:block/filtered_detector_front" }, "elements": [ { @@ -32,16 +33,16 @@ "east": {"uv": [0, 0, 16, 2], "texture": "#brass_casing"}, "south": {"uv": [0, 0, 16, 2], "texture": "#brass_casing"}, "west": {"uv": [0, 0, 16, 2], "texture": "#brass_casing"}, - "up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#6"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#7"}, "down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#6"} } }, { "name": "Center", - "from": [1, 2, 1], - "to": [15, 14, 15], + "from": [0.9, 2, 0.9], + "to": [15.1, 14, 15.1], "faces": { - "north": {"uv": [0, 0, 14, 12], "texture": "#5"}, + "north": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"}, "east": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"}, "south": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"}, "west": {"uv": [0, 1, 12, 15], "rotation": 90, "texture": "#5"}, diff --git a/src/main/resources/assets/create/models/block/symmetry_effect/crossplane.json b/src/main/resources/assets/create/models/block/symmetry_effect/crossplane.json index fede15ab1..0fdbb9668 100644 --- a/src/main/resources/assets/create/models/block/symmetry_effect/crossplane.json +++ b/src/main/resources/assets/create/models/block/symmetry_effect/crossplane.json @@ -1,144 +1,143 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "textures": { - "0": "block/white_stained_glass", - "1": "block/obsidian", - "2": "block/packed_ice" - }, - "elements": [ - { - "name": "Mirror", - "from": [ 4.0, 1.0, 7.500000007450581 ], - "to": [ 7.0, 12.0, 8.50000000745058 ], - "faces": { - "north": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] }, - "east": { "texture": "#0", "uv": [ 3.0, 1.0, 4.0, 12.0 ] }, - "south": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] }, - "west": { "texture": "#0", "uv": [ 12.0, 1.0, 13.0, 12.0 ] }, - "up": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 2.0 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 14.0, 7.0, 15.0 ] } - } - }, - { - "name": "rod_left_bottom", - "from": [ 1.2000000029802322, 3.0, 7.0 ], - "to": [ 3.2000000029802322, 4.0, 9.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - }, - { - "name": "rod_left_top", - "from": [ 1.2000000029802322, 12.0, 7.0 ], - "to": [ 3.2000000029802322, 13.0, 9.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - }, - { - "name": "rod_left", - "from": [ 2.0, 4.0, 7.499999992549419 ], - "to": [ 3.0, 12.0, 8.49999999254942 ], - "shade": false, - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, - "faces": { - "north": { "texture": "#2", "uv": [ 3.0, 1.0, 4.0, 9.0 ] }, - "east": { "texture": "#2", "uv": [ 3.0, 0.0, 4.0, 8.0 ] }, - "south": { "texture": "#2", "uv": [ 3.0, 1.0, 4.0, 9.0 ] }, - "west": { "texture": "#2", "uv": [ 5.0, 1.0, 6.0, 9.0 ] } - } - }, - { - "name": "rod_right_bottom", - "from": [ 12.799999997019768, 3.0, 7.0 ], - "to": [ 14.799999997019768, 4.0, 9.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - }, - { - "name": "rod_right", - "from": [ 13.0, 4.0, 7.499999992549419 ], - "to": [ 14.0, 12.0, 8.49999999254942 ], - "shade": false, - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, - "faces": { - "north": { "texture": "#2", "uv": [ 3.0, 2.0, 4.0, 10.0 ] }, - "east": { "texture": "#2", "uv": [ 3.0, 3.0, 4.0, 11.0 ] }, - "south": { "texture": "#2", "uv": [ 4.0, 3.0, 5.0, 11.0 ] }, - "west": { "texture": "#2", "uv": [ 5.0, 0.0, 6.0, 8.0 ] } - } - }, - { - "name": "rod_right_top", - "from": [ 12.799999997019768, 12.0, 7.0 ], - "to": [ 14.799999997019768, 13.0, 9.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - }, - { - "name": "CrossMirror", - "from": [ 7.499999992549419, 4.0, 9.50000000745058 ], - "to": [ 8.49999999254942, 15.0, 12.50000000745058 ], - "faces": { - "north": { "texture": "#0", "uv": [ 4.0, 1.0, 5.0, 12.0 ] }, - "east": { "texture": "#0", "uv": [ 3.0, 1.0, 6.0, 12.0 ] }, - "south": { "texture": "#0", "uv": [ 4.0, 1.0, 5.0, 12.0 ] }, - "west": { "texture": "#0", "uv": [ 9.0, 1.0, 12.0, 12.0 ] }, - "up": { "texture": "#0", "uv": [ 3.0, 3.0, 4.0, 6.0 ] }, - "down": { "texture": "#0", "uv": [ 5.0, 9.0, 6.0, 12.0 ] } - } - }, - { - "name": "Mirror II", - "from": [ 9.0, 3.0, 7.500000007450581 ], - "to": [ 12.0, 14.0, 8.50000000745058 ], - "faces": { - "north": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] }, - "east": { "texture": "#0", "uv": [ 3.0, 1.0, 4.0, 12.0 ] }, - "south": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] }, - "west": { "texture": "#0", "uv": [ 12.0, 1.0, 13.0, 12.0 ] }, - "up": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 2.0 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 14.0, 7.0, 15.0 ] } - } - }, - { - "name": "CrossMirror II", - "from": [ 7.499999992549419, 2.0, 3.5000000074505806 ], - "to": [ 8.49999999254942, 13.0, 6.500000007450581 ], - "faces": { - "north": { "texture": "#0", "uv": [ 4.0, 1.0, 5.0, 12.0 ] }, - "east": { "texture": "#0", "uv": [ 3.0, 1.0, 6.0, 12.0 ] }, - "south": { "texture": "#0", "uv": [ 4.0, 3.0, 5.0, 14.0 ] }, - "west": { "texture": "#0", "uv": [ 9.0, 2.0, 12.0, 13.0 ] }, - "up": { "texture": "#0", "uv": [ 4.0, 3.0, 5.0, 6.0 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 8.0, 5.0, 11.0 ] } - } - } - ] + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/symmetry_mirror", + "2": "create:block/brass_block" + }, + "elements": [ + { + "name": "Mirror", + "from": [4, 1, 7.5], + "to": [7, 12, 8.5], + "faces": { + "north": {"uv": [4, 1, 7, 12], "texture": "#0"}, + "east": {"uv": [3, 1, 4, 12], "texture": "#0"}, + "south": {"uv": [4, 1, 7, 12], "texture": "#0"}, + "west": {"uv": [12, 1, 13, 12], "texture": "#0"}, + "up": {"uv": [4, 1, 7, 2], "texture": "#0"}, + "down": {"uv": [4, 14, 7, 15], "texture": "#0"} + } + }, + { + "name": "rod_left_bottom", + "from": [1, 3, 7], + "to": [3, 4, 9], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "up": {"uv": [13, 13, 15, 15], "texture": "#2"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#2"} + } + }, + { + "name": "rod_left_bottom", + "from": [13, 3, 7], + "to": [15, 4, 9], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "up": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#2"}, + "down": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "rod_left_top", + "from": [1, 12, 7], + "to": [3, 13, 9], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "up": {"uv": [13, 13, 15, 15], "texture": "#2"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#2"} + } + }, + { + "name": "rod_left_top", + "from": [13, 12, 7], + "to": [15, 13, 9], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "up": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#2"}, + "down": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "rod_left", + "from": [1, 4, 7.5], + "to": [3, 12, 8.5], + "shade": false, + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3, 5, 1, 13], "texture": "#2"}, + "east": {"uv": [8, 4, 9, 12], "texture": "#2"}, + "south": {"uv": [1, 3, 3, 11], "texture": "#2"}, + "west": {"uv": [1, 6, 2, 14], "texture": "#2"} + } + }, + { + "name": "rod_left", + "from": [13, 4, 7.5], + "to": [15, 12, 8.5], + "shade": false, + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 3, 3, 11], "texture": "#2"}, + "east": {"uv": [1, 6, 2, 14], "texture": "#2"}, + "south": {"uv": [3, 5, 1, 13], "texture": "#2"}, + "west": {"uv": [8, 4, 9, 12], "texture": "#2"} + } + }, + { + "name": "CrossMirror", + "from": [7.5, 4, 9.5], + "to": [8.5, 15, 12.5], + "faces": { + "north": {"uv": [4, 1, 5, 12], "texture": "#0"}, + "east": {"uv": [3, 1, 6, 12], "texture": "#0"}, + "south": {"uv": [4, 1, 5, 12], "texture": "#0"}, + "west": {"uv": [9, 1, 12, 12], "texture": "#0"}, + "up": {"uv": [3, 3, 4, 6], "texture": "#0"}, + "down": {"uv": [5, 9, 6, 12], "texture": "#0"} + } + }, + { + "name": "Mirror II", + "from": [9, 3, 7.5], + "to": [12, 14, 8.5], + "faces": { + "north": {"uv": [4, 1, 7, 12], "texture": "#0"}, + "east": {"uv": [3, 1, 4, 12], "texture": "#0"}, + "south": {"uv": [4, 1, 7, 12], "texture": "#0"}, + "west": {"uv": [12, 1, 13, 12], "texture": "#0"}, + "up": {"uv": [4, 1, 7, 2], "texture": "#0"}, + "down": {"uv": [4, 14, 7, 15], "texture": "#0"} + } + }, + { + "name": "CrossMirror II", + "from": [7.5, 2, 3.5], + "to": [8.5, 13, 6.5], + "faces": { + "north": {"uv": [4, 1, 5, 12], "texture": "#0"}, + "east": {"uv": [3, 1, 6, 12], "texture": "#0"}, + "south": {"uv": [4, 3, 5, 14], "texture": "#0"}, + "west": {"uv": [9, 2, 12, 13], "texture": "#0"}, + "up": {"uv": [4, 3, 5, 6], "texture": "#0"}, + "down": {"uv": [4, 8, 5, 11], "texture": "#0"} + } + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/symmetry_effect/plane.json b/src/main/resources/assets/create/models/block/symmetry_effect/plane.json index 5d36206de..5717ed96f 100644 --- a/src/main/resources/assets/create/models/block/symmetry_effect/plane.json +++ b/src/main/resources/assets/create/models/block/symmetry_effect/plane.json @@ -1,99 +1,105 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "textures": { - "0": "block/white_stained_glass", - "1": "block/obsidian", - "2": "block/packed_ice" - }, - "elements": [ - { - "name": "Mirror", - "from": [ 4.0, 1.0, 7.500000007450581 ], - "to": [ 12.0, 15.0, 8.50000000745058 ], - "faces": { - "north": { "texture": "#0", "uv": [ 4.0, 1.0, 12.0, 15.0 ] }, - "east": { "texture": "#0", "uv": [ 3.0, 1.0, 4.0, 15.0 ] }, - "south": { "texture": "#0", "uv": [ 4.0, 1.0, 12.0, 15.0 ] }, - "west": { "texture": "#0", "uv": [ 12.0, 1.0, 13.0, 15.0 ] }, - "up": { "texture": "#0", "uv": [ 4.0, 1.0, 12.0, 2.0 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 14.0, 12.0, 15.0 ] } - } - }, - { - "name": "rod_left_bottom", - "from": [ 1.2000000029802322, 3.0, 7.0 ], - "to": [ 3.2000000029802322, 4.0, 9.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - }, - { - "name": "rod_left_top", - "from": [ 1.2000000029802322, 12.0, 7.0 ], - "to": [ 3.2000000029802322, 13.0, 9.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - }, - { - "name": "rod_left", - "from": [ 2.0, 4.0, 7.499999992549419 ], - "to": [ 3.0, 12.0, 8.49999999254942 ], - "shade": false, - "faces": { - "north": { "texture": "#2", "uv": [ 3.0, 1.0, 4.0, 9.0 ] }, - "east": { "texture": "#2", "uv": [ 3.0, 0.0, 4.0, 8.0 ] }, - "south": { "texture": "#2", "uv": [ 3.0, 1.0, 4.0, 9.0 ] }, - "west": { "texture": "#2", "uv": [ 5.0, 1.0, 6.0, 9.0 ] } - } - }, - { - "name": "rod_right_bottom", - "from": [ 12.799999997019768, 3.0, 7.0 ], - "to": [ 14.799999997019768, 4.0, 9.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - }, - { - "name": "rod_right", - "from": [ 13.0, 4.0, 7.499999992549419 ], - "to": [ 14.0, 12.0, 8.49999999254942 ], - "shade": false, - "faces": { - "north": { "texture": "#2", "uv": [ 3.0, 2.0, 4.0, 10.0 ] }, - "east": { "texture": "#2", "uv": [ 3.0, 3.0, 4.0, 11.0 ] }, - "south": { "texture": "#2", "uv": [ 4.0, 3.0, 5.0, 11.0 ] }, - "west": { "texture": "#2", "uv": [ 5.0, 0.0, 6.0, 8.0 ] } - } - }, - { - "name": "rod_right_top", - "from": [ 12.799999997019768, 12.0, 7.0 ], - "to": [ 14.799999997019768, 13.0, 9.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - } - ] + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/symmetry_mirror", + "1_2": "create:block/brass_block" + }, + "elements": [ + { + "name": "Mirror", + "from": [4, 1, 7.5], + "to": [12, 15, 8.5], + "faces": { + "north": {"uv": [4, 1, 12, 15], "texture": "#0"}, + "east": {"uv": [3, 1, 4, 15], "texture": "#0"}, + "south": {"uv": [4, 1, 12, 15], "texture": "#0"}, + "west": {"uv": [12, 1, 13, 15], "texture": "#0"}, + "up": {"uv": [4, 1, 12, 2], "texture": "#0"}, + "down": {"uv": [4, 14, 12, 15], "texture": "#0"} + } + }, + { + "name": "rod_left_bottom", + "from": [1, 3, 7], + "to": [3, 4, 9], + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "up": {"uv": [13, 13, 15, 15], "texture": "#1_2"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#1_2"} + } + }, + { + "name": "rod_left_bottom", + "from": [13, 3, 7], + "to": [15, 4, 9], + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "up": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#1_2"}, + "down": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#1_2"} + } + }, + { + "name": "rod_left_top", + "from": [1, 12, 7], + "to": [3, 13, 9], + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "up": {"uv": [13, 13, 15, 15], "texture": "#1_2"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#1_2"} + } + }, + { + "name": "rod_left_top", + "from": [13, 12, 7], + "to": [15, 13, 9], + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#1_2"}, + "up": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#1_2"}, + "down": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#1_2"} + } + }, + { + "name": "rod_left", + "from": [1, 4, 7.5], + "to": [3, 12, 8.5], + "shade": false, + "faces": { + "north": {"uv": [3, 5, 1, 13], "texture": "#1_2"}, + "east": {"uv": [8, 4, 9, 12], "texture": "#1_2"}, + "south": {"uv": [1, 3, 3, 11], "texture": "#1_2"}, + "west": {"uv": [1, 6, 2, 14], "texture": "#1_2"} + } + }, + { + "name": "rod_left", + "from": [13, 4, 7.5], + "to": [15, 12, 8.5], + "shade": false, + "faces": { + "north": {"uv": [1, 3, 3, 11], "texture": "#1_2"}, + "east": {"uv": [1, 6, 2, 14], "texture": "#1_2"}, + "south": {"uv": [3, 5, 1, 13], "texture": "#1_2"}, + "west": {"uv": [8, 4, 9, 12], "texture": "#1_2"} + } + } + ], + "groups": [0, + { + "name": "crossplane", + "origin": [8, 8, 8], + "children": [1, 2, 3, 4, 5, 6] + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/symmetry_effect/tripleplane.json b/src/main/resources/assets/create/models/block/symmetry_effect/tripleplane.json index 2af7a097f..99450d7ca 100644 --- a/src/main/resources/assets/create/models/block/symmetry_effect/tripleplane.json +++ b/src/main/resources/assets/create/models/block/symmetry_effect/tripleplane.json @@ -1,172 +1,178 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "textures": { - "0": "block/white_stained_glass", - "1": "block/obsidian", - "2": "block/packed_ice" - }, - "elements": [ - { - "name": "Mirror", - "from": [ 6.499999992549419, 1.0, 10.50000000745058 ], - "to": [ 9.49999999254942, 12.0, 11.50000000745058 ], - "faces": { - "north": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] }, - "east": { "texture": "#0", "uv": [ 3.0, 1.0, 4.0, 12.0 ] }, - "south": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] }, - "west": { "texture": "#0", "uv": [ 12.0, 1.0, 13.0, 12.0 ] }, - "up": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 2.0 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 14.0, 7.0, 15.0 ] } - } - }, - { - "name": "rod_left_bottom", - "from": [ 1.2000000029802322, 3.0, 7.0 ], - "to": [ 3.2000000029802322, 4.0, 9.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - }, - { - "name": "rod_left_top", - "from": [ 1.2000000029802322, 12.0, 7.0 ], - "to": [ 3.2000000029802322, 13.0, 9.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - }, - { - "name": "rod_left", - "from": [ 2.0, 4.0, 7.499999992549419 ], - "to": [ 3.0, 12.0, 8.49999999254942 ], - "shade": false, - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#2", "uv": [ 3.0, 1.0, 4.0, 9.0 ] }, - "east": { "texture": "#2", "uv": [ 3.0, 0.0, 4.0, 8.0 ] }, - "south": { "texture": "#2", "uv": [ 3.0, 1.0, 4.0, 9.0 ] }, - "west": { "texture": "#2", "uv": [ 5.0, 1.0, 6.0, 9.0 ] } - } - }, - { - "name": "rod_right_bottom", - "from": [ 12.799999997019768, 3.0, 7.0 ], - "to": [ 14.799999997019768, 4.0, 9.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - }, - { - "name": "rod_right", - "from": [ 13.0, 4.0, 7.499999992549419 ], - "to": [ 14.0, 12.0, 8.49999999254942 ], - "shade": false, - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#2", "uv": [ 3.0, 2.0, 4.0, 10.0 ] }, - "east": { "texture": "#2", "uv": [ 3.0, 3.0, 4.0, 11.0 ] }, - "south": { "texture": "#2", "uv": [ 4.0, 3.0, 5.0, 11.0 ] }, - "west": { "texture": "#2", "uv": [ 5.0, 0.0, 6.0, 8.0 ] } - } - }, - { - "name": "rod_right_top", - "from": [ 12.799999997019768, 12.0, 7.0 ], - "to": [ 14.799999997019768, 13.0, 9.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] } - } - }, - { - "name": "CrossMirror", - "from": [ 4.499999977648258, 2.0, 6.500000007450581 ], - "to": [ 5.499999977648258, 13.0, 9.50000000745058 ], - "faces": { - "north": { "texture": "#0", "uv": [ 4.0, 1.0, 5.0, 12.0 ] }, - "east": { "texture": "#0", "uv": [ 3.0, 1.0, 6.0, 12.0 ] }, - "south": { "texture": "#0", "uv": [ 4.0, 1.0, 5.0, 12.0 ] }, - "west": { "texture": "#0", "uv": [ 9.0, 1.0, 12.0, 12.0 ] }, - "up": { "texture": "#0", "uv": [ 3.0, 3.0, 4.0, 6.0 ] }, - "down": { "texture": "#0", "uv": [ 5.0, 9.0, 6.0, 12.0 ] } - } - }, - { - "name": "Mirror II", - "from": [ 6.499999992549419, 3.0, 4.500000007450581 ], - "to": [ 9.49999999254942, 14.0, 5.500000007450581 ], - "faces": { - "north": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] }, - "east": { "texture": "#0", "uv": [ 3.0, 1.0, 4.0, 12.0 ] }, - "south": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] }, - "west": { "texture": "#0", "uv": [ 12.0, 1.0, 13.0, 12.0 ] }, - "up": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 2.0 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 14.0, 7.0, 15.0 ] } - } - }, - { - "name": "CrossMirror II", - "from": [ 10.50000000745058, 4.0, 6.500000007450581 ], - "to": [ 11.50000000745058, 15.0, 9.50000000745058 ], - "faces": { - "north": { "texture": "#0", "uv": [ 4.0, 1.0, 5.0, 12.0 ] }, - "east": { "texture": "#0", "uv": [ 3.0, 1.0, 6.0, 12.0 ] }, - "south": { "texture": "#0", "uv": [ 4.0, 3.0, 5.0, 14.0 ] }, - "west": { "texture": "#0", "uv": [ 9.0, 2.0, 12.0, 13.0 ] }, - "up": { "texture": "#0", "uv": [ 4.0, 3.0, 5.0, 6.0 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 8.0, 5.0, 11.0 ] } - } - }, - { - "name": "Cube", - "from": [ 7.499999992549419, 6.0, -0.4999999925494194 ], - "to": [ 8.49999999254942, 10.0, 3.5000000074505806 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#0", "uv": [ 4.0, 1.0, 5.0, 5.0 ] }, - "east": { "texture": "#0", "uv": [ 3.0, 1.0, 7.0, 5.0 ] }, - "south": { "texture": "#0", "uv": [ 4.0, 3.0, 5.0, 7.0 ] }, - "west": { "texture": "#0", "uv": [ 9.0, 2.0, 13.0, 6.0 ] }, - "up": { "texture": "#0", "uv": [ 4.0, 3.0, 5.0, 7.0 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 8.0, 5.0, 12.0 ] } - } - }, - { - "name": "Cube", - "from": [ 7.499999992549419, 6.0, 12.50000000745058 ], - "to": [ 8.49999999254942, 10.0, 16.50000000745058 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#0", "uv": [ 4.0, 1.0, 5.0, 5.0 ] }, - "east": { "texture": "#0", "uv": [ 3.0, 1.0, 7.0, 5.0 ] }, - "south": { "texture": "#0", "uv": [ 4.0, 3.0, 5.0, 7.0 ] }, - "west": { "texture": "#0", "uv": [ 9.0, 2.0, 13.0, 6.0 ] }, - "up": { "texture": "#0", "uv": [ 4.0, 3.0, 5.0, 7.0 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 8.0, 5.0, 12.0 ] } - } - } - ] + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/symmetry_mirror", + "2": "create:block/brass_block" + }, + "elements": [ + { + "name": "Mirror", + "from": [6.5, 1, 10.5], + "to": [9.5, 12, 11.5], + "faces": { + "north": {"uv": [4, 1, 7, 12], "texture": "#0"}, + "east": {"uv": [3, 1, 4, 12], "texture": "#0"}, + "south": {"uv": [4, 1, 7, 12], "texture": "#0"}, + "west": {"uv": [12, 1, 13, 12], "texture": "#0"}, + "up": {"uv": [4, 1, 7, 2], "texture": "#0"}, + "down": {"uv": [4, 14, 7, 15], "texture": "#0"} + } + }, + { + "name": "CrossMirror", + "from": [4.5, 2, 6.5], + "to": [5.5, 13, 9.5], + "faces": { + "north": {"uv": [4, 1, 5, 12], "texture": "#0"}, + "east": {"uv": [3, 1, 6, 12], "texture": "#0"}, + "south": {"uv": [4, 1, 5, 12], "texture": "#0"}, + "west": {"uv": [9, 1, 12, 12], "texture": "#0"}, + "up": {"uv": [3, 3, 4, 6], "texture": "#0"}, + "down": {"uv": [5, 9, 6, 12], "texture": "#0"} + } + }, + { + "name": "Mirror II", + "from": [6.5, 3, 4.5], + "to": [9.5, 14, 5.5], + "faces": { + "north": {"uv": [4, 1, 7, 12], "texture": "#0"}, + "east": {"uv": [3, 1, 4, 12], "texture": "#0"}, + "south": {"uv": [4, 1, 7, 12], "texture": "#0"}, + "west": {"uv": [12, 1, 13, 12], "texture": "#0"}, + "up": {"uv": [4, 1, 7, 2], "texture": "#0"}, + "down": {"uv": [4, 14, 7, 15], "texture": "#0"} + } + }, + { + "name": "CrossMirror II", + "from": [10.5, 4, 6.5], + "to": [11.5, 15, 9.5], + "faces": { + "north": {"uv": [4, 1, 5, 12], "texture": "#0"}, + "east": {"uv": [3, 1, 6, 12], "texture": "#0"}, + "south": {"uv": [4, 3, 5, 14], "texture": "#0"}, + "west": {"uv": [9, 2, 12, 13], "texture": "#0"}, + "up": {"uv": [4, 3, 5, 6], "texture": "#0"}, + "down": {"uv": [4, 8, 5, 11], "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [7.5, 6, -0.5], + "to": [8.5, 10, 3.5], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4, 1, 5, 5], "texture": "#0"}, + "east": {"uv": [3, 1, 7, 5], "texture": "#0"}, + "south": {"uv": [4, 3, 5, 7], "texture": "#0"}, + "west": {"uv": [9, 2, 13, 6], "texture": "#0"}, + "up": {"uv": [4, 3, 5, 7], "texture": "#0"}, + "down": {"uv": [4, 8, 5, 12], "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [7.5, 6, 12.5], + "to": [8.5, 10, 16.5], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [4, 1, 5, 5], "texture": "#0"}, + "east": {"uv": [3, 1, 7, 5], "texture": "#0"}, + "south": {"uv": [4, 3, 5, 7], "texture": "#0"}, + "west": {"uv": [9, 2, 13, 6], "texture": "#0"}, + "up": {"uv": [4, 3, 5, 7], "texture": "#0"}, + "down": {"uv": [4, 8, 5, 12], "texture": "#0"} + } + }, + { + "name": "rod_left_bottom", + "from": [1, 3, 7], + "to": [3, 4, 9], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "up": {"uv": [13, 13, 15, 15], "texture": "#2"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#2"} + } + }, + { + "name": "rod_left_bottom", + "from": [13, 3, 7], + "to": [15, 4, 9], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "up": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#2"}, + "down": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "rod_left_top", + "from": [1, 12, 7], + "to": [3, 13, 9], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "up": {"uv": [13, 13, 15, 15], "texture": "#2"}, + "down": {"uv": [13, 13, 15, 15], "texture": "#2"} + } + }, + { + "name": "rod_left_top", + "from": [13, 12, 7], + "to": [15, 13, 9], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "up": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#2"}, + "down": {"uv": [13, 13, 15, 15], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "rod_left", + "from": [1, 4, 7.5], + "to": [3, 12, 8.5], + "shade": false, + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [3, 5, 1, 13], "texture": "#2"}, + "east": {"uv": [8, 4, 9, 12], "texture": "#2"}, + "south": {"uv": [1, 3, 3, 11], "texture": "#2"}, + "west": {"uv": [1, 6, 2, 14], "texture": "#2"} + } + }, + { + "name": "rod_left", + "from": [13, 4, 7.5], + "to": [15, 12, 8.5], + "shade": false, + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 3, 3, 11], "texture": "#2"}, + "east": {"uv": [1, 6, 2, 14], "texture": "#2"}, + "south": {"uv": [3, 5, 1, 13], "texture": "#2"}, + "west": {"uv": [8, 4, 9, 12], "texture": "#2"} + } + } + ], + "groups": [0, 1, 2, 3, 4, 5, + { + "name": "crossplane", + "origin": [8, 8, 8], + "children": [6, 7, 8, 9, 10, 11] + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/valve_handle.json b/src/main/resources/assets/create/models/block/valve_handle.json new file mode 100644 index 000000000..c5b9b3258 --- /dev/null +++ b/src/main/resources/assets/create/models/block/valve_handle.json @@ -0,0 +1,365 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "particle": "create:block/oxidized/copper_block_0", + "3": "create:block/valve_handle/valve_handle_copper" + }, + "elements": [ + { + "name": "WheelMid", + "from": [5.5, 0, 5.5], + "to": [10.5, 4, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [14, -7, 14]}, + "faces": { + "north": {"uv": [0, 5, 5, 9], "texture": "#3"}, + "east": {"uv": [0, 5, 5, 9], "texture": "#3"}, + "south": {"uv": [0, 5, 5, 9], "texture": "#3"}, + "west": {"uv": [0, 5, 5, 9], "texture": "#3"}, + "up": {"uv": [0, 0, 5, 5], "rotation": 180, "texture": "#3"}, + "down": {"uv": [0, 0, 5, 5], "texture": "#3"} + } + }, + { + "name": "Nubbin", + "from": [6.5, 4, 6.5], + "to": [9.5, 5, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [15.5, 11.5, 15.5]}, + "faces": { + "north": {"uv": [1, 1, 4, 2], "texture": "#3"}, + "east": {"uv": [1, 3, 4, 4], "rotation": 180, "texture": "#3"}, + "south": {"uv": [1, 3, 4, 4], "texture": "#3"}, + "west": {"uv": [1, 1, 2, 4], "rotation": 90, "texture": "#3"}, + "up": {"uv": [1, 1, 4, 4], "texture": "#3"} + } + }, + { + "name": "BranchNorthTop", + "from": [6.5, 2.8888, 12.3314], + "to": [9.5, 5.8888, 14.3314], + "rotation": {"angle": -45, "axis": "x", "origin": [7.14142, 4.75147, 12.11726]}, + "faces": { + "north": {"uv": [4, 8, 5, 9], "texture": "#3"}, + "east": {"uv": [1, 6, 4, 8], "rotation": 90, "texture": "#3"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#3"}, + "west": {"uv": [1, 6, 4, 8], "rotation": 270, "texture": "#3"}, + "up": {"uv": [1, 6, 4, 8], "texture": "#3"}, + "down": {"uv": [1, 6, 4, 8], "rotation": 180, "texture": "#3"} + } + }, + { + "name": "BranchNorthMid", + "from": [7, 3.3888, 9.3314], + "to": [9, 5.3888, 12.3314], + "rotation": {"angle": -45, "axis": "x", "origin": [7.14142, 4.75147, 12.11726]}, + "faces": { + "east": {"uv": [5, 8, 8, 10], "texture": "#3"}, + "west": {"uv": [5, 8, 8, 10], "rotation": 180, "texture": "#3"}, + "up": {"uv": [5, 8, 8, 10], "rotation": 270, "texture": "#3"}, + "down": {"uv": [5, 8, 8, 10], "rotation": 90, "texture": "#3"} + } + }, + { + "name": "BranchNorthBottom", + "from": [6.5, 2.8888, 7.3314], + "to": [9.5, 5.8888, 9.3314], + "rotation": {"angle": -45, "axis": "x", "origin": [7.14142, 4.75147, 12.11726]}, + "faces": { + "east": {"uv": [1, 6, 4, 8], "rotation": 270, "texture": "#3"}, + "south": {"uv": [4, 8, 5, 9], "texture": "#3"}, + "west": {"uv": [1, 6, 4, 8], "rotation": 90, "texture": "#3"}, + "down": {"uv": [1, 6, 4, 8], "texture": "#3"} + } + }, + { + "name": "WheelNorth", + "from": [5, 5, 12.8], + "to": [11, 8, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [7.14142, 4.75147, 12.11726]}, + "faces": { + "north": {"uv": [5, 5, 11, 8], "rotation": 180, "texture": "#3"}, + "east": {"uv": [9, 4, 10, 5], "rotation": 270, "texture": "#3"}, + "south": {"uv": [5, 2, 11, 5], "texture": "#3"}, + "west": {"uv": [9, 4, 10, 5], "rotation": 180, "texture": "#3"}, + "up": {"uv": [5, 0, 11, 2], "rotation": 180, "texture": "#3"}, + "down": {"uv": [5, 0, 11, 2], "texture": "#3"} + } + }, + { + "name": "WheelNorthEast", + "from": [3.5888, 5.1, 6.9846], + "to": [5.5888, 7.9, 12.64145], + "rotation": {"angle": 45, "axis": "y", "origin": [7.14142, 4.75147, 12.11726]}, + "faces": { + "east": {"uv": [5, 5, 11, 8], "rotation": 180, "texture": "#3"}, + "west": {"uv": [5, 2, 11, 5], "texture": "#3"}, + "up": {"uv": [5, 0, 11, 2], "rotation": 270, "texture": "#3"}, + "down": {"uv": [5, 0, 11, 2], "rotation": 270, "texture": "#3"} + } + }, + { + "name": "BranchEastTop", + "from": [1, 5, 6.5], + "to": [3, 8, 9.5], + "rotation": {"angle": -45, "axis": "z", "origin": [1, 5, 8]}, + "faces": { + "north": {"uv": [1, 6, 4, 8], "rotation": 270, "texture": "#3"}, + "east": {"uv": [4, 8, 5, 9], "texture": "#3"}, + "south": {"uv": [1, 6, 4, 8], "rotation": 90, "texture": "#3"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#3"}, + "up": {"uv": [1, 6, 4, 8], "rotation": 90, "texture": "#3"}, + "down": {"uv": [1, 6, 4, 8], "rotation": 90, "texture": "#3"} + } + }, + { + "name": "BranchEastMid", + "from": [3, 5.5, 7], + "to": [6, 7.5, 9], + "rotation": {"angle": -45, "axis": "z", "origin": [1, 5, 8]}, + "faces": { + "north": {"uv": [5, 8, 8, 10], "rotation": 180, "texture": "#3"}, + "south": {"uv": [5, 8, 8, 10], "texture": "#3"}, + "up": {"uv": [5, 8, 8, 10], "texture": "#3"}, + "down": {"uv": [5, 8, 8, 10], "texture": "#3"} + } + }, + { + "name": "BranchEastBottom", + "from": [6, 5, 6.5], + "to": [8, 8, 9.5], + "rotation": {"angle": -45, "axis": "z", "origin": [1, 5, 8]}, + "faces": { + "north": {"uv": [1, 6, 4, 8], "rotation": 90, "texture": "#3"}, + "south": {"uv": [1, 6, 4, 8], "rotation": 270, "texture": "#3"}, + "west": {"uv": [4, 8, 5, 9], "texture": "#3"}, + "down": {"uv": [1, 6, 4, 8], "rotation": 270, "texture": "#3"} + } + }, + { + "name": "WheelEast", + "from": [5, 5, 1], + "to": [11, 8, 3.2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 1.9]}, + "faces": { + "north": {"uv": [5, 2, 11, 5], "texture": "#3"}, + "east": {"uv": [9, 4, 10, 5], "rotation": 180, "texture": "#3"}, + "south": {"uv": [5, 5, 11, 8], "rotation": 180, "texture": "#3"}, + "west": {"uv": [9, 4, 10, 5], "rotation": 270, "texture": "#3"}, + "up": {"uv": [5, 0, 11, 2], "texture": "#3"}, + "down": {"uv": [5, 0, 11, 2], "rotation": 180, "texture": "#3"} + } + }, + { + "name": "WheelSouthEast", + "from": [3.5888, 5.1, 3.35855], + "to": [5.5888, 7.9, 9.0154], + "rotation": {"angle": -45, "axis": "y", "origin": [7.14142, 4.75147, 3.88274]}, + "faces": { + "east": {"uv": [11, 5, 5, 8], "rotation": 180, "texture": "#3"}, + "west": {"uv": [11, 2, 5, 5], "texture": "#3"}, + "up": {"uv": [11, 0, 5, 2], "rotation": 270, "texture": "#3"}, + "down": {"uv": [11, 0, 5, 2], "rotation": 270, "texture": "#3"} + } + }, + { + "name": "BranchSouthTop", + "from": [6.5, 2.8888, 1.6686], + "to": [9.5, 5.8888, 3.6686], + "rotation": {"angle": 45, "axis": "x", "origin": [7.14142, 4.75147, 3.88274]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#3"}, + "east": {"uv": [1, 8, 4, 6], "rotation": 90, "texture": "#3"}, + "south": {"uv": [5, 8, 4, 9], "texture": "#3"}, + "west": {"uv": [1, 8, 4, 6], "rotation": 270, "texture": "#3"}, + "up": {"uv": [1, 8, 4, 6], "texture": "#3"}, + "down": {"uv": [1, 8, 4, 6], "rotation": 180, "texture": "#3"} + } + }, + { + "name": "BranchSouthMid", + "from": [7, 3.3888, 3.6686], + "to": [9, 5.3888, 6.6686], + "rotation": {"angle": 45, "axis": "x", "origin": [7.14142, 4.75147, 3.88274]}, + "faces": { + "east": {"uv": [8, 8, 5, 10], "texture": "#3"}, + "west": {"uv": [8, 8, 5, 10], "rotation": 180, "texture": "#3"}, + "up": {"uv": [8, 8, 5, 10], "rotation": 270, "texture": "#3"}, + "down": {"uv": [8, 8, 5, 10], "rotation": 90, "texture": "#3"} + } + }, + { + "name": "BranchSouthBottom", + "from": [6.5, 2.8888, 6.6686], + "to": [9.5, 5.8888, 8.6686], + "rotation": {"angle": 45, "axis": "x", "origin": [7.14142, 4.75147, 3.88274]}, + "faces": { + "north": {"uv": [5, 8, 4, 9], "texture": "#3"}, + "east": {"uv": [1, 8, 4, 6], "rotation": 270, "texture": "#3"}, + "west": {"uv": [1, 8, 4, 6], "rotation": 90, "texture": "#3"}, + "down": {"uv": [1, 8, 4, 6], "texture": "#3"} + } + }, + { + "name": "WheelSouth", + "from": [1, 5, 5], + "to": [3.2, 8, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 6.5, 7.9]}, + "faces": { + "north": {"uv": [9, 4, 10, 5], "rotation": 180, "texture": "#3"}, + "east": {"uv": [5, 5, 11, 8], "rotation": 180, "texture": "#3"}, + "south": {"uv": [9, 4, 10, 5], "rotation": 270, "texture": "#3"}, + "west": {"uv": [5, 2, 11, 5], "texture": "#3"}, + "up": {"uv": [5, 0, 11, 2], "rotation": 270, "texture": "#3"}, + "down": {"uv": [5, 0, 11, 2], "rotation": 270, "texture": "#3"} + } + }, + { + "name": "WheelSouthWest", + "from": [10.4112, 5.1, 3.35855], + "to": [12.4112, 7.9, 9.0154], + "rotation": {"angle": 45, "axis": "y", "origin": [8.85858, 4.75147, 3.88274]}, + "faces": { + "east": {"uv": [5, 2, 11, 5], "texture": "#3"}, + "west": {"uv": [5, 5, 11, 8], "rotation": 180, "texture": "#3"}, + "up": {"uv": [11, 2, 5, 0], "rotation": 270, "texture": "#3"}, + "down": {"uv": [11, 2, 5, 0], "rotation": 270, "texture": "#3"} + } + }, + { + "name": "BranchWestBottom", + "from": [8, 5, 6.5], + "to": [10, 8, 9.5], + "rotation": {"angle": 45, "axis": "z", "origin": [15, 5, 8]}, + "faces": { + "north": {"uv": [1, 8, 4, 6], "rotation": 90, "texture": "#3"}, + "east": {"uv": [5, 8, 4, 9], "texture": "#3"}, + "south": {"uv": [1, 8, 4, 6], "rotation": 270, "texture": "#3"}, + "down": {"uv": [1, 8, 4, 6], "rotation": 270, "texture": "#3"} + } + }, + { + "name": "BranchWestMid", + "from": [10, 5.5, 7], + "to": [13, 7.5, 9], + "rotation": {"angle": 45, "axis": "z", "origin": [15, 5, 8]}, + "faces": { + "north": {"uv": [8, 8, 5, 10], "rotation": 180, "texture": "#3"}, + "south": {"uv": [8, 8, 5, 10], "texture": "#3"}, + "up": {"uv": [8, 8, 5, 10], "texture": "#3"}, + "down": {"uv": [8, 8, 5, 10], "texture": "#3"} + } + }, + { + "name": "BranchWestTop", + "from": [13, 5, 6.5], + "to": [15, 8, 9.5], + "rotation": {"angle": 45, "axis": "z", "origin": [15, 5, 8]}, + "faces": { + "north": {"uv": [1, 8, 4, 6], "rotation": 270, "texture": "#3"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#3"}, + "south": {"uv": [1, 8, 4, 6], "rotation": 90, "texture": "#3"}, + "west": {"uv": [5, 8, 4, 9], "texture": "#3"}, + "up": {"uv": [1, 8, 4, 6], "rotation": 90, "texture": "#3"}, + "down": {"uv": [1, 8, 4, 6], "rotation": 90, "texture": "#3"} + } + }, + { + "name": "WheelWest", + "from": [12.8, 5, 5], + "to": [15, 8, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 8]}, + "faces": { + "north": {"uv": [9, 4, 10, 5], "rotation": 270, "texture": "#3"}, + "east": {"uv": [5, 2, 11, 5], "texture": "#3"}, + "south": {"uv": [9, 4, 10, 5], "rotation": 180, "texture": "#3"}, + "west": {"uv": [5, 5, 11, 8], "rotation": 180, "texture": "#3"}, + "up": {"uv": [5, 0, 11, 2], "rotation": 90, "texture": "#3"}, + "down": {"uv": [5, 0, 11, 2], "rotation": 90, "texture": "#3"} + } + }, + { + "name": "WheelNorthWest", + "from": [10.4112, 5.1, 6.9846], + "to": [12.4112, 7.9, 12.64145], + "rotation": {"angle": -45, "axis": "y", "origin": [8.85858, 4.75147, 12.11726]}, + "faces": { + "east": {"uv": [11, 2, 5, 5], "texture": "#3"}, + "west": {"uv": [11, 5, 5, 8], "rotation": 180, "texture": "#3"}, + "up": {"uv": [5, 2, 11, 0], "rotation": 270, "texture": "#3"}, + "down": {"uv": [5, 2, 11, 0], "rotation": 270, "texture": "#3"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0.75], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 1], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 0.75, 0], + "scale": [0.35, 0.35, 0.35] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 2.75, 0], + "scale": [0.75, 0.75, 0.75] + }, + "head": { + "translation": [0, 13, 0] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3.5], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "Hub", + "origin": [8, 5.5, -2.5], + "children": [0, 1] + }, + { + "name": "Wheel", + "origin": [8, 5.5, -2.5], + "children": [ + { + "name": "North", + "origin": [1, 3, 11], + "children": [2, 3, 4, 5, 6] + }, + { + "name": "East", + "origin": [1, 3, 11], + "children": [7, 8, 9, 10, 11] + }, + { + "name": "South", + "origin": [1, 3, 11], + "children": [12, 13, 14, 15, 16] + }, + { + "name": "West", + "origin": [1, 3, 11], + "children": [17, 18, 19, 20, 21] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/belt_observer_detect.png b/src/main/resources/assets/create/textures/block/belt_observer_detect.png deleted file mode 100644 index 4faaaaf6e..000000000 Binary files a/src/main/resources/assets/create/textures/block/belt_observer_detect.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/block/belt_observer_detect_powered.png b/src/main/resources/assets/create/textures/block/belt_observer_detect_powered.png deleted file mode 100644 index cfbcbd3f9..000000000 Binary files a/src/main/resources/assets/create/textures/block/belt_observer_detect_powered.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/block/belt_observer_eject.png b/src/main/resources/assets/create/textures/block/belt_observer_eject.png deleted file mode 100644 index 2af7bb033..000000000 Binary files a/src/main/resources/assets/create/textures/block/belt_observer_eject.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/block/belt_observer_eject_powered.png b/src/main/resources/assets/create/textures/block/belt_observer_eject_powered.png deleted file mode 100644 index 0ba27e18e..000000000 Binary files a/src/main/resources/assets/create/textures/block/belt_observer_eject_powered.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/block/belt_observer_front.png b/src/main/resources/assets/create/textures/block/belt_observer_front.png deleted file mode 100644 index d5f96f355..000000000 Binary files a/src/main/resources/assets/create/textures/block/belt_observer_front.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/block/belt_observer_pulse.png b/src/main/resources/assets/create/textures/block/belt_observer_pulse.png deleted file mode 100644 index 4335c723e..000000000 Binary files a/src/main/resources/assets/create/textures/block/belt_observer_pulse.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/block/belt_observer_pulse_powered.png b/src/main/resources/assets/create/textures/block/belt_observer_pulse_powered.png deleted file mode 100644 index bc43d342c..000000000 Binary files a/src/main/resources/assets/create/textures/block/belt_observer_pulse_powered.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/block/belt_observer_split.png b/src/main/resources/assets/create/textures/block/belt_observer_split.png deleted file mode 100644 index ba7c764f0..000000000 Binary files a/src/main/resources/assets/create/textures/block/belt_observer_split.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/block/belt_observer_split_powered.png b/src/main/resources/assets/create/textures/block/belt_observer_split_powered.png deleted file mode 100644 index 85599beba..000000000 Binary files a/src/main/resources/assets/create/textures/block/belt_observer_split_powered.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/block/chute.png b/src/main/resources/assets/create/textures/block/chute.png index dbc6085e0..03bedacdc 100644 Binary files a/src/main/resources/assets/create/textures/block/chute.png and b/src/main/resources/assets/create/textures/block/chute.png differ diff --git a/src/main/resources/assets/create/textures/block/content_observer.png b/src/main/resources/assets/create/textures/block/content_observer.png new file mode 100644 index 000000000..fae25ed39 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/content_observer.png differ diff --git a/src/main/resources/assets/create/textures/block/content_observer_inner.png b/src/main/resources/assets/create/textures/block/content_observer_inner.png new file mode 100644 index 000000000..a0c6d29b5 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/content_observer_inner.png differ diff --git a/src/main/resources/assets/create/textures/block/content_observer_inner_powered.png b/src/main/resources/assets/create/textures/block/content_observer_inner_powered.png new file mode 100644 index 000000000..b99b2d009 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/content_observer_inner_powered.png differ diff --git a/src/main/resources/assets/create/textures/block/content_observer_powered.png b/src/main/resources/assets/create/textures/block/content_observer_powered.png new file mode 100644 index 000000000..e0d087040 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/content_observer_powered.png differ diff --git a/src/main/resources/assets/create/textures/block/stockpile_switch_end.png b/src/main/resources/assets/create/textures/block/filtered_detector_front.png similarity index 100% rename from src/main/resources/assets/create/textures/block/stockpile_switch_end.png rename to src/main/resources/assets/create/textures/block/filtered_detector_front.png diff --git a/src/main/resources/assets/create/textures/block/filtered_detector_top.png b/src/main/resources/assets/create/textures/block/filtered_detector_top.png new file mode 100644 index 000000000..0a037bd0d Binary files /dev/null and b/src/main/resources/assets/create/textures/block/filtered_detector_top.png differ diff --git a/src/main/resources/assets/create/textures/block/fluid_pipe.png b/src/main/resources/assets/create/textures/block/fluid_pipe.png index 16b475d5e..6f96b5d30 100644 Binary files a/src/main/resources/assets/create/textures/block/fluid_pipe.png and b/src/main/resources/assets/create/textures/block/fluid_pipe.png differ diff --git a/src/main/resources/assets/create/textures/block/fluid_valve.png b/src/main/resources/assets/create/textures/block/fluid_valve.png new file mode 100644 index 000000000..d67ec1e00 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/fluid_valve.png differ diff --git a/src/main/resources/assets/create/textures/block/glass_fluid_pipe.png b/src/main/resources/assets/create/textures/block/glass_fluid_pipe.png index f5b36798d..0ad8834d5 100644 Binary files a/src/main/resources/assets/create/textures/block/glass_fluid_pipe.png and b/src/main/resources/assets/create/textures/block/glass_fluid_pipe.png differ diff --git a/src/main/resources/assets/create/textures/block/portable_storage_interface.png b/src/main/resources/assets/create/textures/block/portable_storage_interface.png new file mode 100644 index 000000000..0e9ade677 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/portable_storage_interface.png differ diff --git a/src/main/resources/assets/create/textures/block/symmetry_mirror.png b/src/main/resources/assets/create/textures/block/symmetry_mirror.png new file mode 100644 index 000000000..b29da0866 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/symmetry_mirror.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_black.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_black.png new file mode 100644 index 000000000..7a458d0a6 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_black.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_blue.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_blue.png new file mode 100644 index 000000000..b1e0ac600 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_blue.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_brown.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_brown.png new file mode 100644 index 000000000..fe13bb2ef Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_brown.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_copper.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_copper.png new file mode 100644 index 000000000..47f4f9f8f Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_copper.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_cyan.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_cyan.png new file mode 100644 index 000000000..6585ebf50 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_cyan.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_gray.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_gray.png new file mode 100644 index 000000000..fc540caab Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_gray.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_green.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_green.png new file mode 100644 index 000000000..191770361 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_green.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_light_blue.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_light_blue.png new file mode 100644 index 000000000..ec7020d83 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_light_blue.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_light_gray.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_light_gray.png new file mode 100644 index 000000000..9b2bfcae0 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_light_gray.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_lime.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_lime.png new file mode 100644 index 000000000..dcb6992a1 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_lime.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_magenta.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_magenta.png new file mode 100644 index 000000000..ed98539b4 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_magenta.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_orange.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_orange.png new file mode 100644 index 000000000..31fc651ac Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_orange.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_pink.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_pink.png new file mode 100644 index 000000000..7d43bcf14 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_pink.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_purple.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_purple.png new file mode 100644 index 000000000..b047c80fc Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_purple.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_red.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_red.png new file mode 100644 index 000000000..ec7c79f32 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_red.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_white.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_white.png new file mode 100644 index 000000000..35431ecdd Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_white.png differ diff --git a/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_yellow.png b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_yellow.png new file mode 100644 index 000000000..38528ef64 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/valve_handle/valve_handle_yellow.png differ diff --git a/src/main/resources/assets/create/textures/gui/curiosities.png b/src/main/resources/assets/create/textures/gui/curiosities.png new file mode 100644 index 000000000..ed7333357 Binary files /dev/null and b/src/main/resources/assets/create/textures/gui/curiosities.png differ diff --git a/src/main/resources/assets/create/textures/gui/curiosities_2.png b/src/main/resources/assets/create/textures/gui/curiosities_2.png new file mode 100644 index 000000000..1a19c375f Binary files /dev/null and b/src/main/resources/assets/create/textures/gui/curiosities_2.png differ diff --git a/src/main/resources/assets/create/textures/gui/double_flexcrate.png b/src/main/resources/assets/create/textures/gui/double_flexcrate.png deleted file mode 100644 index 57df53fe6..000000000 Binary files a/src/main/resources/assets/create/textures/gui/double_flexcrate.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/gui/filter.png b/src/main/resources/assets/create/textures/gui/filter.png deleted file mode 100644 index 00a65a06f..000000000 Binary files a/src/main/resources/assets/create/textures/gui/filter.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/gui/filters.png b/src/main/resources/assets/create/textures/gui/filters.png new file mode 100644 index 000000000..e1f39a915 Binary files /dev/null and b/src/main/resources/assets/create/textures/gui/filters.png differ diff --git a/src/main/resources/assets/create/textures/gui/flex_crate_and_stockpile_switch.png b/src/main/resources/assets/create/textures/gui/flex_crate_and_stockpile_switch.png deleted file mode 100644 index b6da1409e..000000000 Binary files a/src/main/resources/assets/create/textures/gui/flex_crate_and_stockpile_switch.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/gui/icons.png b/src/main/resources/assets/create/textures/gui/icons.png index 865f8b22e..a8557a63b 100644 Binary files a/src/main/resources/assets/create/textures/gui/icons.png and b/src/main/resources/assets/create/textures/gui/icons.png differ diff --git a/src/main/resources/assets/create/textures/gui/logistics.png b/src/main/resources/assets/create/textures/gui/logistics.png new file mode 100644 index 000000000..9aeee18e9 Binary files /dev/null and b/src/main/resources/assets/create/textures/gui/logistics.png differ diff --git a/src/main/resources/assets/create/textures/gui/logistics_2.png b/src/main/resources/assets/create/textures/gui/logistics_2.png new file mode 100644 index 000000000..f56b7c911 Binary files /dev/null and b/src/main/resources/assets/create/textures/gui/logistics_2.png differ diff --git a/src/main/resources/assets/create/textures/gui/background.png b/src/main/resources/assets/create/textures/gui/overlay.png similarity index 100% rename from src/main/resources/assets/create/textures/gui/background.png rename to src/main/resources/assets/create/textures/gui/overlay.png diff --git a/src/main/resources/assets/create/textures/gui/schematic.png b/src/main/resources/assets/create/textures/gui/schematic.png deleted file mode 100644 index a46e2686b..000000000 Binary files a/src/main/resources/assets/create/textures/gui/schematic.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/gui/schematic_table.png b/src/main/resources/assets/create/textures/gui/schematic_table.png deleted file mode 100644 index 06ae3203c..000000000 Binary files a/src/main/resources/assets/create/textures/gui/schematic_table.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/gui/schematicannon.png b/src/main/resources/assets/create/textures/gui/schematicannon.png deleted file mode 100644 index cb838679c..000000000 Binary files a/src/main/resources/assets/create/textures/gui/schematicannon.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/gui/schematics.png b/src/main/resources/assets/create/textures/gui/schematics.png new file mode 100644 index 000000000..a3cc2615a Binary files /dev/null and b/src/main/resources/assets/create/textures/gui/schematics.png differ diff --git a/src/main/resources/assets/create/textures/gui/schematics_2.png b/src/main/resources/assets/create/textures/gui/schematics_2.png new file mode 100644 index 000000000..3d2dffdef Binary files /dev/null and b/src/main/resources/assets/create/textures/gui/schematics_2.png differ diff --git a/src/main/resources/assets/create/textures/gui/sequencer.png b/src/main/resources/assets/create/textures/gui/sequencer.png index 13a8cbd33..5dcbea527 100644 Binary files a/src/main/resources/assets/create/textures/gui/sequencer.png and b/src/main/resources/assets/create/textures/gui/sequencer.png differ diff --git a/src/main/resources/assets/create/textures/gui/wand_symmetry.png b/src/main/resources/assets/create/textures/gui/wand_symmetry.png deleted file mode 100644 index 49405bd24..000000000 Binary files a/src/main/resources/assets/create/textures/gui/wand_symmetry.png and /dev/null differ diff --git a/src/main/resources/assets/create/textures/gui/widgets.png b/src/main/resources/assets/create/textures/gui/widgets.png index 335460ca9..6b62bdd32 100644 Binary files a/src/main/resources/assets/create/textures/gui/widgets.png and b/src/main/resources/assets/create/textures/gui/widgets.png differ diff --git a/src/main/resources/assets/create/textures/gui/zapper.png b/src/main/resources/assets/create/textures/gui/zapper.png deleted file mode 100644 index 771941d43..000000000 Binary files a/src/main/resources/assets/create/textures/gui/zapper.png and /dev/null differ