diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 3af0320b7..90889ce8b 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -26,11 +26,13 @@ cf9045eb16e5299a1d917c4cb536289f49411276 assets/create/blockstates/birch_window. 8d257089491a1f6e87544242c9fe9af0127b4f88 assets/create/blockstates/black_nixie_tube.json e0f1e44c9bce4a7478592cf3a8ee7b91d9083d65 assets/create/blockstates/black_sail.json 58b07d2af6030342f0354f6d3fd0ee128d2d74b4 assets/create/blockstates/black_seat.json +73db8bd55bd5bd21f939ee9eb4b4b02209d9c5ed assets/create/blockstates/black_toolbox.json a71ddf3291bd13d7877f2fe32c42f50407f99afb assets/create/blockstates/black_valve_handle.json 923aeb2a556f67bc0526f237dd97af2d37b4c9f1 assets/create/blockstates/blaze_burner.json b619f127c38e9ffdb4e45bb32e5cea35863622f3 assets/create/blockstates/blue_nixie_tube.json ec2ab87734acc209e6be3bc4898b1199f819bfd3 assets/create/blockstates/blue_sail.json 4854d1ef52130a7887aecc60bcaffbd66f0871a8 assets/create/blockstates/blue_seat.json +dea175335c5db0abe758cd208dc984c22506a176 assets/create/blockstates/blue_toolbox.json 9d7341a5cae5d47788c595167946dfb6441cebd1 assets/create/blockstates/blue_valve_handle.json ee1299a15fca849eb42bf81507f85a54c167bbfe assets/create/blockstates/brass_belt_funnel.json 8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets/create/blockstates/brass_block.json @@ -41,6 +43,7 @@ adfbd6cc5e44a0f431180aedbe65a19428299d8e assets/create/blockstates/brass_funnel. 9526a0758dcfda9fbbf75c01548e96bb5887a52f assets/create/blockstates/brown_nixie_tube.json 11ebdd9bd0815833e62ec1bea03a4cdd86ce00f3 assets/create/blockstates/brown_sail.json e81608346d43406ee72cae0f78b8bcfb37ba2d75 assets/create/blockstates/brown_seat.json +bd73bfdbe88c58883cc15fe31a9dac7860482ca3 assets/create/blockstates/brown_toolbox.json 322289524c058fac66bbe76b4924c3b0c0c33b84 assets/create/blockstates/brown_valve_handle.json 225a67e01348387f2c82b690a56785ab439a3a1c assets/create/blockstates/cart_assembler.json 7299cea212d879d6d5611bd139b24768b9af236f assets/create/blockstates/chiseled_dark_scoria.json @@ -74,6 +77,7 @@ b1126c191877cff86b4e2de83e1fcbd151451cb7 assets/create/blockstates/cuckoo_clock. d986774dc41e5f01c6f3ffd10765df94f196922d assets/create/blockstates/cyan_nixie_tube.json b496452f2f7dbbba385e1fc10b560ec266e4b5e7 assets/create/blockstates/cyan_sail.json 4de72f65bff4e5d9c8153fa3adeee6b61d6f912b assets/create/blockstates/cyan_seat.json +8e14112e948e492da8151b773c1fa40bf1467490 assets/create/blockstates/cyan_toolbox.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 @@ -181,10 +185,12 @@ f8659e81cd2a623475a6a9aca59149e82de56b1c assets/create/blockstates/granite_pilla 4478ee1b4c7a17deea77ee0d1234a19725889671 assets/create/blockstates/gray_nixie_tube.json 5c40c4a27e1dec747a467dd251700c72a6ceb07d assets/create/blockstates/gray_sail.json a5ec5401ba9f3e102a2e1b35837f643847afbca4 assets/create/blockstates/gray_seat.json +191d2cc56af51349688ccb2dea75801a9bc9de85 assets/create/blockstates/gray_toolbox.json 5f17a5868616b33eb157965a661046cab7a1427f assets/create/blockstates/gray_valve_handle.json 747579dd8e635533c15208cec25afe445ff4774a assets/create/blockstates/green_nixie_tube.json 52b849faef96b8ab9d9d64a1518c8f299af057b8 assets/create/blockstates/green_sail.json 13059309684db0cc7a0f1f4fce2407cf06cce80a assets/create/blockstates/green_seat.json +e91dcebe132d5b745df0f6c5b1c90d5fc4e8af52 assets/create/blockstates/green_toolbox.json f4a0fc68e8daaa0a47cdc951ced4310057a874b0 assets/create/blockstates/green_valve_handle.json 6ab675fa06317e6d07c0c1a453e7bb43e3f46b3b assets/create/blockstates/hand_crank.json 34076c9caafe48daa87cc783e96d4c81b0b164c0 assets/create/blockstates/haunted_bell.json @@ -209,14 +215,17 @@ a4cfcdc038af0f93a58d88ea8860b34d73632ff4 assets/create/blockstates/layered_dolom e0c8fc35bfa28f025bdc14085b01b179e36c9f96 assets/create/blockstates/light_blue_nixie_tube.json 029904f21970947a4423a6e0c8c65c4e02f2e8e6 assets/create/blockstates/light_blue_sail.json 2a0a8b1715700bf1e284ee57ef9f7f163c12f3ee assets/create/blockstates/light_blue_seat.json +527f32e0d2b5b975cfeb515542098bb2d5224755 assets/create/blockstates/light_blue_toolbox.json 9bee040558a6b24e21f837fc808e17fae1883e71 assets/create/blockstates/light_blue_valve_handle.json 745b940c71575afbfac1786ffe1a23dcb62d5e70 assets/create/blockstates/light_gray_nixie_tube.json 93537c4e2ab86218a777e7b000c3fcd55a80b1cd assets/create/blockstates/light_gray_sail.json d9a2551e001bb315d071bb9f1f013323a66a5d09 assets/create/blockstates/light_gray_seat.json +0c40d13637f00a533175d29ba67559461101ead5 assets/create/blockstates/light_gray_toolbox.json 8bea8c86de8c218c8932eef140f0ed439e173156 assets/create/blockstates/light_gray_valve_handle.json 3bee155fee49a9f85403f018a51e60c0e536d51c assets/create/blockstates/lime_nixie_tube.json ba2c4e3ddafa3c89a72cc243b14e8518fab369aa assets/create/blockstates/lime_sail.json 1de3a88c003df03f5006e1bbaa0236589aba08ad assets/create/blockstates/lime_seat.json +db46a5b6d0b595293a672236d0a64548b0816cab assets/create/blockstates/lime_toolbox.json 179a3e68b9f2e289eafe0e98e768befbbf91c5c2 assets/create/blockstates/lime_valve_handle.json c4dcb169bd1dffe8501bff455e3eb6ba979f60ab assets/create/blockstates/limesand.json e7cb0b25e511610b46dfd219e0cc5ea60a79d56b assets/create/blockstates/limestone.json @@ -234,6 +243,7 @@ b7506b862d13b3f915c60d38bb7a20afc935f70a assets/create/blockstates/limestone_pil e99e9c5cf03334a48d9d071e1590bc8f286d3cf6 assets/create/blockstates/magenta_nixie_tube.json 85a58ac539775f90903d9ce66374f3f2ffd4fecf assets/create/blockstates/magenta_sail.json 84c494d24cc58af274fdd054896c680e8095d2d0 assets/create/blockstates/magenta_seat.json +2334006c152d6773040ca03ef3b3d26a58f0dfa0 assets/create/blockstates/magenta_toolbox.json 3bfce5016e5c929b74368dc2d734e62ae34587a4 assets/create/blockstates/magenta_valve_handle.json 3b3250d6e209403a93d025604a8081087965016e assets/create/blockstates/mechanical_arm.json ddcf4bb281e046fbb1026b8f46a2cf12448598df assets/create/blockstates/mechanical_bearing.json @@ -267,6 +277,7 @@ cf60989f63f02067fc4e4ad25033ac83167cdeb0 assets/create/blockstates/oak_window.js 4a796509c3953171f04f957351282205840b3760 assets/create/blockstates/oak_window_pane.json b0be3d4ff92cb123ec21ec2788db35d0f392ba8a assets/create/blockstates/orange_sail.json 5764a24f6c4fa552b61d2a02135adfc7d93c2e10 assets/create/blockstates/orange_seat.json +7541e5efb98cddf8cdf62138b674458cda877a4c assets/create/blockstates/orange_toolbox.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 @@ -319,6 +330,7 @@ e29e245d06c46dac94fcd0e01a9bf7fa8e02fb87 assets/create/blockstates/paved_weather 06ad2ce2f1730488d51daf12b4a985c86d43bbb4 assets/create/blockstates/pink_nixie_tube.json 30971f2f76fe56f144178c33ad6bde5fc9fb61c3 assets/create/blockstates/pink_sail.json 919a79e4a4a5fab0aac3ef48e1c786017d6aa001 assets/create/blockstates/pink_seat.json +588ebcdb4c1d8d4c75225e92f26d6cf80cac2f15 assets/create/blockstates/pink_toolbox.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 @@ -354,11 +366,13 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl 83ad917bb7f528e68d64f3859b3bf1236080d454 assets/create/blockstates/purple_nixie_tube.json d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json 92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json +b78c6057ef94b03f541a17e625b3778ca526a6ad assets/create/blockstates/purple_toolbox.json 61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json 4439fc83a8c7370ab44b211a3fd48abde20a4728 assets/create/blockstates/radial_chassis.json 3735f396cf8e8bab0793ce2bfa281b29af73919e assets/create/blockstates/red_nixie_tube.json 45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json +27fad7876f5a2de16f13dfde16d4a05dfe093989 assets/create/blockstates/red_toolbox.json 722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json 8929677f2cc5354aa19ef182af69f9f0b41eb242 assets/create/blockstates/redstone_contact.json c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets/create/blockstates/redstone_link.json @@ -416,29 +430,31 @@ c838c0792511ca2e14493b40032bb1370fac588a assets/create/blockstates/weighted_ejec aef042718ae54973cbafdb4507c32944d722e99d assets/create/blockstates/white_nixie_tube.json 512bf17c9ea309b1f7da54440f923530d25e467c assets/create/blockstates/white_sail.json 4647010162eb4c350fad236d860317eaa1884c77 assets/create/blockstates/white_seat.json +3695510f11231c8a5c1a0be94a92703e4b5a0f9c assets/create/blockstates/white_toolbox.json 89000903d0ab8139e919abea7aa0361b34c24e55 assets/create/blockstates/white_valve_handle.json c4cd1131113667da0180898b5db3ebad609db8ba assets/create/blockstates/windmill_bearing.json d4f804f2818376950ef28fc8d6250419f4e12218 assets/create/blockstates/wooden_bracket.json de1557d79eebf1cd469d098639cd6b5518b52b61 assets/create/blockstates/yellow_nixie_tube.json e03c48512967845fce09d84b955d3bc7b480fedc assets/create/blockstates/yellow_sail.json a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json +bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbox.json 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -fb760b12b4bc8114744d3acc6a597b2fad88d988 assets/create/lang/en_ud.json -66e8ae18a98d86c66393c908ab51eae5060b8e04 assets/create/lang/en_us.json -9e94c2420840c516e24dfd7968aaad61da24b5a2 assets/create/lang/unfinished/de_de.json -f1a6ed9a5812c89e7c7152c9abf2b64c133fd27d assets/create/lang/unfinished/es_es.json -23a46ae0bc7b2181f26eeed70801714a254d2587 assets/create/lang/unfinished/fr_fr.json -5e95153e640edc367b963489df8c92c459badcd3 assets/create/lang/unfinished/it_it.json -a951315b2591051dad6c53739fe554fe78595250 assets/create/lang/unfinished/ja_jp.json -419a1fc9af7d7ea0ccd612847df74e0b45380864 assets/create/lang/unfinished/ko_kr.json -dbc823d8cb38598e75871a2187b2a58d7f77f86a assets/create/lang/unfinished/nl_nl.json -ac609477c295be1705d3efc07848ffe6779fd397 assets/create/lang/unfinished/pl_pl.json -95e17b968103e0ef62411489e699d39ac7ff0b64 assets/create/lang/unfinished/pt_br.json -b37f50f613b0df44032fe5d618a5ce7227be8087 assets/create/lang/unfinished/ru_ru.json -2254cfb88d58f6932451a1548341f10749deb2df assets/create/lang/unfinished/zh_cn.json -6192a7ede669ae6b6f8de6701b8a924d6a756c4a assets/create/lang/unfinished/zh_tw.json +5ae77ed97ee05a7ed98999178677e576c1140007 assets/create/lang/en_ud.json +5a7c0c3ea8d5fe01289b4eb2ea4f175bad825672 assets/create/lang/en_us.json +474dbefbecbec7e8e5969d7226a8c8a0c7a75325 assets/create/lang/unfinished/de_de.json +4d0c0f13e5447af9103b50e9ed845590634a8133 assets/create/lang/unfinished/es_es.json +5ad47cb60df592b461672e224dfb89167f8861e1 assets/create/lang/unfinished/fr_fr.json +216065d27084497ffed7cacddfe86cab542643d9 assets/create/lang/unfinished/it_it.json +e74e7450bb11ebe75b14630ea500a442c90d5d55 assets/create/lang/unfinished/ja_jp.json +29bf73836a76028d8eaef57bec7331b7f8df5fc3 assets/create/lang/unfinished/ko_kr.json +1c9e4860d53f73ce8eb9c3e6667e934cdea4e14b assets/create/lang/unfinished/nl_nl.json +e27542eb76681655d427cfbfe4826ee318b29ce0 assets/create/lang/unfinished/pl_pl.json +4cb49ac9acc2bac92522318fa326f4854d3ae836 assets/create/lang/unfinished/pt_br.json +ee8a147e1e86c1163a21452b5ea90d9d89dd3b09 assets/create/lang/unfinished/ru_ru.json +ed48c2e55f86cbc6005b2c222f0a5d6a01e996ad assets/create/lang/unfinished/zh_cn.json +dca24cfe0020830653e191b03fdd0400c890be1f assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -511,10 +527,12 @@ dbfd2a996820d885d9741a3f168aa36c3538cfbd assets/create/models/block/birch_window 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/black_nixie_tube.json 2b59d6f937cd542eba670689c30fe16887dfd9a0 assets/create/models/block/black_sail.json 97d79ab99c0fb278a9b5dc54e1c6563868f87b76 assets/create/models/block/black_seat.json +fd31e42c40ceec10c4973f3c4ac728a3c2144d49 assets/create/models/block/black_toolbox.json 02747ea1a0e5d4a1cd466bf26878885a89d347fa assets/create/models/block/black_valve_handle.json 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/blue_nixie_tube.json d876627b6e519c6f3f59c7c27cc7b0f903206f7c assets/create/models/block/blue_sail.json e58b00a7222152d7facbe0e82f00933b974df747 assets/create/models/block/blue_seat.json +a79f5632a2d489355317021b6ad383c30d208b30 assets/create/models/block/blue_toolbox.json c7f91468b196fbda137e6b31764870b3bbfda6b6 assets/create/models/block/blue_valve_handle.json 213e99062a7f2a5e7464082d7975066bc6fc45e0 assets/create/models/block/bracket/cog/ground_metal.json 16e824026066d930187d812e77e2e582c0d3c1cc assets/create/models/block/bracket/cog/ground_wooden.json @@ -554,6 +572,7 @@ a0612a633756433e1b37ddc6d290aa1fc07839ef assets/create/models/block/brass_tunnel 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/brown_nixie_tube.json 8ab097caaa0db0915ae9254f7d65092d9171bc60 assets/create/models/block/brown_sail.json 4eed0ad902f5e84f2b6c160f3283e8028640e77d assets/create/models/block/brown_seat.json +81ce3254c2dbe73668ced13b3ee0ab2462f9d51f assets/create/models/block/brown_toolbox.json 6c39677f8c3a84280835c717ea1ef569b7c76a1b assets/create/models/block/brown_valve_handle.json db7279f05c1d89e21da8887a15d3a1cfff4a9cf2 assets/create/models/block/chiseled_dark_scoria.json 22d4ad2de48739ab754f8dfcd6f84ad2267abf8b assets/create/models/block/chiseled_dolomite.json @@ -608,6 +627,7 @@ bcbfa40524cff0314d9e764a64f90f2095d14064 assets/create/models/block/crimson_wind 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/cyan_nixie_tube.json 68843a02a32c156afad85830877b83f9b51c5147 assets/create/models/block/cyan_sail.json 6704782830b3d872321e895b6903709c18e3778f assets/create/models/block/cyan_seat.json +9d92e6340036cbcf5886fa9d36047ba938b51294 assets/create/models/block/cyan_toolbox.json f45ef4a5f0aa8482d493661673b1c0ab6d061157 assets/create/models/block/cyan_valve_handle.json f5ac5007454cb04490e36f39e9047cc90501b2f6 assets/create/models/block/dark_oak_window.json d1914f0b453d360221b14ff128f5a5040441a0c6 assets/create/models/block/dark_oak_window_pane_noside.json @@ -836,10 +856,12 @@ f55c5825c63f345a95e822a2113e76b5a62d8f7c assets/create/models/block/granite_pill 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/gray_nixie_tube.json a68cd40ffb769b195437107f4a2c2188b222b74a assets/create/models/block/gray_sail.json 6eb5e59e803e1055968b90f3099cd0a17a1d3fd5 assets/create/models/block/gray_seat.json +38c5d8f0d4c4fff545c825cf9ae2f50387590e9c assets/create/models/block/gray_toolbox.json 7e213be39cc928363bf2b096f055439211050b8d assets/create/models/block/gray_valve_handle.json 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/green_nixie_tube.json 17b651233c62b928f0228562a7f6e7a2b7b2d6b7 assets/create/models/block/green_sail.json 1438b8ce54ac5557b8f10dcef94f3525eae19461 assets/create/models/block/green_seat.json +33f82e8da2b6e9b5df34157f91f2f01a542c7a33 assets/create/models/block/green_toolbox.json cc7ce9b6bc687ad5027a67c3bf22bdf5bcd71674 assets/create/models/block/green_valve_handle.json 29e09bf70184cc1d09fce31aea908a2ab56fa9e4 assets/create/models/block/haunted_bell_ceiling.json 942c2ae8a3546bd91f8489094f9e7516ff026e61 assets/create/models/block/haunted_bell_double_wall.json @@ -870,14 +892,17 @@ cecf946818c65370b685dfeaade50819183acb41 assets/create/models/block/layered_lime 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/light_blue_nixie_tube.json 19bd08ad6ac351e6eee2131f7b4c11a768bf8f08 assets/create/models/block/light_blue_sail.json 1a28b07da68d1461cd04c971ae548d94165e0cf3 assets/create/models/block/light_blue_seat.json +f7ad67c312235e8b83ec44e0a3f37ad2ed4d4d42 assets/create/models/block/light_blue_toolbox.json 68e01f8d8a31f07f236383e19b49ae1be4cbe3f4 assets/create/models/block/light_blue_valve_handle.json 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/light_gray_nixie_tube.json 73f14b905d5fdb433751a33b963852de6491722a assets/create/models/block/light_gray_sail.json 292bec1b9f962b17b29147d982a9b177618b7eb9 assets/create/models/block/light_gray_seat.json +1fbb180e0cd56220876fe8e7ee2aaa1ce57c0d0b assets/create/models/block/light_gray_toolbox.json 42338c4965da63962ea08077dc9e899aaf4c3c65 assets/create/models/block/light_gray_valve_handle.json 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/lime_nixie_tube.json 8292d043ebfe280340526a6a0f96d4160099e213 assets/create/models/block/lime_sail.json 31c9474210d8535c5417021fe042d4cc31e17328 assets/create/models/block/lime_seat.json +70e8eae2dcb116ca452bc2e847bed87869a75cf6 assets/create/models/block/lime_toolbox.json 74008bd0d775b0e2e96b43be2e51d0f3c3abdf21 assets/create/models/block/lime_valve_handle.json fccac0de94fff5f4e180fc9dbddeb0f8ddf3baab assets/create/models/block/limesand.json 3c49d63386b3f5326051edbf6e2f0f8f0e2ff4f3 assets/create/models/block/limestone.json @@ -907,6 +932,7 @@ c54e5a17495f88fa21b3488e8da32a365452c36c assets/create/models/block/limestone_co 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/magenta_nixie_tube.json ec6b5f636e163ff5e361d486cf628ca1af4849a1 assets/create/models/block/magenta_sail.json cbee001cd1bb1125a97d1bb2d1e6e5a68f129303 assets/create/models/block/magenta_seat.json +fa56f9bec902e6fea9cc25e6f474ee00c3dc558d assets/create/models/block/magenta_toolbox.json bc5a03a5552eb4a518abefe5e8615f14ee13ca29 assets/create/models/block/magenta_valve_handle.json 2e67f27a895c9163a5d1be62897d5e66b119767a assets/create/models/block/mechanical_bearing.json edf6ee4e590ebf162c00aa952d992f1bee2cad8a assets/create/models/block/mossy_andesite.json @@ -928,6 +954,7 @@ b9c27f90d4d258e3fdcd713aaa42142f5d46a79e assets/create/models/block/oak_window_p b3e056a176e86660fc2d3a51f9ba8b01eebb56c5 assets/create/models/block/oak_window_pane_side_alt.json ff9b51fcaffe54e321b9479f035f4ea7b278bfec assets/create/models/block/orange_sail.json fda0628a09ef726e3e8323b2f38b6a3e612dc2ca assets/create/models/block/orange_seat.json +ba86892a5f633b0256b7b4d9a661779d8f483257 assets/create/models/block/orange_toolbox.json 3b07f3f1985495051d173725b01ddd52b5f70ac4 assets/create/models/block/orange_valve_handle.json de5ecd753303b2c5dc3819299b9a316f0d7035f6 assets/create/models/block/ornate_iron_window.json cc9614e892b12c6053d45a35d534eddf36285cf1 assets/create/models/block/ornate_iron_window_pane_noside.json @@ -1073,6 +1100,7 @@ c7941c0bcbdf7ec7e2d34679afac744cf81b7489 assets/create/models/block/paved_weathe 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/pink_nixie_tube.json 1b5f9e819cd4b5f5fe6e8c24920b916e8d93c95e assets/create/models/block/pink_sail.json ecc60ce7ee6b753073a99c597db95d6d9df3d438 assets/create/models/block/pink_seat.json +56b893cf30b33c825cbd6d00b8fc02b4f96aa8b0 assets/create/models/block/pink_toolbox.json 7ada61878d3a3c1d3cc33bcf9a80c21b8f9aaff2 assets/create/models/block/pink_valve_handle.json 84fdb35acc12ae9580496f458def3e49aa0551ea assets/create/models/block/polished_dark_scoria.json 5ca3d6cbbf1fdd6437d9951b9d2937838ec480f1 assets/create/models/block/polished_dark_scoria_slab.json @@ -1143,6 +1171,7 @@ d469dce70d15759baed35025b8c7fa403c8b3b26 assets/create/models/block/pulse_repeat 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/purple_nixie_tube.json b56fad63b82434564bc41ae9c01e3b427203fb5b assets/create/models/block/purple_sail.json 96adc7865ebe64b43865bc2fe914830c11258856 assets/create/models/block/purple_seat.json +5f7b588729634be592b67309ff475a72693ca338 assets/create/models/block/purple_toolbox.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 @@ -1153,6 +1182,7 @@ bffca231a146a6ac49e028f3790cdcbf375e98b0 assets/create/models/block/radial_chass 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/red_nixie_tube.json f0099576080a0f2bb09dd85e55777bad69f9f265 assets/create/models/block/red_sail.json 12d4f4119b994c5d71c96ab3aa09beb89dad1e10 assets/create/models/block/red_seat.json +8b3de1161707901173accaf66c1f45233be8f8bd assets/create/models/block/red_toolbox.json 0064825ee3c1702c524d34abb6adb66906586851 assets/create/models/block/red_valve_handle.json 61ce6e1ba7fee30683c86b09ec35da4fbff8f9cb assets/create/models/block/refined_radiance_casing.json 0fa50139aa2ff171feaecf3062b2037fab10b786 assets/create/models/block/scoria.json @@ -1233,11 +1263,13 @@ acf3900465101f9dd78d2301eab1063cdb461582 assets/create/models/block/weathered_li 8c6feec0411e95f9aae18f9f38b4e045156857e8 assets/create/models/block/weathered_limestone_pillar.json 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/white_nixie_tube.json 1377e12f56dce1466ce44078d7154870c5cf7b2a assets/create/models/block/white_seat.json +94f882c4bf1664a9acfe57e1eccfd8129134aaaa assets/create/models/block/white_toolbox.json 899f33d51cf36cb1c283bc7e6363f9d451e5736e assets/create/models/block/white_valve_handle.json f2bee22fe03ac047fbe73ca2c5c759f09bf646df assets/create/models/block/windmill_bearing.json 71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/yellow_nixie_tube.json 071ca07daceea4d0db7ed41e815d47589fdb14b7 assets/create/models/block/yellow_sail.json 0a0e2cc973e35586ae00ed17b919383868e992e8 assets/create/models/block/yellow_seat.json +4a3f7dbbcc00be047e862a1b908021f916151292 assets/create/models/block/yellow_toolbox.json 55edee7b0833ab19b98694fab21ae0c8e91f76fd assets/create/models/block/yellow_valve_handle.json 36c27bad342c82aa8dc097da87637dca042cce17 assets/create/models/block/zinc_block.json f3059145a84ddbd54d08167e984112c7baf5ef4a assets/create/models/block/zinc_ore.json @@ -1268,11 +1300,13 @@ ffdb36349fa2e50451c208585162b6a8386ec494 assets/create/models/item/belt_connecto 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 +41967bd41a318f703182b5df8525ff4858db2682 assets/create/models/item/black_toolbox.json 56a6baedc608792cd6ab72a1c4fd53046cbda070 assets/create/models/item/black_valve_handle.json 80a6e8b00709fe0521aca5b789ae17485ed9c56d assets/create/models/item/blaze_burner.json 6e350231e9f217019883096b4f0bb95ab0af4728 assets/create/models/item/blaze_cake.json 5d4e5c22295f9b5cc62cf6e74fe1384fbbb319f9 assets/create/models/item/blaze_cake_base.json 0e1977585128fc0ecef640f72e5fc5e9fb47ef92 assets/create/models/item/blue_seat.json +c637be1586260cf91e6da57c71c33f4515008227 assets/create/models/item/blue_toolbox.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 @@ -1284,6 +1318,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 +9d66f8bdc2db7cacf52168d5a267d5f52a2b351c assets/create/models/item/brown_toolbox.json 54211d3bdbeba2ea4dbaed43daa740ae3331640f assets/create/models/item/brown_valve_handle.json 329c17cd2ac693babf6f05d0be94cfb1683a87cc assets/create/models/item/builders_tea.json 3e232a103f7f916fc11edb4d541ca99fe7b44181 assets/create/models/item/cart_assembler.json @@ -1338,6 +1373,7 @@ b359064405d189e2802969715cd5f682ddbf0bb1 assets/create/models/item/crushed_urani 823c91f63565db54ec3944a1e90e7aee18e41062 assets/create/models/item/crushing_wheel.json dae5cffa4e1263d6a113469f79fba8695fa8232a assets/create/models/item/cuckoo_clock.json 3e3edc9ccded444496d3336926b93bbf1234cd84 assets/create/models/item/cyan_seat.json +8ad7b5e1f0baf9df082a9250f57c7229d07e82ea assets/create/models/item/cyan_toolbox.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 @@ -1451,8 +1487,10 @@ 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 +e93e0d31a92f7f6faa758966e347568c56a2ddee assets/create/models/item/gray_toolbox.json 0f4981408b08a736ff3eb5bdf1823cd7019ae9fe assets/create/models/item/gray_valve_handle.json 1c9c9157a06108bf58967bfc4fb069c35d20e90a assets/create/models/item/green_seat.json +94cf943dd6621674790cc4b70c3d5f3620ae0dc7 assets/create/models/item/green_toolbox.json ecb9f32f62d3fa43fb226ab85adc2eb229fdfb77 assets/create/models/item/green_valve_handle.json 398b1a7c76c7bdb6a23b1248fdce98f6d835467f assets/create/models/item/hand_crank.json dee43bf1a9c211a752fac2c07aeba123f7f0c914 assets/create/models/item/handheld_worldshaper.json @@ -1478,10 +1516,13 @@ 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 +06c81dc35110b580a52fbfca78c60665156cb002 assets/create/models/item/light_blue_toolbox.json 34c308977750da24db80bf2ea2dd6cfc22ea1db6 assets/create/models/item/light_blue_valve_handle.json 1b36382eae41b35585e5659cda019310731000fc assets/create/models/item/light_gray_seat.json +b90d9b897793324371a4e32725dcc76f8a132cbb assets/create/models/item/light_gray_toolbox.json a89d397ac14482a973f7937f046dbf8e42d017bc assets/create/models/item/light_gray_valve_handle.json 2127f20dca4421802812e249b3caca6230a37eee assets/create/models/item/lime_seat.json +e36a80686d7813cdc4db0d309ca7e14884c0dc7a assets/create/models/item/lime_toolbox.json 785b008d703728497f5f941e3211d6e10389f1b5 assets/create/models/item/lime_valve_handle.json a29733a916141abf84492a288fe9ac4ed531f47d assets/create/models/item/limesand.json e0a1c6102acc10a36de5ae87da629dd3d676e204 assets/create/models/item/limestone.json @@ -1497,6 +1538,7 @@ ebdf23b99b7895e347c29057c8070a6e16e56beb assets/create/models/item/limestone_cob d245aa4994ff197b1ffeb7980d05f96bd20cdeb3 assets/create/models/item/linear_chassis.json 2866bff509b060cd3ee99b4eef25a4e1e4639703 assets/create/models/item/linked_controller.json d912be3e87f2beaa8e22747f867739139667241b assets/create/models/item/magenta_seat.json +cf29193c19b15f2b12edeecaf41e14602be4d247 assets/create/models/item/magenta_toolbox.json 928c5e3747fb758d2610475258cc168b0d4ee7b6 assets/create/models/item/magenta_valve_handle.json 932facf4bf93b471e8630f4132a4284a9f4d0d39 assets/create/models/item/mechanical_arm.json e19c7a06697adc2da9d66c5c81e1c6ff131acb65 assets/create/models/item/mechanical_bearing.json @@ -1529,6 +1571,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 +a951cefc4b35f5a2d5b7c7ed689384a20b3c9115 assets/create/models/item/orange_toolbox.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 @@ -1579,6 +1622,7 @@ d81f85aea5e683539a0f3c805c154b76a9d88a9d assets/create/models/item/paved_weather 910eaf2f571bae883b888d13f305bd848d278577 assets/create/models/item/paved_weathered_limestone_wall.json 477cf0b4dd4482353668f6307f3f94d0fd77dd62 assets/create/models/item/peculiar_bell.json 9664f171c7856661776c5c4ef0b6880a77db648e assets/create/models/item/pink_seat.json +1c95a98a6f55eb74626e6a51fb5a896f97741681 assets/create/models/item/pink_toolbox.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 @@ -1616,10 +1660,12 @@ b97c891ebe74e7850ef1f982e4cc043338baa30f assets/create/models/item/potato_cannon 4a3c3d81097d56bbd3aefeeb9eb7db87f514b5b4 assets/create/models/item/propeller.json 4b8a27ff05ed5331889dfc4b0b4562f3e94b0dfe assets/create/models/item/pulse_repeater.json a598b2f5eb34b061e81efb8a55267a02f8e08a61 assets/create/models/item/purple_seat.json +f309695ba0470c5228f38443f09bad85d09de8bd assets/create/models/item/purple_toolbox.json e5138f9e37ca4d24cda2eb7b24a021eb7c8ae21c assets/create/models/item/purple_valve_handle.json efbda15b53084acdac2d36b8e0a764a9ab34d723 assets/create/models/item/radial_chassis.json fc05c4492da3d17add7e410323a47456c0d21e0e assets/create/models/item/red_sand_paper.json 3e251514aa698076b73fdbfef720b78b21d3bd93 assets/create/models/item/red_seat.json +7d3bbb52975ab67b9f9aabe61fdf0cd2d63d5fc2 assets/create/models/item/red_toolbox.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 @@ -1688,11 +1734,13 @@ c36834070e12d25cd9e818d0d0181e267584b483 assets/create/models/item/weighted_ejec 9502a51ed2f6a110b6d41731a5948be4d70c8af8 assets/create/models/item/whisk.json c6253e0f8db3c3992d3f78fe5045e276d39d5b22 assets/create/models/item/white_sail.json 69328eb4f91c4407fbcad5e3c4b88363f1a9572c assets/create/models/item/white_seat.json +29d8e92edf11c79091e49689a97ab700121cdeb3 assets/create/models/item/white_toolbox.json be7a2d59d43083d7f2427193dcb9d68004224dd3 assets/create/models/item/white_valve_handle.json d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bearing.json 500abf752654a904d78a967f6c6d29a75a4821ab assets/create/models/item/wooden_bracket.json 2527b52413965a3e84b4718e08a9b8bb30a741ea assets/create/models/item/wrench.json 4b49bc2418410cded5f0b7da3430f1a22e049f18 assets/create/models/item/yellow_seat.json +4a34f526f9310198424d1f96a0c1d748ae5cccbf assets/create/models/item/yellow_toolbox.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 @@ -1831,9 +1879,42 @@ f2dc28c600011e6e8e515cb4d56118b1bd45b743 data/create/advancements/recipes/create dd487f98c411f1ff22cb7fc208b8cc24b27deb2f data/create/advancements/recipes/create.base/crafting/appliances/dough.json 911159091a9674c36e8cd49f56f63e5442988e84 data/create/advancements/recipes/create.base/crafting/appliances/linked_controller.json 51cdcf168087f47e4458eed7543d227da1ee5ca0 data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json +d06d9445256ae19d0a8a37e97983b168fd4d774e data/create/advancements/recipes/create.base/crafting/curiosities/black_toolbox_from_main_toolbox.json +343846c20104684b3a948e5c3a9948dd30839808 data/create/advancements/recipes/create.base/crafting/curiosities/black_toolbox_from_other_toolbox.json +acdf76187497b3101e9ec6101e2164e11277a68a data/create/advancements/recipes/create.base/crafting/curiosities/blue_toolbox_from_main_toolbox.json +3a8b083c1f4c67feade27a877e774f435b8e58da data/create/advancements/recipes/create.base/crafting/curiosities/blue_toolbox_from_other_toolbox.json +bb138bedd2aec741fa54b6b52be384fdbd741249 data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox.json +963555b6f24b35150769c3ff68a9a57c4968c9a6 data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox_from_main_toolbox.json +502e8ea5b0f9cc0ca90a1018d907ffe6f3b051a3 data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox_from_other_toolbox.json +f2afe58a26566aac8abce76f0ab6d0924c5badb6 data/create/advancements/recipes/create.base/crafting/curiosities/cyan_toolbox_from_main_toolbox.json +dea244d3f78e4aaf13132d48dcf071e5046bf154 data/create/advancements/recipes/create.base/crafting/curiosities/cyan_toolbox_from_other_toolbox.json +e28c741eed426658edda99c52eeacb4ccdcac0c2 data/create/advancements/recipes/create.base/crafting/curiosities/gray_toolbox_from_main_toolbox.json +b8df907dc00d4c28e74ba59faf9d66765ea43a6f data/create/advancements/recipes/create.base/crafting/curiosities/gray_toolbox_from_other_toolbox.json +ecd1f21c20804cbe65e7ace983d9a78c5003e8c0 data/create/advancements/recipes/create.base/crafting/curiosities/green_toolbox_from_main_toolbox.json +7969a391535586641e8da6ae6cd6d0eff2090369 data/create/advancements/recipes/create.base/crafting/curiosities/green_toolbox_from_other_toolbox.json +f174c871c7a4e8403bbf17c0e13572dc6cb31f90 data/create/advancements/recipes/create.base/crafting/curiosities/light_blue_toolbox_from_main_toolbox.json +b65a5e3f181c7ae5b63f89a51a40ad4d5d01827b data/create/advancements/recipes/create.base/crafting/curiosities/light_blue_toolbox_from_other_toolbox.json +d89ac200d23375a24cd62847e2be3108738ec948 data/create/advancements/recipes/create.base/crafting/curiosities/light_gray_toolbox_from_main_toolbox.json +2809c5b8f3d51b3319ae514006ec8baf38c7a8c2 data/create/advancements/recipes/create.base/crafting/curiosities/light_gray_toolbox_from_other_toolbox.json +152eacfd9d34c377d7380663542c22cea88b92ca data/create/advancements/recipes/create.base/crafting/curiosities/lime_toolbox_from_main_toolbox.json +acc82b0304550c4a0f8247c12b9fe92465ceee8b data/create/advancements/recipes/create.base/crafting/curiosities/lime_toolbox_from_other_toolbox.json +e89c8d11f098150a87e4724943269f421b3d63f0 data/create/advancements/recipes/create.base/crafting/curiosities/magenta_toolbox_from_main_toolbox.json +357899f0b14102faf4fff8bf290f854c2af38ba4 data/create/advancements/recipes/create.base/crafting/curiosities/magenta_toolbox_from_other_toolbox.json d531f87f425d199aee4777a588c1cd6cab6f5173 data/create/advancements/recipes/create.base/crafting/curiosities/minecart_coupling.json +7736bf31def6c117a92cfdc7ff007e51f10a7fa7 data/create/advancements/recipes/create.base/crafting/curiosities/orange_toolbox_from_main_toolbox.json +6eb8ae16950fb299f0762b20badac6beb88b9482 data/create/advancements/recipes/create.base/crafting/curiosities/orange_toolbox_from_other_toolbox.json a8c72e7e02fd0843d33fa4c5d43de81f29bc3aa4 data/create/advancements/recipes/create.base/crafting/curiosities/peculiar_bell.json +8d9894f687a21da528a3065ee1041ff1cccb3428 data/create/advancements/recipes/create.base/crafting/curiosities/pink_toolbox_from_main_toolbox.json +988ece3fc6f3257826f16107b995c5649b2e4e85 data/create/advancements/recipes/create.base/crafting/curiosities/pink_toolbox_from_other_toolbox.json +c645dd051a8d06fdb2d09083ba632c44b7794e9e data/create/advancements/recipes/create.base/crafting/curiosities/purple_toolbox_from_main_toolbox.json +2a4d5fa85d0c306791c67f283c4298200f2a6cd8 data/create/advancements/recipes/create.base/crafting/curiosities/purple_toolbox_from_other_toolbox.json +0567ca2d349306df05adaebe3e056fc4f75e287f data/create/advancements/recipes/create.base/crafting/curiosities/red_toolbox_from_main_toolbox.json +c71be67bfa6fac32be60424049cb221e10840016 data/create/advancements/recipes/create.base/crafting/curiosities/red_toolbox_from_other_toolbox.json 2eef3201017af03f6a2f0f015645e3ff5e25d9c1 data/create/advancements/recipes/create.base/crafting/curiosities/wand_of_symmetry.json +bb1650d8a9a5877bf64964a2d92f8a93364637f4 data/create/advancements/recipes/create.base/crafting/curiosities/white_toolbox_from_main_toolbox.json +514974b3b902a910358453b10619cbc1ac13476d data/create/advancements/recipes/create.base/crafting/curiosities/white_toolbox_from_other_toolbox.json +13180b17064fedda97cfaa18e4158e2bfcd6b332 data/create/advancements/recipes/create.base/crafting/curiosities/yellow_toolbox_from_main_toolbox.json +8ab0365e0aa21ecd1a671d7c0b8717626951e2cb data/create/advancements/recipes/create.base/crafting/curiosities/yellow_toolbox_from_other_toolbox.json 80155fa8e28e7de87adad3dc2cd79564496d7ef7 data/create/advancements/recipes/create.base/crafting/kinetics/adjustable_chain_gearshift.json 92416ced6ede6965fd728e1c7336bb05a3e41ea2 data/create/advancements/recipes/create.base/crafting/kinetics/analog_lever.json 3e9753006da898d4569bbeabf95997e8c90847c8 data/create/advancements/recipes/create.base/crafting/kinetics/attribute_filter.json @@ -2461,11 +2542,13 @@ bf1d5843f93533f84bc4adec5b77da2114fa2025 data/create/loot_tables/blocks/birch_wi d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/black_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/black_sail.json cccc209d172cc7bac76f1b4ac79085ee90742ab2 data/create/loot_tables/blocks/black_seat.json +c51ad9a71e41bb3ffa807b441ebd1946ea226a68 data/create/loot_tables/blocks/black_toolbox.json f3573f47b8a914aa222633893e158f84fcd6f3d8 data/create/loot_tables/blocks/black_valve_handle.json a2313c9b7d114396fca3c86a740d23fce3873679 data/create/loot_tables/blocks/blaze_burner.json d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/blue_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/blue_sail.json 3834f7ac2bbc42cead02d4973842adb9ad97e6bf data/create/loot_tables/blocks/blue_seat.json +dc8e1f43464c5a9b28d4cbd37203682fc2a9621f data/create/loot_tables/blocks/blue_toolbox.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 @@ -2476,6 +2559,7 @@ b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/brass_en d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/brown_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/brown_sail.json d415862a0abe20e8c5c2c8125bb672065330a9bc data/create/loot_tables/blocks/brown_seat.json +be90d95c41b95c30243b26f462cb51b33400ba26 data/create/loot_tables/blocks/brown_toolbox.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 @@ -2508,6 +2592,7 @@ d370ee874b5b6b98e9a8c368218fe61f644d956d data/create/loot_tables/blocks/cuckoo_c d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/cyan_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/cyan_sail.json 49a14b9e93abdf02a7aef9c0c4085ac89617fae4 data/create/loot_tables/blocks/cyan_seat.json +6b4281aa990a190722d56c32bd03e21b508f5f49 data/create/loot_tables/blocks/cyan_toolbox.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 @@ -2615,10 +2700,12 @@ feca8a1f62e0e13fcb2252d5f782d74938b84431 data/create/loot_tables/blocks/granite_ d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/gray_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/gray_sail.json d014357b3a467b23473c8223f32471a04a9ff94c data/create/loot_tables/blocks/gray_seat.json +bfe072e94774289c9d011d68b1cea04cf740fc75 data/create/loot_tables/blocks/gray_toolbox.json 35f916fd0f8465a070270615dbddd716ff68d5bb data/create/loot_tables/blocks/gray_valve_handle.json d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/green_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/green_sail.json a71599eecd3f1179e3d0367623460e798828aa6d data/create/loot_tables/blocks/green_seat.json +7f0179039e85cb61f60aa1db49bb8c45ce58207d data/create/loot_tables/blocks/green_toolbox.json 865ebead9601b29e6326dc9e1d4c1ca92f3b7a3b data/create/loot_tables/blocks/green_valve_handle.json 9bdc47ea3ffc52f037f12f40f387e6b72a352c4e data/create/loot_tables/blocks/hand_crank.json c61b386376d19aaf89df3447a26b976a672efec5 data/create/loot_tables/blocks/haunted_bell.json @@ -2642,14 +2729,17 @@ fa8a5922f7346a15a80b5c7e5dfc26d24ea98728 data/create/loot_tables/blocks/layered_ d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/light_blue_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/light_blue_sail.json b403848d3a4b4ad7a048e70c21e200e40d0c67e3 data/create/loot_tables/blocks/light_blue_seat.json +f99311437dd0ba8b13dee786bf10a50879386981 data/create/loot_tables/blocks/light_blue_toolbox.json 32afe3fff74ccda4151567961fa6c0b8e3735358 data/create/loot_tables/blocks/light_blue_valve_handle.json d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/light_gray_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/light_gray_sail.json 0cc2b20cb6e2dae6cf9d759c85926663f6066c99 data/create/loot_tables/blocks/light_gray_seat.json +21bd11fba85a8dc66f6c97df3863ccc496602fde data/create/loot_tables/blocks/light_gray_toolbox.json 8cc64a1dfb7ce7be2c063248d912c68ad2fe999c data/create/loot_tables/blocks/light_gray_valve_handle.json d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/lime_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/lime_sail.json f7893090c6ecb4862c90c408b7f9ce8316f8b608 data/create/loot_tables/blocks/lime_seat.json +a9ea20a8dce75489356e0124c218dce0c25dd1fc data/create/loot_tables/blocks/lime_toolbox.json cae6d16c8967164698efbce3b91018a8e79a81e9 data/create/loot_tables/blocks/lime_valve_handle.json 7dfd638cc6f0d22bbc8fcbdb7212a3bfc8c85223 data/create/loot_tables/blocks/limesand.json d476eed7b5f0c7438d2e517fc60cd23f19234056 data/create/loot_tables/blocks/limestone.json @@ -2667,6 +2757,7 @@ aa751d2e8a7889907c08c4bec6f6ca266230b6d7 data/create/loot_tables/blocks/linear_c d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/magenta_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/magenta_sail.json 9e5e017cd3b4f544f487a5ca22ef610a4addc8ec data/create/loot_tables/blocks/magenta_seat.json +66271e9a73981cfa07b3aa5abae845670f37afa4 data/create/loot_tables/blocks/magenta_toolbox.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 @@ -2700,6 +2791,7 @@ d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/nixie_tu 90cc4d5857f47c48e2b82f394de9567023c5c8ce data/create/loot_tables/blocks/oak_window_pane.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/orange_sail.json 2333aaea940816b6bc8454ba24e0c9f52af94ac0 data/create/loot_tables/blocks/orange_seat.json +de05f444ab1776b77e4d9e50411feb26530f2473 data/create/loot_tables/blocks/orange_toolbox.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 @@ -2752,6 +2844,7 @@ d3e4ab984aef19ee21a1c5b868eb3fde96c05afd data/create/loot_tables/blocks/paved_we d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/pink_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/pink_sail.json 6f32e1217986407e41358e9417de63602c78e810 data/create/loot_tables/blocks/pink_seat.json +0185cbfd1e039a2c7c1b625561049706adf02931 data/create/loot_tables/blocks/pink_toolbox.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 @@ -2787,11 +2880,13 @@ e8fb62c91226ac107dee45c5ebc54c8dd0aee224 data/create/loot_tables/blocks/pulse_re d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/purple_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/purple_sail.json d7f6caa568e6508177a644fb78dc18ce26c9b2c0 data/create/loot_tables/blocks/purple_seat.json +06c233a9a1aeec64fbd41d3134555ebc535de965 data/create/loot_tables/blocks/purple_toolbox.json 773e4dc856044dabfe9d2323cbda0460dfb626ee data/create/loot_tables/blocks/purple_valve_handle.json 768420dab8785909891e52c4d77a182d99ba11d3 data/create/loot_tables/blocks/radial_chassis.json d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/red_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/red_sail.json 71b0fa3b174efe94a2a735ab2426c376c0ef674a data/create/loot_tables/blocks/red_seat.json +2f15d3f98121a4a1348bd3c44c59cbb52619b12e data/create/loot_tables/blocks/red_toolbox.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 @@ -2849,12 +2944,14 @@ e3969f1c5966c4992b3280a06e1d6c5000c37df5 data/create/loot_tables/blocks/weighted d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/white_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/white_sail.json 969eda31556feb5a68e350762848d17453275fee data/create/loot_tables/blocks/white_seat.json +7c210ac011b1eda2255773278ae7daa59b1576aa data/create/loot_tables/blocks/white_toolbox.json 79fe374f8e677088f928a3a49ff5eeed6128d165 data/create/loot_tables/blocks/white_valve_handle.json 941ea78ea7c0f0061c3d3569ecea333ae6a16bf1 data/create/loot_tables/blocks/windmill_bearing.json 728c8719e653825c030913df94ce845fdc6d79b7 data/create/loot_tables/blocks/wooden_bracket.json d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/yellow_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/yellow_sail.json 37ead431a278928a09b260ae06a448e2c791a73e data/create/loot_tables/blocks/yellow_seat.json +cbe175f9036f0de82d4f8a03aa0e932a37d25ea3 data/create/loot_tables/blocks/yellow_toolbox.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 @@ -2933,9 +3030,42 @@ c077375d16b4505e52548613fbc9356993556e6b data/create/recipes/crafting/appliances 75cdbd88973a8ca943ebe890153b01a344b96b01 data/create/recipes/crafting/appliances/linked_controller.json 7b5f863dda3d05a79cb85943a178eba0bd8a7dc7 data/create/recipes/crafting/appliances/slime_ball.json b159ba84428eee6ef6e23df1766f2a18f2c8a63e data/create/recipes/crafting/appliances/tree_fertilizer.json +0de0507bc9bb44271b21a64cceb7cd94f7dbe61d data/create/recipes/crafting/curiosities/black_toolbox_from_main_toolbox.json +e89b2dd52cfe2d4d723f49aeec8f4f8c37a82dca data/create/recipes/crafting/curiosities/black_toolbox_from_other_toolbox.json +5588aa83b6fbb2ee3dc01e95b3261ccc38e40ad1 data/create/recipes/crafting/curiosities/blue_toolbox_from_main_toolbox.json +19c9fe34e311e7a11114acc10cc3777fc95ed3ab data/create/recipes/crafting/curiosities/blue_toolbox_from_other_toolbox.json +4754ca20a7efdf382f32be150f38bdf4e8183fc4 data/create/recipes/crafting/curiosities/brown_toolbox.json +7635daa89502a79cc5b99b146c1097fa166958e5 data/create/recipes/crafting/curiosities/brown_toolbox_from_main_toolbox.json +14a85c9011a6ca667ac83e95dd7e8eabfac4a4c5 data/create/recipes/crafting/curiosities/brown_toolbox_from_other_toolbox.json +39e6d65af1c8ca0dec19e5b15a2f0e28e69542eb data/create/recipes/crafting/curiosities/cyan_toolbox_from_main_toolbox.json +39e055d841536e691c798acc09145f821eeb32ae data/create/recipes/crafting/curiosities/cyan_toolbox_from_other_toolbox.json +567a09f08bbbd5fd8eb34555bb9e62e7066c8c93 data/create/recipes/crafting/curiosities/gray_toolbox_from_main_toolbox.json +f6ee1a69e32851487a753a27290c7fee163de87f data/create/recipes/crafting/curiosities/gray_toolbox_from_other_toolbox.json +5e0e201caff1f11092c8dc5a524bab00dec52848 data/create/recipes/crafting/curiosities/green_toolbox_from_main_toolbox.json +9c9d9e1c9a0b76561b2fd97fe5a9adc7660935af data/create/recipes/crafting/curiosities/green_toolbox_from_other_toolbox.json +3750f44691883b644ce80b869f69785a151c63ce data/create/recipes/crafting/curiosities/light_blue_toolbox_from_main_toolbox.json +3511ddf935de95789db27cd546b51835051b0612 data/create/recipes/crafting/curiosities/light_blue_toolbox_from_other_toolbox.json +6f6e22a1d7d27098dfa15cdd7a9dc841116dd085 data/create/recipes/crafting/curiosities/light_gray_toolbox_from_main_toolbox.json +b2d9ddb013d550f335c28a64360aad5a2c9ef109 data/create/recipes/crafting/curiosities/light_gray_toolbox_from_other_toolbox.json +0b55ab5174983f503355c52e6bff1cfb199d833b data/create/recipes/crafting/curiosities/lime_toolbox_from_main_toolbox.json +8e50132d045351427ad33aec3463437f93024970 data/create/recipes/crafting/curiosities/lime_toolbox_from_other_toolbox.json +8912a48550b1e763a75eb8db0412d39992350cde data/create/recipes/crafting/curiosities/magenta_toolbox_from_main_toolbox.json +53fa044e156eae089c3bdd037b168169f3dedde8 data/create/recipes/crafting/curiosities/magenta_toolbox_from_other_toolbox.json 660e92da2b1b6698b1c0df74bd74a56a25fb3eca data/create/recipes/crafting/curiosities/minecart_coupling.json +0639c9c090321f4f95576df3b79f73138dd47b37 data/create/recipes/crafting/curiosities/orange_toolbox_from_main_toolbox.json +8ff510405b3890f3de0f1f11b733f081a2abafaf data/create/recipes/crafting/curiosities/orange_toolbox_from_other_toolbox.json 1f8f96ab57363166b7e132a1dd082001a5a0d5f0 data/create/recipes/crafting/curiosities/peculiar_bell.json +a47f561abcf3521f1407101c37e13e5a888403be data/create/recipes/crafting/curiosities/pink_toolbox_from_main_toolbox.json +84a4f2a38a73aa704a6eadfa6e30942ceace60c6 data/create/recipes/crafting/curiosities/pink_toolbox_from_other_toolbox.json +4f158ed3edf7451d1c2aa7d50efbbc58a4d5b7d0 data/create/recipes/crafting/curiosities/purple_toolbox_from_main_toolbox.json +46d792a2e1252b42b4c7975a8c76c9b818cdfafe data/create/recipes/crafting/curiosities/purple_toolbox_from_other_toolbox.json +9f0adcbf9abe39cb8ae9dfc4ea02953f8103acc9 data/create/recipes/crafting/curiosities/red_toolbox_from_main_toolbox.json +574f0198e7f0c683ae96221ec69d3a88c39f10e6 data/create/recipes/crafting/curiosities/red_toolbox_from_other_toolbox.json fcbc04d0a7eaf820a74bc7e4736a4a581e0a9dff data/create/recipes/crafting/curiosities/wand_of_symmetry.json +ef8e81e889747a35669ccd5851e43d0349225115 data/create/recipes/crafting/curiosities/white_toolbox_from_main_toolbox.json +3222feaa77a392b45da97a410e268641998864c6 data/create/recipes/crafting/curiosities/white_toolbox_from_other_toolbox.json +71272236f542469e82b92f5208122b18f72f365d data/create/recipes/crafting/curiosities/yellow_toolbox_from_main_toolbox.json +56e3950037a751edd931942ccc52563228680cb2 data/create/recipes/crafting/curiosities/yellow_toolbox_from_other_toolbox.json cc56d21a25286a9024e506dde9fa161230eaf46d data/create/recipes/crafting/kinetics/adjustable_chain_gearshift.json 88de51b451469698665b7319e5b9cfb9a87ae3e0 data/create/recipes/crafting/kinetics/analog_lever.json cf1f3a6306d47025cebe153cf05949ef69ccbe5a data/create/recipes/crafting/kinetics/attribute_filter.json @@ -3747,6 +3877,7 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone c81ea194e808985847159b201140d4aa4cbcca65 data/create/tags/blocks/safe_nbt.json c9ac7e3e5ec18554e7184168d65e9b8e44ef5610 data/create/tags/blocks/sails.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json +d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/blocks/toolboxes.json 50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails.json 74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/windowable.json @@ -3755,21 +3886,26 @@ eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails. 94c62bf22678ef55b2b8a5398a7960e5b00682dc data/create/tags/items/crushed_ores.json bce28787b0271382842823d04a977912a88b01c2 data/create/tags/items/sandpaper.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/items/seats.json +d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/items/toolboxes.json 2f4044c2989b9a8aa394c88617d67a6a310e6b1b data/create/tags/items/upright_on_belt.json 50936b211d94167a35ec78c89954082a336b6269 data/create/tags/items/valve_handles.json +05ca51cdc60a5e109b5a0e3b782de13d34ebcb24 data/forge/tags/blocks/cobblestone.json 16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/blocks/glass/colorless.json 81d3eb40b048160fcc2d6bb7ff12b49276297efd data/forge/tags/blocks/glass_panes.json 4b700ee8aa748c2ec70c29ef1589844879c0deae data/forge/tags/blocks/ores.json 4a0b13a9835106de9a1dd0a71a02372abb48e7b6 data/forge/tags/blocks/ores/copper.json d5ea262a0f5fb210612d22521818e26cf08e591a data/forge/tags/blocks/ores/zinc.json +55196ee770ad20602211e26864dd62a58b2e985c data/forge/tags/blocks/stone.json 508730d3822c54d355329bf6a33d58071653afad data/forge/tags/blocks/storage_blocks.json ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/blocks/storage_blocks/brass.json f6c8f34ceb475546dba5cc6ff288863ea795d20b data/forge/tags/blocks/storage_blocks/copper.json 7f71a774800111e50b42de0e6159ed2d2a807d32 data/forge/tags/blocks/storage_blocks/zinc.json +2072c51afc5bbc6c9d64fd086803193d8a3c40de data/forge/tags/blocks/wg_stone.json 6b73c57912934d09233ad2966110968a6109f2c9 data/forge/tags/fluids/chocolate.json 391c9b2be5740aea943a8a5fe27eb327e2d973b0 data/forge/tags/fluids/honey.json d6a4e4fe1204b718010543a28a9b9ec4e0977bd7 data/forge/tags/fluids/tea.json d9ffc62a496946fc4848934e7c0a6e917337f8be data/forge/tags/items/beacon_payment.json +5af3164b14c92d2d6e235b5d4eebd93cbee37c0a data/forge/tags/items/buckets/honey.json 05ca51cdc60a5e109b5a0e3b782de13d34ebcb24 data/forge/tags/items/cobblestone.json 16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/items/glass/colorless.json 81d3eb40b048160fcc2d6bb7ff12b49276297efd data/forge/tags/items/glass_panes.json @@ -3789,6 +3925,7 @@ d5ea262a0f5fb210612d22521818e26cf08e591a data/forge/tags/items/ores/zinc.json c3dab5fe379bc1b7b10d4a0ba7009eee1b75a27c data/forge/tags/items/plates/copper.json fb9bfb4c84ed9cf2da8c4b2fbc4cd4d9f37d3016 data/forge/tags/items/plates/gold.json 04d947ed7a5066f3cfe75a8dc564fe2dca8a9c93 data/forge/tags/items/plates/iron.json +55196ee770ad20602211e26864dd62a58b2e985c data/forge/tags/items/stone.json 508730d3822c54d355329bf6a33d58071653afad data/forge/tags/items/storage_blocks.json ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/items/storage_blocks/brass.json f6c8f34ceb475546dba5cc6ff288863ea795d20b data/forge/tags/items/storage_blocks/copper.json diff --git a/src/generated/resources/assets/create/blockstates/black_toolbox.json b/src/generated/resources/assets/create/blockstates/black_toolbox.json new file mode 100644 index 000000000..9641add4d --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/black_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/black_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/black_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/black_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/black_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/black_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/black_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/black_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/black_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/blue_toolbox.json b/src/generated/resources/assets/create/blockstates/blue_toolbox.json new file mode 100644 index 000000000..3f3aa455c --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/blue_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/blue_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/blue_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/blue_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/blue_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/blue_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/blue_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/blue_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/blue_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/brown_toolbox.json b/src/generated/resources/assets/create/blockstates/brown_toolbox.json new file mode 100644 index 000000000..f0ccd296a --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/brown_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/brown_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/brown_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/brown_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/brown_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/brown_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/brown_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/brown_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/brown_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/cyan_toolbox.json b/src/generated/resources/assets/create/blockstates/cyan_toolbox.json new file mode 100644 index 000000000..497aa4ab3 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/cyan_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/cyan_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/cyan_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/cyan_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/cyan_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/cyan_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/cyan_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/cyan_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/cyan_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/gray_toolbox.json b/src/generated/resources/assets/create/blockstates/gray_toolbox.json new file mode 100644 index 000000000..69b09774f --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/gray_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/gray_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/gray_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/gray_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/gray_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/gray_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/gray_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/gray_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/gray_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/green_toolbox.json b/src/generated/resources/assets/create/blockstates/green_toolbox.json new file mode 100644 index 000000000..caf60c8ea --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/green_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/green_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/green_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/green_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/green_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/green_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/green_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/green_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/green_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/light_blue_toolbox.json b/src/generated/resources/assets/create/blockstates/light_blue_toolbox.json new file mode 100644 index 000000000..e90b53614 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/light_blue_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/light_blue_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/light_blue_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/light_blue_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/light_blue_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/light_blue_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/light_blue_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/light_blue_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/light_blue_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/light_gray_toolbox.json b/src/generated/resources/assets/create/blockstates/light_gray_toolbox.json new file mode 100644 index 000000000..a4fdede71 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/light_gray_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/light_gray_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/light_gray_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/light_gray_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/light_gray_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/light_gray_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/light_gray_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/light_gray_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/light_gray_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/lime_toolbox.json b/src/generated/resources/assets/create/blockstates/lime_toolbox.json new file mode 100644 index 000000000..43aeddf74 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/lime_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/lime_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/lime_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/lime_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/lime_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/lime_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/lime_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/lime_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/lime_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/magenta_toolbox.json b/src/generated/resources/assets/create/blockstates/magenta_toolbox.json new file mode 100644 index 000000000..3378cd903 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/magenta_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/magenta_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/magenta_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/magenta_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/magenta_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/magenta_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/magenta_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/magenta_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/magenta_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/orange_toolbox.json b/src/generated/resources/assets/create/blockstates/orange_toolbox.json new file mode 100644 index 000000000..b11c165b5 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/orange_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/orange_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/orange_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/orange_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/orange_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/orange_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/orange_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/orange_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/orange_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/pink_toolbox.json b/src/generated/resources/assets/create/blockstates/pink_toolbox.json new file mode 100644 index 000000000..847ea1127 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/pink_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/pink_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/pink_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/pink_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/pink_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/pink_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/pink_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/pink_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/pink_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/purple_toolbox.json b/src/generated/resources/assets/create/blockstates/purple_toolbox.json new file mode 100644 index 000000000..6860868ca --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/purple_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/purple_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/purple_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/purple_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/purple_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/purple_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/purple_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/purple_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/purple_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/red_toolbox.json b/src/generated/resources/assets/create/blockstates/red_toolbox.json new file mode 100644 index 000000000..36cfc7bcf --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/red_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/red_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/red_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/red_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/red_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/red_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/red_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/red_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/red_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/white_toolbox.json b/src/generated/resources/assets/create/blockstates/white_toolbox.json new file mode 100644 index 000000000..0b2e80919 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/white_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/white_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/white_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/white_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/white_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/white_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/white_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/white_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/white_toolbox", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/yellow_toolbox.json b/src/generated/resources/assets/create/blockstates/yellow_toolbox.json new file mode 100644 index 000000000..bc51011d8 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/yellow_toolbox.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=north,waterlogged=false": { + "model": "create:block/yellow_toolbox" + }, + "facing=south,waterlogged=false": { + "model": "create:block/yellow_toolbox", + "y": 180 + }, + "facing=west,waterlogged=false": { + "model": "create:block/yellow_toolbox", + "y": 270 + }, + "facing=east,waterlogged=false": { + "model": "create:block/yellow_toolbox", + "y": 90 + }, + "facing=north,waterlogged=true": { + "model": "create:block/yellow_toolbox" + }, + "facing=south,waterlogged=true": { + "model": "create:block/yellow_toolbox", + "y": 180 + }, + "facing=west,waterlogged=true": { + "model": "create:block/yellow_toolbox", + "y": 270 + }, + "facing=east,waterlogged=true": { + "model": "create:block/yellow_toolbox", + "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 9bdbea809..c34a7b3bd 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -27,11 +27,13 @@ "block.create.black_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u029E\u0254\u0250\u05DF\u15FA", "block.create.black_sail": "\u05DF\u0131\u0250S \u029E\u0254\u0250\u05DF\u15FA", "block.create.black_seat": "\u0287\u0250\u01DDS \u029E\u0254\u0250\u05DF\u15FA", + "block.create.black_toolbox": "xoq\u05DFoo\u27D8 \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_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u01DDn\u05DF\u15FA", "block.create.blue_sail": "\u05DF\u0131\u0250S \u01DDn\u05DF\u15FA", "block.create.blue_seat": "\u0287\u0250\u01DDS \u01DDn\u05DF\u15FA", + "block.create.blue_toolbox": "xoq\u05DFoo\u27D8 \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": "ss\u0250\u0279\u15FA \u025Fo \u029E\u0254o\u05DF\u15FA", @@ -42,6 +44,7 @@ "block.create.brown_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N u\u028Do\u0279\u15FA", "block.create.brown_sail": "\u05DF\u0131\u0250S u\u028Do\u0279\u15FA", "block.create.brown_seat": "\u0287\u0250\u01DDS u\u028Do\u0279\u15FA", + "block.create.brown_toolbox": "xoq\u05DFoo\u27D8 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", @@ -75,6 +78,7 @@ "block.create.cyan_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N u\u0250\u028E\u0186", "block.create.cyan_sail": "\u05DF\u0131\u0250S u\u0250\u028E\u0186", "block.create.cyan_seat": "\u0287\u0250\u01DDS u\u0250\u028E\u0186", + "block.create.cyan_toolbox": "xoq\u05DFoo\u27D8 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", @@ -182,10 +186,12 @@ "block.create.gray_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u028E\u0250\u0279\u2141", "block.create.gray_sail": "\u05DF\u0131\u0250S \u028E\u0250\u0279\u2141", "block.create.gray_seat": "\u0287\u0250\u01DDS \u028E\u0250\u0279\u2141", + "block.create.gray_toolbox": "xoq\u05DFoo\u27D8 \u028E\u0250\u0279\u2141", "block.create.gray_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u028E\u0250\u0279\u2141", "block.create.green_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N u\u01DD\u01DD\u0279\u2141", "block.create.green_sail": "\u05DF\u0131\u0250S u\u01DD\u01DD\u0279\u2141", "block.create.green_seat": "\u0287\u0250\u01DDS u\u01DD\u01DD\u0279\u2141", + "block.create.green_toolbox": "xoq\u05DFoo\u27D8 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.haunted_bell": "\u05DF\u05DF\u01DD\u15FA p\u01DD\u0287un\u0250H", @@ -210,14 +216,17 @@ "block.create.light_blue_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u01DDn\u05DF\u15FA \u0287\u0265b\u0131\uA780", "block.create.light_blue_sail": "\u05DF\u0131\u0250S \u01DDn\u05DF\u15FA \u0287\u0265b\u0131\uA780", "block.create.light_blue_seat": "\u0287\u0250\u01DDS \u01DDn\u05DF\u15FA \u0287\u0265b\u0131\uA780", + "block.create.light_blue_toolbox": "xoq\u05DFoo\u27D8 \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_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u028E\u0250\u0279\u2141 \u0287\u0265b\u0131\uA780", "block.create.light_gray_sail": "\u05DF\u0131\u0250S \u028E\u0250\u0279\u2141 \u0287\u0265b\u0131\uA780", "block.create.light_gray_seat": "\u0287\u0250\u01DDS \u028E\u0250\u0279\u2141 \u0287\u0265b\u0131\uA780", + "block.create.light_gray_toolbox": "xoq\u05DFoo\u27D8 \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_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u01DD\u026F\u0131\uA780", "block.create.lime_sail": "\u05DF\u0131\u0250S \u01DD\u026F\u0131\uA780", "block.create.lime_seat": "\u0287\u0250\u01DDS \u01DD\u026F\u0131\uA780", + "block.create.lime_toolbox": "xoq\u05DFoo\u27D8 \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", @@ -235,6 +244,7 @@ "block.create.magenta_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u0250\u0287u\u01DDb\u0250W", "block.create.magenta_sail": "\u05DF\u0131\u0250S \u0250\u0287u\u01DDb\u0250W", "block.create.magenta_seat": "\u0287\u0250\u01DDS \u0250\u0287u\u01DDb\u0250W", + "block.create.magenta_toolbox": "xoq\u05DFoo\u27D8 \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", @@ -268,6 +278,7 @@ "block.create.oak_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u029E\u0250O", "block.create.orange_sail": "\u05DF\u0131\u0250S \u01DDbu\u0250\u0279O", "block.create.orange_seat": "\u0287\u0250\u01DDS \u01DDbu\u0250\u0279O", + "block.create.orange_toolbox": "xoq\u05DFoo\u27D8 \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", @@ -320,6 +331,7 @@ "block.create.pink_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u029Eu\u0131\u0500", "block.create.pink_sail": "\u05DF\u0131\u0250S \u029Eu\u0131\u0500", "block.create.pink_seat": "\u0287\u0250\u01DDS \u029Eu\u0131\u0500", + "block.create.pink_toolbox": "xoq\u05DFoo\u27D8 \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", @@ -355,11 +367,13 @@ "block.create.purple_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u01DD\u05DFd\u0279n\u0500", "block.create.purple_sail": "\u05DF\u0131\u0250S \u01DD\u05DFd\u0279n\u0500", "block.create.purple_seat": "\u0287\u0250\u01DDS \u01DD\u05DFd\u0279n\u0500", + "block.create.purple_toolbox": "xoq\u05DFoo\u27D8 \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_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N p\u01DD\u1D1A", "block.create.red_sail": "\u05DF\u0131\u0250S p\u01DD\u1D1A", "block.create.red_seat": "\u0287\u0250\u01DDS p\u01DD\u1D1A", + "block.create.red_toolbox": "xoq\u05DFoo\u27D8 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", @@ -417,12 +431,14 @@ "block.create.white_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u01DD\u0287\u0131\u0265M", "block.create.white_sail": "\u05DF\u0131\u0250S \u01DD\u0287\u0131\u0265M", "block.create.white_seat": "\u0287\u0250\u01DDS \u01DD\u0287\u0131\u0265M", + "block.create.white_toolbox": "xoq\u05DFoo\u27D8 \u01DD\u0287\u0131\u0265M", "block.create.white_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DD\u0287\u0131\u0265M", "block.create.windmill_bearing": "bu\u0131\u0279\u0250\u01DD\u15FA \u05DF\u05DF\u0131\u026Fpu\u0131M", "block.create.wooden_bracket": "\u0287\u01DD\u029E\u0254\u0250\u0279\u15FA u\u01DDpooM", "block.create.yellow_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u028Do\u05DF\u05DF\u01DD\u028E", "block.create.yellow_sail": "\u05DF\u0131\u0250S \u028Do\u05DF\u05DF\u01DD\u028E", "block.create.yellow_seat": "\u0287\u0250\u01DDS \u028Do\u05DF\u05DF\u01DD\u028E", + "block.create.yellow_toolbox": "xoq\u05DFoo\u27D8 \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": "\u0254u\u0131Z \u025Fo \u029E\u0254o\u05DF\u15FA", "block.create.zinc_ore": "\u01DD\u0279O \u0254u\u0131Z", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 268153180..720ad9b66 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -30,11 +30,13 @@ "block.create.black_nixie_tube": "Black Nixie Tube", "block.create.black_sail": "Black Sail", "block.create.black_seat": "Black Seat", + "block.create.black_toolbox": "Black Toolbox", "block.create.black_valve_handle": "Black Valve Handle", "block.create.blaze_burner": "Blaze Burner", "block.create.blue_nixie_tube": "Blue Nixie Tube", "block.create.blue_sail": "Blue Sail", "block.create.blue_seat": "Blue Seat", + "block.create.blue_toolbox": "Blue Toolbox", "block.create.blue_valve_handle": "Blue Valve Handle", "block.create.brass_belt_funnel": "Brass Belt Funnel", "block.create.brass_block": "Block of Brass", @@ -45,6 +47,7 @@ "block.create.brown_nixie_tube": "Brown Nixie Tube", "block.create.brown_sail": "Brown Sail", "block.create.brown_seat": "Brown Seat", + "block.create.brown_toolbox": "Brown Toolbox", "block.create.brown_valve_handle": "Brown Valve Handle", "block.create.cart_assembler": "Cart Assembler", "block.create.chiseled_dark_scoria": "Chiseled Dark Scoria", @@ -78,6 +81,7 @@ "block.create.cyan_nixie_tube": "Cyan Nixie Tube", "block.create.cyan_sail": "Cyan Sail", "block.create.cyan_seat": "Cyan Seat", + "block.create.cyan_toolbox": "Cyan Toolbox", "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", @@ -185,10 +189,12 @@ "block.create.gray_nixie_tube": "Gray Nixie Tube", "block.create.gray_sail": "Gray Sail", "block.create.gray_seat": "Gray Seat", + "block.create.gray_toolbox": "Gray Toolbox", "block.create.gray_valve_handle": "Gray Valve Handle", "block.create.green_nixie_tube": "Green Nixie Tube", "block.create.green_sail": "Green Sail", "block.create.green_seat": "Green Seat", + "block.create.green_toolbox": "Green Toolbox", "block.create.green_valve_handle": "Green Valve Handle", "block.create.hand_crank": "Hand Crank", "block.create.haunted_bell": "Haunted Bell", @@ -213,14 +219,17 @@ "block.create.light_blue_nixie_tube": "Light Blue Nixie Tube", "block.create.light_blue_sail": "Light Blue Sail", "block.create.light_blue_seat": "Light Blue Seat", + "block.create.light_blue_toolbox": "Light Blue Toolbox", "block.create.light_blue_valve_handle": "Light Blue Valve Handle", "block.create.light_gray_nixie_tube": "Light Gray Nixie Tube", "block.create.light_gray_sail": "Light Gray Sail", "block.create.light_gray_seat": "Light Gray Seat", + "block.create.light_gray_toolbox": "Light Gray Toolbox", "block.create.light_gray_valve_handle": "Light Gray Valve Handle", "block.create.lime_nixie_tube": "Lime Nixie Tube", "block.create.lime_sail": "Lime Sail", "block.create.lime_seat": "Lime Seat", + "block.create.lime_toolbox": "Lime Toolbox", "block.create.lime_valve_handle": "Lime Valve Handle", "block.create.limesand": "Limesand", "block.create.limestone": "Limestone", @@ -238,6 +247,7 @@ "block.create.magenta_nixie_tube": "Magenta Nixie Tube", "block.create.magenta_sail": "Magenta Sail", "block.create.magenta_seat": "Magenta Seat", + "block.create.magenta_toolbox": "Magenta Toolbox", "block.create.magenta_valve_handle": "Magenta Valve Handle", "block.create.mechanical_arm": "Mechanical Arm", "block.create.mechanical_bearing": "Mechanical Bearing", @@ -271,6 +281,7 @@ "block.create.oak_window_pane": "Oak Window Pane", "block.create.orange_sail": "Orange Sail", "block.create.orange_seat": "Orange Seat", + "block.create.orange_toolbox": "Orange Toolbox", "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", @@ -323,6 +334,7 @@ "block.create.pink_nixie_tube": "Pink Nixie Tube", "block.create.pink_sail": "Pink Sail", "block.create.pink_seat": "Pink Seat", + "block.create.pink_toolbox": "Pink Toolbox", "block.create.pink_valve_handle": "Pink Valve Handle", "block.create.piston_extension_pole": "Piston Extension Pole", "block.create.polished_dark_scoria": "Polished Dark Scoria", @@ -358,11 +370,13 @@ "block.create.purple_nixie_tube": "Purple Nixie Tube", "block.create.purple_sail": "Purple Sail", "block.create.purple_seat": "Purple Seat", + "block.create.purple_toolbox": "Purple Toolbox", "block.create.purple_valve_handle": "Purple Valve Handle", "block.create.radial_chassis": "Radial Chassis", "block.create.red_nixie_tube": "Red Nixie Tube", "block.create.red_sail": "Red Sail", "block.create.red_seat": "Red Seat", + "block.create.red_toolbox": "Red Toolbox", "block.create.red_valve_handle": "Red Valve Handle", "block.create.redstone_contact": "Redstone Contact", "block.create.redstone_link": "Redstone Link", @@ -420,12 +434,14 @@ "block.create.white_nixie_tube": "White Nixie Tube", "block.create.white_sail": "White Sail", "block.create.white_seat": "White Seat", + "block.create.white_toolbox": "White Toolbox", "block.create.white_valve_handle": "White Valve Handle", "block.create.windmill_bearing": "Windmill Bearing", "block.create.wooden_bracket": "Wooden Bracket", "block.create.yellow_nixie_tube": "Yellow Nixie Tube", "block.create.yellow_sail": "Yellow Sail", "block.create.yellow_seat": "Yellow Seat", + "block.create.yellow_toolbox": "Yellow Toolbox", "block.create.yellow_valve_handle": "Yellow Valve Handle", "block.create.zinc_block": "Block of Zinc", "block.create.zinc_ore": "Zinc Ore", @@ -752,6 +768,7 @@ "create.recipe.assembly.repeat": "Repeat Sequence %1$s Times", "create.recipe.assembly.junk": "Random salvage", "create.recipe.processing.chance": "%1$s%% Chance", + "create.recipe.deploying.not_consumed": "Not Consumed", "create.recipe.heat_requirement.none": "No Heating Required", "create.recipe.heat_requirement.heated": "Heated", "create.recipe.heat_requirement.superheated": "Super-Heated", @@ -779,7 +796,8 @@ "create.action.saveToFile": "Save", "create.action.discard": "Discard", - "create.keyinfo.toolmenu": "Focus Tool Menu", + "create.keyinfo.toolmenu": "Focus Schematic Overlay", + "create.keyinfo.toolbelt": "Access Nearby Toolboxes", "create.keyinfo.scrollup": "Simulate Mousewheel Up (inworld)", "create.keyinfo.scrolldown": "Simulate Mousewheel Down (inworld)", @@ -790,6 +808,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "Shift to Scroll Faster", "create.gui.toolmenu.focusKey": "Hold [%1$s] to Focus", "create.gui.toolmenu.cycle": "[SCROLL] to Cycle", + + "create.toolbox.unequip": "Unequip: %1$s", + "create.toolbox.outOfRange": "Toolbox of held item not in Range", + "create.toolbox.detach": "Stop tracking and keep item", + "create.toolbox.depositAll": "Return items to nearby Toolboxes", + "create.toolbox.depositBox": "Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "Mirror", "create.gui.symmetryWand.orientation": "Orientation", @@ -1036,18 +1061,14 @@ "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.fluid_container": "can store fluids", + "create.item_attributes.fluid_container.inverted": "cannot store fluids", "create.item_attributes.enchanted": "is enchanted", "create.item_attributes.enchanted.inverted": "is unenchanted", + "create.item_attributes.max_enchanted": "is enchanted at max level", + "create.item_attributes.max_enchanted.inverted": "is not enchanted at max level", + "create.item_attributes.renamed": "has a custom name", + "create.item_attributes.renamed.inverted": "does not have a custom name", "create.item_attributes.damaged": "is damaged", "create.item_attributes.damaged.inverted": "is not damaged", "create.item_attributes.badly_damaged": "is heavily damaged", @@ -1058,23 +1079,31 @@ "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.washable": "can be Washed", + "create.item_attributes.washable.inverted": "cannot be Washed", + "create.item_attributes.crushable": "can be Crushed", + "create.item_attributes.crushable.inverted": "cannot be Crushed", + "create.item_attributes.smeltable": "can be Smelted", + "create.item_attributes.smeltable.inverted": "cannot be Smelted", + "create.item_attributes.smokable": "can be Smoked", + "create.item_attributes.smokable.inverted": "cannot be Smoked", + "create.item_attributes.blastable": "is smeltable in Blast Furnace", + "create.item_attributes.blastable.inverted": "is not smeltable in Blast Furnace", + "create.item_attributes.shulker_level": "is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "is shulker not %1$s", + "create.item_attributes.shulker_level.full": "full", + "create.item_attributes.shulker_level.empty": "empty", + "create.item_attributes.shulker_level.partial": "partially filled", "create.item_attributes.in_tag": "is tagged %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.item_attributes.shulker_level": "is shulker %1$s", - "create.item_attributes.shulker_level.inverted": "is shulker not %1$s", - "create.item_attributes.shulker_level.full": "full", - "create.item_attributes.shulker_level.empty": "empty", - "create.item_attributes.shulker_level.partial": "partially filled", "create.item_attributes.has_enchant": "is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "is not enchanted with %1$s", "create.item_attributes.color": "is dyed %1$s", "create.item_attributes.color.inverted": "is not dyed %1$s", - "create.item_attributes.max_enchanted": "is enchanted at max level", - "create.item_attributes.max_enchanted.inverted": "is not enchanted at max level", "create.item_attributes.has_fluid": "contains %1$s", "create.item_attributes.has_fluid.inverted": "does not contain %1$s", "create.item_attributes.has_name": "has the custom name %1$s", @@ -1089,14 +1118,14 @@ "create.item_attributes.book_copy_second.inverted": "is not a second-generation copy", "create.item_attributes.book_copy_tattered": "is a tattered mess", "create.item_attributes.book_copy_tattered.inverted": "is not a tattered mess", - "create.item_attributes.astralsorcery_crystal": "has crystal attribute %1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "does not have crystal attribute %1$s", - "create.item_attributes.astralsorcery_constellation": "is attuned to %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "is not attuned to %1$s", - "create.item_attributes.astralsorcery_perk_gem": "has perk attribute %1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "does not have perk attribute %1$s", "create.item_attributes.astralsorcery_amulet": "improves %1$s", "create.item_attributes.astralsorcery_amulet.inverted": "does not improve %1$s", + "create.item_attributes.astralsorcery_constellation": "is attuned to %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "is not attuned to %1$s", + "create.item_attributes.astralsorcery_crystal": "has crystal attribute %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "does not have crystal attribute %1$s", + "create.item_attributes.astralsorcery_perk_gem": "has perk attribute %1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "does not have perk attribute %1$s", "create.gui.attribute_filter.no_selected_attributes": "No attributes selected", "create.gui.attribute_filter.selected_attributes": "Selected attributes:", @@ -1393,13 +1422,26 @@ "block.create.turntable.tooltip": "TURNTABLE", "block.create.turntable.tooltip.summary": "Turns _Rotational Force_ into refined Motion Sickness.", + "block.create.toolbox.tooltip": "TOOLBOX", + "block.create.toolbox.tooltip.summary": "Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "_Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "_Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "STOCKPILE SWITCH", - "block.create.stockpile_switch.tooltip.summary": "Toggles a Redstone signal based on the amount of _Stored Items_ in the attached Container. Comes with a handy filter. As opposed to a _Comparator,_ the _Stockpile Switch_ allows configuration of _thresholds,_ at which signals are inverted.", + "block.create.stockpile_switch.tooltip.summary": "Toggles a Redstone signal based on the amount of _Stored Items_ or _Fluids_ in the attached Container. Comes with a handy filter. As opposed to a _Comparator,_ the _Stockpile Switch_ allows configuration of _thresholds,_ at which signals are inverted.", "block.create.stockpile_switch.tooltip.condition1": "When R-Clicked", "block.create.stockpile_switch.tooltip.behaviour1": "Opens the _Configuration Interface_.", "block.create.content_observer.tooltip": "CONTENT OBSERVER", - "block.create.content_observer.tooltip.summary": "_Detects Items_ inside _containers_ and _conveyors_ matching a configured _filter_. While the observed _inventory_, _belt_ or _chute contains_ a matching item, this component will emit a _Redstone Signal_. When an observed _funnel transfers_ a matching item, this component will emit a _Redstone Pulse_.", + "block.create.content_observer.tooltip.summary": "_Detects Items_ or _Fluids_ inside _containers_, _pipes_ or _conveyors_ matching a configured _filter_.", + "block.create.content_observer.tooltip.condition1": "When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "ADJUSTABLE CRATE", "block.create.adjustable_crate.tooltip.summary": "This _Item Container_ allows Manual control over its capacity. It can hold up to _16 Stacks_ of any Item. Supports _Redstone Comparators_.", 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 ce55f9519..4f99e411c 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: 1134", + "_": "Missing Localizations: 1173", "_": "->------------------------] Game Elements [------------------------<-", @@ -31,11 +31,13 @@ "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "Schwarzes Segel", "block.create.black_seat": "Schwarzer Sitz", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "Schwarzer Ventilgriff", "block.create.blaze_burner": "Lohenbrenner", "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "Blaues Segel", "block.create.blue_seat": "Blauer Sitz", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "Blauer Ventilgriff", "block.create.brass_belt_funnel": "Riementrichter aus Messing", "block.create.brass_block": "Messing Block", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "Braunes Segel", "block.create.brown_seat": "Brauner Sitz", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "block.create.brown_valve_handle": "Brauner Ventilgriff", "block.create.cart_assembler": "Lorenmonteur", "block.create.chiseled_dark_scoria": "Gemeißelte dunkle Schlacke", @@ -79,6 +82,7 @@ "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Türkises Segel", "block.create.cyan_seat": "Türkiser Sitz", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "block.create.cyan_valve_handle": "Türkiser Ventilgriff", "block.create.dark_oak_window": "Schwarzeichenholzfenster", "block.create.dark_oak_window_pane": "Schwarzeichenholzfensterscheibe", @@ -186,10 +190,12 @@ "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "Graues Segel", "block.create.gray_seat": "Grauer Sitz", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "Grauer Ventilgriff", "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "Grünes Segel", "block.create.green_seat": "Grüner Sitz", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "Grüner Ventilgriff", "block.create.hand_crank": "Handkurbel", "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "Hellblaues Segel", "block.create.light_blue_seat": "Hellblauer Sitz", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "Hellblauer Ventilgriff", "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "Hellgraues Segel", "block.create.light_gray_seat": "Hellgrauer Sitz", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "Hellgrauer Ventilgriff", "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "Hellgrünes Segel", "block.create.lime_seat": "Hellgrüner Sitz", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "Hellgrüner Ventilgriff", "block.create.limesand": "Kalksand", "block.create.limestone": "Kalkstein", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "Magenta Segel", "block.create.magenta_seat": "Magenta Sitz", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "Magenta Ventilgriff", "block.create.mechanical_arm": "Mechanischer Arm", "block.create.mechanical_bearing": "Mechanisches Lager", @@ -272,6 +282,7 @@ "block.create.oak_window_pane": "Eichenfensterscheibe", "block.create.orange_sail": "Oranges Segel", "block.create.orange_seat": "Oranger Sitz", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "block.create.orange_valve_handle": "Oranger Ventilgriff", "block.create.ornate_iron_window": "Kunstvolles Eisenfenster", "block.create.ornate_iron_window_pane": "Kunstvolle Eisenfensterscheibe", @@ -324,6 +335,7 @@ "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "Rosa Segel", "block.create.pink_seat": "Rosa Sitz", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "block.create.pink_valve_handle": "Rosa Ventilgriff", "block.create.piston_extension_pole": "Kolben-Pleuelverlängerung", "block.create.polished_dark_scoria": "Polierte Dunkle Schlacke", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "Lila Segel", "block.create.purple_seat": "Lila Sitz", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "Lila Ventilgriff", "block.create.radial_chassis": "Drehgerüst", "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "Rote Segel", "block.create.red_seat": "Roter Sitz", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "Roter Ventilgriff", "block.create.redstone_contact": "Redstone-Kontakt", "block.create.redstone_link": "Redstone-Verbindung", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "Weiße Segel", "block.create.white_seat": "Weißer Sitz", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "Weißer Ventilgriff", "block.create.windmill_bearing": "Windmühlenlager", "block.create.wooden_bracket": "Holzhalterung", "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "Gelbes Segel", "block.create.yellow_seat": "Gelber Sitz", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "Gelber Ventilgriff", "block.create.zinc_block": "Zinkblock", "block.create.zinc_ore": "Zinkerz", @@ -753,6 +769,7 @@ "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "Chance: %1$s%%", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "Keine Hitze benötigt", "create.recipe.heat_requirement.heated": "Wenig Hitze benötigt", "create.recipe.heat_requirement.superheated": "Viel Hitze benötigt", @@ -781,6 +798,7 @@ "create.action.discard": "Löschen", "create.keyinfo.toolmenu": "Werkzeugmenü", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "Simuliere Mausrad hoch (In der Welt)", "create.keyinfo.scrolldown": "Simuliere Mausrad runter (In der Welt)", @@ -791,6 +809,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "Shift zum schnelleren Auswählen", "create.gui.toolmenu.focusKey": "Halte [%1$s] zum Fokussieren", "create.gui.toolmenu.cycle": "[Mausrad] zum Wechseln", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "Spiegeln", "create.gui.symmetryWand.orientation": "Orientierung", @@ -1037,18 +1062,14 @@ "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.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "UNLOCALIZED: is enchanted", "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", + "create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level", + "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "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", @@ -1059,23 +1080,31 @@ "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.washable": "UNLOCALIZED: can be Washed", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", + "create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", + "create.item_attributes.smokable": "UNLOCALIZED: can be Smoked", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "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.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.in_tag": "UNLOCALIZED: is tagged %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.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", - "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", - "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", - "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", - "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", "create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s", - "create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level", - "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", "create.item_attributes.has_fluid": "UNLOCALIZED: contains %1$s", "create.item_attributes.has_fluid.inverted": "UNLOCALIZED: does not contain %1$s", "create.item_attributes.has_name": "UNLOCALIZED: has the custom name %1$s", @@ -1090,14 +1119,14 @@ "create.item_attributes.book_copy_second.inverted": "UNLOCALIZED: is not a second-generation copy", "create.item_attributes.book_copy_tattered": "UNLOCALIZED: is a tattered mess", "create.item_attributes.book_copy_tattered.inverted": "UNLOCALIZED: is not a tattered mess", - "create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s", - "create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s", - "create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s", "create.item_attributes.astralsorcery_amulet": "UNLOCALIZED: improves %1$s", "create.item_attributes.astralsorcery_amulet.inverted": "UNLOCALIZED: does not improve %1$s", + "create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s", + "create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s", + "create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s", "create.gui.attribute_filter.no_selected_attributes": "Keine Attribute ausgewählt", "create.gui.attribute_filter.selected_attributes": "Ausgewählte Attribute:", @@ -1394,13 +1423,26 @@ "block.create.turntable.tooltip": "DREHTISCH", "block.create.turntable.tooltip.summary": "Wandelt _Rotationsenergie_ in starkes Schwindelgefühl um.", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "VORRATSSENSOR", "block.create.stockpile_switch.tooltip.summary": "Schaltet ein Redstone-Signal ein oder aus, basierend auf der _Speichermenge_ im verbundenen Behälter.", "block.create.stockpile_switch.tooltip.condition1": "Wenn unter dem unteren Limit", "block.create.stockpile_switch.tooltip.behaviour1": "Wird das Redstone-Signal ausgeschaltet.", "block.create.content_observer.tooltip": "UNLOCALIZED: CONTENT OBSERVER", - "block.create.content_observer.tooltip.summary": "UNLOCALIZED: _Detects Items_ inside _containers_ and _conveyors_ matching a configured _filter_. While the observed _inventory_, _belt_ or _chute contains_ a matching item, this component will emit a _Redstone Signal_. When an observed _funnel transfers_ a matching item, this component will emit a _Redstone Pulse_.", + "block.create.content_observer.tooltip.summary": "UNLOCALIZED: _Detects Items_ or _Fluids_ inside _containers_, _pipes_ or _conveyors_ matching a configured _filter_.", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "LAGERRAUM", "block.create.adjustable_crate.tooltip.summary": "Dieser _Speicherbehälter_ erlaubt manuelle Kontrolle über seine Kapazität. Er kann bis zu _16_ _Stacks_ von jeglichem Gegenstand beinhalten.", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index 79a683627..183c73ff2 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 0", + "_": "Missing Localizations: 39", "_": "->------------------------] Game Elements [------------------------<-", @@ -31,11 +31,13 @@ "block.create.black_nixie_tube": "Tubo Nixie negro", "block.create.black_sail": "Vela negra", "block.create.black_seat": "Asiento negro", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "Asa de válvula negra", "block.create.blaze_burner": "Quemador de Blaze", "block.create.blue_nixie_tube": "Tubo Nixie azul", "block.create.blue_sail": "Vela azul", "block.create.blue_seat": "Asiento azul", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "Asa de válvula azul", "block.create.brass_belt_funnel": "Embudo de cinta de latón", "block.create.brass_block": "Bloque de latón", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "Tubo Nixie marrón", "block.create.brown_sail": "Vela marrón", "block.create.brown_seat": "Asiento marrón", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "block.create.brown_valve_handle": "Asa de válvula marrón", "block.create.cart_assembler": "Ensamblador de vagonetas", "block.create.chiseled_dark_scoria": "Escoria oscura cincelada", @@ -79,6 +82,7 @@ "block.create.cyan_nixie_tube": "Tubo Nixie cian", "block.create.cyan_sail": "Vela cian", "block.create.cyan_seat": "Asiento cian", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "block.create.cyan_valve_handle": "Asa de válvula cian", "block.create.dark_oak_window": "Ventana de roble oscuro", "block.create.dark_oak_window_pane": "Panel de ventana de roble oscuro", @@ -186,10 +190,12 @@ "block.create.gray_nixie_tube": "Tubo Nixie gris", "block.create.gray_sail": "Vela gris", "block.create.gray_seat": "Asiento gris", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "Asa de válvula gris", "block.create.green_nixie_tube": "Tubo Nixie verde", "block.create.green_sail": "Vela verde", "block.create.green_seat": "Asiento verde", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "Asa de válvula verde", "block.create.hand_crank": "Manivela", "block.create.haunted_bell": "Campana encantada", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "Tubo Nixie azul claro", "block.create.light_blue_sail": "Vela azul claro", "block.create.light_blue_seat": "Asiento azul claro", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "Asa de válvula azul claro", "block.create.light_gray_nixie_tube": "Tubo Nixie gris claro", "block.create.light_gray_sail": "Vela gris claro", "block.create.light_gray_seat": "Asiento gris claro", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "Asa de válvula gris claro", "block.create.lime_nixie_tube": "Tubo Nixie lima", "block.create.lime_sail": "Vela lima", "block.create.lime_seat": "Asiento lima", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "Asa de válvula lima", "block.create.limesand": "Arena caliza", "block.create.limestone": "Piedra caliza", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "Tubo Nixie magenta", "block.create.magenta_sail": "Vela magenta", "block.create.magenta_seat": "Asiento magenta", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "Asa de válvula magenta", "block.create.mechanical_arm": "Brazo mecánico", "block.create.mechanical_bearing": "Rodamiento mecánico", @@ -272,6 +282,7 @@ "block.create.oak_window_pane": "Panel de ventana de roble", "block.create.orange_sail": "Vela naranja", "block.create.orange_seat": "Asiento naranja", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "block.create.orange_valve_handle": "Asa de válvula naranja", "block.create.ornate_iron_window": "Ventana de hierro ornamentada", "block.create.ornate_iron_window_pane": "Panel de ventana de hierro ornamentada", @@ -324,6 +335,7 @@ "block.create.pink_nixie_tube": "Tubo Nixie rosa", "block.create.pink_sail": "Vela rosa", "block.create.pink_seat": "Asiento rosa", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "block.create.pink_valve_handle": "Asa de válvula rosa", "block.create.piston_extension_pole": "Pértiga de extensión de pistón", "block.create.polished_dark_scoria": "Escoria oscura pulida", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "Tubo Nixie morado", "block.create.purple_sail": "Vela morada", "block.create.purple_seat": "Asiento morado", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "Asa de válvula morada", "block.create.radial_chassis": "Chasis radial", "block.create.red_nixie_tube": "Tubo Nixie rojo", "block.create.red_sail": "Vela roja", "block.create.red_seat": "Asiento rojo", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "Asa de válvula roja", "block.create.redstone_contact": "Contacto de redstone", "block.create.redstone_link": "Enlace de redstone", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "Tubo Nixie blanco", "block.create.white_sail": "Vela blanca", "block.create.white_seat": "Asiento blanco", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "Asa de válvula blanco", "block.create.windmill_bearing": "Rodamiento del molino de viento", "block.create.wooden_bracket": "Soporte de madera para ejes", "block.create.yellow_nixie_tube": "Tubo Nixie amarillo", "block.create.yellow_sail": "Vela amarilla", "block.create.yellow_seat": "Asiento amarillo", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "Asa de válvula amarillo", "block.create.zinc_block": "Bloque de zinc", "block.create.zinc_ore": "Mena de zinc", @@ -753,6 +769,7 @@ "create.recipe.assembly.repeat": "Repetir la secuencia %1$s veces", "create.recipe.assembly.junk": "Basura aleatoria", "create.recipe.processing.chance": "%1$s%% Chance", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "No es necesario calentar", "create.recipe.heat_requirement.heated": "Calentado", "create.recipe.heat_requirement.superheated": "Súper-Calentado", @@ -781,6 +798,7 @@ "create.action.discard": "Descartar", "create.keyinfo.toolmenu": "Menú de la Herramienta de Enfoque", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "Simular usar la rueda del ratón hacia arriba (en el mundo)", "create.keyinfo.scrolldown": "Simular usar la rueda del ratón hacia abajo (en el mundo)", @@ -791,6 +809,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "Mayús izdo para usar la rueda del ratón más rápido", "create.gui.toolmenu.focusKey": "Mantén [%1$s] para enfocar", "create.gui.toolmenu.cycle": "[RUEDA DEL RATÓN] para el ciclo", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "Espejado", "create.gui.symmetryWand.orientation": "Orientación", @@ -1037,18 +1062,14 @@ "create.item_attributes.placeable.inverted": "no se puede colocar", "create.item_attributes.consumable": "se puede comer", "create.item_attributes.consumable.inverted": "no se puede comer", - "create.item_attributes.smeltable": "se puede fundir", - "create.item_attributes.smeltable.inverted": "no se puede fundir", - "create.item_attributes.washable": "se puede lavar", - "create.item_attributes.washable.inverted": "no se puede lavar", - "create.item_attributes.smokable": "puede ser ahumado", - "create.item_attributes.smokable.inverted": "no puede ser ahumado", - "create.item_attributes.crushable": "puede ser molido", - "create.item_attributes.crushable.inverted": "no puede ser molido", - "create.item_attributes.blastable": "es fundible en el alto horno", - "create.item_attributes.blastable.inverted": "no es fundible en el alto horno", + "create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "está encantado", "create.item_attributes.enchanted.inverted": "no está encantado", + "create.item_attributes.max_enchanted": "está encantado en el nivel máximo", + "create.item_attributes.max_enchanted.inverted": "no está encantado en el nivel máximo", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "create.item_attributes.damaged": "está dañado", "create.item_attributes.damaged.inverted": "no está dañado", "create.item_attributes.badly_damaged": "está muy dañado", @@ -1059,23 +1080,31 @@ "create.item_attributes.equipable.inverted": "no se puede equipar", "create.item_attributes.furnace_fuel": "es combustible para hornos", "create.item_attributes.furnace_fuel.inverted": "no es combustible para hornos", + "create.item_attributes.washable": "se puede lavar", + "create.item_attributes.washable.inverted": "no se puede lavar", + "create.item_attributes.crushable": "puede ser molido", + "create.item_attributes.crushable.inverted": "no puede ser molido", + "create.item_attributes.smeltable": "se puede fundir", + "create.item_attributes.smeltable.inverted": "no se puede fundir", + "create.item_attributes.smokable": "puede ser ahumado", + "create.item_attributes.smokable.inverted": "no puede ser ahumado", + "create.item_attributes.blastable": "es fundible en el alto horno", + "create.item_attributes.blastable.inverted": "no es fundible en el alto horno", + "create.item_attributes.shulker_level": "es shulker %1$s", + "create.item_attributes.shulker_level.inverted": "no es shulker %1$s", + "create.item_attributes.shulker_level.full": "lleno", + "create.item_attributes.shulker_level.empty": "vacío", + "create.item_attributes.shulker_level.partial": "parcialmente lleno", "create.item_attributes.in_tag": "está etiquetado %1$s", "create.item_attributes.in_tag.inverted": "no está etiquetado %1$s", "create.item_attributes.in_item_group": "está en el grupo '%1$s'", "create.item_attributes.in_item_group.inverted": "no está en el grupo '%1$s'", "create.item_attributes.added_by": "fue añadido por %1$s", "create.item_attributes.added_by.inverted": "no fue añadida por %1$s", - "create.item_attributes.shulker_level": "es shulker %1$s", - "create.item_attributes.shulker_level.inverted": "no es shulker %1$s", - "create.item_attributes.shulker_level.full": "lleno", - "create.item_attributes.shulker_level.empty": "vacío", - "create.item_attributes.shulker_level.partial": "parcialmente lleno", "create.item_attributes.has_enchant": "está encantado con %1$s", "create.item_attributes.has_enchant.inverted": "no está encantado con %1$s", "create.item_attributes.color": "Está teñido %1$s", "create.item_attributes.color.inverted": "No está teñido %1$s", - "create.item_attributes.max_enchanted": "está encantado en el nivel máximo", - "create.item_attributes.max_enchanted.inverted": "no está encantado en el nivel máximo", "create.item_attributes.has_fluid": "contiene %1$s", "create.item_attributes.has_fluid.inverted": "no contiene %1$s", "create.item_attributes.has_name": "tiene el nombre personalizado %1$s", @@ -1090,14 +1119,14 @@ "create.item_attributes.book_copy_second.inverted": "no es una copia de segunda generación", "create.item_attributes.book_copy_tattered": "es un desordenado desastre", "create.item_attributes.book_copy_tattered.inverted": "no es un desordenado desastre", - "create.item_attributes.astralsorcery_crystal": "tiene el atributo de cristal %1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "no tiene atributo de cristal %1$s", - "create.item_attributes.astralsorcery_constellation": "está en sintonía con %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "no está en sintonía con %1$s", - "create.item_attributes.astralsorcery_perk_gem": "tiene el atributo ventaja %1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "no tiene el atributo ventaja %1$s", "create.item_attributes.astralsorcery_amulet": "mejora %1$s", "create.item_attributes.astralsorcery_amulet.inverted": "no mejora %1$s", + "create.item_attributes.astralsorcery_constellation": "está en sintonía con %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "no está en sintonía con %1$s", + "create.item_attributes.astralsorcery_crystal": "tiene el atributo de cristal %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "no tiene atributo de cristal %1$s", + "create.item_attributes.astralsorcery_perk_gem": "tiene el atributo ventaja %1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "no tiene el atributo ventaja %1$s", "create.gui.attribute_filter.no_selected_attributes": "No hay atributos seleccionados", "create.gui.attribute_filter.selected_attributes": "Atributos seleccionados:", @@ -1394,6 +1423,15 @@ "block.create.turntable.tooltip": "PLATAFORMA GIRATORIA", "block.create.turntable.tooltip.summary": "Convierte la _fuerza rotacional_ en un refinado mareo.", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "INTERRUPTOR DE ACOPIO", "block.create.stockpile_switch.tooltip.summary": "Activa una señal de redstone en función de la cantidad de _objetos almacenados_ en el _contenedor_ adjunto. Viene con un práctico filtro. A diferencia de un _comparador, el _interruptor de acopio_ permite la configuración de _umbrales_, a partir de los cuales se invierten las señales.", "block.create.stockpile_switch.tooltip.condition1": "Cuando se hace clic derecho", @@ -1401,6 +1439,10 @@ "block.create.content_observer.tooltip": "OBSERVADOR DE CONTENIDO", "block.create.content_observer.tooltip.summary": "_Detecta objetos_ dentro de _contenedores_ y _transportadores_ que coincidan con un _filtro_ configurado. Mientras el _inventario_, la _cinta_ o la _canaleta_ observados _contengan_ un objeto que coincida, este componente emitirá una _señal de redstone_. Cuando un embudo observado _transfiere_ un objeto coincidente, este componente emitirá un _pulso de redstone_.", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "CAJA AJUSTABLE", "block.create.adjustable_crate.tooltip.summary": "Este _contenedor de objetos_ permite el control manual de su capacidad. Puede contener hasta _16 pilas_ de cualquier objeto. Soporta _comparadores de redstone_.", 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 2e0c26dd4..edd754860 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: 1386", + "_": "Missing Localizations: 1425", "_": "->------------------------] Game Elements [------------------------<-", @@ -31,11 +31,13 @@ "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "Voile noire", "block.create.black_seat": "Siège noir", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "Vanne noire", "block.create.blaze_burner": "Brûleur à blaze", "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "Voile bleue", "block.create.blue_seat": "Siège bleu", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "Vanne bleue", "block.create.brass_belt_funnel": "Entonnoir en laiton pour tapis roulant", "block.create.brass_block": "Bloc de laiton", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "Voile brune", "block.create.brown_seat": "Siège brun", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "block.create.brown_valve_handle": "Vanne brune", "block.create.cart_assembler": "Assembleur de wagon", "block.create.chiseled_dark_scoria": "Scoria sombre taillé", @@ -79,6 +82,7 @@ "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Voile cyan", "block.create.cyan_seat": "Siège cyan", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "block.create.cyan_valve_handle": "Vanne cyan", "block.create.dark_oak_window": "fenêtre en chêne sombre", "block.create.dark_oak_window_pane": "Vitre en chêne sombre", @@ -186,10 +190,12 @@ "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "UNLOCALIZED: Gray Sail", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "UNLOCALIZED: Green Sail", "block.create.green_seat": "UNLOCALIZED: Green Seat", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "Manivelle", "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "UNLOCALIZED: Light Blue Sail", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "UNLOCALIZED: Light Gray Sail", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "UNLOCALIZED: Lime Sail", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", "block.create.limesand": "Chaux", "block.create.limestone": "Calcaire", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "UNLOCALIZED: Magenta Sail", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Roulement mécanique", @@ -272,6 +282,7 @@ "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", "block.create.orange_sail": "UNLOCALIZED: Orange Sail", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "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", @@ -324,6 +335,7 @@ "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "UNLOCALIZED: Pink Sail", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", "block.create.piston_extension_pole": "Barre d'extension de piston", "block.create.polished_dark_scoria": "Scorie sombre polie", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "UNLOCALIZED: Purple Sail", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", "block.create.radial_chassis": "Châssis radial", "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "UNLOCALIZED: Red Sail", "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", "block.create.redstone_contact": "Contact de redstone", "block.create.redstone_link": "Liaison Redstone", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "UNLOCALIZED: White Sail", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing", "block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket", "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "UNLOCALIZED: Yellow Sail", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", "block.create.zinc_block": "Bloc de zinc", "block.create.zinc_ore": "Minerai de zinc", @@ -753,6 +769,7 @@ "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%% de chance", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "Pas de chauffage requis", "create.recipe.heat_requirement.heated": "Chauffé", "create.recipe.heat_requirement.superheated": "Surchauffé", @@ -781,6 +798,7 @@ "create.action.discard": "Annuler", "create.keyinfo.toolmenu": "Focus sur le menu de l'outil", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "UNLOCALIZED: Simulate Mousewheel Up (inworld)", "create.keyinfo.scrolldown": "UNLOCALIZED: Simulate Mousewheel Down (inworld)", @@ -791,6 +809,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "Maj pour défiler plus rapidement", "create.gui.toolmenu.focusKey": "Enfoncez [%1$s] pour focus", "create.gui.toolmenu.cycle": "[SCROLL] pour cycler", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "Mirroir", "create.gui.symmetryWand.orientation": "Orientation", @@ -1037,18 +1062,14 @@ "create.item_attributes.placeable.inverted": "n'est pas plaçable", "create.item_attributes.consumable": "peut être mangé", "create.item_attributes.consumable.inverted": "ne peut pas être mangé", - "create.item_attributes.smeltable": "peut être fondu", - "create.item_attributes.smeltable.inverted": "ne peut pas être fondu", - "create.item_attributes.washable": "peut être lavé", - "create.item_attributes.washable.inverted": "ne peut pas être lavé", - "create.item_attributes.smokable": "peut être fumé", - "create.item_attributes.smokable.inverted": "ne peut pas être fumé", - "create.item_attributes.crushable": "peut être concassé", - "create.item_attributes.crushable.inverted": "ne peut pas être concassé", - "create.item_attributes.blastable": "est fondable dans un Haut fourneau", - "create.item_attributes.blastable.inverted": "n'est pas fondable dans un Haut fourneau", + "create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "est enchanté", "create.item_attributes.enchanted.inverted": "n'est pas enchanté", + "create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level", + "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "create.item_attributes.damaged": "est endommagé", "create.item_attributes.damaged.inverted": "n'est pas endomagé", "create.item_attributes.badly_damaged": "est fortement damaged", @@ -1059,23 +1080,31 @@ "create.item_attributes.equipable.inverted": "ne peut pas être équipé", "create.item_attributes.furnace_fuel": "est du combustible", "create.item_attributes.furnace_fuel.inverted": "n'est pas un combustible", + "create.item_attributes.washable": "peut être lavé", + "create.item_attributes.washable.inverted": "ne peut pas être lavé", + "create.item_attributes.crushable": "peut être concassé", + "create.item_attributes.crushable.inverted": "ne peut pas être concassé", + "create.item_attributes.smeltable": "peut être fondu", + "create.item_attributes.smeltable.inverted": "ne peut pas être fondu", + "create.item_attributes.smokable": "peut être fumé", + "create.item_attributes.smokable.inverted": "ne peut pas être fumé", + "create.item_attributes.blastable": "est fondable dans un Haut fourneau", + "create.item_attributes.blastable.inverted": "n'est pas fondable dans un Haut fourneau", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.in_tag": "est étiqueté %1$s", "create.item_attributes.in_tag.inverted": "n'est pas étiqueté", "create.item_attributes.in_item_group": "appartient à %1$s", "create.item_attributes.in_item_group.inverted": "n'appartient pas à %1$s'", "create.item_attributes.added_by": "a été ajouté par %1$s", "create.item_attributes.added_by.inverted": "n'a pas été ajouté par %1$s", - "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", - "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", - "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", - "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", - "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "est enchanté %1$s", "create.item_attributes.has_enchant.inverted": "n'est pas enchenté %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", "create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s", - "create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level", - "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", "create.item_attributes.has_fluid": "contient %1$s", "create.item_attributes.has_fluid.inverted": "ne contient pas %1$s", "create.item_attributes.has_name": "est renommé %1$s", @@ -1090,14 +1119,14 @@ "create.item_attributes.book_copy_second.inverted": "UNLOCALIZED: is not a second-generation copy", "create.item_attributes.book_copy_tattered": "UNLOCALIZED: is a tattered mess", "create.item_attributes.book_copy_tattered.inverted": "UNLOCALIZED: is not a tattered mess", - "create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s", - "create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s", - "create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s", "create.item_attributes.astralsorcery_amulet": "UNLOCALIZED: improves %1$s", "create.item_attributes.astralsorcery_amulet.inverted": "UNLOCALIZED: does not improve %1$s", + "create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s", + "create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s", + "create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s", "create.gui.attribute_filter.no_selected_attributes": "Aucun attribut sélectionné", "create.gui.attribute_filter.selected_attributes": "Attributs sélectionnés:", @@ -1394,6 +1423,15 @@ "block.create.turntable.tooltip": "PLAQUE TOURNANTE", "block.create.turntable.tooltip.summary": "Transforme la _force_ _de_ _rotation_ en énergie cinétique.", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "DÉTÉCTEUR DE STOCKAGE", "block.create.stockpile_switch.tooltip.summary": "Bascule un signal Redstone basé sur _l'espace_ _de_ _stockage_ dans le conteneur attaché.", "block.create.stockpile_switch.tooltip.condition1": "Lorsqu'en dessous de la limite de stockage minimum", @@ -1401,6 +1439,10 @@ "block.create.content_observer.tooltip": "OBSERVATEUR DE CONTENU", "block.create.content_observer.tooltip.summary": "_Détecte les objets_ à l'intérieur des _conteneurs_ et des _transporteurs_ correspondant à un _filtre_ configuré. Tant que l'_inventaire_, le _tapis roulant_ ou la _glissière_ observé _contient_ un objet correspondant, ce composant émet un _signal de redstone_. Quand un _entonnoir_ observé _transfère_ un objet correspondant, ce composant émet une _impulsion de redstone_.", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "CAISSE AJUSTABLE", "block.create.adjustable_crate.tooltip.summary": "Ce _conteneur_ _de_ _stockage_ permet un contrôle manuel de sa capacité. Il peut contenir jusqu'à _16_ _piles_ de n'importe quel objet. Prend en charge les _comparateurs_ _de_ _redstone_.", 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 8108827f1..bdc4e385a 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: 914", + "_": "Missing Localizations: 953", "_": "->------------------------] Game Elements [------------------------<-", @@ -31,11 +31,13 @@ "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "Vela nera", "block.create.black_seat": "Sedile nero", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "Maniglia per valvola nera", "block.create.blaze_burner": "Inceneritore di blaze", "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "Vela blu", "block.create.blue_seat": "Sedile blu", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "Maniglia per valvola blu", "block.create.brass_belt_funnel": "Imbuto per nastro di ottone", "block.create.brass_block": "Blocco di ottone", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "Vela marrone", "block.create.brown_seat": "Sedile marrone", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "block.create.brown_valve_handle": "Maniglia per valvola marrone", "block.create.cart_assembler": "Assemblatore di carrelli da miniera", "block.create.chiseled_dark_scoria": "Scoria scura cesellata", @@ -79,6 +82,7 @@ "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Vela ciano", "block.create.cyan_seat": "Sedile ciano", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "block.create.cyan_valve_handle": "Maniglia per valvola ciano", "block.create.dark_oak_window": "Finestra di quercia scura", "block.create.dark_oak_window_pane": "Pannello di finestra di quercia scura", @@ -186,10 +190,12 @@ "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "Vela grigia", "block.create.gray_seat": "Sedile grigio", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "Maniglia per valvola grigia", "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "Vela verde", "block.create.green_seat": "Sedile verde", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "Maniglia per valvola verde", "block.create.hand_crank": "Manovella", "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "Vela azzurra", "block.create.light_blue_seat": "Sedile azzurro", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "Maniglia per valvola azzurra", "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "Vela grigio chiaro", "block.create.light_gray_seat": "Sedile grigio chiaro", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "Maniglia per valvola grigio chiaro", "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "Vela lime", "block.create.lime_seat": "Sedile lime", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "Maniglia per valvola lime", "block.create.limesand": "Arenaria calcarea", "block.create.limestone": "Calcare", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "Vela magenta", "block.create.magenta_seat": "Sedile magenta", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "Maniglia per valvola magenta", "block.create.mechanical_arm": "Braccio meccanico", "block.create.mechanical_bearing": "Supporto meccanico", @@ -272,6 +282,7 @@ "block.create.oak_window_pane": "Pannello di finestra di quercia", "block.create.orange_sail": "Vela arancione", "block.create.orange_seat": "Sedile arancione", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "block.create.orange_valve_handle": "Maniglia per valvola arancione", "block.create.ornate_iron_window": "Finestra di ferro ornata", "block.create.ornate_iron_window_pane": "Pannello di finestra di ferro ornata", @@ -324,6 +335,7 @@ "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "Vela rosa", "block.create.pink_seat": "Sedile rosa", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "block.create.pink_valve_handle": "Maniglia per valvola rosa", "block.create.piston_extension_pole": "Palo di pistone", "block.create.polished_dark_scoria": "Scoria scura levigata", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "Vela viola", "block.create.purple_seat": "Sedile viola", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "Maniglia per valvola viola", "block.create.radial_chassis": "Telaio radiale", "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "Vela rossa", "block.create.red_seat": "Sedile rosso", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "Maniglia per valvola rossa", "block.create.redstone_contact": "Contatto redstone", "block.create.redstone_link": "Collegamento redstone", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "Vela bianca", "block.create.white_seat": "Sedile bianco", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "Maniglia per valvola bianca", "block.create.windmill_bearing": "Supporto per mulino a vento", "block.create.wooden_bracket": "Supporto di legno", "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "Vela gialla", "block.create.yellow_seat": "Sedile giallo", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "Maniglia per valvola gialla", "block.create.zinc_block": "Blocco di zinco", "block.create.zinc_ore": "Zinco grezzo", @@ -753,6 +769,7 @@ "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%% di probabilità", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "Nessun riscaldamento", "create.recipe.heat_requirement.heated": "Riscaldamento", "create.recipe.heat_requirement.superheated": "Super riscaldamento", @@ -781,6 +798,7 @@ "create.action.discard": "Scarta", "create.keyinfo.toolmenu": "Focalizzazione sul menù degli strumenti", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "Simula rotellina del mouse verso su (nel mondo)", "create.keyinfo.scrolldown": "Simula rotellina del mouse verso giù (nel mondo)", @@ -791,6 +809,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "Premi shift per scorrere più velocemente", "create.gui.toolmenu.focusKey": "Premi [%1$s] per aprire il menù", "create.gui.toolmenu.cycle": "[SCORRI] per navigare", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "Specchio", "create.gui.symmetryWand.orientation": "Orientamento", @@ -1037,18 +1062,14 @@ "create.item_attributes.placeable.inverted": "non è posizionabile", "create.item_attributes.consumable": "è commestibile", "create.item_attributes.consumable.inverted": "non è commestibile", - "create.item_attributes.smeltable": "può essere fuso", - "create.item_attributes.smeltable.inverted": "non può essere fuso", - "create.item_attributes.washable": "può essere lavato", - "create.item_attributes.washable.inverted": "non può essere lavato", - "create.item_attributes.smokable": "può essere affumicato", - "create.item_attributes.smokable.inverted": "non può essere affumicato", - "create.item_attributes.crushable": "può essere frantumato", - "create.item_attributes.crushable.inverted": "non può essere frantumato", - "create.item_attributes.blastable": "è fondibile in un forno fusorio", - "create.item_attributes.blastable.inverted": "non è fondibile in un forno fusorio", + "create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "è incantato", "create.item_attributes.enchanted.inverted": "non è incantato", + "create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level", + "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "create.item_attributes.damaged": "è danneggiato", "create.item_attributes.damaged.inverted": "non è danneggiato", "create.item_attributes.badly_damaged": "è gravemente danneggiato", @@ -1059,23 +1080,31 @@ "create.item_attributes.equipable.inverted": "non può essere equipaggiato", "create.item_attributes.furnace_fuel": "è un combustibile per fornace", "create.item_attributes.furnace_fuel.inverted": "non è un combustibile per fornace", + "create.item_attributes.washable": "può essere lavato", + "create.item_attributes.washable.inverted": "non può essere lavato", + "create.item_attributes.crushable": "può essere frantumato", + "create.item_attributes.crushable.inverted": "non può essere frantumato", + "create.item_attributes.smeltable": "può essere fuso", + "create.item_attributes.smeltable.inverted": "non può essere fuso", + "create.item_attributes.smokable": "può essere affumicato", + "create.item_attributes.smokable.inverted": "non può essere affumicato", + "create.item_attributes.blastable": "è fondibile in un forno fusorio", + "create.item_attributes.blastable.inverted": "non è fondibile in un forno fusorio", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.in_tag": "è etichettato %1$s", "create.item_attributes.in_tag.inverted": "non è etichettato %1$s", "create.item_attributes.in_item_group": "appartiene a %1$s", "create.item_attributes.in_item_group.inverted": "non appartiene a '%1$s'", "create.item_attributes.added_by": "è stato aggiunto da %1$s", "create.item_attributes.added_by.inverted": "non è stato aggiunto da %1$s", - "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", - "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", - "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", - "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", - "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "è stato incantato con %1$s", "create.item_attributes.has_enchant.inverted": "non è stato incantato con %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", "create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s", - "create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level", - "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", "create.item_attributes.has_fluid": "contiene %1$s", "create.item_attributes.has_fluid.inverted": "non contiene %1$s", "create.item_attributes.has_name": "è stato rinominato in %1$s", @@ -1090,14 +1119,14 @@ "create.item_attributes.book_copy_second.inverted": "non è una copia di seconda generazione", "create.item_attributes.book_copy_tattered": "è in condizioni precarie", "create.item_attributes.book_copy_tattered.inverted": "non è in condizioni precarie", - "create.item_attributes.astralsorcery_crystal": "ha l'attributo del cristallo %1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "non ha l'attributo del cristallo %1$s", - "create.item_attributes.astralsorcery_constellation": "è in sintonia con %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "non è in sintonia con %1$s", - "create.item_attributes.astralsorcery_perk_gem": "ha l'attributo benefico %1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "non ha l'attributo benefico %1$s", "create.item_attributes.astralsorcery_amulet": "migliora %1$s", "create.item_attributes.astralsorcery_amulet.inverted": "non migliora %1$s", + "create.item_attributes.astralsorcery_constellation": "è in sintonia con %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "non è in sintonia con %1$s", + "create.item_attributes.astralsorcery_crystal": "ha l'attributo del cristallo %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "non ha l'attributo del cristallo %1$s", + "create.item_attributes.astralsorcery_perk_gem": "ha l'attributo benefico %1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "non ha l'attributo benefico %1$s", "create.gui.attribute_filter.no_selected_attributes": "Nessun attributo selezionato", "create.gui.attribute_filter.selected_attributes": "Attributi selezionati:", @@ -1394,6 +1423,15 @@ "block.create.turntable.tooltip": "PIATTO", "block.create.turntable.tooltip.summary": "Assorbe la _forza_ _di_ _rotazione_, girando.", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "INTERRUTTORE ACCUMULATORE", "block.create.stockpile_switch.tooltip.summary": "Attiva/disattiva un segnale redstone in base allo _spazio_ _di_ _stoccaggio_ nel contenitore collegato.", "block.create.stockpile_switch.tooltip.condition1": "Quando inferiore al limite inferiore", @@ -1401,6 +1439,10 @@ "block.create.content_observer.tooltip": "OSSERVATORE DEI CONTENUTI", "block.create.content_observer.tooltip.summary": "_Rileva oggetti_ dentro i _contenitori_ ed i _nastri_ corrispondenti ad un _filtro_. Quando l'_inventario_ del blocco, _nastro_ or _scivolo_ contiene un oggetto corrispondente, questo componente emetterà un _segnale redstone_. Quando un _imbuto_ osservato _trasferisce_ un oggetto corrispondente, questo componente emetterà un _segnale redstone_ temporaneo.", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "BAULE REGOLABILE", "block.create.adjustable_crate.tooltip.summary": "Questo _contenitore_ _di_ _stoccaggio_ consente il controllo manuale sulla sua capacità. Può contenere fino a _16_ _pile_ di qualsiasi oggetto. Supporta _comparatori_ _redstone_.", 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 5650fe7dd..ef0ca16be 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: 9", + "_": "Missing Localizations: 48", "_": "->------------------------] Game Elements [------------------------<-", @@ -31,11 +31,13 @@ "block.create.black_nixie_tube": "黒色のニキシー管", "block.create.black_sail": "黒色の帆", "block.create.black_seat": "黒色のシート", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "黒色のバルブハンドル", "block.create.blaze_burner": "ブレイズバーナー", "block.create.blue_nixie_tube": "青色のニキシー管", "block.create.blue_sail": "青色の帆", "block.create.blue_seat": "青色のシート", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "青色のバルブハンドル", "block.create.brass_belt_funnel": "真鍮のベルトファンネル", "block.create.brass_block": "真鍮ブロック", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "茶色のニキシー管", "block.create.brown_sail": "茶色の帆", "block.create.brown_seat": "茶色のシート", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "block.create.brown_valve_handle": "茶色のバルブハンドル", "block.create.cart_assembler": "トロッコアセンブラ", "block.create.chiseled_dark_scoria": "模様入りのダークスコリア", @@ -79,6 +82,7 @@ "block.create.cyan_nixie_tube": "水色のニキシー管", "block.create.cyan_sail": "水色の帆", "block.create.cyan_seat": "水色のシート", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "block.create.cyan_valve_handle": "水色のバルブハンドル", "block.create.dark_oak_window": "ダークオークの窓", "block.create.dark_oak_window_pane": "ダークオークの窓板", @@ -186,10 +190,12 @@ "block.create.gray_nixie_tube": "灰色のニキシー管", "block.create.gray_sail": "灰色の帆", "block.create.gray_seat": "灰色のシート", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "灰色のバルブハンドル", "block.create.green_nixie_tube": "緑色のニキシー管", "block.create.green_sail": "緑色の帆", "block.create.green_seat": "緑色のシート", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "緑色のバルブハンドル", "block.create.hand_crank": "ハンドクランク", "block.create.haunted_bell": "憑りつかれた鐘", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "空色のニキシー菅", "block.create.light_blue_sail": "空色の帆", "block.create.light_blue_seat": "空色のシート", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "空色のバルブハンドル", "block.create.light_gray_nixie_tube": "薄灰色のニキシー管", "block.create.light_gray_sail": "薄灰色の帆", "block.create.light_gray_seat": "薄灰色のシート", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "薄灰色のバルブハンドル", "block.create.lime_nixie_tube": "黄緑色のニキシー管", "block.create.lime_sail": "黄緑色の帆", "block.create.lime_seat": "黄緑色のシート", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "黄緑色のバルブハンドル", "block.create.limesand": "石灰砕砂", "block.create.limestone": "石灰岩", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "赤紫色のニキシー管", "block.create.magenta_sail": "赤紫色の帆", "block.create.magenta_seat": "赤紫色のシート", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "赤紫色のバルブハンドル", "block.create.mechanical_arm": "メカニカルアーム", "block.create.mechanical_bearing": "メカニカルベアリング", @@ -272,6 +282,7 @@ "block.create.oak_window_pane": "オークの窓板", "block.create.orange_sail": "橙色の帆", "block.create.orange_seat": "橙色のシート", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "block.create.orange_valve_handle": "橙色のバルブハンドル", "block.create.ornate_iron_window": "鉄の装飾ガラス", "block.create.ornate_iron_window_pane": "鉄の装飾ガラス板", @@ -324,6 +335,7 @@ "block.create.pink_nixie_tube": "桃色のニキシー管", "block.create.pink_sail": "桃色の帆", "block.create.pink_seat": "桃色のシート", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "block.create.pink_valve_handle": "桃色のバルブハンドル", "block.create.piston_extension_pole": "ピストン延長ポール", "block.create.polished_dark_scoria": "磨かれたダークスコリア", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "紫色のニキシー管", "block.create.purple_sail": "紫色の帆", "block.create.purple_seat": "紫色のシート", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "紫色のバルブハンドル", "block.create.radial_chassis": "ラジアルシャーシ", "block.create.red_nixie_tube": "赤色のニキシー管", "block.create.red_sail": "赤色の帆", "block.create.red_seat": "赤色のシート", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "赤色のバルブハンドル", "block.create.redstone_contact": "レッドストーンコンタクト", "block.create.redstone_link": "レッドストーンリンク", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "白色のニキシー管", "block.create.white_sail": "白色の帆", "block.create.white_seat": "白色のシート", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "白色のバルブハンドル", "block.create.windmill_bearing": "風車ベアリング", "block.create.wooden_bracket": "木製ブラケット", "block.create.yellow_nixie_tube": "黄色のニキシー管", "block.create.yellow_sail": "黄色の帆", "block.create.yellow_seat": "黄色のシート", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "黄色のバルブハンドル", "block.create.zinc_block": "亜鉛ブロック", "block.create.zinc_ore": "亜鉛鉱石", @@ -753,6 +769,7 @@ "create.recipe.assembly.repeat": "%1$s回繰り返す", "create.recipe.assembly.junk": "ランダムな仕損品", "create.recipe.processing.chance": "%1$s%%チャンス", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "加熱不要", "create.recipe.heat_requirement.heated": "加熱が必要", "create.recipe.heat_requirement.superheated": "極度の加熱が必要", @@ -781,6 +798,7 @@ "create.action.discard": "捨てる", "create.keyinfo.toolmenu": "ツールメニューをフォーカスする", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "マウスホイールアップをシミュレート(この世界で)", "create.keyinfo.scrolldown": "マウスホイールダウンをシミュレーション(この世界で)", @@ -791,6 +809,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "シフトを押してスクロールを加速", "create.gui.toolmenu.focusKey": "[%1$s] 長押しでフォーカスする", "create.gui.toolmenu.cycle": "[スクロール] で循環", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "ミラーの種類", "create.gui.symmetryWand.orientation": "方向", @@ -1037,18 +1062,14 @@ "create.item_attributes.placeable.inverted": "設置不可能か", "create.item_attributes.consumable": "食べられるか", "create.item_attributes.consumable.inverted": "食べられないか", - "create.item_attributes.smeltable": "精錬可能か", - "create.item_attributes.smeltable.inverted": "精錬不可能か", - "create.item_attributes.washable": "洗浄可能か", - "create.item_attributes.washable.inverted": "洗浄不可能か", - "create.item_attributes.smokable": "燻製器で調理可能か", - "create.item_attributes.smokable.inverted": "燻製器で調理不可能か", - "create.item_attributes.crushable": "粉砕可能か", - "create.item_attributes.crushable.inverted": "粉砕不可能か", - "create.item_attributes.blastable": "溶鉱炉で精錬可能か", - "create.item_attributes.blastable.inverted": "溶鉱炉で精錬不可能か", + "create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "エンチャント済みか", "create.item_attributes.enchanted.inverted": "エンチャントなしか", + "create.item_attributes.max_enchanted": "最大レベルのエンチャントがされているか", + "create.item_attributes.max_enchanted.inverted": "最大レベルのエンチャントがされていないか", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "create.item_attributes.damaged": "破損してるか", "create.item_attributes.damaged.inverted": "破損していないか", "create.item_attributes.badly_damaged": "ひどく損傷してるか", @@ -1059,23 +1080,31 @@ "create.item_attributes.equipable.inverted": "装備不可能か", "create.item_attributes.furnace_fuel": "かまどの燃料か", "create.item_attributes.furnace_fuel.inverted": "かまどの燃料でないか", + "create.item_attributes.washable": "洗浄可能か", + "create.item_attributes.washable.inverted": "洗浄不可能か", + "create.item_attributes.crushable": "粉砕可能か", + "create.item_attributes.crushable.inverted": "粉砕不可能か", + "create.item_attributes.smeltable": "精錬可能か", + "create.item_attributes.smeltable.inverted": "精錬不可能か", + "create.item_attributes.smokable": "燻製器で調理可能か", + "create.item_attributes.smokable.inverted": "燻製器で調理不可能か", + "create.item_attributes.blastable": "溶鉱炉で精錬可能か", + "create.item_attributes.blastable.inverted": "溶鉱炉で精錬不可能か", + "create.item_attributes.shulker_level": "%1$sシュルカーか", + "create.item_attributes.shulker_level.inverted": "%1$sシュルカーでないか", + "create.item_attributes.shulker_level.full": "満杯の", + "create.item_attributes.shulker_level.empty": "空の", + "create.item_attributes.shulker_level.partial": "一部埋まっている", "create.item_attributes.in_tag": "%1$sのタグが付けられてるか", "create.item_attributes.in_tag.inverted": "%1$sのタグがついていないか", "create.item_attributes.in_item_group": "%1$sに属してるか", "create.item_attributes.in_item_group.inverted": "%1$sに属していないか", "create.item_attributes.added_by": "%1$sによって追加されたか", "create.item_attributes.added_by.inverted": "%1$sによって追加されていないか", - "create.item_attributes.shulker_level": "%1$sシュルカーか", - "create.item_attributes.shulker_level.inverted": "%1$sシュルカーでないか", - "create.item_attributes.shulker_level.full": "満杯の", - "create.item_attributes.shulker_level.empty": "空の", - "create.item_attributes.shulker_level.partial": "一部埋まっている", "create.item_attributes.has_enchant": "エンチャントされているか%1$s", "create.item_attributes.has_enchant.inverted": "エンチャントがされていないか", "create.item_attributes.color": "%1$sで染められているか", "create.item_attributes.color.inverted": "%1$sで染められていないか", - "create.item_attributes.max_enchanted": "最大レベルのエンチャントがされているか", - "create.item_attributes.max_enchanted.inverted": "最大レベルのエンチャントがされていないか", "create.item_attributes.has_fluid": "%1$sを含んでいるか", "create.item_attributes.has_fluid.inverted": "%1$sを含んでいないか", "create.item_attributes.has_name": "%1$sの名前が付けられているか", @@ -1090,14 +1119,14 @@ "create.item_attributes.book_copy_second.inverted": "コピーのコピーでないか", "create.item_attributes.book_copy_tattered": "ボロボロか", "create.item_attributes.book_copy_tattered.inverted": "ボロボロでないか", - "create.item_attributes.astralsorcery_crystal": "%1$s クリスタル属性を持つ", - "create.item_attributes.astralsorcery_crystal.inverted": "%1$s クリスタル属性を持たない", - "create.item_attributes.astralsorcery_constellation": "%1$s に同調している", - "create.item_attributes.astralsorcery_constellation.inverted": "%1$s に同調していない", - "create.item_attributes.astralsorcery_perk_gem": "%1$s 特典属性がある", - "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 特典属性がない", "create.item_attributes.astralsorcery_amulet": "%1$s 改善", "create.item_attributes.astralsorcery_amulet.inverted": "%1$s 改善されない", + "create.item_attributes.astralsorcery_constellation": "%1$s に同調している", + "create.item_attributes.astralsorcery_constellation.inverted": "%1$s に同調していない", + "create.item_attributes.astralsorcery_crystal": "%1$s クリスタル属性を持つ", + "create.item_attributes.astralsorcery_crystal.inverted": "%1$s クリスタル属性を持たない", + "create.item_attributes.astralsorcery_perk_gem": "%1$s 特典属性がある", + "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 特典属性がない", "create.gui.attribute_filter.no_selected_attributes": "属性が選択されていません", "create.gui.attribute_filter.selected_attributes": "選択された属性:", @@ -1394,6 +1423,15 @@ "block.create.turntable.tooltip": "ターンテーブル", "block.create.turntable.tooltip.summary": "_回転力_を洗練された乗り物酔いに変えます。", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "在庫スイッチ", "block.create.stockpile_switch.tooltip.summary": "接続されたコンテナの_空き容量_によってレッドストーン信号を切り替えます。便利なフィルターが付属しています。_コンパレータ―_とは違って、_在庫スイッチ_は、信号が反転される_しきい値_を設定できます。", "block.create.stockpile_switch.tooltip.condition1": "右クリックしたとき", @@ -1401,6 +1439,10 @@ "block.create.content_observer.tooltip": "コンテンツオブザーバー", "block.create.content_observer.tooltip.summary": "設定された_フィルター_に一致する_コンテナ_や_メカニカルベルト_内の_アイテム_を_検出_します。観察している_収納ブロック_、_ベルト_、または_シュート_に一致するアイテムが含まれている場合、このは_レッドストーン信号_を発します。観察している_ファンネル_が一致するアイテムを_運搬_すると、このコンポーネントは_レッドストーンパルス_を発します。", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "可変クレート", "block.create.adjustable_crate.tooltip.summary": "この_収納ブロック_は、容量を手動で調整できます。任意のアイテムを_16スタック_まで収納できます。_レッドストーンコンパレーター_に対応しています。", 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 b45ee1cfb..0042ac488 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: 24", + "_": "Missing Localizations: 63", "_": "->------------------------] Game Elements [------------------------<-", @@ -31,11 +31,13 @@ "block.create.black_nixie_tube": "검은색 닉시관", "block.create.black_sail": "검은색 날개", "block.create.black_seat": "검은색 좌석", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "검은색 밸브 손잡이", "block.create.blaze_burner": "블레이즈 버너", "block.create.blue_nixie_tube": "파란색 닉시관", "block.create.blue_sail": "파란색 날개", "block.create.blue_seat": "파란색 좌석", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "파란색 밸브 손잡이", "block.create.brass_belt_funnel": "황동 퍼널", "block.create.brass_block": "황동 블록", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "갈색 닉시관", "block.create.brown_sail": "갈색 날개", "block.create.brown_seat": "갈색 좌석", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "block.create.brown_valve_handle": "갈색 밸브 손잡이", "block.create.cart_assembler": "카트 조립기", "block.create.chiseled_dark_scoria": "조각된 짙은 스코리아", @@ -79,6 +82,7 @@ "block.create.cyan_nixie_tube": "청록색 닉시관", "block.create.cyan_sail": "청록색 날개", "block.create.cyan_seat": "청록색 좌석", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "block.create.cyan_valve_handle": "청록색 밸브 손잡이", "block.create.dark_oak_window": "짙은 참나무 유리창", "block.create.dark_oak_window_pane": "짙은 참나무 유리판", @@ -186,10 +190,12 @@ "block.create.gray_nixie_tube": "회색 닉시관", "block.create.gray_sail": "회색 날개", "block.create.gray_seat": "회색 좌석", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "회색 밸브 손잡이", "block.create.green_nixie_tube": "초록색 닉시관", "block.create.green_sail": "초록색 날개", "block.create.green_seat": "초록색 좌석", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "초록색 밸브 손잡이", "block.create.hand_crank": "핸드 크랭크", "block.create.haunted_bell": "귀신들린 종", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "하늘핵 닉시관", "block.create.light_blue_sail": "하늘색 날개", "block.create.light_blue_seat": "하늘색 좌석", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "하늘색 밸브 손잡이", "block.create.light_gray_nixie_tube": "회백색 닉시관", "block.create.light_gray_sail": "회백색 날개", "block.create.light_gray_seat": "회백색 좌석", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "회백색 밸브 손잡이", "block.create.lime_nixie_tube": "연두색 닉시관", "block.create.lime_sail": "연두색 날개", "block.create.lime_seat": "연두색 좌석", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "연두색 밸브 손잡이", "block.create.limesand": "석회모래", "block.create.limestone": "석회암", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "자홍색 닉시관", "block.create.magenta_sail": "자홍색 날개", "block.create.magenta_seat": "자홍색 좌석", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "자홍색 밸브 손잡이", "block.create.mechanical_arm": "기계 팔", "block.create.mechanical_bearing": "베어링", @@ -272,6 +282,7 @@ "block.create.oak_window_pane": "참나무 유리판", "block.create.orange_sail": "주황색 날개", "block.create.orange_seat": "주황색 좌석", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "block.create.orange_valve_handle": "주황색 밸브 손잡이", "block.create.ornate_iron_window": "장식된 철 유리창", "block.create.ornate_iron_window_pane": "장식된 철 유리판", @@ -324,6 +335,7 @@ "block.create.pink_nixie_tube": "분홍색 닉시관", "block.create.pink_sail": "분홍색 날개", "block.create.pink_seat": "분홍색 좌석", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "block.create.pink_valve_handle": "분홍색 밸브 손잡이", "block.create.piston_extension_pole": "피스톤 연장 축", "block.create.polished_dark_scoria": "윤나는 짙은 스코리아", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "보라샥 닉시관", "block.create.purple_sail": "보라색 날개", "block.create.purple_seat": "보라색 좌석", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "보라색 밸브 손잡이", "block.create.radial_chassis": "원형 섀시", "block.create.red_nixie_tube": "빨간색 닉시관", "block.create.red_sail": "빨간색 날개", "block.create.red_seat": "빨간색 좌석", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "빨간색 밸브 손잡이", "block.create.redstone_contact": "동형 감지기", "block.create.redstone_link": "레드스톤 링크", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "하얀색 닉시관", "block.create.white_sail": "하얀색 날개", "block.create.white_seat": "하얀색 좌석", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "하얀색 밸브 손잡이", "block.create.windmill_bearing": "풍차 베어링", "block.create.wooden_bracket": "나무 지지대", "block.create.yellow_nixie_tube": "노란색 닉시관", "block.create.yellow_sail": "노란색 날개", "block.create.yellow_seat": "노란색 좌석", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "노란색 밸브 손잡이", "block.create.zinc_block": "아연 블록", "block.create.zinc_ore": "아연 광석", @@ -753,6 +769,7 @@ "create.recipe.assembly.repeat": "%1$s번 반복하기", "create.recipe.assembly.junk": "조립 실패한 조각들", "create.recipe.processing.chance": "%1$s%% 확률", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "열이 필요하지 않음", "create.recipe.heat_requirement.heated": "가열됨", "create.recipe.heat_requirement.superheated": "초고온 가열됨", @@ -781,6 +798,7 @@ "create.action.discard": "삭제", "create.keyinfo.toolmenu": "메뉴 세부정보 보기", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "마우스 휠을 위로 이동 (인게임에서)", "create.keyinfo.scrolldown": "마우스 휠을 아래로 이동 (인게임에서)", @@ -791,6 +809,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "쉬프트-스크롤로 빨리 수정하기", "create.gui.toolmenu.focusKey": "[%1$s]를 눌러 세부정보 보기", "create.gui.toolmenu.cycle": "스크롤로 순환", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "거울의 형태", "create.gui.symmetryWand.orientation": "거울의 방향", @@ -1037,18 +1062,14 @@ "create.item_attributes.placeable.inverted": "설치할 수 없음", "create.item_attributes.consumable": "먹을 수 있음", "create.item_attributes.consumable.inverted": "먹을 수 없음", - "create.item_attributes.smeltable": "구워질 수 있음", - "create.item_attributes.smeltable.inverted": "구워질 수 없음", - "create.item_attributes.washable": "세척될 수 있음", - "create.item_attributes.washable.inverted": "세척될 수 없음", - "create.item_attributes.smokable": "훈연될 수 있음", - "create.item_attributes.smokable.inverted": "훈연될 수 없음", - "create.item_attributes.crushable": "분쇄될 수 있음", - "create.item_attributes.crushable.inverted": "분쇄될 수 없음", - "create.item_attributes.blastable": "용광로에 녹일 수 있음", - "create.item_attributes.blastable.inverted": "용광로에 녹일 수 없음", + "create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "마법부여됨", "create.item_attributes.enchanted.inverted": "마법부여되지 않음", + "create.item_attributes.max_enchanted": "마법부여가 최고 레벨임", + "create.item_attributes.max_enchanted.inverted": "마법부여가 최고 레벨이 아님", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "create.item_attributes.damaged": "내구도가 닮", "create.item_attributes.damaged.inverted": "내구도가 닳지 않음", "create.item_attributes.badly_damaged": "심각하게 내구도가 닮", @@ -1059,23 +1080,31 @@ "create.item_attributes.equipable.inverted": "장착할 수 없음", "create.item_attributes.furnace_fuel": "화로 연료로 쓸 수 있음", "create.item_attributes.furnace_fuel.inverted": "화로 연료로 쓸 수 없음", + "create.item_attributes.washable": "세척될 수 있음", + "create.item_attributes.washable.inverted": "세척될 수 없음", + "create.item_attributes.crushable": "분쇄될 수 있음", + "create.item_attributes.crushable.inverted": "분쇄될 수 없음", + "create.item_attributes.smeltable": "구워질 수 있음", + "create.item_attributes.smeltable.inverted": "구워질 수 없음", + "create.item_attributes.smokable": "훈연될 수 있음", + "create.item_attributes.smokable.inverted": "훈연될 수 없음", + "create.item_attributes.blastable": "용광로에 녹일 수 있음", + "create.item_attributes.blastable.inverted": "용광로에 녹일 수 없음", + "create.item_attributes.shulker_level": "셜커가 %1$s있음", + "create.item_attributes.shulker_level.inverted": "셜커가 %1$s있지 않음", + "create.item_attributes.shulker_level.full": "가득 차", + "create.item_attributes.shulker_level.empty": "비어", + "create.item_attributes.shulker_level.partial": "조금 차", "create.item_attributes.in_tag": "%1$s로 등록됨", "create.item_attributes.in_tag.inverted": "%1$s로 등록되지 않음", "create.item_attributes.in_item_group": "%1$s탭에 속함", "create.item_attributes.in_item_group.inverted": "%1$s탭에 속함", "create.item_attributes.added_by": "%1$s모드가 추가함", "create.item_attributes.added_by.inverted": "%1$s모드가 추가하지 않음", - "create.item_attributes.shulker_level": "셜커가 %1$s있음", - "create.item_attributes.shulker_level.inverted": "셜커가 %1$s있지 않음", - "create.item_attributes.shulker_level.full": "가득 차", - "create.item_attributes.shulker_level.empty": "비어", - "create.item_attributes.shulker_level.partial": "조금 차", "create.item_attributes.has_enchant": "%1$s 마법부여를 가지고 있음", "create.item_attributes.has_enchant.inverted": "%1$s 마법부여를 가지고 있지 않음", "create.item_attributes.color": "염색됨", "create.item_attributes.color.inverted": "염색되지 않음", - "create.item_attributes.max_enchanted": "마법부여가 최고 레벨임", - "create.item_attributes.max_enchanted.inverted": "마법부여가 최고 레벨이 아님", "create.item_attributes.has_fluid": "%1$s을(를) 담고 있음", "create.item_attributes.has_fluid.inverted": "%1$s을(를) 담고 있지 않음", "create.item_attributes.has_name": "%1$s이라는 이름을 갖고 있음", @@ -1090,14 +1119,14 @@ "create.item_attributes.book_copy_second.inverted": "복사본의 복사본이 아님", "create.item_attributes.book_copy_tattered": "낡고 헐었음", "create.item_attributes.book_copy_tattered.inverted": "낡고 헐지 않음", - "create.item_attributes.astralsorcery_crystal": "%1$s 수정 속성을 가짐", - "create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않음", - "create.item_attributes.astralsorcery_constellation": "%1$s에 조율됨", - "create.item_attributes.astralsorcery_constellation.inverted": "%1$s에 조율되지 않음", - "create.item_attributes.astralsorcery_perk_gem": "%1$s 퍽 속성을 가짐", - "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 퍽 속성을 가지고 있지 않음", "create.item_attributes.astralsorcery_amulet": "%1$s이(가) 향상됨", "create.item_attributes.astralsorcery_amulet.inverted": "%1$s이(가) 향상되지 않음", + "create.item_attributes.astralsorcery_constellation": "%1$s에 조율됨", + "create.item_attributes.astralsorcery_constellation.inverted": "%1$s에 조율되지 않음", + "create.item_attributes.astralsorcery_crystal": "%1$s 수정 속성을 가짐", + "create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않음", + "create.item_attributes.astralsorcery_perk_gem": "%1$s 퍽 속성을 가짐", + "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 퍽 속성을 가지고 있지 않음", "create.gui.attribute_filter.no_selected_attributes": "속성이 선택되지 않음", "create.gui.attribute_filter.selected_attributes": "선택된 속성:", @@ -1394,6 +1423,15 @@ "block.create.turntable.tooltip": "TURNTABLE", "block.create.turntable.tooltip.summary": "_동력_으로 _멀미_를 일으킵니다.", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "stockpile_switch", "block.create.stockpile_switch.tooltip.summary": "붙어있는 _보관함_에 들어있는 아이템을 기반으로 레드스톤 신호를 보냅니다. 필터도 제공됩니다. _비교기_와 반대로, 수량 스위치는 신호가 반전되는 _임계점_을 조절할 수 있습니다.", "block.create.stockpile_switch.tooltip.condition1": "우클릭", @@ -1401,6 +1439,10 @@ "block.create.content_observer.tooltip": "CONTENT OBSERVER", "block.create.content_observer.tooltip.summary": "보관함이나 벨트의 아이템을 등록된 _필터_를 이용해 _탐지_합니다. _보관함, 벨트, 슈트_ 안에 해당 아이템을 탐지하는 동안, 레드스톤 신호를 보냅니다. _퍼널_가 해당 아이템을 수송하면, _1틱_의 레드스톤 신호를 보냅니다.", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "ADJUSTABLE CRATE", "block.create.adjustable_crate.tooltip.summary": "이 보관함는 용량을 _직접_ _정할_ 수 있습니다. 아무아이템이나 최대 16스택씩 담을 수 있습니다. 레드스톤 비교기와 호환됩니다.", 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 2a8d48fd3..fc55f3e62 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: 1766", + "_": "Missing Localizations: 1805", "_": "->------------------------] Game Elements [------------------------<-", @@ -31,11 +31,13 @@ "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "UNLOCALIZED: Black Sail", "block.create.black_seat": "UNLOCALIZED: Black Seat", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "UNLOCALIZED: Blue Sail", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Block of Brass", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", "block.create.cart_assembler": "Kar Assembler", "block.create.chiseled_dark_scoria": "UNLOCALIZED: Chiseled Dark Scoria", @@ -79,6 +82,7 @@ "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "UNLOCALIZED: Cyan Sail", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "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", @@ -186,10 +190,12 @@ "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "UNLOCALIZED: Gray Sail", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "UNLOCALIZED: Green Sail", "block.create.green_seat": "UNLOCALIZED: Green Seat", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "UNLOCALIZED: Hand Crank", "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "UNLOCALIZED: Light Blue Sail", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "UNLOCALIZED: Light Gray Sail", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "UNLOCALIZED: Lime Sail", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", "block.create.limesand": "Kalkzand", "block.create.limestone": "Kalksteen", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "UNLOCALIZED: Magenta Sail", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Mechanische Lager", @@ -272,6 +282,7 @@ "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", "block.create.orange_sail": "UNLOCALIZED: Orange Sail", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "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", @@ -324,6 +335,7 @@ "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "UNLOCALIZED: Pink Sail", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "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", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "UNLOCALIZED: Purple Sail", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", "block.create.radial_chassis": "Rotation Frame", "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "UNLOCALIZED: Red Sail", "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", "block.create.redstone_contact": "Redstone redstone_contact", "block.create.redstone_link": "Redstone Brug", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "UNLOCALIZED: White Sail", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing", "block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket", "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "UNLOCALIZED: Yellow Sail", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", "block.create.zinc_block": "UNLOCALIZED: Block of Zinc", "block.create.zinc_ore": "UNLOCALIZED: Zinc Ore", @@ -753,6 +769,7 @@ "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%% Kans", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", "create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", "create.recipe.heat_requirement.superheated": "UNLOCALIZED: Super-Heated", @@ -781,6 +798,7 @@ "create.action.discard": "Weggooien", "create.keyinfo.toolmenu": "Focus Gereedschap Menu", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "UNLOCALIZED: Simulate Mousewheel Up (inworld)", "create.keyinfo.scrolldown": "UNLOCALIZED: Simulate Mousewheel Down (inworld)", @@ -791,6 +809,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "Shift om sneller te Scrollen", "create.gui.toolmenu.focusKey": "Hou [%1$s] ingedrukt om te Focusen", "create.gui.toolmenu.cycle": "[SCROLL] om te Cycleën", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "Spiegelen", "create.gui.symmetryWand.orientation": "Orientatie", @@ -1037,18 +1062,14 @@ "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.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "UNLOCALIZED: is enchanted", "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", + "create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level", + "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "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", @@ -1059,23 +1080,31 @@ "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.washable": "UNLOCALIZED: can be Washed", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", + "create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", + "create.item_attributes.smokable": "UNLOCALIZED: can be Smoked", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "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.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.in_tag": "UNLOCALIZED: is tagged %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.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", - "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", - "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", - "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", - "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", "create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s", - "create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level", - "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", "create.item_attributes.has_fluid": "UNLOCALIZED: contains %1$s", "create.item_attributes.has_fluid.inverted": "UNLOCALIZED: does not contain %1$s", "create.item_attributes.has_name": "UNLOCALIZED: has the custom name %1$s", @@ -1090,14 +1119,14 @@ "create.item_attributes.book_copy_second.inverted": "UNLOCALIZED: is not a second-generation copy", "create.item_attributes.book_copy_tattered": "UNLOCALIZED: is a tattered mess", "create.item_attributes.book_copy_tattered.inverted": "UNLOCALIZED: is not a tattered mess", - "create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s", - "create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s", - "create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s", "create.item_attributes.astralsorcery_amulet": "UNLOCALIZED: improves %1$s", "create.item_attributes.astralsorcery_amulet.inverted": "UNLOCALIZED: does not improve %1$s", + "create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s", + "create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s", + "create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s", "create.gui.attribute_filter.no_selected_attributes": "UNLOCALIZED: No attributes selected", "create.gui.attribute_filter.selected_attributes": "UNLOCALIZED: Selected attributes:", @@ -1394,13 +1423,26 @@ "block.create.turntable.tooltip": "DRAAISCHIJF", "block.create.turntable.tooltip.summary": "Verandert _Rotatiekracht_ in verfijnde bewegingsziekte.", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "VOORRAAD SCHAKELAAR", "block.create.stockpile_switch.tooltip.summary": "Schakelt een Redstone signaal op basis van de _Opslagruimte_ in de aangesloten Container.", "block.create.stockpile_switch.tooltip.condition1": "Wanneer onder de laagste limiet", "block.create.stockpile_switch.tooltip.behaviour1": "Stopt met het aanbieden van _Redstone_ _Kracht_", "block.create.content_observer.tooltip": "UNLOCALIZED: CONTENT OBSERVER", - "block.create.content_observer.tooltip.summary": "UNLOCALIZED: _Detects Items_ inside _containers_ and _conveyors_ matching a configured _filter_. While the observed _inventory_, _belt_ or _chute contains_ a matching item, this component will emit a _Redstone Signal_. When an observed _funnel transfers_ a matching item, this component will emit a _Redstone Pulse_.", + "block.create.content_observer.tooltip.summary": "UNLOCALIZED: _Detects Items_ or _Fluids_ inside _containers_, _pipes_ or _conveyors_ matching a configured _filter_.", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "FLEXKRAT", "block.create.adjustable_crate.tooltip.summary": "Met deze _Opslag_ _Container_ kan de capaciteit handmatig worden geregeld. Het kan tot _16_ _Stapels_ van elk item bevatten", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 010fcaa58..abc75b34e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 256", + "_": "Missing Localizations: 295", "_": "->------------------------] Game Elements [------------------------<-", @@ -31,11 +31,13 @@ "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "Czarny żagiel", "block.create.black_seat": "Czarne siedzenie", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "Czarne pokrętło", "block.create.blaze_burner": "Płomienny palnik", "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "Niebieski żagiel", "block.create.blue_seat": "Niebieskie siedzenie", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "Niebieskie pokrętło", "block.create.brass_belt_funnel": "Mosiężny lejek taśmowy", "block.create.brass_block": "Blok mosiądzu", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "Brązowy żagiel", "block.create.brown_seat": "Brązowe siedzenie", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "block.create.brown_valve_handle": "Brązowe pokrętło", "block.create.cart_assembler": "Monter wagoników", "block.create.chiseled_dark_scoria": "Rzeźbiony ciemny żużel", @@ -79,6 +82,7 @@ "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Błękitny żagiel", "block.create.cyan_seat": "Błękitne siedzenie", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "block.create.cyan_valve_handle": "Błękitne pokrętło", "block.create.dark_oak_window": "Ciemnodębowe okno", "block.create.dark_oak_window_pane": "Ciemnodębowa szyba okienna", @@ -186,10 +190,12 @@ "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "Szary żagiel", "block.create.gray_seat": "Szare siedzenie", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "Szare pokrętło", "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "Zielony żagiel", "block.create.green_seat": "Zielone siedzenie", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "Zielone pokrętło", "block.create.hand_crank": "Ręczna korba", "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "Jasnoniebieski żagiel", "block.create.light_blue_seat": "Jasnoniebieskie siedzenie", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "Jasnoniebieskie pokrętło", "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "Jasnoszary żagiel", "block.create.light_gray_seat": "Jasnoszare siedzenie", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "Jasnoszare pokrętło", "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "Jasnozielony żagiel", "block.create.lime_seat": "Jasnozielone siedzenie", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "Jasnozielone pokrętło", "block.create.limesand": "Piasek wapienny", "block.create.limestone": "Wapień", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "Karmazynowy żagiel", "block.create.magenta_seat": "Karmazynowe siedzenie", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "Karmazynowe pokrętło", "block.create.mechanical_arm": "Ramie mechaniczne", "block.create.mechanical_bearing": "Mechaniczne łożysko", @@ -272,6 +282,7 @@ "block.create.oak_window_pane": "Dębowa szyba okienna", "block.create.orange_sail": "Pomarańczowy żagiel", "block.create.orange_seat": "Pomarańczowe siedzenie", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "block.create.orange_valve_handle": "Pomarańczowe pokrętło", "block.create.ornate_iron_window": "Ozdobne żelazne okno", "block.create.ornate_iron_window_pane": "Ozdobna żelazne szyba okienna", @@ -324,6 +335,7 @@ "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "Różowy żagiel", "block.create.pink_seat": "Różowe siedzenie", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "block.create.pink_valve_handle": "Różowe pokrętło", "block.create.piston_extension_pole": "Przedłużenie tłoka", "block.create.polished_dark_scoria": "Wypolerowany ciemny żużel", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "Fioletowy żagiel", "block.create.purple_seat": "Fioletowe siedzenie", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "Fioletowe pokrętło", "block.create.radial_chassis": "Stelaż promienisty", "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "Czerwony żagiel", "block.create.red_seat": "Czerwone siedzenie", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "Czerwone pokrętło", "block.create.redstone_contact": "Przełącznik kontaktowy", "block.create.redstone_link": "Emiter sygnału", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "Biały żagiel", "block.create.white_seat": "Białe siedzenie", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "Białe pokrętło", "block.create.windmill_bearing": "Łożysko wiatraka", "block.create.wooden_bracket": "Drewniany wspornik", "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "Żółty żagiel", "block.create.yellow_seat": "Żółte siedzenie", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "Żółte pokrętło", "block.create.zinc_block": "Blok cynku", "block.create.zinc_ore": "Ruda cynku", @@ -753,6 +769,7 @@ "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%% szans", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "Nie wymaga podgrzewania", "create.recipe.heat_requirement.heated": "Podrzewane", "create.recipe.heat_requirement.superheated": "Silnie podgrzewane", @@ -781,6 +798,7 @@ "create.action.discard": "Odrzuć", "create.keyinfo.toolmenu": "Menu narzędzi", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "Symuluj przewijanie w górę (w świecie)", "create.keyinfo.scrolldown": "Symuluj przewijanie w dół (w świecie)", @@ -791,6 +809,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "Naciśnij Shift, aby przewijać szybciej", "create.gui.toolmenu.focusKey": "Przytrzymaj [%1$s], aby skupić", "create.gui.toolmenu.cycle": "[SCROLL] przewijać", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "Odbicie lustrzane", "create.gui.symmetryWand.orientation": "Orientacja", @@ -1037,18 +1062,14 @@ "create.item_attributes.placeable.inverted": "nie jest stawialny", "create.item_attributes.consumable": "jadalny", "create.item_attributes.consumable.inverted": "niejadalny", - "create.item_attributes.smeltable": "może zostać przepalony", - "create.item_attributes.smeltable.inverted": "nie może zostać przepalony", - "create.item_attributes.washable": "może zostać opłukany", - "create.item_attributes.washable.inverted": "nie może zostać opłukany", - "create.item_attributes.smokable": "może być wędzony", - "create.item_attributes.smokable.inverted": "nie może być wędzony", - "create.item_attributes.crushable": "może być rozkruszony", - "create.item_attributes.crushable.inverted": "nie może być rozkruszony", - "create.item_attributes.blastable": "może być stopiony w piecu hutniczym", - "create.item_attributes.blastable.inverted": "nie może być stopiony w piecu hutniczym", + "create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "jest zaklęty", "create.item_attributes.enchanted.inverted": "nie jest zaklęty", + "create.item_attributes.max_enchanted": "jest zaklęte na maksymalny poziom", + "create.item_attributes.max_enchanted.inverted": "nie jest zaklęte na maksymalny poziom", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "create.item_attributes.damaged": "jest uszkodzony", "create.item_attributes.damaged.inverted": "nie jest uszkodzony", "create.item_attributes.badly_damaged": "jest silnie uszkodzony", @@ -1059,23 +1080,31 @@ "create.item_attributes.equipable.inverted": "nie może zostać założony", "create.item_attributes.furnace_fuel": "jest paliwem dla pieca", "create.item_attributes.furnace_fuel.inverted": "nie jest paliwem dla pieca", + "create.item_attributes.washable": "może zostać opłukany", + "create.item_attributes.washable.inverted": "nie może zostać opłukany", + "create.item_attributes.crushable": "może być rozkruszony", + "create.item_attributes.crushable.inverted": "nie może być rozkruszony", + "create.item_attributes.smeltable": "może zostać przepalony", + "create.item_attributes.smeltable.inverted": "nie może zostać przepalony", + "create.item_attributes.smokable": "może być wędzony", + "create.item_attributes.smokable.inverted": "nie może być wędzony", + "create.item_attributes.blastable": "może być stopiony w piecu hutniczym", + "create.item_attributes.blastable.inverted": "nie może być stopiony w piecu hutniczym", + "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.in_tag": "posiada znacznik %1$s", "create.item_attributes.in_tag.inverted": "nie posiada znacznika %1$s", "create.item_attributes.in_item_group": "jest w grupie \"%1$s\"", "create.item_attributes.in_item_group.inverted": "nie jest w grupie \"%1$s\"", "create.item_attributes.added_by": "dodany przez %1$s", "create.item_attributes.added_by.inverted": "niedodany przez %1$s", - "create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", - "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", - "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", - "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", - "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "posiada zaklęcie %1$s", "create.item_attributes.has_enchant.inverted": "nie posiada zaklęcia %1$s", "create.item_attributes.color": "jest zafarbowane, kolor %1$s", "create.item_attributes.color.inverted": "nie jest zafarbowane, kolor %1$s", - "create.item_attributes.max_enchanted": "jest zaklęte na maksymalny poziom", - "create.item_attributes.max_enchanted.inverted": "nie jest zaklęte na maksymalny poziom", "create.item_attributes.has_fluid": "zawiera %1$s", "create.item_attributes.has_fluid.inverted": "nie zawiera %1$s", "create.item_attributes.has_name": "posiada nazwę %1$s", @@ -1090,14 +1119,14 @@ "create.item_attributes.book_copy_second.inverted": "nie jest kopią kopii", "create.item_attributes.book_copy_tattered": "jest postrzępiona", "create.item_attributes.book_copy_tattered.inverted": "nie jest postrzępiona", - "create.item_attributes.astralsorcery_crystal": "posiada właściwości kryształu %1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "nie posiada właściwości kryształu %1$s", - "create.item_attributes.astralsorcery_constellation": "jest dopasowany do %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "nie jest dopasowany do %1$s", - "create.item_attributes.astralsorcery_perk_gem": "posiada dodatkową właściwość %1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "nie posiada dodatkowej właściwości %1$s", "create.item_attributes.astralsorcery_amulet": "ulepsza %1$s", "create.item_attributes.astralsorcery_amulet.inverted": "nie ulepsza %1$s", + "create.item_attributes.astralsorcery_constellation": "jest dopasowany do %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "nie jest dopasowany do %1$s", + "create.item_attributes.astralsorcery_crystal": "posiada właściwości kryształu %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "nie posiada właściwości kryształu %1$s", + "create.item_attributes.astralsorcery_perk_gem": "posiada dodatkową właściwość %1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "nie posiada dodatkowej właściwości %1$s", "create.gui.attribute_filter.no_selected_attributes": "Brak wybranych właściwości", "create.gui.attribute_filter.selected_attributes": "Wybrane właściwości:", @@ -1394,6 +1423,15 @@ "block.create.turntable.tooltip": "TALERZ OBROTOWY", "block.create.turntable.tooltip.summary": "Zamienia _siłę obrotu_ na _chorobę lokomocyjną_.", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "PRZEŁĄCZNIK ZAWARTOŚCIOWY", "block.create.stockpile_switch.tooltip.summary": "Przełącza sygnał Redstone bazując na _ilości przedmiotów_ przechowywanych w sąsiadującym bloku. Może posiadać filtr. W odróżnieniu od _komparatora_, przełącznik zawartościowy pozwala na konfigurację _progów_, przy których sygnały są odwrotne.", "block.create.stockpile_switch.tooltip.condition1": "Kliknięcie PPM", @@ -1401,6 +1439,10 @@ "block.create.content_observer.tooltip": "DETEKTOR ZAWARTOŚCI", "block.create.content_observer.tooltip.summary": "_Wykrywa przedmioty_ zawarte w sąsiadującym _bloku_ lub _taśmociągu_, które pasują do ustalonego filtra. Kiedy obserwowany blok _zawiera_ ten przedmiot, detektor wyśle _sygnał Redstone_.", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "REGULOWANA SKRZYNKA", "block.create.adjustable_crate.tooltip.summary": "Ta skrzynia pozwala na _ręczną kontrolę_ jej pojemności. Może pomieścić do _16 stosów_ dowolnego przedmiotu. Działa z _komparatorami_.", 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 6d34e640a..9f1e08c86 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: 1807", + "_": "Missing Localizations: 1846", "_": "->------------------------] Game Elements [------------------------<-", @@ -31,11 +31,13 @@ "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "UNLOCALIZED: Black Sail", "block.create.black_seat": "UNLOCALIZED: Black Seat", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "UNLOCALIZED: Blue Sail", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Block of Brass", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "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", @@ -79,6 +82,7 @@ "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "UNLOCALIZED: Cyan Sail", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "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", @@ -186,10 +190,12 @@ "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "UNLOCALIZED: Gray Sail", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "UNLOCALIZED: Green Sail", "block.create.green_seat": "UNLOCALIZED: Green Seat", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "UNLOCALIZED: Hand Crank", "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "UNLOCALIZED: Light Blue Sail", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "UNLOCALIZED: Light Gray Sail", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "UNLOCALIZED: Lime Sail", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", "block.create.limesand": "Areia Calcária", "block.create.limestone": "Calcário", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "UNLOCALIZED: Magenta Sail", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Rolamento Mecânico", @@ -272,6 +282,7 @@ "block.create.oak_window_pane": "UNLOCALIZED: Oak Window Pane", "block.create.orange_sail": "UNLOCALIZED: Orange Sail", "block.create.orange_seat": "UNLOCALIZED: Orange Seat", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "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", @@ -324,6 +335,7 @@ "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "UNLOCALIZED: Pink Sail", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", "block.create.piston_extension_pole": "Vara de Extensão do Pistão", "block.create.polished_dark_scoria": "UNLOCALIZED: Polished Dark Scoria", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "UNLOCALIZED: Purple Sail", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", "block.create.radial_chassis": "Chassis de Rotação", "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "UNLOCALIZED: Red Sail", "block.create.red_seat": "UNLOCALIZED: Red Seat", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", "block.create.redstone_contact": "Contato de Redstone", "block.create.redstone_link": "Conexão de Redstone", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "UNLOCALIZED: White Sail", "block.create.white_seat": "UNLOCALIZED: White Seat", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing", "block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket", "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "UNLOCALIZED: Yellow Sail", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", "block.create.zinc_block": "UNLOCALIZED: Block of Zinc", "block.create.zinc_ore": "UNLOCALIZED: Zinc Ore", @@ -753,6 +769,7 @@ "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%% de chance", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", "create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", "create.recipe.heat_requirement.superheated": "UNLOCALIZED: Super-Heated", @@ -781,6 +798,7 @@ "create.action.discard": "Descartar", "create.keyinfo.toolmenu": "Menu Focal da Ferramenta", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "UNLOCALIZED: Simulate Mousewheel Up (inworld)", "create.keyinfo.scrolldown": "UNLOCALIZED: Simulate Mousewheel Down (inworld)", @@ -791,6 +809,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "UNLOCALIZED: Shift to Scroll Faster", "create.gui.toolmenu.focusKey": "Segure [%1$s] para Focar", "create.gui.toolmenu.cycle": "[SCROLL] para Circular", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "Espelhar", "create.gui.symmetryWand.orientation": "Orientação", @@ -1037,18 +1062,14 @@ "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.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "UNLOCALIZED: is enchanted", "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", + "create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level", + "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "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", @@ -1059,23 +1080,31 @@ "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.washable": "UNLOCALIZED: can be Washed", + "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", + "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", + "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", + "create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted", + "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", + "create.item_attributes.smokable": "UNLOCALIZED: can be Smoked", + "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", + "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.shulker_level": "UNLOCALIZED: is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", + "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", + "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", + "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.in_tag": "UNLOCALIZED: is tagged %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.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s", - "create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s", - "create.item_attributes.shulker_level.full": "UNLOCALIZED: full", - "create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty", - "create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled", "create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", "create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s", - "create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level", - "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", "create.item_attributes.has_fluid": "UNLOCALIZED: contains %1$s", "create.item_attributes.has_fluid.inverted": "UNLOCALIZED: does not contain %1$s", "create.item_attributes.has_name": "UNLOCALIZED: has the custom name %1$s", @@ -1090,14 +1119,14 @@ "create.item_attributes.book_copy_second.inverted": "UNLOCALIZED: is not a second-generation copy", "create.item_attributes.book_copy_tattered": "UNLOCALIZED: is a tattered mess", "create.item_attributes.book_copy_tattered.inverted": "UNLOCALIZED: is not a tattered mess", - "create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s", - "create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s", - "create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s", "create.item_attributes.astralsorcery_amulet": "UNLOCALIZED: improves %1$s", "create.item_attributes.astralsorcery_amulet.inverted": "UNLOCALIZED: does not improve %1$s", + "create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s", + "create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s", + "create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s", "create.gui.attribute_filter.no_selected_attributes": "UNLOCALIZED: No attributes selected", "create.gui.attribute_filter.selected_attributes": "UNLOCALIZED: Selected attributes:", @@ -1394,13 +1423,26 @@ "block.create.turntable.tooltip": "MESA GIRATÓRIA", "block.create.turntable.tooltip.summary": "Muda a _Força_ _Rotacional_ em uma forma refinada de Enjoo.", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "DISJUNTOR DE ARMAZENAMENTO", "block.create.stockpile_switch.tooltip.summary": "Alterna um sinal de Redstone com base no _Espaço_ de _Armazenamento_ do Reciente conectado.", "block.create.stockpile_switch.tooltip.condition1": "Quando abaixo do Limite Mínimo", "block.create.stockpile_switch.tooltip.behaviour1": "Para de enviar _Sinal_ de _Redstone_", "block.create.content_observer.tooltip": "UNLOCALIZED: CONTENT OBSERVER", - "block.create.content_observer.tooltip.summary": "UNLOCALIZED: _Detects Items_ inside _containers_ and _conveyors_ matching a configured _filter_. While the observed _inventory_, _belt_ or _chute contains_ a matching item, this component will emit a _Redstone Signal_. When an observed _funnel transfers_ a matching item, this component will emit a _Redstone Pulse_.", + "block.create.content_observer.tooltip.summary": "UNLOCALIZED: _Detects Items_ or _Fluids_ inside _containers_, _pipes_ or _conveyors_ matching a configured _filter_.", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "adjustable_crate", "block.create.adjustable_crate.tooltip.summary": "Este _Recipiente_ de _Armazenamento_ permite controle Manual da sua capacidade. Pode conter até _16_ _Pilhas_ de qualquer Item", 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 35b858bb2..d6bd88fc7 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: 5", + "_": "Missing Localizations: 44", "_": "->------------------------] Game Elements [------------------------<-", @@ -31,11 +31,13 @@ "block.create.black_nixie_tube": "Чёрный газоразрядный индикатор", "block.create.black_sail": "Чёрный парус", "block.create.black_seat": "Чёрное сиденье", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "Чёрный ручной вентиль", "block.create.blaze_burner": "Горелка Всполоха", "block.create.blue_nixie_tube": "Синий газоразрядный индикатор", "block.create.blue_sail": "Синий парус", "block.create.blue_seat": "Синее сиденье", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "Синий ручной вентиль", "block.create.brass_belt_funnel": "Латунная конвейерная воронка", "block.create.brass_block": "Латунный блок", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "Коричневый газоразрядный индикатор", "block.create.brown_sail": "Коричневый парус", "block.create.brown_seat": "Коричневое сиденье", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "block.create.brown_valve_handle": "Коричневый ручной вентиль", "block.create.cart_assembler": "Сборщик вагонеток", "block.create.chiseled_dark_scoria": "Резной тёмный пепел", @@ -79,6 +82,7 @@ "block.create.cyan_nixie_tube": "Бирюзовый газоразрядный индикатор", "block.create.cyan_sail": "Бирюзовый парус", "block.create.cyan_seat": "Бирюзовое сиденье", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "block.create.cyan_valve_handle": "Бирюзовый ручной вентиль", "block.create.dark_oak_window": "Окно из тёмного дуба", "block.create.dark_oak_window_pane": "Панель из окна из тёмного дуб", @@ -186,10 +190,12 @@ "block.create.gray_nixie_tube": "Серый газоразрядный индикатор", "block.create.gray_sail": "Серый парус", "block.create.gray_seat": "Серое сиденье", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "Серый ручной вентиль", "block.create.green_nixie_tube": "Зелёный газоразрядный индикатор", "block.create.green_sail": "Зелёный парус", "block.create.green_seat": "Зелёное сиденье", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "Зелёный ручной вентиль", "block.create.hand_crank": "Рукоятка", "block.create.haunted_bell": "Призрачный колокол", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "Голубой газоразрядный индикатор", "block.create.light_blue_sail": "Голубой парус", "block.create.light_blue_seat": "Голубое сиденье", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "Голубой ручной вентиль", "block.create.light_gray_nixie_tube": "Светло-серый газоразрядный индикатор", "block.create.light_gray_sail": "Светло-серый парус", "block.create.light_gray_seat": "Светло-серое сиденье", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "Светло-серый ручной вентиль", "block.create.lime_nixie_tube": "Лаймовый газоразрядный индикатор", "block.create.lime_sail": "Лаймовый парус", "block.create.lime_seat": "Лаймовое сиденье", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "Лаймовый ручной вентиль", "block.create.limesand": "Известковый песок", "block.create.limestone": "Известняк", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "Пурпурный газоразрядный индикатор", "block.create.magenta_sail": "Пурпурный парус", "block.create.magenta_seat": "Пурпурное сиденье", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "Пурпурный ручной вентиль", "block.create.mechanical_arm": "Механическая рука", "block.create.mechanical_bearing": "Механический вращатель", @@ -272,6 +282,7 @@ "block.create.oak_window_pane": "Панель из дубового окна", "block.create.orange_sail": "Оранжевый парус", "block.create.orange_seat": "Оранжевое сиденье", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "block.create.orange_valve_handle": "Оранжевый ручной вентиль", "block.create.ornate_iron_window": "Украшенное железное окно", "block.create.ornate_iron_window_pane": "Панель из украшенного железного окна", @@ -324,6 +335,7 @@ "block.create.pink_nixie_tube": "Розовый газоразрядный индикатор", "block.create.pink_sail": "Розовый парус", "block.create.pink_seat": "Розовое сиденье", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "block.create.pink_valve_handle": "Розовый ручной вентиль", "block.create.piston_extension_pole": "Удлинитель поршня", "block.create.polished_dark_scoria": "Полированный тёмный пепел", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "Фиолетовый газоразрядный индикатор", "block.create.purple_sail": "Фиолетовый парус", "block.create.purple_seat": "Фиолетовое сиденье", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "Фиолетовый ручной вентиль", "block.create.radial_chassis": "Радиальное шасси", "block.create.red_nixie_tube": "Красный газоразрядный индикатор", "block.create.red_sail": "Красный парус", "block.create.red_seat": "Красное сиденье", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "Красный ручной вентиль", "block.create.redstone_contact": "Контакт редстоун сигнала", "block.create.redstone_link": "Беспроводной передатчик редстоун сигнала", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "Белый газоразрядный индикатор", "block.create.white_sail": "Белый парус", "block.create.white_seat": "Белое сиденье", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "Белый ручной вентиль", "block.create.windmill_bearing": "Подшипник ветряной мельницы", "block.create.wooden_bracket": "Деревянная скоба", "block.create.yellow_nixie_tube": "Жёлтый газоразрядный индикатор", "block.create.yellow_sail": "Жёлтый парус", "block.create.yellow_seat": "Жёлтое сиденье", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "Жёлтый ручной вентиль", "block.create.zinc_block": "Цинковый блок", "block.create.zinc_ore": "Цинковая руда", @@ -753,6 +769,7 @@ "create.recipe.assembly.repeat": "Повторите последовательность %1$s раз", "create.recipe.assembly.junk": "Случайный мусор", "create.recipe.processing.chance": "%1$s%% шанса", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "Не требует нагрева", "create.recipe.heat_requirement.heated": "Нагрето", "create.recipe.heat_requirement.superheated": "Перегрето", @@ -781,6 +798,7 @@ "create.action.discard": "Отказаться", "create.keyinfo.toolmenu": "Меню инструмента фокусировки", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "Имитация движения мыши вверх (в мире)", "create.keyinfo.scrolldown": "Имитация движения мыши вниз (в мире)", @@ -791,6 +809,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "Нажмите Shift для быстрой прокрутки", "create.gui.toolmenu.focusKey": "Удерживайте [%1$s] для смены задач", "create.gui.toolmenu.cycle": "[Прокрутка] для переключения", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "Зеркало", "create.gui.symmetryWand.orientation": "Ориентация", @@ -1037,18 +1062,14 @@ "create.item_attributes.placeable.inverted": "нельзя разместить", "create.item_attributes.consumable": "можно съесть", "create.item_attributes.consumable.inverted": "нельзя съесть", - "create.item_attributes.smeltable": "можно расплавить", - "create.item_attributes.smeltable.inverted": "нельзя расплавить", - "create.item_attributes.washable": "можно промыть", - "create.item_attributes.washable.inverted": "нельзя промыть", - "create.item_attributes.smokable": "можно прокоптить", - "create.item_attributes.smokable.inverted": "нельзя прокоптить", - "create.item_attributes.crushable": "можно измельчить", - "create.item_attributes.crushable.inverted": "нельзя разместить", - "create.item_attributes.blastable": "плавится в доменной печи", - "create.item_attributes.blastable.inverted": "не плавится в доменной печи", + "create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "зачарован", "create.item_attributes.enchanted.inverted": "не зачарован", + "create.item_attributes.max_enchanted": "Зачаровано за максимальный уровень", + "create.item_attributes.max_enchanted.inverted": "Не зачаровано за максимальный уровень", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "create.item_attributes.damaged": "повреждён", "create.item_attributes.damaged.inverted": "не повреждён", "create.item_attributes.badly_damaged": "сильно повреждён", @@ -1059,23 +1080,31 @@ "create.item_attributes.equipable.inverted": "не может быть надет", "create.item_attributes.furnace_fuel": "является топливом", "create.item_attributes.furnace_fuel.inverted": "не является топливом", + "create.item_attributes.washable": "можно промыть", + "create.item_attributes.washable.inverted": "нельзя промыть", + "create.item_attributes.crushable": "можно измельчить", + "create.item_attributes.crushable.inverted": "нельзя разместить", + "create.item_attributes.smeltable": "можно расплавить", + "create.item_attributes.smeltable.inverted": "нельзя расплавить", + "create.item_attributes.smokable": "можно прокоптить", + "create.item_attributes.smokable.inverted": "нельзя прокоптить", + "create.item_attributes.blastable": "плавится в доменной печи", + "create.item_attributes.blastable.inverted": "не плавится в доменной печи", + "create.item_attributes.shulker_level": "шалкер %1$s", + "create.item_attributes.shulker_level.inverted": "шалкер не %1$s", + "create.item_attributes.shulker_level.full": "полный", + "create.item_attributes.shulker_level.empty": "пустой", + "create.item_attributes.shulker_level.partial": "частично заполнен", "create.item_attributes.in_tag": "помечен %1$s", "create.item_attributes.in_tag.inverted": "не помечен %1$s", "create.item_attributes.in_item_group": "принадлежит %1$s", "create.item_attributes.in_item_group.inverted": "не принадлежит '%1$s'", "create.item_attributes.added_by": "был добавлен %1$s", "create.item_attributes.added_by.inverted": "не был добавлен %1$s", - "create.item_attributes.shulker_level": "шалкер %1$s", - "create.item_attributes.shulker_level.inverted": "шалкер не %1$s", - "create.item_attributes.shulker_level.full": "полный", - "create.item_attributes.shulker_level.empty": "пустой", - "create.item_attributes.shulker_level.partial": "частично заполнен", "create.item_attributes.has_enchant": "зачарован на %1$s", "create.item_attributes.has_enchant.inverted": "не зачарован на %1$s", "create.item_attributes.color": "Покрашено в %1$s", "create.item_attributes.color.inverted": "Не покрашено в %1$s", - "create.item_attributes.max_enchanted": "Зачаровано за максимальный уровень", - "create.item_attributes.max_enchanted.inverted": "Не зачаровано за максимальный уровень", "create.item_attributes.has_fluid": "содержит %1$s", "create.item_attributes.has_fluid.inverted": "не содержит %1$s", "create.item_attributes.has_name": "имеет нестандартное имя %1$s", @@ -1090,14 +1119,14 @@ "create.item_attributes.book_copy_second.inverted": "не копия второго порядка", "create.item_attributes.book_copy_tattered": "полный беспорядок", "create.item_attributes.book_copy_tattered.inverted": "не полный беспорядок", - "create.item_attributes.astralsorcery_crystal": "имеет характеристики кристалла %1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "не имеет характеристики кристалла %1$s", - "create.item_attributes.astralsorcery_constellation": "настроено на %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "не настроено на %1$s", - "create.item_attributes.astralsorcery_perk_gem": "имеет характеристики перка %1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "не имеет характеристики перка %1$s", "create.item_attributes.astralsorcery_amulet": "исправляет %1$s", "create.item_attributes.astralsorcery_amulet.inverted": "не исправляет %1$s", + "create.item_attributes.astralsorcery_constellation": "настроено на %1$s", + "create.item_attributes.astralsorcery_constellation.inverted": "не настроено на %1$s", + "create.item_attributes.astralsorcery_crystal": "имеет характеристики кристалла %1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "не имеет характеристики кристалла %1$s", + "create.item_attributes.astralsorcery_perk_gem": "имеет характеристики перка %1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "не имеет характеристики перка %1$s", "create.gui.attribute_filter.no_selected_attributes": "Атрибуты не выбраны", "create.gui.attribute_filter.selected_attributes": "Выбранные атрибуты:", @@ -1394,6 +1423,15 @@ "block.create.turntable.tooltip": "ПОВОРОТНЫЙ СТОЛ", "block.create.turntable.tooltip.summary": "Преобразует _силу_ _вращения_ прямиком в морскую болезнь.", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "НАСТРАИВАЕМЫЙ КОМПАРАТОР", "block.create.stockpile_switch.tooltip.summary": "Подаёт сигнал красного камня в зависимости от _заполненности_ _прикреплённого_ _ящика_.", "block.create.stockpile_switch.tooltip.condition1": "Когда ниже нижнего предела", @@ -1401,6 +1439,10 @@ "block.create.content_observer.tooltip": "НАБЛЮДАТЕЛЬ ЗА СОДЕРЖИМЫМ", "block.create.content_observer.tooltip.summary": "_Обнаруживает элементы_ внутри _контейнеров_ и _конвейеров_, соответствующие настроенному _фильтру_. Если наблюдаемый инвентарь, ремень или шланг содержит совпадающий элемент, этот компонент излучает сигнал красного камня. Когда наблюдаемая _ воронка передает_ соответствующий предмет, этот компонент испускает _импульс_.", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "РЕГУЛИРУЕМЫЙ ЯЩИК", "block.create.adjustable_crate.tooltip.summary": "Этот контейнер для хранения позволяет вручную контролировать его емкость. Он может вместить до 16 стаков любого предмета. Поддерживает компараторы.", 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 2d31c18df..6e15adb82 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,10 +1,10 @@ { - "_": "Missing Localizations: 5", + "_": "Missing Localizations: 43", "_": "->------------------------] Game Elements [------------------------<-", - "block.create.acacia_window": "金合欢窗户", - "block.create.acacia_window_pane": "金合欢窗户板", + "block.create.acacia_window": "金合欢木窗户", + "block.create.acacia_window_pane": "金合欢木窗户板", "block.create.adjustable_chain_gearshift": "可调节链式传动箱", "block.create.adjustable_crate": "可调节板条箱", "block.create.adjustable_pulse_repeater": "可调节脉冲中继器", @@ -26,16 +26,18 @@ "block.create.andesite_tunnel": "安山岩隧道", "block.create.basin": "工作盆", "block.create.belt": "传送带", - "block.create.birch_window": "白桦窗户", - "block.create.birch_window_pane": "白桦窗户板", + "block.create.birch_window": "白桦木窗户", + "block.create.birch_window_pane": "白桦木窗户板", "block.create.black_nixie_tube": "黑色辉光管", "block.create.black_sail": "黑色风帆", "block.create.black_seat": "黑色坐垫", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "黑色阀门手轮", "block.create.blaze_burner": "烈焰人燃烧室", "block.create.blue_nixie_tube": "蓝色辉光管", "block.create.blue_sail": "蓝色风帆", "block.create.blue_seat": "蓝色坐垫", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "蓝色阀门手轮", "block.create.brass_belt_funnel": "黄铜传送带漏斗", "block.create.brass_block": "黄铜块", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "棕色辉光管", "block.create.brown_sail": "棕色风帆", "block.create.brown_seat": "棕色坐垫", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "block.create.brown_valve_handle": "棕色阀门手轮", "block.create.cart_assembler": "矿车装配站", "block.create.chiseled_dark_scoria": "錾制深色熔渣", @@ -56,12 +59,12 @@ "block.create.chiseled_weathered_limestone": "錾制风化石灰岩", "block.create.chocolate": "巧克力", "block.create.chute": "溜槽", - "block.create.clockwork_bearing": "时钟轴承", + "block.create.clockwork_bearing": "发条轴承", "block.create.clutch": "离合器", "block.create.cogwheel": "齿轮", "block.create.content_observer": "物品侦测器", "block.create.controller_rail": "控制铁轨", - "block.create.copper_backtank": "铜制背罐", + "block.create.copper_backtank": "Copper Backtank", "block.create.copper_block": "铜块", "block.create.copper_casing": "铜机壳", "block.create.copper_ore": "铜矿石", @@ -71,14 +74,15 @@ "block.create.creative_crate": "创造板条箱", "block.create.creative_fluid_tank": "创造流体储罐", "block.create.creative_motor": "创造马达", - "block.create.crimson_window": "绯红窗户", - "block.create.crimson_window_pane": "绯红窗户板", + "block.create.crimson_window": "绯红木窗户", + "block.create.crimson_window_pane": "绯红木窗户板", "block.create.crushing_wheel": "粉碎轮", "block.create.crushing_wheel_controller": "粉碎轮控制器", "block.create.cuckoo_clock": "布谷鸟闹钟", "block.create.cyan_nixie_tube": "青色辉光管", "block.create.cyan_sail": "青色风帆", "block.create.cyan_seat": "青色坐垫", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "block.create.cyan_valve_handle": "青色阀门手轮", "block.create.dark_oak_window": "深色橡木窗户", "block.create.dark_oak_window_pane": "深色橡木窗户板", @@ -186,20 +190,22 @@ "block.create.gray_nixie_tube": "灰色辉光管", "block.create.gray_sail": "灰色风帆", "block.create.gray_seat": "灰色坐垫", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "灰色阀门手轮", "block.create.green_nixie_tube": "绿色辉光管", "block.create.green_sail": "绿色风帆", "block.create.green_seat": "绿色坐垫", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "绿色阀门手轮", "block.create.hand_crank": "手摇曲柄", - "block.create.haunted_bell": "怪异钟", + "block.create.haunted_bell": "森魂钟", "block.create.honey": "蜂蜜", "block.create.horizontal_framed_glass": "竖直边框玻璃", "block.create.horizontal_framed_glass_pane": "竖直边框玻璃板", "block.create.hose_pulley": "软管滑轮", "block.create.item_drain": "分液池", - "block.create.jungle_window": "丛林窗户", - "block.create.jungle_window_pane": "丛林窗户板", + "block.create.jungle_window": "丛林木窗户", + "block.create.jungle_window_pane": "丛林木窗户板", "block.create.large_cogwheel": "大齿轮", "block.create.layered_andesite": "层叠安山岩", "block.create.layered_dark_scoria": "层叠深色熔渣", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "淡蓝色辉光管", "block.create.light_blue_sail": "淡蓝色风帆", "block.create.light_blue_seat": "淡蓝色坐垫", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "淡蓝色阀门手轮", "block.create.light_gray_nixie_tube": "淡灰色辉光管", "block.create.light_gray_sail": "淡灰色风帆", "block.create.light_gray_seat": "淡灰色坐垫", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "淡灰色阀门手轮", "block.create.lime_nixie_tube": "黄绿色辉光管", "block.create.lime_sail": "黄绿色风帆", "block.create.lime_seat": "黄绿色坐垫", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "黄绿色阀门手轮", "block.create.limesand": "石灰沙", "block.create.limestone": "石灰岩", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "品红色辉光管", "block.create.magenta_sail": "品红色风帆", "block.create.magenta_seat": "品红色坐垫", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "品红色阀门手轮", "block.create.mechanical_arm": "动力臂", "block.create.mechanical_bearing": "动力轴承", @@ -255,15 +265,15 @@ "block.create.metal_bracket": "金属支架", "block.create.millstone": "石磨", "block.create.minecart_anchor": "矿车锚", - "block.create.mossy_andesite": "生苔安山岩", - "block.create.mossy_dark_scoria": "生苔深色熔渣", - "block.create.mossy_diorite": "生苔闪长岩", - "block.create.mossy_dolomite": "生苔白云岩", - "block.create.mossy_gabbro": "生苔辉长岩", - "block.create.mossy_granite": "生苔花岗岩", - "block.create.mossy_limestone": "生苔石灰岩", - "block.create.mossy_scoria": "生苔熔渣", - "block.create.mossy_weathered_limestone": "生苔风化石灰岩", + "block.create.mossy_andesite": "覆苔安山岩", + "block.create.mossy_dark_scoria": "覆苔深色熔渣", + "block.create.mossy_diorite": "覆苔闪长岩", + "block.create.mossy_dolomite": "覆苔白云岩", + "block.create.mossy_gabbro": "覆苔辉长岩", + "block.create.mossy_granite": "覆苔花岗岩", + "block.create.mossy_limestone": "覆苔石灰岩", + "block.create.mossy_scoria": "覆苔熔渣", + "block.create.mossy_weathered_limestone": "覆苔风化石灰岩", "block.create.mysterious_cuckoo_clock": "布谷鸟闹钟", "block.create.natural_scoria": "天然熔渣", "block.create.nixie_tube": "辉光管", @@ -272,18 +282,19 @@ "block.create.oak_window_pane": "橡木窗户板", "block.create.orange_sail": "橙色风帆", "block.create.orange_seat": "橙色坐垫", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "block.create.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.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": "安山岩铺路石楼梯", @@ -321,9 +332,10 @@ "block.create.paved_weathered_limestone_stairs": "风化石灰岩铺路石楼梯", "block.create.paved_weathered_limestone_wall": "风化石灰岩铺路石墙", "block.create.peculiar_bell": "奇异钟", - "block.create.pink_nixie_tube": "粉色辉光管", + "block.create.pink_nixie_tube": "粉红色辉光管", "block.create.pink_sail": "粉红色风帆", "block.create.pink_seat": "粉红色坐垫", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "block.create.pink_valve_handle": "粉红色阀门手轮", "block.create.piston_extension_pole": "活塞杆", "block.create.polished_dark_scoria": "磨制深色熔渣", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "紫色辉光管", "block.create.purple_sail": "紫色风帆", "block.create.purple_seat": "紫色坐垫", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "紫色阀门手轮", "block.create.radial_chassis": "旋转底盘", "block.create.red_nixie_tube": "红色辉光管", "block.create.red_sail": "红色风帆", "block.create.red_seat": "红色坐垫", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "红色阀门手轮", "block.create.redstone_contact": "接触式红石信号发生器", "block.create.redstone_link": "无线红石信号终端", @@ -385,7 +399,7 @@ "block.create.scoria_cobblestone_stairs": "熔渣圆石楼梯", "block.create.scoria_cobblestone_wall": "熔渣圆石墙", "block.create.scoria_pillar": "竖纹熔渣", - "block.create.secondary_linear_chassis": "机壳底盘2号", + "block.create.secondary_linear_chassis": "机壳底盘 2 号", "block.create.sequenced_gearshift": "可编程齿轮箱", "block.create.shadow_steel_casing": "暗影机壳", "block.create.shaft": "传动杆", @@ -393,8 +407,8 @@ "block.create.smart_fluid_pipe": "智能流体管道", "block.create.speedometer": "速度表", "block.create.spout": "注液器", - "block.create.spruce_window": "云杉窗户", - "block.create.spruce_window_pane": "云杉窗户板", + "block.create.spruce_window": "云杉木窗户", + "block.create.spruce_window_pane": "云杉木窗户板", "block.create.sticker": "黏着器", "block.create.sticky_mechanical_piston": "黏性动力活塞", "block.create.stockpile_switch": "存量转换器", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "白色辉光管", "block.create.white_sail": "白色风帆", "block.create.white_seat": "白色坐垫", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "白色阀门手轮", "block.create.windmill_bearing": "风车轴承", "block.create.wooden_bracket": "木质支架", "block.create.yellow_nixie_tube": "黄色辉光管", "block.create.yellow_sail": "黄色风帆", "block.create.yellow_seat": "黄色坐垫", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "黄色阀门手轮", "block.create.zinc_block": "锌块", "block.create.zinc_ore": "锌矿石", @@ -467,7 +483,7 @@ "item.create.copper_sheet": "铜板", "item.create.crafter_slot_cover": "合成器盖板", "item.create.crafting_blueprint": "合成蓝图", - "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", + "item.create.creative_blaze_cake": "创造模式烈焰蛋糕", "item.create.crushed_aluminum_ore": "粉碎铝矿石", "item.create.crushed_brass": "粉碎黄铜", "item.create.crushed_copper_ore": "粉碎铜矿石", @@ -498,7 +514,7 @@ "item.create.honeyed_apple": "蜜渍苹果", "item.create.incomplete_cogwheel": "齿轮(半成品)", "item.create.incomplete_large_cogwheel": "大齿轮(半成品)", - "item.create.incomplete_precision_mechanism": "精密机构(半成品)", + "item.create.incomplete_precision_mechanism": "精密构件(半成品)", "item.create.iron_sheet": "铁板", "item.create.linked_controller": "无线红石遥控器", "item.create.minecart_contraption": "装配过的矿车", @@ -506,7 +522,7 @@ "item.create.polished_rose_quartz": "磨制玫瑰石英", "item.create.potato_cannon": "土豆加农炮", "item.create.powdered_obsidian": "黑曜石粉末", - "item.create.precision_mechanism": "精密机构", + "item.create.precision_mechanism": "精密构件", "item.create.propeller": "扇叶", "item.create.red_sand_paper": "红沙砂纸", "item.create.refined_radiance": "光辉石", @@ -530,18 +546,18 @@ "_": "->------------------------] Advancements [------------------------<-", "advancement.create.root": "欢迎来到机械动力", - "advancement.create.root.desc": "是时候来制作一些超赞的机械结构了!", - "advancement.create.andesite_alloy": "头韵狂魔(Alliterations Aplenty)", + "advancement.create.root.desc": "是时候来制作一些超赞的机械装置了!", + "advancement.create.andesite_alloy": "头韵狂魔(Alliterations Aplenty)", "advancement.create.andesite_alloy.desc": "机械动力的材料名字都很古怪,安山合金(Andesite Alloy)就是其中之一。", "advancement.create.its_alive": "鲜活的机械生命", - "advancement.create.its_alive.desc": "首次激活齿轮结构的旋转。", + "advancement.create.its_alive.desc": "首次激活动力学组件。", "advancement.create.shifting_gears": "换挡,加速,起飞!", - "advancement.create.shifting_gears.desc": "将大齿轮连接到小齿轮上,可以改变结构的转速。", + "advancement.create.shifting_gears.desc": "将大齿轮连接到小齿轮上,可以改变装置的转速。", "advancement.create.overstressed": "过载", "advancement.create.overstressed.desc": "首次使能量网络过载。", "advancement.create.belt": "海带传动", "advancement.create.belt.desc": "用传送带连接两个传动杆", - "advancement.create.tunnel": "找掩护!", + "advancement.create.tunnel": "躲起来!", "advancement.create.tunnel.desc": "用隧道装饰传送带。", "advancement.create.splitter_tunnel": "分而治之", "advancement.create.splitter_tunnel.desc": "用黄铜隧道设计一个分流器。", @@ -558,7 +574,7 @@ "advancement.create.fan_lava": "地热取暖", "advancement.create.fan_lava.desc": "被熔炼气流烤的酥脆。", "advancement.create.fan_water": "奇妙的洗涤流程", - "advancement.create.fan_water.desc": "被洗涤气流洗了个澡。", + "advancement.create.fan_water.desc": "在洗涤气流里洗了个澡。", "advancement.create.fan_smoke": "动力风箱", "advancement.create.fan_smoke.desc": "被烟熏气流熏得满脸黑。", "advancement.create.wrench": "细节调整", @@ -569,25 +585,25 @@ "advancement.create.speedometer.desc": "放置一个速度表,并且带上工程师护目镜来读取速度数据", "advancement.create.stressometer": "精密的应力控制", "advancement.create.stressometer.desc": "放置一个应力表,并且带上工程师护目镜来读取应力数据", - "advancement.create.aesthetics": "美观,即是一切!", + "advancement.create.aesthetics": "什么叫美学,这就叫美学!", "advancement.create.aesthetics.desc": "将支架放在传动杆,管道和齿轮上。", - "advancement.create.reinforced": "Boom~ 加强!", + "advancement.create.reinforced": "什么叫强化,这就叫强化!", "advancement.create.reinforced.desc": "在传动杆,管道和传送带上使用机壳加固。", - "advancement.create.water_wheel": "治水", + "advancement.create.water_wheel": "掌控水流", "advancement.create.water_wheel.desc": "放置一个水车并且让它开始旋转", - "advancement.create.chocolate_wheel": "味美动力", + "advancement.create.chocolate_wheel": "美味动力", "advancement.create.chocolate_wheel.desc": "用熔融巧克力驱动水车。", "advancement.create.lava_wheel": "风火轮", - "advancement.create.lava_wheel.desc": "它本不应该起作用的......", - "advancement.create.cuckoo": "到点了吗?", - "advancement.create.cuckoo.desc": "目睹布谷鸟钟宣布就寝时间。", + "advancement.create.lava_wheel.desc": "按理说根本不可能运转得起来。", + "advancement.create.cuckoo": "到点儿了吗?", + "advancement.create.cuckoo.desc": "目睹布谷鸟钟提醒你该睡觉觉了。", "advancement.create.millstone": "便携式粉碎机", "advancement.create.millstone.desc": "放置一个石磨并且为其供能", "advancement.create.windmill": "微风吹拂", "advancement.create.windmill.desc": "组装风车。", "advancement.create.maxed_windmill": "强风肆虐", "advancement.create.maxed_windmill.desc": "组装最大强度的风车。", - "advancement.create.andesite_casing": "安山纪元", + "advancement.create.andesite_casing": "安山时代", "advancement.create.andesite_casing.desc": "使用安山合金和木头来合成一个安山机壳", "advancement.create.mechanical_drill": "坚如磐石,势如破竹", "advancement.create.mechanical_drill.desc": "放置一个动力钻头并且为其供能", @@ -609,13 +625,13 @@ "advancement.create.compact.desc": "使用辊压机在工作盆中压缩一些物品", "advancement.create.brass": "真正的合金", "advancement.create.brass.desc": "使用粉碎锌矿石和粉碎铜矿石来制作粉碎黄铜", - "advancement.create.brass_casing": "黄铜纪元", + "advancement.create.brass_casing": "黄铜时代", "advancement.create.brass_casing.desc": "用黄铜和木头制作一个黄铜机壳", - "advancement.create.copper_casing": "铜之纪元", + "advancement.create.copper_casing": "铜器时代", "advancement.create.copper_casing.desc": "使用铜和木头制作一个铜制机壳", "advancement.create.spout": "哗啦啦", "advancement.create.spout.desc": "观察注液器灌满物品。", - "advancement.create.spout_potion": "全球啤酒厂", + "advancement.create.spout_potion": "环球酿造厂", "advancement.create.spout_potion.desc": "观察注液器注入药水到玻璃瓶。", "advancement.create.chocolate": "幻想世界", "advancement.create.chocolate.desc": "获取一桶熔融巧克力。", @@ -631,29 +647,29 @@ "advancement.create.pipe_spill.desc": "观察管道的开口端将流体排放或放置到世界中。", "advancement.create.hose_pulley": "工业泄漏", "advancement.create.hose_pulley.desc": "放下一个软管滑轮,观察它排干或填充一大片液体。", - "advancement.create.infinite_water": "排干海洋", + "advancement.create.infinite_water": "抽干大海", "advancement.create.infinite_water.desc": "从大到足以被认为是无限的水源中抽水。", "advancement.create.infinite_lava": "汲取行星核心", "advancement.create.infinite_lava.desc": "从广阔的熔岩湖中抽出熔岩。", - "advancement.create.infinite_chocolate": "幻想沉溺", + "advancement.create.infinite_chocolate": "美梦不饶人", "advancement.create.infinite_chocolate.desc": "从大到足以被被视为无限的巧克力海中抽取巧克力。", "advancement.create.crafter": "自动化装配", "advancement.create.crafter.desc": "放置一些机械合成台并且为其供能", "advancement.create.clockwork_bearing": "巧械时钟", - "advancement.create.clockwork_bearing.desc": "组装安装在发条轴承上的结构。", + "advancement.create.clockwork_bearing.desc": "组装安装在发条轴承上的装置。", "advancement.create.nixie_tube": "花样符号", "advancement.create.nixie_tube.desc": "获取并放下一对辉光管。", "advancement.create.deployer": "我就指着你了咋地?", "advancement.create.deployer.desc": "放置并且功能一个机械手。这可是你右手的完美复制品", - "advancement.create.speed_controller": "工程师讨厌他!", + "advancement.create.speed_controller": "工程师的眼中钉", "advancement.create.speed_controller.desc": "放置一个转速控制器,这是换档的终极装置。", "advancement.create.flywheel": "工厂之心", "advancement.create.flywheel.desc": "将引擎成功连接到飞轮。", - "advancement.create.overstress_flywheel": "高压", + "advancement.create.overstress_flywheel": "压力山大", "advancement.create.overstress_flywheel.desc": "过载熔炉引擎。", "advancement.create.precision_mechanism": "高新技术", - "advancement.create.precision_mechanism.desc": "装配一个精密机构。", - "advancement.create.mechanical_arm": "忙碌的手!", + "advancement.create.precision_mechanism.desc": "装配一个精密构件。", + "advancement.create.mechanical_arm": "飞转的手!", "advancement.create.mechanical_arm.desc": "制作机械臂,选择输入和输出,放置并给予它动力,然后看着它为你完成所有工作。", "advancement.create.musical_arm": "没人能在我的 BGM 里打败我!", "advancement.create.musical_arm.desc": "使用动力臂播放唱片。", @@ -673,7 +689,7 @@ "advancement.create.shadow_steel.desc": "制作一些暗影钢", "advancement.create.refined_radiance": "明亮而启灵", "advancement.create.refined_radiance.desc": "制作一个光辉石", - "advancement.create.chromatic_age": "异彩纪元", + "advancement.create.chromatic_age": "异彩时代", "advancement.create.chromatic_age.desc": "创造出光与影的机壳。", "advancement.create.wand_of_symmetry": "简单的镜面几何学", "advancement.create.wand_of_symmetry.desc": "制作一个对称之杖", @@ -690,7 +706,7 @@ "_": "->------------------------] UI & Messages [------------------------<-", "itemGroup.create.base": "机械动力", - "itemGroup.create.palettes": "机械动力建筑方块", + "itemGroup.create.palettes": "机械动力丨建筑方块", "death.attack.create.crush": "%1$s被压扁了", "death.attack.create.crush.player": "%1$s被%2$s推进了粉碎机", @@ -728,13 +744,13 @@ "create.recipe.fan_blasting.fan": "在熔岩后放置鼓风机", "create.recipe.pressing": "金属压片", "create.recipe.mixing": "混合搅拌", - "create.recipe.deploying": "自动使用", + "create.recipe.deploying": "使用", "create.recipe.automatic_shapeless": "自动搅拌", "create.recipe.automatic_brewing": "自动酿造", "create.recipe.packing": "压块塑形", "create.recipe.automatic_packing": "自动打包", - "create.recipe.sawing": "板材切割", - "create.recipe.mechanical_crafting": "自动合成", + "create.recipe.sawing": "切割", + "create.recipe.mechanical_crafting": "动力合成", "create.recipe.automatic_shaped": "自动合成", "create.recipe.block_cutting": "方块切割", "create.recipe.wood_cutting": "木材切割", @@ -742,17 +758,18 @@ "create.recipe.mystery_conversion": "神秘转化", "create.recipe.spout_filling": "注液", "create.recipe.draining": "分液", - "create.recipe.sequenced_assembly": "流水线装配", + "create.recipe.sequenced_assembly": "序列组装", "create.recipe.assembly.next": "下一步:%1$s", "create.recipe.assembly.step": "第%1$s步:", "create.recipe.assembly.progress": "组装进度:%1$s/%2$s", - "create.recipe.assembly.pressing": "用辊压机辊压", + "create.recipe.assembly.pressing": "进行辊压", "create.recipe.assembly.spout_filling_fluid": "注入%1$s", "create.recipe.assembly.deploying_item": "安装%1$s", "create.recipe.assembly.cutting": "用动力锯切割", - "create.recipe.assembly.repeat": "该序列需要重复%1$s次", + "create.recipe.assembly.repeat": "该序列需要重复 %1$s 次", "create.recipe.assembly.junk": "随机废料", "create.recipe.processing.chance": "%1$s%%概率", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "无需加热", "create.recipe.heat_requirement.heated": "加热", "create.recipe.heat_requirement.superheated": "超级加热", @@ -781,6 +798,7 @@ "create.action.discard": "放弃", "create.keyinfo.toolmenu": "工具菜单", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "(游戏中)向上鼠标滚轮", "create.keyinfo.scrolldown": "(游戏中)向下鼠标滚轮", @@ -788,9 +806,16 @@ "create.gui.scrollInput.scrollToModify": "滚动修改", "create.gui.scrollInput.scrollToAdjustAmount": "滚动修改数量", "create.gui.scrollInput.scrollToSelect": "滚动选择", - "create.gui.scrollInput.shiftScrollsFaster": "按住Shift滚动更快", + "create.gui.scrollInput.shiftScrollsFaster": "按住 Shift 滚动更快", "create.gui.toolmenu.focusKey": "按住 [%1$s] 鼠标滚轮选择", "create.gui.toolmenu.cycle": "[SCROLL] 循环", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "镜子类型", "create.gui.symmetryWand.orientation": "方向", @@ -806,14 +831,14 @@ "create.gui.terrainzapper.title": "手持式环境塑形器", "create.gui.terrainzapper.searchDiagonal": "对角线延伸", - "create.gui.terrainzapper.searchFuzzy": "模糊模式(忽略材料分界)", + "create.gui.terrainzapper.searchFuzzy": "忽略质料分界", "create.gui.terrainzapper.patternSection": "样式", "create.gui.terrainzapper.pattern.solid": "填满", "create.gui.terrainzapper.pattern.checkered": "棋盘格", "create.gui.terrainzapper.pattern.inversecheckered": "反转棋盘格", - "create.gui.terrainzapper.pattern.chance25": "随机填充25%", - "create.gui.terrainzapper.pattern.chance50": "随机填充50%", - "create.gui.terrainzapper.pattern.chance75": "随机填充75%", + "create.gui.terrainzapper.pattern.chance25": "随机填充 25%", + "create.gui.terrainzapper.pattern.chance50": "随机填充 50%", + "create.gui.terrainzapper.pattern.chance75": "随机填充 75%", "create.gui.terrainzapper.placement": "放置模式", "create.gui.terrainzapper.placement.merged": "结合", "create.gui.terrainzapper.placement.attached": "依附", @@ -822,8 +847,8 @@ "create.gui.terrainzapper.brush.cuboid": "矩形体", "create.gui.terrainzapper.brush.sphere": "球体", "create.gui.terrainzapper.brush.cylinder": "圆柱体", - "create.gui.terrainzapper.brush.surface": "连接的面", - "create.gui.terrainzapper.brush.cluster": "连接的立体区域", + "create.gui.terrainzapper.brush.surface": "表面", + "create.gui.terrainzapper.brush.cluster": "簇状", "create.gui.terrainzapper.tool": "填充类型", "create.gui.terrainzapper.tool.fill": "填充", "create.gui.terrainzapper.tool.place": "复写", @@ -832,8 +857,8 @@ "create.gui.terrainzapper.tool.overlay": "覆盖", "create.gui.terrainzapper.tool.flatten": "平整", - "create.terrainzapper.shiftRightClickToSet": "Shift+鼠标右击以设置塑形类型", - "create.terrainzapper.usingBlock": "填充材料:%1$s", + "create.terrainzapper.shiftRightClickToSet": "按住 Shift 右击以设置塑形类型", + "create.terrainzapper.usingBlock": "使用:%1$s", "create.terrainzapper.leftClickToSet": "鼠标左击一个方块以设置填充材料", "create.minecart_coupling.two_couplings_max": "矿车无法被连接两个以上的矿车连轴器", @@ -850,20 +875,20 @@ "create.contraptions.movement_mode.rotate_place_returned": "停止时只在接近初始角度才将装置方块化", "create.contraptions.movement_mode.rotate_never_place": "只有在旋转轴摧毁后才将装置方块化", "create.contraptions.cart_movement_mode": "矿车运动模式", - "create.contraptions.cart_movement_mode.rotate": "装置与矿车保持相同方向", + "create.contraptions.cart_movement_mode.rotate": "始终面朝前进方向", "create.contraptions.cart_movement_mode.rotate_paused": "矿车转向时机器停止工作", - "create.contraptions.cart_movement_mode.rotation_locked": "装置方向保持不变", + "create.contraptions.cart_movement_mode.rotation_locked": "旋转锁定", "create.contraptions.windmill.rotation_direction": "旋转方向", "create.contraptions.clockwork.clock_hands": "钟表指针", "create.contraptions.clockwork.hour_first": "时针优先", "create.contraptions.clockwork.minute_first": "分针优先", - "create.contraptions.clockwork.hour_first_24": "24小时制优先", + "create.contraptions.clockwork.hour_first_24": "24 小时制优先", "create.logistics.filter": "过滤器", "create.logistics.recipe_filter": "配方过滤器", "create.logistics.fluid_filter": "流体过滤器", - "create.logistics.firstFrequency": "频道. #1", - "create.logistics.secondFrequency": "频道. #2", + "create.logistics.firstFrequency": "UNLOCALIZED: Freq. #1", + "create.logistics.secondFrequency": "UNLOCALIZED: Freq. #2", "create.logistics.filter.apply": "已将过滤应用于%1$s。", "create.logistics.filter.apply_click_again": "已将过滤应用于%1$s,再次点击可将手持物品数量复制到过滤器上。", "create.logistics.filter.apply_count": "已将提取数量应用至过滤器。", @@ -874,13 +899,13 @@ "create.gui.goggles.pole_length": "活塞杆长度:", "create.gui.goggles.fluid_container": "流体容器信息:", "create.gui.goggles.fluid_container.capacity": "容量:", - "create.gui.assembly.exception": "无法组装该结构:", + "create.gui.assembly.exception": "无法组装该装置:", "create.gui.assembly.exception.unmovableBlock": "无法移动的方块:(%4$s)位于 [%1$s,%2$s,%3$s]", - "create.gui.assembly.exception.chunkNotLoaded": "位于 [%1$s,%2$s,%3$s] 的方块未处于加载区块", - "create.gui.assembly.exception.structureTooLarge": "结构中的方块数量过多。\n配置中的最大数量限制为:%1$s", - "create.gui.assembly.exception.tooManyPistonPoles": "活塞加装的活塞杆数量过多。\n配置中的最大数量限制为:%1$s", + "create.gui.assembly.exception.chunkNotLoaded": "位于 [%1$s,%2$s,%3$s] 的方块未处于加载区块", + "create.gui.assembly.exception.structureTooLarge": "装置中的方块数量过多。", + "create.gui.assembly.exception.tooManyPistonPoles": "活塞加装的活塞杆数量过多。", "create.gui.assembly.exception.noPistonPoles": "活塞缺失部分活塞杆", - "create.gui.assembly.exception.not_enough_sails": "相接的结构所包含的类风帆方块的数量不足。%1$s\n最低需要 %2$s 个方块", + "create.gui.assembly.exception.not_enough_sails": "相接的结构所包含的类风帆方块的数量不足。%1$s", "create.gui.gauge.info_header": "仪表信息:", "create.gui.speedometer.title": "旋转速度", "create.gui.stressometer.title": "网络应力", @@ -919,7 +944,7 @@ "create.schematicAndQuill.dimensions": "蓝图尺寸:%1$sx%2$sx%3$s", "create.schematicAndQuill.firstPos": "第一个位置。", "create.schematicAndQuill.secondPos": "第二个位置。", - "create.schematicAndQuill.noTarget": "按住Ctrl选择空气方块。", + "create.schematicAndQuill.noTarget": "按住 Ctrl 选择空气方块。", "create.schematicAndQuill.abort": "删除选择。", "create.schematicAndQuill.title": "蓝图名:", "create.schematicAndQuill.convert": "立即保存并部署", @@ -945,18 +970,18 @@ "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.deploy.description.2": "按住 Ctrl 以固定距离选择。", + "create.schematic.tool.deploy.description.3": "按住 Ctrl 鼠标滚动更改距离。", "create.schematic.tool.move.description.0": "水平移动蓝图", - "create.schematic.tool.move.description.1": "选定蓝图,然后按住Ctrl鼠标滚动移动。", + "create.schematic.tool.move.description.1": "选定蓝图,然后按住 Ctrl 鼠标滚动移动。", "create.schematic.tool.move.description.2": "", "create.schematic.tool.move.description.3": "", "create.schematic.tool.movey.description.0": "垂直移动蓝图", - "create.schematic.tool.movey.description.1": "按住Ctrl鼠标滚动上下移动", + "create.schematic.tool.movey.description.1": "按住 Ctrl 鼠标滚动上下移动", "create.schematic.tool.movey.description.2": "", "create.schematic.tool.movey.description.3": "", "create.schematic.tool.rotate.description.0": "围绕蓝图中心旋转蓝图。", - "create.schematic.tool.rotate.description.1": "按住Ctrl鼠标滚动旋转90度", + "create.schematic.tool.rotate.description.1": "按住 Ctrl 鼠标滚动旋转90度", "create.schematic.tool.rotate.description.2": "", "create.schematic.tool.rotate.description.3": "", "create.schematic.tool.print.description.0": "立即将结构放置在世界上", @@ -964,7 +989,7 @@ "create.schematic.tool.print.description.2": "该工具仅适用于创造模式。", "create.schematic.tool.print.description.3": "", "create.schematic.tool.flip.description.0": "沿你选择的面翻转蓝图。", - "create.schematic.tool.flip.description.1": "指向蓝图,然后按住Ctrl鼠标滚动将其翻转。", + "create.schematic.tool.flip.description.1": "指向蓝图,然后按住 Ctrl 鼠标滚动将其翻转。", "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", @@ -991,7 +1016,7 @@ "create.gui.schematicannon.option.replaceWithSolid": "用固体方块替换工作区域内的方块", "create.gui.schematicannon.option.replaceWithAny": "用任何方块替换工作区域内的方块", "create.gui.schematicannon.option.replaceWithEmpty": "用空气替换工作区域内的方块", - "create.gui.schematicannon.option.skipMissing": "绕过缺少的方块", + "create.gui.schematicannon.option.skipMissing": "跳过缺少的方块", "create.gui.schematicannon.option.skipTileEntities": "保护存储方块", "create.gui.schematicannon.slot.gunpowder": "向蓝图加农炮添加火药以提供动力", "create.gui.schematicannon.slot.listPrinter": "在此处放置书以打印蓝图所需的材料清单", @@ -1003,17 +1028,17 @@ "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.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.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": "清除方块中", @@ -1022,7 +1047,7 @@ "create.schematicannon.status.schematicExpired": "蓝图文件已过期", "create.materialChecklist": "材料清单", - "create.materialChecklist.blocksNotLoaded": "*免责声明* \n\n由于未加载相关区块,材料清单可能不正确。", + "create.materialChecklist.blocksNotLoaded": "*免责声明* ", "create.gui.filter.deny_list": "黑名单", "create.gui.filter.deny_list.description": "只通过不在黑名单中的物品,如果黑名单为空,所有物品都可以通过", @@ -1037,18 +1062,14 @@ "create.item_attributes.placeable.inverted": "不可放置", "create.item_attributes.consumable": "可食用", "create.item_attributes.consumable.inverted": "不可食用", - "create.item_attributes.smeltable": "可被熔炉烧制", - "create.item_attributes.smeltable.inverted": "不可被熔炉烧制", - "create.item_attributes.washable": "可被洗涤", - "create.item_attributes.washable.inverted": "不可被洗涤", - "create.item_attributes.smokable": "可被烟熏", - "create.item_attributes.smokable.inverted": "不可被烟熏", - "create.item_attributes.crushable": "可被粉碎", - "create.item_attributes.crushable.inverted": "不可被粉碎", - "create.item_attributes.blastable": "可被高炉冶炼", - "create.item_attributes.blastable.inverted": "不可被高炉冶炼", + "create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "已被附魔", "create.item_attributes.enchanted.inverted": "未被附魔", + "create.item_attributes.max_enchanted": "已达到最高附魔等级", + "create.item_attributes.max_enchanted.inverted": "并未达到最高附魔等级", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "create.item_attributes.damaged": "已损坏", "create.item_attributes.damaged.inverted": "未损坏", "create.item_attributes.badly_damaged": "严重受损", @@ -1059,25 +1080,33 @@ "create.item_attributes.equipable.inverted": "不可装备", "create.item_attributes.furnace_fuel": "可作为燃料", "create.item_attributes.furnace_fuel.inverted": "不可作为燃料", + "create.item_attributes.washable": "可被洗涤", + "create.item_attributes.washable.inverted": "不可被洗涤", + "create.item_attributes.crushable": "可被粉碎", + "create.item_attributes.crushable.inverted": "不可被粉碎", + "create.item_attributes.smeltable": "可被熔炉烧制", + "create.item_attributes.smeltable.inverted": "不可被熔炉烧制", + "create.item_attributes.smokable": "可被烟熏", + "create.item_attributes.smokable.inverted": "不可被烟熏", + "create.item_attributes.blastable": "可被高炉冶炼", + "create.item_attributes.blastable.inverted": "不可被高炉冶炼", + "create.item_attributes.shulker_level": "潜影盒是%1$s的", + "create.item_attributes.shulker_level.inverted": "潜影盒不是%1$s的", + "create.item_attributes.shulker_level.full": "满", + "create.item_attributes.shulker_level.empty": "空", + "create.item_attributes.shulker_level.partial": "部分填充", "create.item_attributes.in_tag": "标签是%1$s", "create.item_attributes.in_tag.inverted": "标签不是%1$s", "create.item_attributes.in_item_group": "属于%1$s", "create.item_attributes.in_item_group.inverted": "不属于%1$s", "create.item_attributes.added_by": "由%1$s添加", - "create.item_attributes.added_by.inverted": "不是由%1$s添加", - "create.item_attributes.shulker_level": "潜影盒是%1$s的", - "create.item_attributes.shulker_level.inverted": "潜影盒不是%1$s的", - "create.item_attributes.shulker_level.full": "满", - "create.item_attributes.shulker_level.empty": "空", - "create.item_attributes.shulker_level.partial": "半满", + "create.item_attributes.added_by.inverted": "不由%1$s添加", "create.item_attributes.has_enchant": "有附魔效果%1$s", "create.item_attributes.has_enchant.inverted": "没有附魔效果%1$s", "create.item_attributes.color": "染色为%1$s", "create.item_attributes.color.inverted": "未被染成%1$s", - "create.item_attributes.max_enchanted": "已达到最高附魔等", - "create.item_attributes.max_enchanted.inverted": "并未达到最高附魔等级", - "create.item_attributes.has_fluid": "包含%1$s", - "create.item_attributes.has_fluid.inverted": "不包含%1$s", + "create.item_attributes.has_fluid": "含有%1$s", + "create.item_attributes.has_fluid.inverted": "不含有%1$s", "create.item_attributes.has_name": "有自定义名称%1$s", "create.item_attributes.has_name.inverted": "没有自定义名称%1$s", "create.item_attributes.book_author": "由%1$s编写", @@ -1090,17 +1119,17 @@ "create.item_attributes.book_copy_second.inverted": "不是第二代拷贝", "create.item_attributes.book_copy_tattered": "拷贝次数已不可查", "create.item_attributes.book_copy_tattered.inverted": "不是拷贝次数已不可查", - "create.item_attributes.astralsorcery_crystal": "有水晶石属性%1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "没有水晶石属性%1$s", - "create.item_attributes.astralsorcery_constellation": "与%1$s共鸣", - "create.item_attributes.astralsorcery_constellation.inverted": "不与%1$s共鸣", - "create.item_attributes.astralsorcery_perk_gem": "带有有星能力属性%1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "不带有星能力属性%1$s", "create.item_attributes.astralsorcery_amulet": "璀璨棱镜增强%1$s", "create.item_attributes.astralsorcery_amulet.inverted": "璀璨棱镜未增强%1$s", + "create.item_attributes.astralsorcery_constellation": "与%1$s共鸣", + "create.item_attributes.astralsorcery_constellation.inverted": "不与%1$s共鸣", + "create.item_attributes.astralsorcery_crystal": "有水晶石属性%1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "没有水晶石属性%1$s", + "create.item_attributes.astralsorcery_perk_gem": "带有有星能力属性%1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "不带有星能力属性%1$s", - "create.gui.attribute_filter.no_selected_attributes": "没有标记任何属性", - "create.gui.attribute_filter.selected_attributes": "已选择的属性:", + "create.gui.attribute_filter.no_selected_attributes": "未选择任何属性", + "create.gui.attribute_filter.selected_attributes": "已选择的属性:", "create.gui.attribute_filter.add_attribute": "向列表中添加属性", "create.gui.attribute_filter.add_inverted_attribute": "向列表中添加相反属性", "create.gui.attribute_filter.allow_list_disjunctive": "任意匹配白名单(任何)", @@ -1132,14 +1161,14 @@ "create.tooltip.analogStrength": "模拟信号强度:%1$s/15", "create.mechanical_arm.extract_from": "从%1$s中拿取物品", - "create.mechanical_arm.deposit_to": "向%1$s存储物品", - "create.mechanical_arm.summary": "动力臂当前有%1$s个输入,%2$s个输出。", + "create.mechanical_arm.deposit_to": "将物品存储至%1$s", + "create.mechanical_arm.summary": "动力臂当前有 %1$s 个输入,%2$s 个输出。", "create.mechanical_arm.points_outside_range": "由于距离限制,选定的交互点%1$s已被移除。", "create.weighted_ejector.target_set": "目标已选取", "create.weighted_ejector.target_not_valid": "弹射至临近方块(目标无效)", "create.weighted_ejector.no_target": "弹射至临近方块(未选择目标)", - "create.weighted_ejector.targeting": "弹射至[%1$s,%2$s,%3$s]", + "create.weighted_ejector.targeting": "弹射至 [%1$s,%2$s,%3$s]", "create.weighted_ejector.stack_size": "弹射物品堆数量", "create.logistics.when_multiple_outputs_available": "当多个输出可用时", @@ -1165,22 +1194,22 @@ "create.tooltip.chute.fans_pull_up": "鼓风机从上方进行吸引", "create.tooltip.chute.fans_pull_down": "鼓风机从下方进行吸引", "create.tooltip.chute.contains": "内含物品:%1$s x%2$s", - "create.tooltip.brass_tunnel.contains": "等待分配的物品:", - "create.tooltip.brass_tunnel.contains_entry": "> %2$s个%1$s", + "create.tooltip.brass_tunnel.contains": "目前分配:", + "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", "create.tooltip.brass_tunnel.retrieve": "鼠标右击取出", "create.linked_controller.bind_mode": "绑定模式激活", - "create.linked_controller.press_keybind": "按%1$s,%2$s,%3$s,%4$s,%5$s或%6$s选择要将该频率绑定到哪个按键。", + "create.linked_controller.press_keybind": "按下%1$s、%2$s、%3$s、%4$s、%5$s或%6$s,可以将该频率绑定到按下的按键上。", "create.linked_controller.key_bound": "该频率已绑定到%1$s", - "create.linked_controller.frequency_slot_1": "按键:%1$s,频道 #1", - "create.linked_controller.frequency_slot_2": "按键:%1$s,频道 #2", + "create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1", + "create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2", - "create.crafting_blueprint.crafting_slot": "合成材料格", + "create.crafting_blueprint.crafting_slot": "原料槽", "create.crafting_blueprint.filter_items_viable": "可以使用过滤器", - "create.crafting_blueprint.display_slot": "展示的图标", + "create.crafting_blueprint.display_slot": "展示槽", "create.crafting_blueprint.inferred": "已根据合成配方自动设定", "create.crafting_blueprint.manually_assigned": "手动设定", - "create.crafting_blueprint.secondary_display_slot": "展示的图标角标", + "create.crafting_blueprint.secondary_display_slot": "次要展示槽", "create.crafting_blueprint.optional": "可选", "create.potato_cannon.ammo.attack_damage": "%1$s 攻击伤害", @@ -1192,7 +1221,7 @@ "create.hint.mechanical_arm_no_targets.title": "没有目标", "create.hint.mechanical_arm_no_targets": "看起来这个_动力臂_没有被分配给任何_目标_。在手持机械臂的同时,右击选取传送带、置物台、漏斗或其他设备来设置目标。", "create.hint.empty_bearing.title": "更新轴承", - "create.hint.empty_bearing": "_空手右击_轴承来_激活_你新建造的结构。", + "create.hint.empty_bearing": "_空手右击_轴承,可以将你新建造的结构_接到_轴承上。", "create.hint.full_deployer.title": "机械手物品溢出", "create.hint.full_deployer": "_机械手_包含_过剩的物品,_需要被_提取。你需要_使用_料斗,__漏斗_或其他方法将溢出释放出来。", @@ -1206,15 +1235,15 @@ "create.gui.config.overlay8": "重置到默认位置", "create.command.killTPSCommand": "killtps", - "create.command.killTPSCommand.status.slowed_by.0": "[Create]: 服务器每秒tick速被降低为 %s ms :o", - "create.command.killTPSCommand.status.slowed_by.1": "[Create]: 服务器现在每秒tick速被降低为 >:)", - "create.command.killTPSCommand.status.slowed_by.2": "[Create]: 服务器恢复到正常速度 :D", - "create.command.killTPSCommand.status.usage.0": "[Create]: 用 /killtps stop 来让服务器的TPS速度变回正常", - "create.command.killTPSCommand.status.usage.1": "[Create]: 用 /killtps start 来手动降低服务器TPS速度", + "create.command.killTPSCommand.status.slowed_by.0": "[Create]: 服务器现在的 TPS 速度被降低为 %s ms :o", + "create.command.killTPSCommand.status.slowed_by.1": "[Create]: 服务器现在的 TPS 速度被降低为 >:)", + "create.command.killTPSCommand.status.slowed_by.2": "[Create]: 服务器恢复到正常的 TPS 速度 :D", + "create.command.killTPSCommand.status.usage.0": "[Create]: 用 /killtps stop 来让服务器的 TPS 速度变回正常", + "create.command.killTPSCommand.status.usage.1": "[Create]: 用 /killtps start 来手动降低服务器 TPS 速度", "create.command.killTPSCommand.argument.tickTime": "tickTime", "create.contraption.minecart_contraption_too_big": "这一矿车装置似乎太大了,无法变为拾捡状态", - "create.contraption.minecart_contraption_illegal_pickup": "神秘的力量阻止你拾取这个矿车装置。", + "create.contraption.minecart_contraption_illegal_pickup": "一股神秘的力量将这一装置与世界牢牢绑定在了一起。", "_": "->------------------------] Subtitles [------------------------<-", @@ -1231,12 +1260,12 @@ "create.subtitle.blaze_munch": "烈焰人:咀嚼", "create.subtitle.funnel_flap": "漏斗:垂帘碰撞", "create.subtitle.schematicannon_finish": "蓝图加农炮:叮", - "create.subtitle.haunted_bell_use": "怪异钟:鸣响", + "create.subtitle.haunted_bell_use": "森魂钟:鸣响", "create.subtitle.scroll_value": "拨码输入:咔哒", "create.subtitle.crafter_craft": "动力合成器:合成中", "create.subtitle.controller_put": "遥控器:放进讲台", "create.subtitle.cranking": "手摇曲柄:转动", - "create.subtitle.wrench_remove": "部件:被破坏", + "create.subtitle.wrench_remove": "组件:被破坏", "create.subtitle.cogs": "齿轮:嘎吱作响", "create.subtitle.slime_added": "粘液:挤碎声", "create.subtitle.wrench_rotate": "扳手:拧动", @@ -1276,7 +1305,7 @@ "block.create.seat.tooltip": "坐垫", "block.create.seat.tooltip.summary": "坐下来享受旅程吧!坐垫将会把玩家固定在一个移动装置上。也可以用来作为居家装饰,毕竟他有许多颜色。", "block.create.seat.tooltip.condition1": "右击坐垫", - "block.create.seat.tooltip.behaviour1": "会使得玩家坐在_坐垫_上,L-Shift可离开_坐垫_。", + "block.create.seat.tooltip.behaviour1": "会使得玩家坐在_坐垫_上,按下左 Shift 可离开_坐垫_。", "item.create.blaze_cake.tooltip": "烈焰蛋糕", "item.create.blaze_cake.tooltip.summary": "为辛勤劳作的_烈焰人_精心准备的美味。让他们兴奋起来吧!", @@ -1316,7 +1345,7 @@ "item.create.potato_cannon.tooltip": "土豆加农炮", "item.create.potato_cannon.tooltip.summary": "噗!把你亲手栽培的蔬菜砸向你的敌人。可以使用_铜制背罐_供能。", "item.create.potato_cannon.tooltip.condition1": "当右击时", - "item.create.potato_cannon.tooltip.behaviour1": "_发射_你_物品栏_中任一可做弹药的物品。", + "item.create.potato_cannon.tooltip.behaviour1": "_发射_你_物品栏_中任一可作为弹药的物品。", "item.create.potato_cannon.tooltip.condition2": "当装备铜制背罐时", "item.create.potato_cannon.tooltip.behaviour2": "使用罐中_气压_来_抵消_土豆加农炮的_耐久_损耗。", @@ -1359,8 +1388,8 @@ "block.create.schematicannon.tooltip": "蓝图加农炮", "block.create.schematicannon.tooltip.summary": "发射方块,重新构建已在世界中部署的_蓝图_,会使用相邻箱子中的物品进行填充,_火药_作为燃料。", - "block.create.schematicannon.tooltip.condition1": "当右击时", - "block.create.schematicannon.tooltip.behaviour1": "打开_配置面板_。", + "block.create.schematicannon.tooltip.condition1": "When R-Clicked", + "block.create.schematicannon.tooltip.behaviour1": "Opens the _Interface_", "block.create.schematic_table.tooltip": "蓝图桌", "block.create.schematic_table.tooltip.summary": "将保存的蓝图图写入_空白蓝图_", @@ -1394,6 +1423,15 @@ "block.create.turntable.tooltip": "转盘", "block.create.turntable.tooltip.summary": "让旋转力给你带来一场刺激的旋转风车体验。", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "存量转换器", "block.create.stockpile_switch.tooltip.summary": "根据连接的容器中_储存物品_的数量切换红石信号强度。自带有过滤槽,与_比较器_不同的是,你可以配置_存量转换器_信号反转的_阈值_。", "block.create.stockpile_switch.tooltip.condition1": "当右击时", @@ -1401,6 +1439,10 @@ "block.create.content_observer.tooltip": "物品侦测器", "block.create.content_observer.tooltip.summary": "检测_容器_和_传送带_中过滤器匹配的物品。当在_物品栏_,_传送带_或者_溜槽所容物_中侦测到匹配的物品时,此组件将发出_红石信号_。当观察到的漏斗_转移匹配的物品_时,此组件将发出_红石脉冲_。", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "可调节板条箱", "block.create.adjustable_crate.tooltip.summary": "该箱子支持玩家对其容量进行调整,最大可以容纳_16组_物品。支持_红石比较器_。", @@ -1412,10 +1454,10 @@ "block.create.creative_crate.tooltip.condition1": "当标记了物品时", "block.create.creative_crate.tooltip.behaviour1": "任何从容器中_提取_的物品都是_无限量的_,而任何_放置_到容器中的物品都会被_送入虚空_", - "item.create.creative_blaze_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_blaze_cake.tooltip.summary": "UNLOCALIZED: A very special treat for _Blaze Burners_ that allows _controlling their heat level_. After eating this cake, Blaze Burners will _never run out of fuel_.", - "item.create.creative_blaze_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_blaze_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip": "创造蛋糕", + "item.create.creative_blaze_cake.tooltip.summary": "为_烈焰人燃烧室_特制的小食,可以让你_控制燃烧室的热量等级_。吃下这个蛋糕之后,烈焰人燃烧室将_不再耗尽燃料_。", + "item.create.creative_blaze_cake.tooltip.condition1": "对着烈焰人燃烧室使用", + "item.create.creative_blaze_cake.tooltip.behaviour1": "_锁定_烈焰人燃烧室的热量等级。如果再次使用,会使得燃烧室的热量等级开始_循环_变化。", "block.create.controller_rail.tooltip": "控制铁轨", "block.create.controller_rail.tooltip.summary": "一种_汇流的,受红石信号影响的_铁轨,可以_较好地控制_经过矿车的_移动速度_。", @@ -1428,7 +1470,7 @@ "item.create.sand_paper.tooltip.behaviour1": "打磨_副手_上或者_准心所指_的物品。", "item.create.builders_tea.tooltip": "建造工茶饮", - "item.create.builders_tea.tooltip.summary": "饮下这杯完美茶饮,开启神清气爽的一天。可以回复_饥饿值_并获得_急迫_效果。", + "item.create.builders_tea.tooltip.summary": "饮下这杯完美茶饮,开启神清气爽的一天。可以恢复_饥饿值_并获得_急迫_效果。", "item.create.refined_radiance.tooltip": "光辉石", "item.create.refined_radiance.tooltip.summary": "一种用_光辉_锻造的化合物材料。", @@ -1443,13 +1485,13 @@ "item.create.linked_controller.tooltip": "无线红石遥控器", "item.create.linked_controller.tooltip.summary": "提供_六个_可以绑定_无线红石_频道的按钮,用于_遥控_附近的_无线红石信号终端_。", "item.create.linked_controller.tooltip.condition1": "右击时", - "item.create.linked_controller.tooltip.behaviour1": "_拿起_或_放下_遥控器。拿起遥控器时,_移动_按键将被用来_操作遥控器_而不是移动玩家。", + "item.create.linked_controller.tooltip.behaviour1": "_拿起_或_放下_遥控器。拿起遥控器时,_控制移动_将被用来_操作遥控器_,而不是移动玩家。", "item.create.linked_controller.tooltip.condition2": "潜行右击时", "item.create.linked_controller.tooltip.behaviour2": "打开手动_配置界面_。", "item.create.linked_controller.tooltip.condition3": "右击无线红石信号终端时", - "item.create.linked_controller.tooltip.behaviour3": "启用_配对模式_,按_六个按键_中的一个来配对_无线红石信号终端_的_频率_。", + "item.create.linked_controller.tooltip.behaviour3": "启用_绑定模式_,按下_六个按键_中的一个,即可将此按键与_无线红石信号终端的频率_绑定。", "item.create.linked_controller.tooltip.condition4": "右击讲台时", - "item.create.linked_controller.tooltip.behaviour4": "将遥控器放在讲台上以便使用。(潜行右击来取回遥控器。)", + "item.create.linked_controller.tooltip.behaviour4": "将遥控器放在讲台上以便使用(潜行右击来取回遥控器)。", "item.create.diving_helmet.tooltip": "潜水头盔", "item.create.diving_helmet.tooltip.summary": "与_铜制背罐_配合使用,为穿戴者提供在_水下_行动一段时间所需的_空气_。", @@ -1469,24 +1511,24 @@ "item.create.diving_boots.tooltip.behaviour1": "穿戴者_下沉更快_并_无法游泳_。穿戴者可以在水下_行走_和_跳跃_。穿戴者不会被_传送带_移走。", "item.create.crafting_blueprint.tooltip": "合成蓝图", - "item.create.crafting_blueprint.tooltip.summary": "_放在_墙上。设置特定的_原料排布_以便更快地手搓物品。每个格子都可以设定一个配方。", + "item.create.crafting_blueprint.tooltip.summary": "_放在_墙上,便可用它来设置特定的_原料排布_,以便更快地制作物品。每个格子都可以设定一个配方。", "item.create.crafting_blueprint.condition1": "当右击空的格子时", - "item.create.crafting_blueprint.behaviour1": "打开一个_配方设置界面_,用于_设置_一个_合成配方_以及设置显示的图标。", + "item.create.crafting_blueprint.behaviour1": "打开一个_配方设置界面_,用于_设置_一个_合成配方_以及展示的物品。", "item.create.crafting_blueprint.condition2": "当右击设置好的格子时", - "item.create.crafting_blueprint.behaviour2": "使用_物品栏_中的物品制作_设置的配方_。_潜行_以一次合成_一组_。", + "item.create.crafting_blueprint.behaviour2": "使用_物品栏_中的物品制作_设置的配方_。_潜行_可以一次合成_一组_。", "item.create.minecart_coupling.tooltip": "矿车连轴器", - "item.create.minecart_coupling.tooltip.summary": "将多个_矿车_或运输结构链接在一起,构成雄伟的火车。", + "item.create.minecart_coupling.tooltip.summary": "将多个_矿车_或_连接运输装置_链接在一起,构成雄伟的火车。", "item.create.minecart_coupling.tooltip.condition1": "作用与矿车时", "item.create.minecart_coupling.tooltip.behaviour1": "将两个矿车耦合在一起,在移动时将它们保持_恒定的距离_。", "block.create.peculiar_bell.tooltip": "奇异钟", - "block.create.peculiar_bell.tooltip.summary": "装饰用的_黄铜质钟_。放在_灵魂火_的正上方可能会产生意料之外的后果……", + "block.create.peculiar_bell.tooltip.summary": "装饰用的_黄铜质钟_。放在_灵魂火_的正上方可能会产生意料之外的后果......", - "block.create.haunted_bell.tooltip": "怪异钟", - "block.create.haunted_bell.tooltip.summary": "_被诅咒_的钟,其中充满了来自下界的迷失的灵魂。", + "block.create.haunted_bell.tooltip": "森魂钟", + "block.create.haunted_bell.tooltip.summary": "_被诅咒_的钟,来自下界的迷失的灵魂缠绕于其上。", "block.create.haunted_bell.tooltip.condition1": "当手持或鸣响时", - "block.create.haunted_bell.tooltip.behaviour1": "标识出附近可能生成_敌对生物_的_黑暗_的地方。", + "block.create.haunted_bell.tooltip.behaviour1": "标识出附近可能生成_敌对生物_的_亮度不足_之处。", "_": "->------------------------] Ponder Content [------------------------<-", @@ -1504,10 +1546,10 @@ "create.ponder.think_back": "回想", "create.ponder.slow_text": "舒适阅读", "create.ponder.exit": "退出", - "create.ponder.welcome": "欢迎来到思索项目列表", + "create.ponder.welcome": "欢迎来到思索界面", "create.ponder.categories": "机械动力中包含的条目", "create.ponder.index_description": "点击一个图标来查看相关的物品和方块。", - "create.ponder.index_title": "思索项目列表", + "create.ponder.index_title": "思索索引", "create.ponder.shared.rpm16": "16 RPM", "create.ponder.shared.behaviour_modify_wrench": "可以用扳手调整它的行为。", "create.ponder.shared.storage_on_contraption": "与装置相接的存储空间,会自动将装置遇到的掉落物拾取到空间内。", @@ -1515,12 +1557,12 @@ "create.ponder.shared.rpm8": "8 RPM", "create.ponder.shared.ctrl_and": "Ctrl +", "create.ponder.shared.rpm32": "32 RPM", - "create.ponder.shared.rpm16_source": "动力源:16 R", + "create.ponder.shared.rpm16_source": "动力源:16 RPM", "create.ponder.shared.movement_anchors": "有了底盘和强力胶,移动起大型结构轻轻松松。", "create.ponder.tag.redstone": "逻辑组件", "create.ponder.tag.redstone.description": "这些组件会在红石工程中发挥大用处。", - "create.ponder.tag.contraption_assembly": "方块连接物件", - "create.ponder.tag.contraption_assembly.description": "将各个组件连接以便同时运动的物件", + "create.ponder.tag.contraption_assembly": "方块连接功能", + "create.ponder.tag.contraption_assembly.description": "将各个组件连接以便同时运动的工具以及组件", "create.ponder.tag.fluids": "流体操纵器械", "create.ponder.tag.fluids.description": "这些组件可以用于传递流体,以及利用流体进行工作。", "create.ponder.tag.decoration": "装饰", @@ -1579,7 +1621,7 @@ "create.ponder.basin.text_9": "若是加装过滤,那么你便无需担心会将未被处理的物品抽取出来了", "create.ponder.bearing_modes.header": "动力轴承的运动模式", - "create.ponder.bearing_modes.text_1": "当结构停止时,轴承会控制结构以特定的角度停在最近的与格相对齐之处", + "create.ponder.bearing_modes.text_1": "停止时,轴承会控制结构以特定的角度停在最近的与格相对齐之处", "create.ponder.bearing_modes.text_2": "你可以调整整个结构永不方块化,或者仅在结构的起始位置方块化", "create.ponder.belt_casing.header": "带机壳的传送带", @@ -1642,20 +1684,20 @@ "create.ponder.brass_tunnel_modes.text_8": "“最近优先”会将物品优先送入距离输入口更近的输出口", "create.ponder.brass_tunnel_modes.text_9": "“随机”会随机选择一个输出口,一次性送入所有物品", - "create.ponder.cart_assembler.header": "使用矿车装配站组装运动结构", + "create.ponder.cart_assembler.header": "使用矿车装配站控制结构移动", "create.ponder.cart_assembler.text_1": "矿车装配站会将它所连接的结构安装到矿车上", "create.ponder.cart_assembler.text_2": "若没有通入红石信号,它会将矿车装置解散为方块的形式", "create.ponder.cart_assembler.text_3": "对着矿车使用你的扳手,装置会变为可搬运的形式", - "create.ponder.cart_assembler_dual.header": "组装连接结构", + "create.ponder.cart_assembler_dual.header": "组装连接运输装置", "create.ponder.cart_assembler_dual.text_1": "若两个装配矿车分享了同一个结构", - "create.ponder.cart_assembler_dual.text_2": "给其中的任意一方的矿车装配站通入红石信号,都会创建出连接装置", + "create.ponder.cart_assembler_dual.text_2": "给其中的任意一方的矿车装配站通入红石信号,都会创建出连接运输装置", "create.ponder.cart_assembler_dual.text_3": "两辆矿车的此时行为与用矿车连轴器连接在一起时十分相似", "create.ponder.cart_assembler_modes.header": "矿车装置的方向设定", "create.ponder.cart_assembler_modes.text_1": "矿车装置会随着矿车的运动而发生转向", "create.ponder.cart_assembler_modes.text_2": "矿车装置上的箭头表明了哪一侧是“前面”", - "create.ponder.cart_assembler_modes.text_3": "如果装配结构的方向锁定了,那么结构的方向将不再改变", + "create.ponder.cart_assembler_modes.text_3": "如果装配站的配置为“旋转锁定”,那么装置的方向将不会改变", "create.ponder.cart_assembler_rails.header": "另外几种矿车以及铁轨", "create.ponder.cart_assembler_rails.text_1": "放置在普通轨道上的矿车装配站并不会影响路过矿车装置的运动", @@ -1686,12 +1728,12 @@ "create.ponder.chute_upward.text_2": "佩戴工程师护目镜时,你可以看见物品的移动方向", "create.ponder.chute_upward.text_3": "在溜槽“被挡住的”底端,物品只能从侧边进行提取或输入", - "create.ponder.clockwork_bearing.header": "使用时钟轴承来移动结构", - "create.ponder.clockwork_bearing.text_1": "时钟轴承黏附其正前方的方块", + "create.ponder.clockwork_bearing.header": "使用发条轴承来使结构运动", + "create.ponder.clockwork_bearing.text_1": "发条轴承黏附其正前方的方块", "create.ponder.clockwork_bearing.text_2": "当接受旋转力时,其附着结构会根据游戏内时间来进行旋转", "create.ponder.clockwork_bearing.text_3": "3:00", "create.ponder.clockwork_bearing.text_4": "4:00", - "create.ponder.clockwork_bearing.text_5": "右击可以来激活/停止结构运动", + "create.ponder.clockwork_bearing.text_5": "右击可以激活/停止结构运动", "create.ponder.clockwork_bearing.text_6": "在时针前方可添加第二个结构", "create.ponder.clockwork_bearing.text_7": "请确保这两个结构没有互相被例如强力胶等方式黏附", "create.ponder.clockwork_bearing.text_8": "第二个结构将会作为分针进行旋转", @@ -1710,9 +1752,9 @@ "create.ponder.cogwheel.text_2": "以此方式连接的齿轮,旋转方向相反", "create.ponder.creative_fluid_tank.header": "创造流体储罐", - "create.ponder.creative_fluid_tank.text_1": "创造流体储罐可以提供无限数量的流体", - "create.ponder.creative_fluid_tank.text_2": "使用一个含有流体的容器右击它来设置它提供的流体", - "create.ponder.creative_fluid_tank.text_3": "流体管道可以从中无限提取设置的流体", + "create.ponder.creative_fluid_tank.text_1": "创造流体储罐可以提供无限量的流体", + "create.ponder.creative_fluid_tank.text_2": "使用一个含有流体的容器右击它,即可指定它提供特定的流体", + "create.ponder.creative_fluid_tank.text_3": "流体管道可以从中无限提取指定的流体", "create.ponder.creative_fluid_tank.text_4": "任何被输入创造流体储罐的液体都将被销毁", "create.ponder.creative_motor.header": "使用创造马达发生旋转", @@ -1743,7 +1785,7 @@ "create.ponder.deployer.text_9": "以及攻击生物", "create.ponder.deployer_contraption.header": "在装置上使用机械手", - "create.ponder.deployer_contraption.text_1": "当机械手在移动的结构上时...", + "create.ponder.deployer_contraption.text_1": "当机械手在移动的装置上时...", "create.ponder.deployer_contraption.text_2": "机械手会对每一个经过的方块使用装置中任意容器内的物品", "create.ponder.deployer_contraption.text_3": "可以通过过滤槽来指定其从存储空间中抽取的物品", @@ -1773,12 +1815,12 @@ "create.ponder.empty_blaze_burner.text_2": "或者,也可以通过右击烈焰人刷怪笼来填充激活烈焰人燃烧室", "create.ponder.empty_blaze_burner.text_3": "这样,你便有了一个可供部分机器加工的热源", "create.ponder.empty_blaze_burner.text_4": "如果是为了美观,空的烈焰人燃烧室也可以被打火石点燃", - "create.ponder.empty_blaze_burner.text_5": "使用包含灵魂的物品可以将火焰变为灵魂火", - "create.ponder.empty_blaze_burner.text_6": "但是,这样的热源不足以给机器提加工供足够的热量", + "create.ponder.empty_blaze_burner.text_5": "你可以使用注入了灵魂的物品转化这种火焰", + "create.ponder.empty_blaze_burner.text_6": "但是,没有烈焰人,这样的火焰并不足以用于工业级加热工作", - "create.ponder.encased_fluid_pipe.header": "遮掩流体管道", + "create.ponder.encased_fluid_pipe.header": "流体管道箱", "create.ponder.encased_fluid_pipe.text_1": "铜机壳可以用于装饰流体管道", - "create.ponder.encased_fluid_pipe.text_2": "除了遮掩流体管道之外,装有铜机壳的流体管道将不会改变其连接状态", + "create.ponder.encased_fluid_pipe.text_2": "除了遮掩流体管道之外,装箱的流体管道将不会改变其连接状态", "create.ponder.encased_fluid_pipe.text_3": "它将不会对旁边新增加或移除的管道做出反应", "create.ponder.fan_direction.header": "鼓风机的气流", @@ -1801,31 +1843,31 @@ "create.ponder.fluid_pipe_flow.header": "使用管道运输流体", "create.ponder.fluid_pipe_flow.text_1": "流体管道可以用于连接两个或多个流体容器", - "create.ponder.fluid_pipe_flow.text_2": "使用扳手为直的管道增加观察窗", - "create.ponder.fluid_pipe_flow.text_3": "带有观察窗的管道不会建立侧向连接", - "create.ponder.fluid_pipe_flow.text_4": "通过使用动力泵,流体管道可以传输流体", - "create.ponder.fluid_pipe_flow.text_5": "一开始,流体不会真正被消耗", - "create.ponder.fluid_pipe_flow.text_6": "当管道内的液体流彻底联通之后,流体才会开始逐渐从一个容器中转移到另一个", + "create.ponder.fluid_pipe_flow.text_2": "使用扳手,可以为直管道安装观察窗", + "create.ponder.fluid_pipe_flow.text_3": "带有观察窗的管道不会建立侧向管道连接", + "create.ponder.fluid_pipe_flow.text_4": "使用动力泵,流体管道可以传输流体", + "create.ponder.fluid_pipe_flow.text_5": "一开始,流体不会真正地被抽出", + "create.ponder.fluid_pipe_flow.text_6": "只有当管道内的液体流彻底连通之后,流体才会开始逐渐从一个容器中转移到另一个", "create.ponder.fluid_pipe_flow.text_7": "这意味着流体管道本身并不真正存储任何流体", "create.ponder.fluid_pipe_interaction.header": "抽取和填充流体容器", "create.ponder.fluid_pipe_interaction.text_1": "流体管道的末端可以与许多种容器连接", "create.ponder.fluid_pipe_interaction.text_2": "任何可以容纳流体的容器都可以被填充或从中抽取", - "create.ponder.fluid_pipe_interaction.text_3": "开放的管道口可以吸走流体源块...", + "create.ponder.fluid_pipe_interaction.text_3": "开放的管道口可以吸走流体源方块...", "create.ponder.fluid_pipe_interaction.text_4": "...或者将流体源排放出来", - "create.ponder.fluid_pipe_interaction.text_5": "管道也可以从许多其他方块中直接抽取流体", + "create.ponder.fluid_pipe_interaction.text_5": "管道也可以从许多种其他方块中直接抽取流体", "create.ponder.fluid_tank_sizes.header": "流体储罐的大小", - "create.ponder.fluid_tank_sizes.text_1": "多格流体储罐可以被放置在一起来提供更大的容量", - "create.ponder.fluid_tank_sizes.text_2": "流体储罐最大可以有3x3的横截面...", - "create.ponder.fluid_tank_sizes.text_3": "...并且可以有超过30格高", + "create.ponder.fluid_tank_sizes.text_1": "流体储罐可以多格连接,提供更大的存储量", + "create.ponder.fluid_tank_sizes.text_2": "流体储罐最大横截面为 3x3...", + "create.ponder.fluid_tank_sizes.text_3": "...并且可以超过 30 格高", "create.ponder.fluid_tank_sizes.text_4": "使用扳手可以打开或关闭观察窗", "create.ponder.fluid_tank_storage.header": "使用流体储罐存储流体", "create.ponder.fluid_tank_storage.text_1": "流体储罐可以存储大量的流体", - "create.ponder.fluid_tank_storage.text_2": "流体管道可以从任何一面将流体输入/输出流体储罐", + "create.ponder.fluid_tank_storage.text_2": "流体管道可以在流体储罐的任何一面将流体输入/输出", "create.ponder.fluid_tank_storage.text_3": "使用比较器可以检测储罐中的流体储量", - "create.ponder.fluid_tank_storage.text_4": "在生存模式中,无法直接用容器将流体装入或取出储罐", + "create.ponder.fluid_tank_storage.text_4": "在生存模式中,无法直接用容器向储罐中存入流体,或是取出流体", "create.ponder.fluid_tank_storage.text_5": "要装满/倒空流体容器,可以使用工作盆,分液池或注液器。", "create.ponder.flywheel.header": "使用飞轮来产生旋转力", @@ -1882,8 +1924,8 @@ "create.ponder.gantry_redstone.text_2": "作为替代,杆上的旋转力会传递到取物器的输出杆上", "create.ponder.gantry_shaft.header": "使用起重机杆", - "create.ponder.gantry_shaft.text_1": "起重机杆组成了起重机结构的基础。与其相接的载物器可以沿着杆进行移动。", - "create.ponder.gantry_shaft.text_2": "起重机结构可以移动与其相接的方块。", + "create.ponder.gantry_shaft.text_1": "起重机杆组成了起重机系统的基础。与其相接的载物器可以沿着杆进行移动。", + "create.ponder.gantry_shaft.text_2": "起重机系统可以移动与其相接的方块。", "create.ponder.gearbox.header": "使用十字齿轮箱传递旋转力", "create.ponder.gearbox.text_1": "更改旋转轴,很容易使得整个旋转体系变得臃肿不堪", @@ -1902,32 +1944,32 @@ "create.ponder.hand_crank.text_4": "潜行长按右键可以顺时针旋转它", "create.ponder.hose_pulley.header": "使用软管滑轮抽取或排放流体", - "create.ponder.hose_pulley.text_1": "软管滑轮可以用于方便的抽取或填满一个较大区域中的流体", + "create.ponder.hose_pulley.text_1": "软管滑轮可以用于方便地对一个较大区域进行抽取液体或填满液体的操作", "create.ponder.hose_pulley.text_2": "通过输入动力可以调节软管末端的高度", "create.ponder.hose_pulley.text_3": "翻转动力输入的方向可以收起软管", "create.ponder.hose_pulley.text_4": "管道可以连接在另一侧", - "create.ponder.hose_pulley.text_5": "连接的管道可以将流体输入软管滑轮以在下方放置流体源...", + "create.ponder.hose_pulley.text_5": "连接的管道可以将流体输入到软管滑轮中,软管会在下方排出口处放置流体源...", "create.ponder.hose_pulley.text_6": "...或者提供吸力来抽取世界中的流体", "create.ponder.hose_pulley.text_7": "软管滑轮的抽取/排放速度取决于连接管道中流体的流速", - "create.ponder.hose_pulley_infinite.header": "从大型水体中抽取或向其排放", - "create.ponder.hose_pulley_infinite.text_1": "当软管被放进足够大的水体中时...", + "create.ponder.hose_pulley_infinite.header": "被动抽取或排放从大体量流体中", + "create.ponder.hose_pulley_infinite.text_1": "当软管被放进足够大的流体中时...", "create.ponder.hose_pulley_infinite.text_2": "...它在抽取或排放液体时将不会影响流体源", - "create.ponder.hose_pulley_infinite.text_3": "可以从这些软管滑轮中无限的抽取或向其排放流体", + "create.ponder.hose_pulley_infinite.text_3": "可以从这些软管滑轮中无限量地抽取或向其排放流体", "create.ponder.hose_pulley_level.header": "软管滑轮的排水/抽水机制", "create.ponder.hose_pulley_level.text_1": "当软管彻底收回时,软管滑轮无法工作。", - "create.ponder.hose_pulley_level.text_2": "流体会由上至下被抽取", + "create.ponder.hose_pulley_level.text_2": "抽取流体的顺序为从上到下", "create.ponder.hose_pulley_level.text_3": "流体表面最终将会被抽取到刚好低于软管开口", - "create.ponder.hose_pulley_level.text_4": "流体将会由下至上被填充", + "create.ponder.hose_pulley_level.text_4": "填充流体的顺序为从下到上", "create.ponder.hose_pulley_level.text_5": "流体最多只能被填充至软管开口所在的高度", "create.ponder.item_drain.header": "使用分液池提取物品中的流体", - "create.ponder.item_drain.text_1": "分液池可以提取容器中的流体", - "create.ponder.item_drain.text_2": "右键点击可以将手持的容器中的流体倒入分液池", + "create.ponder.item_drain.text_1": "分液池可以提取物品中的流体", + "create.ponder.item_drain.text_2": "右击可以将手持物品中的流体倒入分液池中", "create.ponder.item_drain.text_3": "当物品从侧面输入时...", - "create.ponder.item_drain.text_4": "...物品将会经过分液池顶部,并在过程中将其包含的液体排入分液池", - "create.ponder.item_drain.text_5": "流体管到可以从分液池中抽取液体", + "create.ponder.item_drain.text_4": "...物品将会经过分液池顶部,并在此过程中将其包含的液体排入分液池内", + "create.ponder.item_drain.text_5": "流体管道可以从分液池中抽取液体", "create.ponder.large_cogwheel.header": "使用大齿轮传递旋转力", "create.ponder.large_cogwheel.text_1": "大齿轮可以以特定的角度相互连接", @@ -2042,29 +2084,29 @@ "create.ponder.mechanical_press.header": "使用动力辊压机处理物品", "create.ponder.mechanical_press.text_1": "动力辊压机可以处理位于其下方的物品", "create.ponder.mechanical_press.text_2": "在其下方丢入物品,或者将物品放在置物台上,都算作有效的物品输入", - "create.ponder.mechanical_press.text_3": "当传送带上的物品经过辊压机下方时....", + "create.ponder.mechanical_press.text_3": "若物品位于传送带上...", "create.ponder.mechanical_press.text_4": "辊压机会使物品停下,然后自动处理这一物品", "create.ponder.mechanical_press_compacting.header": "使用动力辊压机压缩物品", - "create.ponder.mechanical_press_compacting.text_1": "对放置于工作盆内的物品进行辊轧,可以将这些物品压缩在一起", + "create.ponder.mechanical_press_compacting.text_1": "对放置于工作盆内的物品进行辊压,可以将这些物品压缩在一起", "create.ponder.mechanical_press_compacting.text_2": "压缩意指任何同种物品填满了 2x2 或者 3x3 网格的配方,以及一些额外的配方", "create.ponder.mechanical_press_compacting.text_3": "一些配方可能需要烈焰人燃烧室提供热量", "create.ponder.mechanical_press_compacting.text_4": "过滤槽可用于解决两个配方相互冲突的情况", "create.ponder.mechanical_pump_flow.header": "使用动力泵传输流体", - "create.ponder.mechanical_pump_flow.text_1": "动力泵可以控制管道中的液体流向", - "create.ponder.mechanical_pump_flow.text_2": "当接入动力时,其上的箭头指示液体流向", - "create.ponder.mechanical_pump_flow.text_3": "后方的管道中将会产生吸力...", - "create.ponder.mechanical_pump_flow.text_4": "...而液体将被输入前方的管道", - "create.ponder.mechanical_pump_flow.text_5": "反转动力方向将会改变液体流向", + "create.ponder.mechanical_pump_flow.text_1": "动力泵可以控制管道网络中的流体", + "create.ponder.mechanical_pump_flow.text_2": "当接入动力时,其上的箭头指示流体流向", + "create.ponder.mechanical_pump_flow.text_3": "泵后的管道网络正在抽取流体...", + "create.ponder.mechanical_pump_flow.text_4": "...而泵前的网络则把这些液体排到世界当中", + "create.ponder.mechanical_pump_flow.text_5": "反转动力方向将会改变流体流向", "create.ponder.mechanical_pump_flow.text_6": "使用扳手可以手动改变动力泵的朝向", "create.ponder.mechanical_pump_speed.header": "动力泵的传输机制", - "create.ponder.mechanical_pump_speed.text_1": "动力泵的压力最多沿管线传递16格,与输入动力无关", - "create.ponder.mechanical_pump_speed.text_2": "输入动力将会影响压力改变速度...", + "create.ponder.mechanical_pump_speed.text_1": "动力泵的压力最多沿管线传递 16 格,与输入动力无关", + "create.ponder.mechanical_pump_speed.text_2": "提高输入动力,可以加快流的蔓延速度...", "create.ponder.mechanical_pump_speed.text_3": "...以及流体的传输速度", - "create.ponder.mechanical_pump_speed.text_4": "多个并联动力泵的传输量可以叠加", - "create.ponder.mechanical_pump_speed.text_5": "交替摆放动力泵可以方便的控制液体流动", + "create.ponder.mechanical_pump_speed.text_4": "同一管道网络中的多个并联动力泵,它们的传输量可以叠加", + "create.ponder.mechanical_pump_speed.text_5": "使泵的传输方向相互交替,可以方便地控制流体流向", "create.ponder.mechanical_saw_breaker.header": "使用动力锯伐木", "create.ponder.mechanical_saw_breaker.text_1": "向其通入旋转力后,动力锯可以直接砍伐掉它面前的树木", @@ -2077,7 +2119,7 @@ "create.ponder.mechanical_saw_processing.header": "使用动力锯处理物品", "create.ponder.mechanical_saw_processing.text_1": "面向朝上的动力锯可以将物品处理为其变种", "create.ponder.mechanical_saw_processing.text_2": "处理过后的物品的弹出方向始终与通入锯中的旋转转向相反", - "create.ponder.mechanical_saw_processing.text_3": "锯子可以配合其两侧的传送带输入输出", + "create.ponder.mechanical_saw_processing.text_3": "锯子可以与传送带放置在一条直线上,相互配合工作", "create.ponder.mechanical_saw_processing.text_4": "若输入原料有多种可能产物,你可以用动力锯上的过滤槽指定只产出某种产物", "create.ponder.mechanical_saw_processing.text_5": "若没有使用过滤槽,动力锯会在各产物中按顺序循环输出", @@ -2090,8 +2132,8 @@ "create.ponder.nixie_tube.header": "使用辉光管", "create.ponder.nixie_tube.text_1": "通入红石信号后,辉光管会显示出红石信号的强度", - "create.ponder.nixie_tube.text_2": "在其上右键使用更改过名称的命名牌,可以自定义它的显示文本", - "create.ponder.nixie_tube.text_3": "使用染料右键以更改辉光管的显示颜色", + "create.ponder.nixie_tube.text_2": "在着它使用更改过名称的命名牌,可以自定义它的显示文本", + "create.ponder.nixie_tube.text_3": "使用染料右击,便可更改辉光管的显示颜色", "create.ponder.piston_pole.header": "活塞延长杆", "create.ponder.piston_pole.text_1": "若无相接的延长杆,动力活塞无法移动其他方块", @@ -2204,11 +2246,11 @@ "create.ponder.smart_chute.text_3": "使用鼠标滚轮可以指定被过滤的物品数量", "create.ponder.smart_chute.text_4": "通入红石信号,智能溜槽将会完全暂停工作", - "create.ponder.smart_pipe.header": "使用智能流体管道控制液体流动", + "create.ponder.smart_pipe.header": "使用智能流体管道控制流体流动", "create.ponder.smart_pipe.text_1": "智能流体管道可以限制通过它的流体种类", "create.ponder.smart_pipe.text_2": "当紧邻流体源放置时,管道只会抽取设置的流体种类", - "create.ponder.smart_pipe.text_3": "使用任何包含流体的容器右键过滤槽来标记过滤的流体", - "create.ponder.smart_pipe.text_4": "当放在管线中时,只有匹配过滤器的流体才能流入它后方的管道", + "create.ponder.smart_pipe.text_3": "使用任何包含流体的容器右击过滤槽,可以标记过滤的流体", + "create.ponder.smart_pipe.text_4": "当放在管道网络中时,只有匹配过滤器的流体才能通过此管道", "create.ponder.speedometer.header": "使用速度表来监测转速", "create.ponder.speedometer.text_1": "速度表能显示相接组件的转速", @@ -2216,10 +2258,10 @@ "create.ponder.speedometer.text_3": "红石比较器可以根据速度表的数值输出不同强弱的红石信号", "create.ponder.spout_filling.header": "使用注液器填充物品", - "create.ponder.spout_filling.text_1": "注液器可以将流体装入下方经过的,可以接受该流体的物品", + "create.ponder.spout_filling.text_1": "注液器可以将流体装入下方经过且可以接受该流体的物品", "create.ponder.spout_filling.text_2": "注液器的流体存储无法直接手动交互", - "create.ponder.spout_filling.text_3": "使用管线可以将流体输入注液器", - "create.ponder.spout_filling.text_4": "要被处理的物品可以被放置在其下方的置物台上", + "create.ponder.spout_filling.text_3": "使用管道可以将流体输入到注液器内", + "create.ponder.spout_filling.text_4": "输入的物品可以被放置在其下方的置物台上", "create.ponder.spout_filling.text_5": "当传送带上的物品经过注液器下方时...", "create.ponder.spout_filling.text_6": "注液器会使物品停下,然后自动处理这一物品", @@ -2227,7 +2269,7 @@ "create.ponder.stabilized_bearings.text_1": "当动力轴承在结构被带动时...", "create.ponder.stabilized_bearings.text_2": "...它会确保它转盘的垂直朝向不变", "create.ponder.stabilized_bearings.text_3": "跟默认的一样,动力轴承会黏着它前方的方块", - "create.ponder.stabilized_bearings.text_4": "这种情况下,它所黏着的子结构的垂直朝向也不会改变", + "create.ponder.stabilized_bearings.text_4": "这种情况下,它所黏着的子装置的垂直朝向也不会改变", "create.ponder.sticker.header": "使用黏着器来黏附方块", "create.ponder.sticker.text_1": "你可以用红石信号来控制黏着器的行为", @@ -2255,9 +2297,9 @@ "create.ponder.valve_handle.text_5": "可以通过染色来美化阀门手轮", "create.ponder.valve_pipe.header": "使用阀门管道控制液体流", - "create.ponder.valve_pipe.text_1": "阀门管道可以控制管道网中液体的去处", + "create.ponder.valve_pipe.text_1": "阀门管道可以控制管道网络中流体的蔓延", "create.ponder.valve_pipe.text_2": "通过其上的传动杆输入动力可以控制它的开关", - "create.ponder.valve_pipe.text_3": "提供旋转向‘打开’方向的力会打开阀门,使得流体可以通过", + "create.ponder.valve_pipe.text_3": "提供向“打开”方向的旋转力会打开阀门,使得流体可以通过", "create.ponder.valve_pipe.text_4": "提供另一方向的旋转力可以关闭阀门,阻止流体通过", "create.ponder.water_wheel.header": "使用水车产生旋转力", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 9ec60092a..bf3e75b3b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 19", + "_": "Missing Localizations: 58", "_": "->------------------------] Game Elements [------------------------<-", @@ -31,11 +31,13 @@ "block.create.black_nixie_tube": "黑色真空管", "block.create.black_sail": "黑色風帆", "block.create.black_seat": "黑色坐墊", + "block.create.black_toolbox": "UNLOCALIZED: Black Toolbox", "block.create.black_valve_handle": "黑色閥門開關", "block.create.blaze_burner": "烈焰使者動力爐", "block.create.blue_nixie_tube": "藍色真空管", "block.create.blue_sail": "藍色風帆", "block.create.blue_seat": "藍色坐墊", + "block.create.blue_toolbox": "UNLOCALIZED: Blue Toolbox", "block.create.blue_valve_handle": "藍色閥門開關", "block.create.brass_belt_funnel": "黃銅輸送帶漏斗", "block.create.brass_block": "黃銅磚", @@ -46,6 +48,7 @@ "block.create.brown_nixie_tube": "棕色真空管", "block.create.brown_sail": "棕色風帆", "block.create.brown_seat": "棕色坐墊", + "block.create.brown_toolbox": "UNLOCALIZED: Brown Toolbox", "block.create.brown_valve_handle": "棕色閥門開關", "block.create.cart_assembler": "礦車裝修站", "block.create.chiseled_dark_scoria": "鏨製黑火成岩", @@ -79,6 +82,7 @@ "block.create.cyan_nixie_tube": "青色真空管", "block.create.cyan_sail": "藍綠色風帆", "block.create.cyan_seat": "藍綠色坐墊", + "block.create.cyan_toolbox": "UNLOCALIZED: Cyan Toolbox", "block.create.cyan_valve_handle": "藍綠色閥門開關", "block.create.dark_oak_window": "黑橡木窗戶", "block.create.dark_oak_window_pane": "黑橡木窗戶片", @@ -186,10 +190,12 @@ "block.create.gray_nixie_tube": "灰色真空管", "block.create.gray_sail": "灰色風帆", "block.create.gray_seat": "灰色坐墊", + "block.create.gray_toolbox": "UNLOCALIZED: Gray Toolbox", "block.create.gray_valve_handle": "灰色閥門開關", "block.create.green_nixie_tube": "綠色真空管", "block.create.green_sail": "綠色風帆", "block.create.green_seat": "綠色坐墊", + "block.create.green_toolbox": "UNLOCALIZED: Green Toolbox", "block.create.green_valve_handle": "綠色閥門開關", "block.create.hand_crank": "手搖把手", "block.create.haunted_bell": "靈魂鐘", @@ -214,14 +220,17 @@ "block.create.light_blue_nixie_tube": "亮藍色真空管", "block.create.light_blue_sail": "淡藍色風帆", "block.create.light_blue_seat": "淡藍色坐墊", + "block.create.light_blue_toolbox": "UNLOCALIZED: Light Blue Toolbox", "block.create.light_blue_valve_handle": "淡藍色閥門開關", "block.create.light_gray_nixie_tube": "亮灰色真空管", "block.create.light_gray_sail": "淡灰色風帆", "block.create.light_gray_seat": "淡灰色坐墊", + "block.create.light_gray_toolbox": "UNLOCALIZED: Light Gray Toolbox", "block.create.light_gray_valve_handle": "淡灰色閥門開關", "block.create.lime_nixie_tube": "淺綠色真空管", "block.create.lime_sail": "黃綠色風帆", "block.create.lime_seat": "黃綠色坐墊", + "block.create.lime_toolbox": "UNLOCALIZED: Lime Toolbox", "block.create.lime_valve_handle": "黃綠色閥門開關", "block.create.limesand": "石灰沙", "block.create.limestone": "石灰岩", @@ -239,6 +248,7 @@ "block.create.magenta_nixie_tube": "洋紅色真空管", "block.create.magenta_sail": "洋紅色風帆", "block.create.magenta_seat": "洋紅色坐墊", + "block.create.magenta_toolbox": "UNLOCALIZED: Magenta Toolbox", "block.create.magenta_valve_handle": "洋紅色閥門開關", "block.create.mechanical_arm": "機械手臂", "block.create.mechanical_bearing": "機械軸承", @@ -272,6 +282,7 @@ "block.create.oak_window_pane": "橡木窗戶片", "block.create.orange_sail": "橙色風帆", "block.create.orange_seat": "橙色坐墊", + "block.create.orange_toolbox": "UNLOCALIZED: Orange Toolbox", "block.create.orange_valve_handle": "橙色閥門開關", "block.create.ornate_iron_window": "華麗鐵窗戶", "block.create.ornate_iron_window_pane": "華麗鐵窗戶片", @@ -324,6 +335,7 @@ "block.create.pink_nixie_tube": "粉紅色真空管", "block.create.pink_sail": "粉紅色風帆", "block.create.pink_seat": "粉紅色坐墊", + "block.create.pink_toolbox": "UNLOCALIZED: Pink Toolbox", "block.create.pink_valve_handle": "粉紅色閥門開關", "block.create.piston_extension_pole": "活塞桿", "block.create.polished_dark_scoria": "磨製黑火成岩", @@ -359,11 +371,13 @@ "block.create.purple_nixie_tube": "紫色真空管", "block.create.purple_sail": "紫色風帆", "block.create.purple_seat": "紫色坐墊", + "block.create.purple_toolbox": "UNLOCALIZED: Purple Toolbox", "block.create.purple_valve_handle": "紫色閥門開關", "block.create.radial_chassis": "旋轉底盤", "block.create.red_nixie_tube": "紅色真空管", "block.create.red_sail": "紅色風帆", "block.create.red_seat": "紅色坐墊", + "block.create.red_toolbox": "UNLOCALIZED: Red Toolbox", "block.create.red_valve_handle": "紅色閥門開關", "block.create.redstone_contact": "接觸式紅石訊號產生器", "block.create.redstone_link": "無限紅石訊號機", @@ -421,12 +435,14 @@ "block.create.white_nixie_tube": "白色真空管", "block.create.white_sail": "白色風帆", "block.create.white_seat": "白色坐墊", + "block.create.white_toolbox": "UNLOCALIZED: White Toolbox", "block.create.white_valve_handle": "白色閥門開關", "block.create.windmill_bearing": "風車軸承", "block.create.wooden_bracket": "木製支架", "block.create.yellow_nixie_tube": "黃色真空管", "block.create.yellow_sail": "黃色風帆", "block.create.yellow_seat": "黃色坐墊", + "block.create.yellow_toolbox": "UNLOCALIZED: Yellow Toolbox", "block.create.yellow_valve_handle": "黃色閥門開關", "block.create.zinc_block": "鋅磚", "block.create.zinc_ore": "鋅礦石", @@ -753,6 +769,7 @@ "create.recipe.assembly.repeat": "重複 %1$s 次", "create.recipe.assembly.junk": "有機率得到垃圾", "create.recipe.processing.chance": "%1$s%%概率", + "create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed", "create.recipe.heat_requirement.none": "不需要加熱", "create.recipe.heat_requirement.heated": "普通加熱", "create.recipe.heat_requirement.superheated": "超級加熱", @@ -781,6 +798,7 @@ "create.action.discard": "放棄", "create.keyinfo.toolmenu": "選單", + "create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes", "create.keyinfo.scrollup": "(遊戲中)向上滑鼠滾輪", "create.keyinfo.scrolldown": "(遊戲中)向下滑鼠滾輪", @@ -791,6 +809,13 @@ "create.gui.scrollInput.shiftScrollsFaster": "按住Shift滾動更快", "create.gui.toolmenu.focusKey": "按住 [%1$s] 滑鼠滾輪選擇", "create.gui.toolmenu.cycle": "[SCROLL] 循環", + + "create.toolbox.unequip": "UNLOCALIZED: Unequip: %1$s", + "create.toolbox.outOfRange": "UNLOCALIZED: Toolbox of held item not in Range", + "create.toolbox.detach": "UNLOCALIZED: Stop tracking and keep item", + "create.toolbox.depositAll": "UNLOCALIZED: Return items to nearby Toolboxes", + "create.toolbox.depositBox": "UNLOCALIZED: Return items to Toolbox", + "create.gui.symmetryWand.mirrorType": "鏡子類型", "create.gui.symmetryWand.orientation": "方向", @@ -1037,18 +1062,14 @@ "create.item_attributes.placeable.inverted": "不可放置", "create.item_attributes.consumable": "可食用", "create.item_attributes.consumable.inverted": "不可食用", - "create.item_attributes.smeltable": "可被熔爐融煉", - "create.item_attributes.smeltable.inverted": "不可被熔爐融煉", - "create.item_attributes.washable": "可被篩洗", - "create.item_attributes.washable.inverted": "不可被篩洗", - "create.item_attributes.smokable": "可被煙熏", - "create.item_attributes.smokable.inverted": "不可被煙熏", - "create.item_attributes.crushable": "可被粉碎", - "create.item_attributes.crushable.inverted": "不可被粉碎", - "create.item_attributes.blastable": "可被高爐融煉", - "create.item_attributes.blastable.inverted": "不可被高爐融煉", + "create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids", + "create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids", "create.item_attributes.enchanted": "已被附魔", "create.item_attributes.enchanted.inverted": "未被附魔", + "create.item_attributes.max_enchanted": "已達到最高附魔等級", + "create.item_attributes.max_enchanted.inverted": "未達到最高附魔等級", + "create.item_attributes.renamed": "UNLOCALIZED: has a custom name", + "create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name", "create.item_attributes.damaged": "已損壞", "create.item_attributes.damaged.inverted": "未損壞", "create.item_attributes.badly_damaged": "嚴重受損", @@ -1059,23 +1080,31 @@ "create.item_attributes.equipable.inverted": "不可裝備", "create.item_attributes.furnace_fuel": "是燃料", "create.item_attributes.furnace_fuel.inverted": "不是燃料", + "create.item_attributes.washable": "可被篩洗", + "create.item_attributes.washable.inverted": "不可被篩洗", + "create.item_attributes.crushable": "可被粉碎", + "create.item_attributes.crushable.inverted": "不可被粉碎", + "create.item_attributes.smeltable": "可被熔爐融煉", + "create.item_attributes.smeltable.inverted": "不可被熔爐融煉", + "create.item_attributes.smokable": "可被煙熏", + "create.item_attributes.smokable.inverted": "不可被煙熏", + "create.item_attributes.blastable": "可被高爐融煉", + "create.item_attributes.blastable.inverted": "不可被高爐融煉", + "create.item_attributes.shulker_level": "界伏盒是 %1$s", + "create.item_attributes.shulker_level.inverted": "界伏盒不是 %1$s", + "create.item_attributes.shulker_level.full": "滿的", + "create.item_attributes.shulker_level.empty": "空的", + "create.item_attributes.shulker_level.partial": "有裝東西但沒滿", "create.item_attributes.in_tag": "標籤是%1$s", "create.item_attributes.in_tag.inverted": "標籤不是%1$s", "create.item_attributes.in_item_group": "屬於%1$s", "create.item_attributes.in_item_group.inverted": "不屬於%1$s", "create.item_attributes.added_by": "由%1$s添加", "create.item_attributes.added_by.inverted": "不是由%1$s添加", - "create.item_attributes.shulker_level": "界伏盒是 %1$s", - "create.item_attributes.shulker_level.inverted": "界伏盒不是 %1$s", - "create.item_attributes.shulker_level.full": "滿的", - "create.item_attributes.shulker_level.empty": "空的", - "create.item_attributes.shulker_level.partial": "有裝東西但沒滿", "create.item_attributes.has_enchant": "有附魔效果%1$s", "create.item_attributes.has_enchant.inverted": "沒有附魔效果%1$s", "create.item_attributes.color": "已被染色成 %1$s", "create.item_attributes.color.inverted": "未被染色成 %1$s", - "create.item_attributes.max_enchanted": "已達到最高附魔等級", - "create.item_attributes.max_enchanted.inverted": "未達到最高附魔等級", "create.item_attributes.has_fluid": "包含%1$s", "create.item_attributes.has_fluid.inverted": "不包含%1$s", "create.item_attributes.has_name": "有自定義名稱%1$s", @@ -1090,14 +1119,14 @@ "create.item_attributes.book_copy_second.inverted": "不是第二份複製", "create.item_attributes.book_copy_tattered": "是第三份複製", "create.item_attributes.book_copy_tattered.inverted": "不是第三份複製", - "create.item_attributes.astralsorcery_crystal": "具有晶體屬性%1$s", - "create.item_attributes.astralsorcery_crystal.inverted": "不具有晶體屬性%1$s", - "create.item_attributes.astralsorcery_constellation": "與%1$s調諧", - "create.item_attributes.astralsorcery_constellation.inverted": "未與%1$s調諧", - "create.item_attributes.astralsorcery_perk_gem": "具有特殊屬性%1$s", - "create.item_attributes.astralsorcery_perk_gem.inverted": "不具有特殊屬性%1$s", "create.item_attributes.astralsorcery_amulet": "提升%1$s", "create.item_attributes.astralsorcery_amulet.inverted": "不提升%1$s", + "create.item_attributes.astralsorcery_constellation": "與%1$s調諧", + "create.item_attributes.astralsorcery_constellation.inverted": "未與%1$s調諧", + "create.item_attributes.astralsorcery_crystal": "具有晶體屬性%1$s", + "create.item_attributes.astralsorcery_crystal.inverted": "不具有晶體屬性%1$s", + "create.item_attributes.astralsorcery_perk_gem": "具有特殊屬性%1$s", + "create.item_attributes.astralsorcery_perk_gem.inverted": "不具有特殊屬性%1$s", "create.gui.attribute_filter.no_selected_attributes": "沒有標記任何屬性", "create.gui.attribute_filter.selected_attributes": "已選擇的屬性:", @@ -1394,6 +1423,15 @@ "block.create.turntable.tooltip": "轉盤", "block.create.turntable.tooltip.summary": "讓旋轉機械給你帶來一場刺激的旋轉風車體驗。", + "block.create.toolbox.tooltip": "UNLOCALIZED: TOOLBOX", + "block.create.toolbox.tooltip.summary": "UNLOCALIZED: Every Inventors' dearest Companion. Conveniently _holds_ a large amount of _8 Different_ item types.", + "block.create.toolbox.tooltip.condition1": "UNLOCALIZED: When Picked Up", + "block.create.toolbox.tooltip.behaviour1": "UNLOCALIZED: _Retains_ Inventory _Contents_.", + "block.create.toolbox.tooltip.condition2": "UNLOCALIZED: When placed in Range", + "block.create.toolbox.tooltip.behaviour2": "UNLOCALIZED: _Nearby_ _Players_ can hold the _Toolbox_ _Keybind_ to access its contents _Remotely_.", + "block.create.toolbox.tooltip.condition3": "UNLOCALIZED: When R-Clicked", + "block.create.toolbox.tooltip.behaviour3": "UNLOCALIZED: Opens the _Container Interface_.", + "block.create.stockpile_switch.tooltip": "存量偵測器", "block.create.stockpile_switch.tooltip.summary": "根據連接的容器_儲存空間_的占用情況切換紅石訊號強度。", "block.create.stockpile_switch.tooltip.condition1": "低於_下線_或高於_上線_時", @@ -1401,6 +1439,10 @@ "block.create.content_observer.tooltip": "物品偵測器", "block.create.content_observer.tooltip.summary": "偵測_容器_和_輸送帶_中過濾器匹配的物品。當觀察到包含匹配的物品時,此組件將發出_紅石訊號_。當觀察到的漏斗_轉移匹配的物品_時,此組件將發出_紅石脈沖_。", + "block.create.content_observer.tooltip.condition1": "UNLOCALIZED: When observing a Container", + "block.create.content_observer.tooltip.behaviour1": "UNLOCALIZED: Emits a _Redstone Signal_ while the observed container has _matching_ _content_.", + "block.create.content_observer.tooltip.condition2": "UNLOCALIZED: When observing a Funnel", + "block.create.content_observer.tooltip.behaviour2": "UNLOCALIZED: Emits a _Redstone Pulse_ when a _matching_ Item is _transferred_.", "block.create.adjustable_crate.tooltip": "可調節板條箱", "block.create.adjustable_crate.tooltip.summary": "這個箱子可以調整容量,最大可以收納_16組_物品。", diff --git a/src/generated/resources/assets/create/models/block/black_toolbox.json b/src/generated/resources/assets/create/models/block/black_toolbox.json new file mode 100644 index 000000000..59daf9193 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/black_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/black" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/blue_toolbox.json b/src/generated/resources/assets/create/models/block/blue_toolbox.json new file mode 100644 index 000000000..e141edb75 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/blue_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/blue" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brown_toolbox.json b/src/generated/resources/assets/create/models/block/brown_toolbox.json new file mode 100644 index 000000000..c7ff0f084 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/brown_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/brown" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/cyan_toolbox.json b/src/generated/resources/assets/create/models/block/cyan_toolbox.json new file mode 100644 index 000000000..66340a4fb --- /dev/null +++ b/src/generated/resources/assets/create/models/block/cyan_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/cyan" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/gray_toolbox.json b/src/generated/resources/assets/create/models/block/gray_toolbox.json new file mode 100644 index 000000000..78ba376ab --- /dev/null +++ b/src/generated/resources/assets/create/models/block/gray_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/gray" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/green_toolbox.json b/src/generated/resources/assets/create/models/block/green_toolbox.json new file mode 100644 index 000000000..75b87c951 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/green_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/green" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/light_blue_toolbox.json b/src/generated/resources/assets/create/models/block/light_blue_toolbox.json new file mode 100644 index 000000000..ac9c5d68f --- /dev/null +++ b/src/generated/resources/assets/create/models/block/light_blue_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/light_blue" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/light_gray_toolbox.json b/src/generated/resources/assets/create/models/block/light_gray_toolbox.json new file mode 100644 index 000000000..7da3d2d4c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/light_gray_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/light_gray" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/lime_toolbox.json b/src/generated/resources/assets/create/models/block/lime_toolbox.json new file mode 100644 index 000000000..cf66d6f6d --- /dev/null +++ b/src/generated/resources/assets/create/models/block/lime_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/lime" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/magenta_toolbox.json b/src/generated/resources/assets/create/models/block/magenta_toolbox.json new file mode 100644 index 000000000..8981c46a8 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/magenta_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/magenta" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/orange_toolbox.json b/src/generated/resources/assets/create/models/block/orange_toolbox.json new file mode 100644 index 000000000..564b8c9bd --- /dev/null +++ b/src/generated/resources/assets/create/models/block/orange_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/orange" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/pink_toolbox.json b/src/generated/resources/assets/create/models/block/pink_toolbox.json new file mode 100644 index 000000000..77b96dcf4 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/pink_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/pink" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/purple_toolbox.json b/src/generated/resources/assets/create/models/block/purple_toolbox.json new file mode 100644 index 000000000..2e259f635 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/purple_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/purple" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/red_toolbox.json b/src/generated/resources/assets/create/models/block/red_toolbox.json new file mode 100644 index 000000000..417bf8f09 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/red_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/red" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/white_toolbox.json b/src/generated/resources/assets/create/models/block/white_toolbox.json new file mode 100644 index 000000000..5556f26f3 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/white_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/white" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/yellow_toolbox.json b/src/generated/resources/assets/create/models/block/yellow_toolbox.json new file mode 100644 index 000000000..d5c59a497 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/yellow_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/block", + "textures": { + "0": "create:block/toolbox/yellow" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/black_toolbox.json b/src/generated/resources/assets/create/models/item/black_toolbox.json new file mode 100644 index 000000000..ed1bd5883 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/black_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/black" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/blue_toolbox.json b/src/generated/resources/assets/create/models/item/blue_toolbox.json new file mode 100644 index 000000000..1f5d6b34a --- /dev/null +++ b/src/generated/resources/assets/create/models/item/blue_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/blue" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/brown_toolbox.json b/src/generated/resources/assets/create/models/item/brown_toolbox.json new file mode 100644 index 000000000..44db1ecef --- /dev/null +++ b/src/generated/resources/assets/create/models/item/brown_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/brown" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/cyan_toolbox.json b/src/generated/resources/assets/create/models/item/cyan_toolbox.json new file mode 100644 index 000000000..f07294c53 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/cyan_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/cyan" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/gray_toolbox.json b/src/generated/resources/assets/create/models/item/gray_toolbox.json new file mode 100644 index 000000000..96bf28443 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/gray_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/gray" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/green_toolbox.json b/src/generated/resources/assets/create/models/item/green_toolbox.json new file mode 100644 index 000000000..c515a6cc8 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/green_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/green" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/light_blue_toolbox.json b/src/generated/resources/assets/create/models/item/light_blue_toolbox.json new file mode 100644 index 000000000..ccd30ddd0 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/light_blue_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/light_blue" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/light_gray_toolbox.json b/src/generated/resources/assets/create/models/item/light_gray_toolbox.json new file mode 100644 index 000000000..a04fb3e8d --- /dev/null +++ b/src/generated/resources/assets/create/models/item/light_gray_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/light_gray" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/lime_toolbox.json b/src/generated/resources/assets/create/models/item/lime_toolbox.json new file mode 100644 index 000000000..8f78bdb3e --- /dev/null +++ b/src/generated/resources/assets/create/models/item/lime_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/lime" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/magenta_toolbox.json b/src/generated/resources/assets/create/models/item/magenta_toolbox.json new file mode 100644 index 000000000..67c24fd1c --- /dev/null +++ b/src/generated/resources/assets/create/models/item/magenta_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/magenta" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/orange_toolbox.json b/src/generated/resources/assets/create/models/item/orange_toolbox.json new file mode 100644 index 000000000..da7b8046e --- /dev/null +++ b/src/generated/resources/assets/create/models/item/orange_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/orange" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/pink_toolbox.json b/src/generated/resources/assets/create/models/item/pink_toolbox.json new file mode 100644 index 000000000..f470337b3 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/pink_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/pink" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/purple_toolbox.json b/src/generated/resources/assets/create/models/item/purple_toolbox.json new file mode 100644 index 000000000..4bfd8fcc4 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/purple_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/purple" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/red_toolbox.json b/src/generated/resources/assets/create/models/item/red_toolbox.json new file mode 100644 index 000000000..6c45eb23b --- /dev/null +++ b/src/generated/resources/assets/create/models/item/red_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/red" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/white_toolbox.json b/src/generated/resources/assets/create/models/item/white_toolbox.json new file mode 100644 index 000000000..7666c29fa --- /dev/null +++ b/src/generated/resources/assets/create/models/item/white_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/white" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/yellow_toolbox.json b/src/generated/resources/assets/create/models/item/yellow_toolbox.json new file mode 100644 index 000000000..156703b47 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/yellow_toolbox.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/toolbox/item", + "textures": { + "0": "create:block/toolbox/yellow" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/black_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/black_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..25384d9d0 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/black_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/black_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/black_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/black_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/black_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..8efffc110 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/black_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/black_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/black_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/blue_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/blue_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..8d387311e --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/blue_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/blue_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/blue_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/blue_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/blue_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..1ed9b3d01 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/blue_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/blue_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/blue_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox.json new file mode 100644 index 000000000..8c43e9d44 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/brown_toolbox" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:plates/gold" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/brown_toolbox" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..dbef931eb --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/brown_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/brown_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..66b5bb27b --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/brown_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/brown_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/cyan_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/cyan_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..5ee432ba8 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/cyan_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/cyan_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/cyan_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/cyan_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/cyan_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..818722d03 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/cyan_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/cyan_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/cyan_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/gray_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/gray_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..b1378cb8b --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/gray_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/gray_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/gray_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/gray_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/gray_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..225623bc6 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/gray_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/gray_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/gray_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/green_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/green_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..bea6b3d8f --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/green_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/green_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/green_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/green_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/green_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..9b293b778 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/green_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/green_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/green_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_blue_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_blue_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..3c0308480 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_blue_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/light_blue_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/light_blue_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_blue_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_blue_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..7cadae543 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_blue_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/light_blue_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/light_blue_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_gray_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_gray_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..fcc3da6f0 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_gray_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/light_gray_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/light_gray_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_gray_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_gray_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..2d7e2ec59 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/light_gray_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/light_gray_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/light_gray_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/lime_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/lime_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..f81ed7f9b --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/lime_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/lime_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/lime_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/lime_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/lime_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..6c1da665a --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/lime_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/lime_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/lime_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/magenta_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/magenta_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..f8aabffcd --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/magenta_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/magenta_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/magenta_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/magenta_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/magenta_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..e91b28d1b --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/magenta_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/magenta_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/magenta_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/orange_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/orange_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..baf71df3b --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/orange_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/orange_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/orange_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/orange_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/orange_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..e2913f6ce --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/orange_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/orange_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/orange_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/pink_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/pink_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..9a7f2e402 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/pink_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/pink_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/pink_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/pink_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/pink_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..50506ecae --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/pink_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/pink_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/pink_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/purple_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/purple_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..de7832688 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/purple_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/purple_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/purple_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/purple_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/purple_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..216566ae4 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/purple_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/purple_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/purple_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/red_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/red_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..8f0940397 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/red_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/red_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/red_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/red_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/red_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..dd4198e8d --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/red_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/red_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/red_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/white_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/white_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..92e4c0882 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/white_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/white_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/white_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/white_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/white_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..462d402e6 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/white_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/white_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/white_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/yellow_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/yellow_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..d1b0d7776 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/yellow_toolbox_from_main_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/yellow_toolbox_from_main_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/yellow_toolbox_from_main_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/yellow_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/yellow_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..f257e60f6 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/yellow_toolbox_from_other_toolbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/yellow_toolbox_from_other_toolbox" + ] + }, + "criteria": { + "has_toolbox": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:toolboxes" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/yellow_toolbox_from_other_toolbox" + } + } + }, + "requirements": [ + [ + "has_toolbox", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/black_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/black_toolbox.json new file mode 100644 index 000000000..0eb8a43f3 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/black_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:black_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/blue_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/blue_toolbox.json new file mode 100644 index 000000000..a7b223542 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/blue_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:blue_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/brown_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/brown_toolbox.json new file mode 100644 index 000000000..e84f83f1e --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/brown_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:brown_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/cyan_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/cyan_toolbox.json new file mode 100644 index 000000000..bad83e82e --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/cyan_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:cyan_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/gray_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/gray_toolbox.json new file mode 100644 index 000000000..07541bf8e --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/gray_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:gray_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/green_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/green_toolbox.json new file mode 100644 index 000000000..5cbc865a5 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/green_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:green_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/light_blue_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/light_blue_toolbox.json new file mode 100644 index 000000000..d4fabb3c5 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/light_blue_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:light_blue_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/light_gray_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/light_gray_toolbox.json new file mode 100644 index 000000000..062539366 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/light_gray_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:light_gray_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/lime_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/lime_toolbox.json new file mode 100644 index 000000000..0761f4697 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/lime_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:lime_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/magenta_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/magenta_toolbox.json new file mode 100644 index 000000000..34eac7d29 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/magenta_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:magenta_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/orange_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/orange_toolbox.json new file mode 100644 index 000000000..22ebc019b --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/orange_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:orange_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/pink_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/pink_toolbox.json new file mode 100644 index 000000000..8ee137fce --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/pink_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:pink_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/purple_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/purple_toolbox.json new file mode 100644 index 000000000..ff7977799 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/purple_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:purple_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/red_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/red_toolbox.json new file mode 100644 index 000000000..086d5361d --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/red_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:red_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/white_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/white_toolbox.json new file mode 100644 index 000000000..31e955723 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/white_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:white_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/yellow_toolbox.json b/src/generated/resources/data/create/loot_tables/blocks/yellow_toolbox.json new file mode 100644 index 000000000..ab79ef612 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/yellow_toolbox.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Inventory", + "target": "Inventory", + "op": "replace" + } + ] + } + ], + "name": "create:yellow_toolbox" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/black_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/black_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..c50b64af4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/black_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/black" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:black_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/black_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/black_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..9527f380a --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/black_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/black" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:black_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/blue_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/blue_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..7c0bf6cf7 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/blue_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/blue" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:blue_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/blue_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/blue_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..27736017e --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/blue_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/blue" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:blue_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/brown_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/brown_toolbox.json new file mode 100644 index 000000000..6d6361a8d --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/brown_toolbox.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " C ", + "SWS", + " L " + ], + "key": { + "S": { + "tag": "forge:plates/gold" + }, + "C": { + "item": "create:cogwheel" + }, + "W": { + "tag": "forge:chests/wooden" + }, + "L": { + "tag": "forge:leather" + } + }, + "result": { + "item": "create:brown_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/brown_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/brown_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..0db80fc97 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/brown_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/brown" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:brown_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/brown_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/brown_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..28aac0823 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/brown_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/brown" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:brown_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/cyan_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/cyan_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..749e020e8 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/cyan_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/cyan" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:cyan_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/cyan_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/cyan_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..11841f982 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/cyan_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/cyan" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:cyan_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/gray_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/gray_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..450b7e4b8 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/gray_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/gray" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:gray_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/gray_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/gray_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..8d721bf4f --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/gray_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/gray" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:gray_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/green_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/green_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..28858a501 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/green_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/green" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:green_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/green_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/green_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..24526bce9 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/green_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/green" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:green_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/light_blue_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/light_blue_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..75621af2b --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/light_blue_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/light_blue" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:light_blue_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/light_blue_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/light_blue_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..6afefc1b3 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/light_blue_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/light_blue" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:light_blue_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/light_gray_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/light_gray_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..371d47432 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/light_gray_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/light_gray" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:light_gray_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/light_gray_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/light_gray_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..cc48c4376 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/light_gray_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/light_gray" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:light_gray_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/lime_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/lime_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..b86ba9427 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/lime_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/lime" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:lime_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/lime_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/lime_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..f2bb6e189 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/lime_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/lime" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:lime_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/magenta_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/magenta_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..a8842ade0 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/magenta_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/magenta" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:magenta_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/magenta_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/magenta_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..5593479ad --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/magenta_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/magenta" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:magenta_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/orange_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/orange_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..f0b01517c --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/orange_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/orange" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:orange_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/orange_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/orange_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..82180b384 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/orange_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/orange" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:orange_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/pink_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/pink_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..351ae6db5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/pink_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/pink" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:pink_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/pink_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/pink_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..24da6b4c5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/pink_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/pink" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:pink_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/purple_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/purple_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..252f414e7 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/purple_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/purple" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:purple_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/purple_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/purple_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..aa4fed224 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/purple_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/purple" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:purple_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/red_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/red_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..ebb27082c --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/red_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/red" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:red_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/red_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/red_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..6bfbff76e --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/red_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/red" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:red_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/white_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/white_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..62f9b0f56 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/white_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/white" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:white_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/white_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/white_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..0ef96c2d4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/white_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/white" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:white_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/yellow_toolbox_from_main_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/yellow_toolbox_from_main_toolbox.json new file mode 100644 index 000000000..1cfded44a --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/yellow_toolbox_from_main_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/yellow" + }, + "-": { + "item": "create:brown_toolbox" + } + }, + "result": { + "item": "create:yellow_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/yellow_toolbox_from_other_toolbox.json b/src/generated/resources/data/create/recipes/crafting/curiosities/yellow_toolbox_from_other_toolbox.json new file mode 100644 index 000000000..dfbdcc356 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/yellow_toolbox_from_other_toolbox.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/yellow" + }, + "-": { + "tag": "create:toolboxes" + } + }, + "result": { + "item": "create:yellow_toolbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/blocks/toolboxes.json b/src/generated/resources/data/create/tags/blocks/toolboxes.json new file mode 100644 index 000000000..1d7b0be45 --- /dev/null +++ b/src/generated/resources/data/create/tags/blocks/toolboxes.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "create:white_toolbox", + "create:orange_toolbox", + "create:magenta_toolbox", + "create:light_blue_toolbox", + "create:yellow_toolbox", + "create:lime_toolbox", + "create:pink_toolbox", + "create:gray_toolbox", + "create:light_gray_toolbox", + "create:cyan_toolbox", + "create:purple_toolbox", + "create:blue_toolbox", + "create:brown_toolbox", + "create:green_toolbox", + "create:red_toolbox", + "create:black_toolbox" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/items/toolboxes.json b/src/generated/resources/data/create/tags/items/toolboxes.json new file mode 100644 index 000000000..1d7b0be45 --- /dev/null +++ b/src/generated/resources/data/create/tags/items/toolboxes.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "create:white_toolbox", + "create:orange_toolbox", + "create:magenta_toolbox", + "create:light_blue_toolbox", + "create:yellow_toolbox", + "create:lime_toolbox", + "create:pink_toolbox", + "create:gray_toolbox", + "create:light_gray_toolbox", + "create:cyan_toolbox", + "create:purple_toolbox", + "create:blue_toolbox", + "create:brown_toolbox", + "create:green_toolbox", + "create:red_toolbox", + "create:black_toolbox" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/blocks/cobblestone.json b/src/generated/resources/data/forge/tags/blocks/cobblestone.json new file mode 100644 index 000000000..4a5c2c1fb --- /dev/null +++ b/src/generated/resources/data/forge/tags/blocks/cobblestone.json @@ -0,0 +1,14 @@ +{ + "replace": false, + "values": [ + "create:granite_cobblestone", + "create:diorite_cobblestone", + "create:andesite_cobblestone", + "create:limestone_cobblestone", + "create:weathered_limestone_cobblestone", + "create:dolomite_cobblestone", + "create:gabbro_cobblestone", + "create:scoria_cobblestone", + "create:dark_scoria_cobblestone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/stone.json b/src/generated/resources/data/forge/tags/blocks/stone.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/stone.json rename to src/generated/resources/data/forge/tags/blocks/stone.json index 2b4996602..5a5395c1f 100644 --- a/src/main/resources/data/forge/tags/blocks/stone.json +++ b/src/generated/resources/data/forge/tags/blocks/stone.json @@ -5,10 +5,10 @@ "create:polished_limestone", "create:weathered_limestone", "create:polished_weathered_limestone", - "create:gabbro", - "create:polished_gabbro", "create:dolomite", "create:polished_dolomite", + "create:gabbro", + "create:polished_gabbro", "create:scoria", "create:polished_scoria", "create:dark_scoria", diff --git a/src/main/resources/data/forge/tags/blocks/wg_stone.json b/src/generated/resources/data/forge/tags/blocks/wg_stone.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/wg_stone.json rename to src/generated/resources/data/forge/tags/blocks/wg_stone.json index d49e3fbd6..39e5fd569 100644 --- a/src/main/resources/data/forge/tags/blocks/wg_stone.json +++ b/src/generated/resources/data/forge/tags/blocks/wg_stone.json @@ -3,8 +3,8 @@ "values": [ "create:limestone", "create:weathered_limestone", - "create:gabbro", "create:dolomite", + "create:gabbro", "create:natural_scoria" ] } \ No newline at end of file diff --git a/src/generated/resources/data/forge/tags/items/buckets/honey.json b/src/generated/resources/data/forge/tags/items/buckets/honey.json new file mode 100644 index 000000000..215063f0f --- /dev/null +++ b/src/generated/resources/data/forge/tags/items/buckets/honey.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "create:honey_bucket" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/stone.json b/src/generated/resources/data/forge/tags/items/stone.json similarity index 100% rename from src/main/resources/data/forge/tags/items/stone.json rename to src/generated/resources/data/forge/tags/items/stone.json index 2b4996602..5a5395c1f 100644 --- a/src/main/resources/data/forge/tags/items/stone.json +++ b/src/generated/resources/data/forge/tags/items/stone.json @@ -5,10 +5,10 @@ "create:polished_limestone", "create:weathered_limestone", "create:polished_weathered_limestone", - "create:gabbro", - "create:polished_gabbro", "create:dolomite", "create:polished_dolomite", + "create:gabbro", + "create:polished_gabbro", "create:scoria", "create:polished_scoria", "create:dark_scoria", diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 8fb10077e..e1624bb5c 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -9,8 +9,8 @@ import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlo import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; +import net.minecraft.item.DyeColor; import net.minecraft.util.Direction; -import net.minecraft.util.ResourceLocation; public class AllBlockPartials { @@ -93,27 +93,30 @@ public class AllBlockPartials { SPOUT_TOP = get("spout/top"), SPOUT_MIDDLE = get("spout/middle"), SPOUT_BOTTOM = get("spout/bottom"), - PECULIAR_BELL = get("peculiar_bell"), - HAUNTED_BELL = get("haunted_bell"), + PECULIAR_BELL = get("peculiar_bell"), HAUNTED_BELL = get("haunted_bell"), - SPEED_CONTROLLER_BRACKET = get("rotation_speed_controller/bracket"), + TOOLBOX_DRAWER = get("toolbox/drawer"), - GOGGLES = get("goggles"), + SPEED_CONTROLLER_BRACKET = get("rotation_speed_controller/bracket"), - EJECTOR_TOP = get("weighted_ejector/top"), + GOGGLES = get("goggles"), - COPPER_BACKTANK_SHAFT = get("copper_backtank/block_shaft_input"), - COPPER_BACKTANK_COGS = get("copper_backtank/block_cogs"), + EJECTOR_TOP = get("weighted_ejector/top"), - CRAFTING_BLUEPRINT_1x1 = getEntity("crafting_blueprint_small"), - CRAFTING_BLUEPRINT_2x2 = getEntity("crafting_blueprint_medium"), - CRAFTING_BLUEPRINT_3x3 = getEntity("crafting_blueprint_large"), + COPPER_BACKTANK_SHAFT = get("copper_backtank/block_shaft_input"), + COPPER_BACKTANK_COGS = get("copper_backtank/block_cogs"), - COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"), - COUPLING_RING = getEntity("minecart_coupling/ring"), - COUPLING_CONNECTOR = getEntity("minecart_coupling/connector"); + CRAFTING_BLUEPRINT_1x1 = getEntity("crafting_blueprint_small"), + CRAFTING_BLUEPRINT_2x2 = getEntity("crafting_blueprint_medium"), + CRAFTING_BLUEPRINT_3x3 = getEntity("crafting_blueprint_large"), - public static final Map> PIPE_ATTACHMENTS = new HashMap<>(); + COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"), + COUPLING_RING = getEntity("minecart_coupling/ring"), + COUPLING_CONNECTOR = getEntity("minecart_coupling/connector"); + + public static final Map> PIPE_ATTACHMENTS = + new HashMap<>(); + public static final Map TOOLBOX_LIDS = new HashMap<>(); public static final Map BLAZES = new HashMap<>(); static { @@ -136,17 +139,20 @@ public class AllBlockPartials { continue; BLAZES.put(heat, get("blaze_burner/blaze/" + heat.getSerializedName())); } + for (DyeColor color : DyeColor.values()) + TOOLBOX_LIDS.put(color, get("toolbox/lid/" + Lang.asId(color.name()))); } private static PartialModel getEntity(String path) { - return new PartialModel(new ResourceLocation(Create.ID, "entity/" + path)); + return new PartialModel(Create.asResource("entity/" + path)); } private static PartialModel get(String path) { - return new PartialModel(new ResourceLocation(Create.ID, "block/" + path)); + return new PartialModel(Create.asResource("block/" + path)); } - public static void clientInit() { + public static void init() { // init static fields } + } diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index a990a6d10..a7e176e76 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -118,6 +118,7 @@ import com.simibubi.create.content.curiosities.armor.CopperBacktankBlock; import com.simibubi.create.content.curiosities.bell.HauntedBellBlock; import com.simibubi.create.content.curiosities.bell.HauntedBellMovementBehaviour; import com.simibubi.create.content.curiosities.bell.PeculiarBellBlock; +import com.simibubi.create.content.curiosities.toolbox.ToolboxBlock; 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; @@ -160,9 +161,9 @@ import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchBlock import com.simibubi.create.content.logistics.item.LecternControllerBlock; import com.simibubi.create.content.schematics.block.SchematicTableBlock; import com.simibubi.create.content.schematics.block.SchematicannonBlock; +import com.simibubi.create.foundation.block.BlockStressDefaults; import com.simibubi.create.foundation.block.DyedBlockList; import com.simibubi.create.foundation.block.ItemUseOverrides; -import com.simibubi.create.foundation.block.BlockStressDefaults; import com.simibubi.create.foundation.data.AssetLookup; import com.simibubi.create.foundation.data.BlockStateGen; import com.simibubi.create.foundation.data.BuilderTransformers; @@ -208,7 +209,7 @@ import net.minecraftforge.common.ToolType; public class AllBlocks { private static final CreateRegistrate REGISTRATE = Create.registrate() - .itemGroup(() -> Create.BASE_CREATIVE_TAB); + .itemGroup(() -> Create.BASE_CREATIVE_TAB); // Schematics @@ -224,11 +225,12 @@ public class AllBlocks { Builder builder = LootTable.lootTable(); IBuilder survivesExplosion = SurvivesExplosion.survivesExplosion(); lt.add(block, builder.withPool(LootPool.lootPool() - .when(survivesExplosion) - .setRolls(ConstantRange.exactly(1)) - .add(ItemLootEntry.lootTableItem(AllBlocks.SCHEMATICANNON.get().asItem()) - .apply(CopyNbt.copyData(CopyNbt.Source.BLOCK_ENTITY) - .copy("Options", "BlockEntityTag.Options"))))); + .when(survivesExplosion) + .setRolls(ConstantRange.exactly(1)) + .add(ItemLootEntry.lootTableItem(AllBlocks.SCHEMATICANNON.get() + .asItem()) + .apply(CopyNbt.copyData(CopyNbt.Source.BLOCK_ENTITY) + .copy("Options", "BlockEntityTag.Options"))))); }) .item() .transform(customItemModel()) @@ -501,11 +503,13 @@ public class AllBlocks { .addLayer(() -> RenderType::cutoutMipped) .tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.FAN_HEATERS.tag) .loot((lt, block) -> lt.dropOther(block, AllItems.EMPTY_BLAZE_BURNER.get())) - .blockstate((c, p) -> p.getVariantBuilder(c.get()).forAllStates(state -> - ConfiguredModel.builder() - .modelFile(p.models().getExistingFile(p.modLoc( - "block/blaze_burner/" + (state.getValue(LitBlazeBurnerBlock.FLAME_TYPE) == LitBlazeBurnerBlock.FlameType.SOUL ? "block_with_soul_fire" : "block_with_fire") - ))) + .blockstate((c, p) -> p.getVariantBuilder(c.get()) + .forAllStates(state -> ConfiguredModel.builder() + .modelFile(p.models() + .getExistingFile(p.modLoc("block/blaze_burner/" + + (state.getValue(LitBlazeBurnerBlock.FLAME_TYPE) == LitBlazeBurnerBlock.FlameType.SOUL + ? "block_with_soul_fire" + : "block_with_fire")))) .build())) .register(); @@ -598,7 +602,8 @@ public class AllBlocks { .initialProperties(SharedProperties::softMetal) .addLayer(() -> RenderType::cutoutMipped) .blockstate((c, p) -> BlockStateGen.axisBlock(c, p, s -> p.models() - .getExistingFile(p.modLoc("block/fluid_pipe/window" + (s.getValue(GlassFluidPipeBlock.ALT) ? "_alt" : ""))))) + .getExistingFile( + p.modLoc("block/fluid_pipe/window" + (s.getValue(GlassFluidPipeBlock.ALT) ? "_alt" : ""))))) .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) .loot((p, b) -> p.dropOther(b, FLUID_PIPE.get())) .register(); @@ -626,39 +631,39 @@ public class AllBlocks { .blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p, (state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal", state.getValue(FluidValveBlock.ENABLED) ? "open" : "closed"))) - .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) - .item() - .transform(customItemModel()) - .register(); + .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) + .item() + .transform(customItemModel()) + .register(); public static final BlockEntry COPPER_VALVE_HANDLE = - REGISTRATE.block("copper_valve_handle", ValveHandleBlock::copper) - .transform(BuilderTransformers.valveHandle(null)) - .register(); + REGISTRATE.block("copper_valve_handle", ValveHandleBlock::copper) + .transform(BuilderTransformers.valveHandle(null)) + .register(); public static final DyedBlockList DYED_VALVE_HANDLES = new DyedBlockList<>(colour -> { String colourName = colour.getSerializedName(); return REGISTRATE.block(colourName + "_valve_handle", ValveHandleBlock::dyed) - .transform(BuilderTransformers.valveHandle(colour)) - .recipe((c, p) -> ShapedRecipeBuilder.shaped(c.get()) - .pattern("#") - .pattern("-") - .define('#', DyeHelper.getTagOfDye(colour)) - .define('-', AllItemTags.VALVE_HANDLES.tag) - .unlockedBy("has_valve", RegistrateRecipeProvider.hasItem(AllItemTags.VALVE_HANDLES.tag)) - .save(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_valve_handle"))) - .register(); + .transform(BuilderTransformers.valveHandle(colour)) + .recipe((c, p) -> ShapedRecipeBuilder.shaped(c.get()) + .pattern("#") + .pattern("-") + .define('#', DyeHelper.getTagOfDye(colour)) + .define('-', AllItemTags.VALVE_HANDLES.tag) + .unlockedBy("has_valve", RegistrateRecipeProvider.hasItem(AllItemTags.VALVE_HANDLES.tag)) + .save(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_valve_handle"))) + .register(); }); public static final BlockEntry FLUID_TANK = REGISTRATE.block("fluid_tank", FluidTankBlock::regular) - .initialProperties(SharedProperties::softMetal) - .properties(AbstractBlock.Properties::noOcclusion) - .blockstate(new FluidTankGenerator()::generate) - .onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::standard)) - .addLayer(() -> RenderType::cutoutMipped) - .item(FluidTankItem::new) - .model(AssetLookup.customBlockItemModel("_", "block_single_window")) - .build() + .initialProperties(SharedProperties::softMetal) + .properties(AbstractBlock.Properties::noOcclusion) + .blockstate(new FluidTankGenerator()::generate) + .onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::standard)) + .addLayer(() -> RenderType::cutoutMipped) + .item(FluidTankItem::new) + .model(AssetLookup.customBlockItemModel("_", "block_single_window")) + .build() .register(); public static final BlockEntry CREATIVE_FLUID_TANK = @@ -844,11 +849,11 @@ public class AllBlocks { .register(); public static final BlockEntry CONTROLLER_RAIL = - REGISTRATE.block("controller_rail", ControllerRailBlock::new) - .initialProperties(() -> Blocks.POWERED_RAIL) - .blockstate(new ControllerRailGenerator()::generate) - .addLayer(() -> RenderType::cutoutMipped) - .color(() -> ColorHandlers::getRedstonePower) + REGISTRATE.block("controller_rail", ControllerRailBlock::new) + .initialProperties(() -> Blocks.POWERED_RAIL) + .blockstate(new ControllerRailGenerator()::generate) + .addLayer(() -> RenderType::cutoutMipped) + .color(() -> ColorHandlers::getRedstonePower) .tag(BlockTags.RAILS) .item() .model((c, p) -> p.generated(c, Create.asResource("block/" + c.getName()))) @@ -957,68 +962,68 @@ public class AllBlocks { .addLayer(() -> RenderType::cutoutMipped) .item() .transform(customItemModel()) - .register(); + .register(); public static final BlockEntry MECHANICAL_PLOUGH = - REGISTRATE.block("mechanical_plough", PloughBlock::new) - .initialProperties(SharedProperties::stone) - .onRegister(addMovementBehaviour(new PloughMovementBehaviour())) - .blockstate(BlockStateGen.horizontalBlockProvider(false)) - .simpleItem() - .register(); + REGISTRATE.block("mechanical_plough", PloughBlock::new) + .initialProperties(SharedProperties::stone) + .onRegister(addMovementBehaviour(new PloughMovementBehaviour())) + .blockstate(BlockStateGen.horizontalBlockProvider(false)) + .simpleItem() + .register(); public static final DyedBlockList SEATS = new DyedBlockList<>(colour -> { String colourName = colour.getSerializedName(); SeatMovementBehaviour movementBehaviour = new SeatMovementBehaviour(); return REGISTRATE.block(colourName + "_seat", p -> new SeatBlock(p, colour == DyeColor.RED)) - .initialProperties(SharedProperties::wooden) - .onRegister(addMovementBehaviour(movementBehaviour)) - .blockstate((c, p) -> { - p.simpleBlock(c.get(), p.models() - .withExistingParent(colourName + "_seat", p.modLoc("block/seat")) - .texture("1", p.modLoc("block/seat/top_" + colourName)) - .texture("2", p.modLoc("block/seat/side_" + colourName))); - }) - .recipe((c, p) -> { - ShapedRecipeBuilder.shaped(c.get()) - .pattern("#") - .pattern("-") - .define('#', DyeHelper.getWoolOfDye(colour)) - .define('-', ItemTags.WOODEN_SLABS) - .unlockedBy("has_wool", RegistrateRecipeProvider.hasItem(ItemTags.WOOL)) - .save(p, Create.asResource("crafting/kinetics/" + c.getName())); - ShapedRecipeBuilder.shaped(c.get()) - .pattern("#") - .pattern("-") - .define('#', DyeHelper.getTagOfDye(colour)) - .define('-', AllItemTags.SEATS.tag) - .unlockedBy("has_seat", RegistrateRecipeProvider.hasItem(AllItemTags.SEATS.tag)) - .save(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_seat")); - }) - .onRegisterAfter(Item.class, v -> TooltipHelper.referTo(v, "block.create.seat")) - .tag(AllBlockTags.SEATS.tag) - .item() - .tag(AllItemTags.SEATS.tag) - .build() - .register(); + .initialProperties(SharedProperties::wooden) + .onRegister(addMovementBehaviour(movementBehaviour)) + .blockstate((c, p) -> { + p.simpleBlock(c.get(), p.models() + .withExistingParent(colourName + "_seat", p.modLoc("block/seat")) + .texture("1", p.modLoc("block/seat/top_" + colourName)) + .texture("2", p.modLoc("block/seat/side_" + colourName))); + }) + .recipe((c, p) -> { + ShapedRecipeBuilder.shaped(c.get()) + .pattern("#") + .pattern("-") + .define('#', DyeHelper.getWoolOfDye(colour)) + .define('-', ItemTags.WOODEN_SLABS) + .unlockedBy("has_wool", RegistrateRecipeProvider.hasItem(ItemTags.WOOL)) + .save(p, Create.asResource("crafting/kinetics/" + c.getName())); + ShapedRecipeBuilder.shaped(c.get()) + .pattern("#") + .pattern("-") + .define('#', DyeHelper.getTagOfDye(colour)) + .define('-', AllItemTags.SEATS.tag) + .unlockedBy("has_seat", RegistrateRecipeProvider.hasItem(AllItemTags.SEATS.tag)) + .save(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_seat")); + }) + .onRegisterAfter(Item.class, v -> TooltipHelper.referTo(v, "block.create.brown_seat")) + .tag(AllBlockTags.SEATS.tag) + .item() + .tag(AllItemTags.SEATS.tag) + .build() + .register(); }); public static final BlockEntry SAIL_FRAME = REGISTRATE.block("sail_frame", p -> SailBlock.frame(p)) - .initialProperties(SharedProperties::wooden) - .properties(AbstractBlock.Properties::noOcclusion) - .blockstate(BlockStateGen.directionalBlockProvider(false)) - .tag(AllBlockTags.WINDMILL_SAILS.tag) - .tag(AllBlockTags.FAN_TRANSPARENT.tag) - .simpleItem() - .register(); + .initialProperties(SharedProperties::wooden) + .properties(AbstractBlock.Properties::noOcclusion) + .blockstate(BlockStateGen.directionalBlockProvider(false)) + .tag(AllBlockTags.WINDMILL_SAILS.tag) + .tag(AllBlockTags.FAN_TRANSPARENT.tag) + .simpleItem() + .register(); public static final BlockEntry SAIL = REGISTRATE.block("white_sail", p -> SailBlock.withCanvas(p)) - .initialProperties(SharedProperties::wooden) - .properties(AbstractBlock.Properties::noOcclusion) - .blockstate(BlockStateGen.directionalBlockProvider(false)) - .tag(AllBlockTags.WINDMILL_SAILS.tag) - .simpleItem() - .register(); + .initialProperties(SharedProperties::wooden) + .properties(AbstractBlock.Properties::noOcclusion) + .blockstate(BlockStateGen.directionalBlockProvider(false)) + .tag(AllBlockTags.WINDMILL_SAILS.tag) + .simpleItem() + .register(); public static final DyedBlockList DYED_SAILS = new DyedBlockList<>(colour -> { if (colour == DyeColor.WHITE) { @@ -1026,24 +1031,24 @@ public class AllBlocks { } String colourName = colour.getSerializedName(); return REGISTRATE.block(colourName + "_sail", p -> SailBlock.withCanvas(p)) - .properties(AbstractBlock.Properties::noOcclusion) - .initialProperties(SharedProperties::wooden) - .blockstate((c, p) -> p.directionalBlock(c.get(), p.models() - .withExistingParent(colourName + "_sail", p.modLoc("block/white_sail")) - .texture("0", p.modLoc("block/sail/canvas_" + colourName)))) - .tag(AllBlockTags.WINDMILL_SAILS.tag) - .tag(AllBlockTags.SAILS.tag) - .loot((p, b) -> p.dropOther(b, SAIL.get())) - .register(); + .properties(AbstractBlock.Properties::noOcclusion) + .initialProperties(SharedProperties::wooden) + .blockstate((c, p) -> p.directionalBlock(c.get(), p.models() + .withExistingParent(colourName + "_sail", p.modLoc("block/white_sail")) + .texture("0", p.modLoc("block/sail/canvas_" + colourName)))) + .tag(AllBlockTags.WINDMILL_SAILS.tag) + .tag(AllBlockTags.SAILS.tag) + .loot((p, b) -> p.dropOther(b, SAIL.get())) + .register(); }); public static final BlockEntry ANDESITE_CASING = REGISTRATE.block("andesite_casing", CasingBlock::new) - .transform(BuilderTransformers.casing(AllSpriteShifts.ANDESITE_CASING)) - .register(); + .transform(BuilderTransformers.casing(AllSpriteShifts.ANDESITE_CASING)) + .register(); public static final BlockEntry BRASS_CASING = REGISTRATE.block("brass_casing", CasingBlock::new) - .transform(BuilderTransformers.casing(AllSpriteShifts.BRASS_CASING)) - .register(); + .transform(BuilderTransformers.casing(AllSpriteShifts.BRASS_CASING)) + .register(); public static final BlockEntry COPPER_CASING = REGISTRATE.block("copper_casing", CasingBlock::new) .transform(BuilderTransformers.casing(AllSpriteShifts.COPPER_CASING)) @@ -1301,12 +1306,11 @@ public class AllBlocks { public static final BlockEntry LECTERN_CONTROLLER = REGISTRATE.block("lectern_controller", LecternControllerBlock::new) .initialProperties(() -> Blocks.LECTERN) - .blockstate((c,p) -> p.horizontalBlock(c.get(), p.models() + .blockstate((c, p) -> p.horizontalBlock(c.get(), p.models() .getExistingFile(p.mcLoc("block/lectern")))) .loot((lt, block) -> lt.dropOther(block, Blocks.LECTERN)) .register(); - // Curiosities static { @@ -1346,6 +1350,55 @@ public class AllBlocks { .onRegister(addMovementBehaviour(new HauntedBellMovementBehaviour())) .register(); + public static final DyedBlockList TOOLBOXES = new DyedBlockList<>(colour -> { + String colourName = colour.getSerializedName(); + return REGISTRATE.block(colourName + "_toolbox", p -> new ToolboxBlock(p, colour)) + .initialProperties(SharedProperties::wooden) + .properties(p -> p.sound(SoundType.WOOD)) + .addLayer(() -> RenderType::cutoutMipped) + .loot((lt, block) -> { + Builder builder = LootTable.lootTable(); + IBuilder survivesExplosion = SurvivesExplosion.survivesExplosion(); + lt.add(block, builder.withPool(LootPool.lootPool() + .when(survivesExplosion) + .setRolls(ConstantRange.exactly(1)) + .add(ItemLootEntry.lootTableItem(block) + .apply(CopyName.copyName(CopyName.Source.BLOCK_ENTITY)) + .apply(CopyNbt.copyData(CopyNbt.Source.BLOCK_ENTITY) + .copy("Inventory", "Inventory"))))); + }) + .blockstate((c, p) -> { + p.horizontalBlock(c.get(), p.models() + .withExistingParent(colourName + "_toolbox", p.modLoc("block/toolbox/block")) + .texture("0", p.modLoc("block/toolbox/" + colourName))); + }) + .recipe((c, p) -> { + ShapedRecipeBuilder.shaped(c.get()) + .pattern("#") + .pattern("-") + .define('#', DyeHelper.getTagOfDye(colour)) + .define('-', AllItemTags.TOOLBOXES.tag) + .unlockedBy("has_toolbox", RegistrateRecipeProvider.hasItem(AllItemTags.TOOLBOXES.tag)) + .save(p, Create.asResource("crafting/curiosities/" + c.getName() + "_from_other_toolbox")); + + ShapedRecipeBuilder.shaped(c.get()) + .pattern("#") + .pattern("-") + .define('#', DyeHelper.getTagOfDye(colour)) + .define('-', ToolboxBlock.getMainBox()) + .unlockedBy("has_toolbox", RegistrateRecipeProvider.hasItem(AllItemTags.TOOLBOXES.tag)) + .save(p, Create.asResource("crafting/curiosities/" + c.getName() + "_from_main_toolbox")); + }) + .onRegisterAfter(Item.class, v -> TooltipHelper.referTo(v, "block.create.toolbox")) + .tag(AllBlockTags.TOOLBOXES.tag) + .item() + .model((c, p) -> p.withExistingParent(colourName + "_toolbox", p.modLoc("block/toolbox/item")) + .texture("0", p.modLoc("block/toolbox/" + colourName))) + .tag(AllItemTags.TOOLBOXES.tag) + .build() + .register(); + }); + // Materials static { diff --git a/src/main/java/com/simibubi/create/AllContainerTypes.java b/src/main/java/com/simibubi/create/AllContainerTypes.java index 14d498753..79e5745f3 100644 --- a/src/main/java/com/simibubi/create/AllContainerTypes.java +++ b/src/main/java/com/simibubi/create/AllContainerTypes.java @@ -1,5 +1,7 @@ package com.simibubi.create; +import com.simibubi.create.content.curiosities.toolbox.ToolboxContainer; +import com.simibubi.create.content.curiosities.toolbox.ToolboxScreen; import com.simibubi.create.content.curiosities.tools.BlueprintContainer; import com.simibubi.create.content.curiosities.tools.BlueprintScreen; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateContainer; @@ -45,6 +47,9 @@ public class AllContainerTypes { public static final ContainerEntry LINKED_CONTROLLER = register("linked_controller", LinkedControllerContainer::new, () -> LinkedControllerScreen::new); + + public static final ContainerEntry TOOLBOX = + register("toolbox", ToolboxContainer::new, () -> ToolboxScreen::new); private static > ContainerEntry register(String name, ForgeContainerFactory factory, NonNullSupplier> screenFactory) { return Create.registrate().container(name, factory, screenFactory).register(); diff --git a/src/main/java/com/simibubi/create/AllFluids.java b/src/main/java/com/simibubi/create/AllFluids.java index e12816477..5cc52de55 100644 --- a/src/main/java/com/simibubi/create/AllFluids.java +++ b/src/main/java/com/simibubi/create/AllFluids.java @@ -46,6 +46,9 @@ public class AllFluids { .slopeFindDistance(3) .explosionResistance(100f)) .tag(AllFluidTags.HONEY.tag) + .bucket() + .tag(AllTags.forgeItemTag("buckets/honey")) + .build() .register(); public static final FluidEntry CHOCOLATE = diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 36885956c..90a9e2030 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -3,7 +3,6 @@ package com.simibubi.create; import static com.simibubi.create.AllTags.forgeItemTag; import static com.simibubi.create.AllTags.AllItemTags.CREATE_INGOTS; import static com.simibubi.create.AllTags.AllItemTags.CRUSHED_ORES; -import static com.simibubi.create.AllTags.AllItemTags.NUGGETS; import static com.simibubi.create.AllTags.AllItemTags.PLATES; import static com.simibubi.create.content.AllSections.CURIOSITIES; import static com.simibubi.create.content.AllSections.KINETICS; @@ -22,7 +21,7 @@ import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlo import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorItem; import com.simibubi.create.content.contraptions.relays.gearbox.VerticalGearboxItem; import com.simibubi.create.content.contraptions.wrench.WrenchItem; -import com.simibubi.create.content.contraptions.wrench.WrenchModel; +import com.simibubi.create.content.contraptions.wrench.WrenchItemRenderer; import com.simibubi.create.content.curiosities.BuildersTeaItem; import com.simibubi.create.content.curiosities.ChromaticCompoundColor; import com.simibubi.create.content.curiosities.ChromaticCompoundItem; @@ -35,18 +34,18 @@ import com.simibubi.create.content.curiosities.armor.CopperBacktankItem; import com.simibubi.create.content.curiosities.armor.DivingBootsItem; import com.simibubi.create.content.curiosities.armor.DivingHelmetItem; import com.simibubi.create.content.curiosities.symmetry.SymmetryWandItem; -import com.simibubi.create.content.curiosities.symmetry.client.SymmetryWandModel; +import com.simibubi.create.content.curiosities.symmetry.client.SymmetryWandItemRenderer; import com.simibubi.create.content.curiosities.tools.BlueprintItem; import com.simibubi.create.content.curiosities.tools.ExtendoGripItem; -import com.simibubi.create.content.curiosities.tools.ExtendoGripModel; +import com.simibubi.create.content.curiosities.tools.ExtendoGripItemRenderer; import com.simibubi.create.content.curiosities.tools.SandPaperItem; -import com.simibubi.create.content.curiosities.tools.SandPaperItemRenderer.SandPaperModel; +import com.simibubi.create.content.curiosities.tools.SandPaperItemRenderer; import com.simibubi.create.content.curiosities.weapons.PotatoCannonItem; -import com.simibubi.create.content.curiosities.weapons.PotatoCannonModel; +import com.simibubi.create.content.curiosities.weapons.PotatoCannonItemRenderer; import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperItem; -import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperModel; +import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperItemRenderer; import com.simibubi.create.content.logistics.item.LinkedControllerItem; -import com.simibubi.create.content.logistics.item.LinkedControllerModel; +import com.simibubi.create.content.logistics.item.LinkedControllerItemRenderer; import com.simibubi.create.content.logistics.item.filter.FilterItem; import com.simibubi.create.content.schematics.item.SchematicAndQuillItem; import com.simibubi.create.content.schematics.item.SchematicItem; @@ -64,6 +63,7 @@ import net.minecraft.item.Rarity; import net.minecraft.tags.ITag; import net.minecraft.tags.ItemTags; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.Tags; public class AllItems { @@ -167,9 +167,9 @@ public class AllItems { .register(); public static final ItemEntry COPPER_NUGGET = - taggedIngredient("copper_nugget", forgeItemTag("nuggets/copper"), NUGGETS.tag), - ZINC_NUGGET = taggedIngredient("zinc_nugget", forgeItemTag("nuggets/zinc"), NUGGETS.tag), - BRASS_NUGGET = taggedIngredient("brass_nugget", forgeItemTag("nuggets/brass"), NUGGETS.tag), + taggedIngredient("copper_nugget", forgeItemTag("nuggets/copper"), Tags.Items.NUGGETS), + ZINC_NUGGET = taggedIngredient("zinc_nugget", forgeItemTag("nuggets/zinc"), Tags.Items.NUGGETS), + BRASS_NUGGET = taggedIngredient("brass_nugget", forgeItemTag("nuggets/brass"), Tags.Items.NUGGETS), COPPER_SHEET = taggedIngredient("copper_sheet", forgeItemTag("plates/copper"), PLATES.tag), BRASS_SHEET = taggedIngredient("brass_sheet", forgeItemTag("plates/brass"), PLATES.tag), @@ -227,19 +227,19 @@ public class AllItems { .register(); public static final ItemEntry SAND_PAPER = REGISTRATE.item("sand_paper", SandPaperItem::new) - .transform(CreateRegistrate.customRenderedItem(() -> SandPaperModel::new)) + .transform(CreateRegistrate.customRenderedItem(() -> SandPaperItemRenderer::new)) .tag(AllTags.AllItemTags.SANDPAPER.tag) .register(); public static final ItemEntry RED_SAND_PAPER = REGISTRATE.item("red_sand_paper", SandPaperItem::new) - .transform(CreateRegistrate.customRenderedItem(() -> SandPaperModel::new)) + .transform(CreateRegistrate.customRenderedItem(() -> SandPaperItemRenderer::new)) .tag(AllTags.AllItemTags.SANDPAPER.tag) .onRegister(s -> TooltipHelper.referTo(s, SAND_PAPER)) .register(); public static final ItemEntry WRENCH = REGISTRATE.item("wrench", WrenchItem::new) .properties(p -> p.stacksTo(1)) - .transform(CreateRegistrate.customRenderedItem(() -> WrenchModel::new)) + .transform(CreateRegistrate.customRenderedItem(() -> WrenchItemRenderer::new)) .model(AssetLookup.itemModelWithPartials()) .register(); @@ -264,32 +264,32 @@ public class AllItems { public static final ItemEntry LINKED_CONTROLLER = REGISTRATE.item("linked_controller", LinkedControllerItem::new) .properties(p -> p.stacksTo(1)) - .transform(CreateRegistrate.customRenderedItem(() -> LinkedControllerModel::new)) + .transform(CreateRegistrate.customRenderedItem(() -> LinkedControllerItemRenderer::new)) .model(AssetLookup.itemModelWithPartials()) .register(); public static final ItemEntry POTATO_CANNON = REGISTRATE.item("potato_cannon", PotatoCannonItem::new) .properties(p -> p.stacksTo(1)) - .transform(CreateRegistrate.customRenderedItem(() -> PotatoCannonModel::new)) + .transform(CreateRegistrate.customRenderedItem(() -> PotatoCannonItemRenderer::new)) .model(AssetLookup.itemModelWithPartials()) .register(); public static final ItemEntry EXTENDO_GRIP = REGISTRATE.item("extendo_grip", ExtendoGripItem::new) - .transform(CreateRegistrate.customRenderedItem(() -> ExtendoGripModel::new)) + .transform(CreateRegistrate.customRenderedItem(() -> ExtendoGripItemRenderer::new)) .model(AssetLookup.itemModelWithPartials()) .register(); public static final ItemEntry WAND_OF_SYMMETRY = REGISTRATE.item("wand_of_symmetry", SymmetryWandItem::new) - .transform(CreateRegistrate.customRenderedItem(() -> SymmetryWandModel::new)) + .transform(CreateRegistrate.customRenderedItem(() -> SymmetryWandItemRenderer::new)) .model(AssetLookup.itemModelWithPartials()) .register(); public static final ItemEntry WORLDSHAPER = REGISTRATE.item("handheld_worldshaper", WorldshaperItem::new) .properties(p -> p.rarity(Rarity.EPIC)) - .transform(CreateRegistrate.customRenderedItem(() -> WorldshaperModel::new)) + .transform(CreateRegistrate.customRenderedItem(() -> WorldshaperItemRenderer::new)) .lang("Creative Worldshaper") .model(AssetLookup.itemModelWithPartials()) .register(); diff --git a/src/main/java/com/simibubi/create/AllKeys.java b/src/main/java/com/simibubi/create/AllKeys.java index 6253094c1..e323ba47c 100644 --- a/src/main/java/com/simibubi/create/AllKeys.java +++ b/src/main/java/com/simibubi/create/AllKeys.java @@ -11,6 +11,7 @@ public enum AllKeys { TOOL_MENU("toolmenu", GLFW.GLFW_KEY_LEFT_ALT), ACTIVATE_TOOL("", GLFW.GLFW_KEY_LEFT_CONTROL), + TOOLBELT("toolbelt", GLFW.GLFW_KEY_LEFT_ALT), ; diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 9ba3acccd..09bfd18cc 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -87,6 +87,7 @@ public class AllShapes { .forHorizontal(NORTH), FLUID_VALVE = shape(3, -1, 3, 13, 17, 13).add(2, 2, 2, 14, 14, 14) .forAxis(), + TOOLBOX = shape(1, 0, 4, 15, 9, 12).forHorizontal(NORTH), SMART_FLUID_PIPE_FLOOR = shape(4, 4, 0, 12, 12, 16).add(3, 3, 3, 13, 13, 13) .add(5, 13, 3, 11, 14, 11) .add(5, 14, 4, 11, 15, 10) @@ -110,7 +111,8 @@ public class AllShapes { .forDirectional(Direction.UP), CRUSHING_WHEEL_CONTROLLER_COLLISION = shape(0, 0, 0, 16, 13, 16).forDirectional(Direction.DOWN), - BELL_FLOOR = shape(0, 0, 5, 16, 11, 11).add(3, 1, 3, 13, 13, 13).forHorizontal(SOUTH), + BELL_FLOOR = shape(0, 0, 5, 16, 11, 11).add(3, 1, 3, 13, 13, 13) + .forHorizontal(SOUTH), BELL_WALL = shape(5, 5, 8, 11, 11, 16).add(3, 1, 3, 13, 13, 13) .forHorizontal(SOUTH), BELL_DOUBLE_WALL = shape(5, 5, 0, 11, 11, 16).add(3, 1, 3, 13, 13, 13) @@ -258,8 +260,7 @@ public class AllShapes { } public Builder erase(double x1, double y1, double z1, double x2, double y2, double z2) { - this.shape = - VoxelShapes.join(shape, cuboid(x1, y1, z1, x2, y2, z2), IBooleanFunction.ONLY_FIRST); + this.shape = VoxelShapes.join(shape, cuboid(x1, y1, z1, x2, y2, z2), IBooleanFunction.ONLY_FIRST); return this; } diff --git a/src/main/java/com/simibubi/create/AllSpecialTextures.java b/src/main/java/com/simibubi/create/AllSpecialTextures.java index 3f0826421..4a0117b8f 100644 --- a/src/main/java/com/simibubi/create/AllSpecialTextures.java +++ b/src/main/java/com/simibubi/create/AllSpecialTextures.java @@ -18,7 +18,7 @@ public enum AllSpecialTextures { private ResourceLocation location; private AllSpecialTextures(String filename) { - location = new ResourceLocation(Create.ID, ASSET_PATH + filename); + location = Create.asResource(ASSET_PATH + filename); } public void bind() { diff --git a/src/main/java/com/simibubi/create/AllSpriteShifts.java b/src/main/java/com/simibubi/create/AllSpriteShifts.java index 94ba43b41..dfae3fdd4 100644 --- a/src/main/java/com/simibubi/create/AllSpriteShifts.java +++ b/src/main/java/com/simibubi/create/AllSpriteShifts.java @@ -78,7 +78,7 @@ public class AllSpriteShifts { // private static void populateMaps() { - WoodType[] supportedWoodTypes = new WoodType[]{ + WoodType[] supportedWoodTypes = new WoodType[] { WoodType.OAK, WoodType.SPRUCE, WoodType.BIRCH, WoodType.ACACIA, WoodType.JUNGLE, WoodType.DARK_OAK, WoodType.CRIMSON, WoodType.WARPED }; diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index 0e1668c51..62a7af3ed 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -7,7 +7,6 @@ import static com.simibubi.create.AllTags.NameSpace.TIC; import java.util.function.Function; import com.simibubi.create.foundation.data.CreateRegistrate; -import com.simibubi.create.foundation.utility.EmptyNamedTag; import com.simibubi.create.foundation.utility.Lang; import com.tterrag.registrate.builders.BlockBuilder; import com.tterrag.registrate.builders.ItemBuilder; @@ -27,78 +26,187 @@ import net.minecraft.tags.FluidTags; import net.minecraft.tags.ITag; import net.minecraft.tags.ItemTags; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.ModList; +import net.minecraftforge.common.Tags; public class AllTags { + private static final CreateRegistrate REGISTRATE = Create.registrate() - .itemGroup(() -> Create.BASE_CREATIVE_TAB); + .itemGroup(() -> Create.BASE_CREATIVE_TAB); + + public static ITag.INamedTag tag(Function> wrapperFactory, String namespace, + String path) { + return wrapperFactory.apply(new ResourceLocation(namespace, path)); + } + + public static ITag.INamedTag forgeTag(Function> wrapperFactory, String path) { + return tag(wrapperFactory, "forge", path); + } + + public static ITag.INamedTag forgeBlockTag(String path) { + return forgeTag(BlockTags::createOptional, path); + } + + public static ITag.INamedTag forgeItemTag(String path) { + return forgeTag(ItemTags::createOptional, path); + } + + public static ITag.INamedTag forgeFluidTag(String path) { + return forgeTag(FluidTags::createOptional, path); + } public static NonNullFunction, ItemBuilder>> tagBlockAndItem( - String tagName) { - return b -> b.tag(forgeBlockTag(tagName)) + String path) { + return b -> b.tag(forgeBlockTag(path)) .item() - .tag(forgeItemTag(tagName)); + .tag(forgeItemTag(path)); } - public static ITag.INamedTag forgeBlockTag(String name) { - return forgeTag(BlockTags::bind, name); - } + public enum NameSpace { - public static ITag.INamedTag forgeItemTag(String name) { - return forgeTag(ItemTags::bind, name); - } - - public static ITag.INamedTag forgeFluidTag(String name) { - return forgeTag(FluidTags::bind, name); - } - - public static ITag.INamedTag forgeTag(Function> wrapperFactory, String name) { - return tag(wrapperFactory, "forge", name); - } - - public static ITag.INamedTag tag(Function> wrapperFactory, String domain, - String name) { - return wrapperFactory.apply(new ResourceLocation(domain, name).toString()); - } - - public static enum NameSpace { - - MOD(Create.ID), FORGE("forge"), MC("minecraft"), TIC("tconstruct") + MOD(Create.ID, false, true), + FORGE("forge"), + TIC("tconstruct") ; - String id; + public final String id; + public final boolean optionalDefault; + public final boolean alwaysDatagenDefault; - private NameSpace(String id) { + NameSpace(String id) { + this(id, true, false); + } + + NameSpace(String id, boolean optionalDefault, boolean alwaysDatagenDefault) { this.id = id; + this.optionalDefault = optionalDefault; + this.alwaysDatagenDefault = alwaysDatagenDefault; } + } - public static enum AllItemTags { - CRUSHED_ORES(MOD), - SEATS(MOD), - VALVE_HANDLES(MOD), - UPRIGHT_ON_BELT(MOD), - SANDPAPER(MOD), - CREATE_INGOTS(MOD), - BEACON_PAYMENT(FORGE), - INGOTS(FORGE), - NUGGETS(FORGE), - PLATES(FORGE), - COBBLESTONE(FORGE) + public enum AllBlockTags { + + BRITTLE, + FAN_HEATERS, + FAN_TRANSPARENT, + SAFE_NBT, + SAILS, + SEATS, + TOOLBOXES, + VALVE_HANDLES, + WINDMILL_SAILS, + WINDOWABLE, + WRENCH_PICKUP, + + WG_STONE(FORGE), + + SLIMY_LOGS(TIC), ; - public ITag.INamedTag tag; + public final ITag.INamedTag tag; - private AllItemTags(NameSpace namespace) { - this(namespace, ""); + AllBlockTags() { + this(MOD); } - private AllItemTags(NameSpace namespace, String path) { - tag = ItemTags.bind( - new ResourceLocation(namespace.id, (path.isEmpty() ? "" : path + "/") + Lang.asId(name())).toString()); - REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag)); + AllBlockTags(NameSpace namespace) { + this(namespace, namespace.optionalDefault, namespace.alwaysDatagenDefault); + } + + AllBlockTags(NameSpace namespace, String path) { + this(namespace, path, namespace.optionalDefault, namespace.alwaysDatagenDefault); + } + + AllBlockTags(NameSpace namespace, boolean optional, boolean alwaysDatagen) { + this(namespace, null, optional, alwaysDatagen); + } + + AllBlockTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) { + ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path); + if (optional) { + tag = BlockTags.createOptional(id); + } else { + tag = BlockTags.bind(id.toString()); + } + if (alwaysDatagen) { + REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)); + } + } + + public boolean matches(Block block) { + return tag.contains(block.getBlock()); + } + + public boolean matches(BlockState state) { + return matches(state.getBlock()); + } + + public void add(Block... values) { + REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag) + .add(values)); + } + + public void includeIn(ITag.INamedTag parent) { + REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(parent) + .addTag(tag)); + } + + public void includeIn(AllBlockTags parent) { + includeIn(parent.tag); + } + + public void includeAll(ITag.INamedTag child) { + REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag) + .addTag(child)); + } + + } + + public enum AllItemTags { + + CREATE_INGOTS, + CRUSHED_ORES, + SANDPAPER, + SEATS, + TOOLBOXES, + UPRIGHT_ON_BELT, + VALVE_HANDLES, + + BEACON_PAYMENT(FORGE), + PLATES(FORGE) + + ; + + public final ITag.INamedTag tag; + + AllItemTags() { + this(MOD); + } + + AllItemTags(NameSpace namespace) { + this(namespace, namespace.optionalDefault, namespace.alwaysDatagenDefault); + } + + AllItemTags(NameSpace namespace, String path) { + this(namespace, path, namespace.optionalDefault, namespace.alwaysDatagenDefault); + } + + AllItemTags(NameSpace namespace, boolean optional, boolean alwaysDatagen) { + this(namespace, null, optional, alwaysDatagen); + } + + AllItemTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) { + ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path); + if (optional) { + tag = ItemTags.createOptional(id); + } else { + tag = ItemTags.bind(id.toString()); + } + if (alwaysDatagen) { + REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag)); + } } public boolean matches(ItemStack stack) { @@ -110,101 +218,92 @@ public class AllTags { .add(values)); } - public void includeIn(AllItemTags parent) { - REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(parent.tag) + public void includeIn(ITag.INamedTag parent) { + REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(parent) .addTag(tag)); } + + public void includeIn(AllItemTags parent) { + includeIn(parent.tag); + } + + public void includeAll(ITag.INamedTag child) { + REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag) + .addTag(child)); + } + } - public static enum AllFluidTags { - NO_INFINITE_DRAINING, + public enum AllFluidTags { + + NO_INFINITE_DRAINING(MOD, true, false), + HONEY(FORGE) ; - public ITag.INamedTag tag; + public final ITag.INamedTag tag; - private AllFluidTags() { - this(MOD, ""); + AllFluidTags() { + this(MOD); } - private AllFluidTags(NameSpace namespace) { - this(namespace, ""); + AllFluidTags(NameSpace namespace) { + this(namespace, namespace.optionalDefault, namespace.alwaysDatagenDefault); } - private AllFluidTags(NameSpace namespace, String path) { - tag = FluidTags.createOptional( - new ResourceLocation(namespace.id, (path.isEmpty() ? "" : path + "/") + Lang.asId(name()))); + AllFluidTags(NameSpace namespace, String path) { + this(namespace, path, namespace.optionalDefault, namespace.alwaysDatagenDefault); + } + + AllFluidTags(NameSpace namespace, boolean optional, boolean alwaysDatagen) { + this(namespace, null, optional, alwaysDatagen); + } + + AllFluidTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) { + ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path); + if (optional) { + tag = FluidTags.createOptional(id); + } else { + tag = FluidTags.bind(id.toString()); + } + if (alwaysDatagen) { + REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag)); + } } public boolean matches(Fluid fluid) { return fluid != null && fluid.is(tag); } - static void loadClass() {} - } - - public static enum AllBlockTags { - WINDMILL_SAILS, - FAN_HEATERS, - WINDOWABLE, - BRITTLE, - SEATS, - SAILS, - VALVE_HANDLES, - FAN_TRANSPARENT, - SAFE_NBT, - SLIMY_LOGS(TIC), - WRENCH_PICKUP, - - ; - - public ITag.INamedTag tag; - - private AllBlockTags() { - this(MOD, ""); + public void add(Fluid... values) { + REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag) + .add(values)); } - private AllBlockTags(NameSpace namespace) { - this(namespace, ""); - } - - private AllBlockTags(NameSpace namespace, String path) { - ResourceLocation id = - new ResourceLocation(namespace.id, (path.isEmpty() ? "" : path + "/") + Lang.asId(name())); - if (ModList.get() - .isLoaded(namespace.id)) { - tag = BlockTags.bind(id.toString()); - REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)); - } else { - tag = new EmptyNamedTag<>(id); - } - } - - - public boolean matches(BlockState block) { - return tag.contains(block.getBlock()); - } - - public void includeIn(AllBlockTags parent) { - REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(parent.tag) + public void includeIn(ITag.INamedTag parent) { + REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(parent) .addTag(tag)); } - public void includeAll(ITag.INamedTag child) { - REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag) + public void includeIn(AllFluidTags parent) { + includeIn(parent.tag); + } + + public void includeAll(ITag.INamedTag child) { + REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag) .addTag(child)); } - public void add(Block... values) { - REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag) - .add(values)); - } + private static void loadClass() {} + } public static void register() { + AllFluidTags.loadClass(); + AllItemTags.CREATE_INGOTS.includeIn(AllItemTags.BEACON_PAYMENT); - AllItemTags.CREATE_INGOTS.includeIn(AllItemTags.INGOTS); + AllItemTags.CREATE_INGOTS.includeIn(Tags.Items.INGOTS); AllItemTags.UPRIGHT_ON_BELT.add(Items.GLASS_BOTTLE, Items.POTION, Items.SPLASH_POTION, Items.LINGERING_POTION, Items.HONEY_BOTTLE, Items.CAKE); @@ -228,7 +327,6 @@ public class AllTags { AllBlockTags.WRENCH_PICKUP.add(Blocks.REDSTONE_WIRE, Blocks.REDSTONE_TORCH, Blocks.REPEATER, Blocks.LEVER, Blocks.COMPARATOR, Blocks.OBSERVER, Blocks.REDSTONE_WALL_TORCH, Blocks.PISTON, Blocks.STICKY_PISTON, Blocks.TRIPWIRE, Blocks.TRIPWIRE_HOOK, Blocks.DAYLIGHT_DETECTOR, Blocks.TARGET); - - AllFluidTags.loadClass(); } + } diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index b426c3421..c707584e6 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -123,6 +123,8 @@ import com.simibubi.create.content.curiosities.armor.CopperBacktankTileEntity; import com.simibubi.create.content.curiosities.bell.BellRenderer; import com.simibubi.create.content.curiosities.bell.HauntedBellTileEntity; import com.simibubi.create.content.curiosities.bell.PeculiarBellTileEntity; +import com.simibubi.create.content.curiosities.toolbox.ToolboxRenderer; +import com.simibubi.create.content.curiosities.toolbox.ToolboxTileEntity; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelInstance; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelRenderer; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelTileEntity; @@ -690,6 +692,12 @@ public class AllTileEntities { .validBlocks(AllBlocks.HAUNTED_BELL) .renderer(() -> BellRenderer::new) .register(); + + public static final TileEntityEntry TOOLBOX = Create.registrate() + .tileEntity("toolbox", ToolboxTileEntity::new) + .validBlocks(AllBlocks.TOOLBOXES.toArray()) + .renderer(() -> ToolboxRenderer::new) + .register(); public static void register() {} } diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 26dffcdb9..b9d0d8609 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -11,7 +11,7 @@ import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour; import com.simibubi.create.content.CreateItemGroup; import com.simibubi.create.content.contraptions.TorquePropagator; import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.CapabilityMinecartController; -import com.simibubi.create.content.curiosities.weapons.PotatoCannonProjectileTypes; +import com.simibubi.create.content.curiosities.weapons.BuiltinPotatoProjectileTypes; import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler; import com.simibubi.create.content.palettes.AllPaletteBlocks; import com.simibubi.create.content.palettes.PalettesItemGroup; @@ -80,6 +80,12 @@ public class Create { private static final NonNullLazyValue REGISTRATE = CreateRegistrate.lazy(ID); public Create() { + onCtor(); + } + + public static void onCtor() { + ModLoadingContext modLoadingContext = ModLoadingContext.get(); + AllSoundEvents.prepare(); AllBlocks.register(); AllItems.register(); @@ -92,7 +98,7 @@ public class Create { AllMovementBehaviours.register(); AllWorldFeatures.register(); AllEnchantments.register(); - AllConfigs.register(ModLoadingContext.get()); + AllConfigs.register(modLoadingContext); BlockSpoutingBehaviour.register(); ForgeMod.enableMilkFluid(); @@ -109,19 +115,20 @@ public class Create { modEventBus.addGenericListener(SoundEvent.class, AllSoundEvents::register); modEventBus.addListener(AllConfigs::onLoad); modEventBus.addListener(AllConfigs::onReload); - modEventBus.addListener(EventPriority.LOWEST, this::gatherData); + modEventBus.addListener(EventPriority.LOWEST, Create::gatherData); + forgeEventBus.addListener(EventPriority.HIGH, Create::onBiomeLoad); forgeEventBus.register(CHUNK_UTIL); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, - () -> () -> CreateClient.addClientListeners(forgeEventBus, modEventBus)); + () -> () -> CreateClient.onCtorClient(modEventBus, forgeEventBus)); } public static void init(final FMLCommonSetupEvent event) { CapabilityMinecartController.register(); AllPackets.registerPackets(); SchematicInstances.register(); - PotatoCannonProjectileTypes.register(); + BuiltinPotatoProjectileTypes.register(); CHUNK_UTIL.init(); @@ -132,7 +139,7 @@ public class Create { }); } - public void gatherData(GatherDataEvent event) { + public static void gatherData(GatherDataEvent event) { DataGenerator gen = event.getGenerator(); gen.addProvider(new AllAdvancements(gen)); gen.addProvider(new LangMerger(gen)); diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 88c5b0194..e9177402e 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -1,10 +1,5 @@ package com.simibubi.create; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.function.Function; - import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher; import com.simibubi.create.content.contraptions.components.structureMovement.render.SBBContraptionManager; @@ -17,34 +12,25 @@ import com.simibubi.create.content.schematics.ClientSchematicLoader; import com.simibubi.create.content.schematics.client.SchematicAndQuillHandler; import com.simibubi.create.content.schematics.client.SchematicHandler; import com.simibubi.create.events.ClientEvents; -import com.simibubi.create.foundation.ResourceReloadHandler; -import com.simibubi.create.foundation.block.render.CustomBlockModels; +import com.simibubi.create.foundation.ClientResourceReloadListener; import com.simibubi.create.foundation.block.render.SpriteShifter; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.gui.UIRenderHelper; -import com.simibubi.create.foundation.item.render.CustomItemModels; -import com.simibubi.create.foundation.item.render.CustomRenderedItems; import com.simibubi.create.foundation.ponder.content.PonderIndex; import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; import com.simibubi.create.foundation.render.AllMaterialSpecs; import com.simibubi.create.foundation.render.CreateContexts; import com.simibubi.create.foundation.render.SuperByteBufferCache; +import com.simibubi.create.foundation.utility.ModelSwapper; import com.simibubi.create.foundation.utility.ghost.GhostBlocks; import com.simibubi.create.foundation.utility.outliner.Outliner; -import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.renderer.BlockModelShapes; import net.minecraft.client.renderer.entity.EntityRendererManager; -import net.minecraft.client.renderer.model.IBakedModel; -import net.minecraft.client.renderer.model.ModelResourceLocation; import net.minecraft.client.settings.GraphicsFanciness; -import net.minecraft.inventory.container.PlayerContainer; -import net.minecraft.item.Item; import net.minecraft.resources.IReloadableResourceManager; import net.minecraft.resources.IResourceManager; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.ChatType; import net.minecraft.util.text.IFormattableTextComponent; import net.minecraft.util.text.StringTextComponent; @@ -52,55 +38,61 @@ import net.minecraft.util.text.TextComponentUtils; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.event.ClickEvent; import net.minecraft.util.text.event.HoverEvent; -import net.minecraftforge.client.event.ModelBakeEvent; -import net.minecraftforge.client.event.ModelRegistryEvent; -import net.minecraftforge.client.event.TextureStitchEvent; -import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; public class CreateClient { - public static final ClientSchematicLoader SCHEMATIC_SENDER = new ClientSchematicLoader(); - public static final SchematicHandler SCHEMATIC_HANDLER = new SchematicHandler(); - public static final SchematicAndQuillHandler SCHEMATIC_AND_QUILL_HANDLER = new SchematicAndQuillHandler(); public static final SuperByteBufferCache BUFFER_CACHE = new SuperByteBufferCache(); public static final Outliner OUTLINER = new Outliner(); public static final GhostBlocks GHOST_BLOCKS = new GhostBlocks(); public static final Screen EMPTY_SCREEN = new Screen(new StringTextComponent("")) {}; + public static final ModelSwapper MODEL_SWAPPER = new ModelSwapper(); + public static final CasingConnectivity CASING_CONNECTIVITY = new CasingConnectivity(); + + public static final ClientSchematicLoader SCHEMATIC_SENDER = new ClientSchematicLoader(); + public static final SchematicHandler SCHEMATIC_HANDLER = new SchematicHandler(); + public static final SchematicAndQuillHandler SCHEMATIC_AND_QUILL_HANDLER = new SchematicAndQuillHandler(); public static final ZapperRenderHandler ZAPPER_RENDER_HANDLER = new ZapperRenderHandler(); public static final PotatoCannonRenderHandler POTATO_CANNON_RENDER_HANDLER = new PotatoCannonRenderHandler(); public static final SoulPulseEffectHandler SOUL_PULSE_EFFECT_HANDLER = new SoulPulseEffectHandler(); - private static CustomBlockModels customBlockModels; - private static CustomItemModels customItemModels; - private static CustomRenderedItems customRenderedItems; - private static CasingConnectivity casingConnectivity; + public static final ClientResourceReloadListener RESOURCE_RELOAD_LISTENER = new ClientResourceReloadListener(); - public static void addClientListeners(IEventBus forgeEventBus, IEventBus modEventBus) { + public static void onCtorClient(IEventBus modEventBus, IEventBus forgeEventBus) { modEventBus.addListener(CreateClient::clientInit); - modEventBus.addListener(CreateClient::onTextureStitch); - modEventBus.addListener(CreateClient::onModelRegistry); - modEventBus.addListener(CreateClient::onModelBake); - modEventBus.addListener(AllParticleTypes::registerFactories); modEventBus.addListener(ClientEvents::loadCompleted); + modEventBus.addListener(SpriteShifter::onTextureStitchPre); + modEventBus.addListener(SpriteShifter::onTextureStitchPost); + modEventBus.addListener(AllParticleTypes::registerFactories); modEventBus.addListener(CreateContexts::flwInit); modEventBus.addListener(AllMaterialSpecs::flwInit); modEventBus.addListener(ContraptionRenderDispatcher::gatherContext); - ZAPPER_RENDER_HANDLER.register(forgeEventBus); - POTATO_CANNON_RENDER_HANDLER.register(forgeEventBus); + MODEL_SWAPPER.registerListeners(modEventBus); + + ZAPPER_RENDER_HANDLER.registerListeners(forgeEventBus); + POTATO_CANNON_RENDER_HANDLER.registerListeners(forgeEventBus); + + Minecraft mc = Minecraft.getInstance(); + + // null during datagen + if (mc == null) return; + + IResourceManager resourceManager = mc.getResourceManager(); + if (resourceManager instanceof IReloadableResourceManager) + ((IReloadableResourceManager) resourceManager).registerReloadListener(RESOURCE_RELOAD_LISTENER); } - public static void clientInit(FMLClientSetupEvent event) { + public static void clientInit(final FMLClientSetupEvent event) { BUFFER_CACHE.registerCompartment(KineticTileEntityRenderer.KINETIC_TILE); BUFFER_CACHE.registerCompartment(SBBContraptionManager.CONTRAPTION, 20); BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20); AllKeys.register(); // AllFluids.assignRenderLayers(); - AllBlockPartials.clientInit(); + AllBlockPartials.init(); AllStitchedTextures.init(); PonderIndex.register(); @@ -109,102 +101,15 @@ public class CreateClient { UIRenderHelper.init(); event.enqueueWork(() -> { - IResourceManager resourceManager = Minecraft.getInstance() - .getResourceManager(); - if (resourceManager instanceof IReloadableResourceManager) - ((IReloadableResourceManager) resourceManager).registerReloadListener(new ResourceReloadHandler()); - registerLayerRenderers(Minecraft.getInstance() .getEntityRenderDispatcher()); }); } - public static void onTextureStitch(TextureStitchEvent.Pre event) { - if (!event.getMap() - .location() - .equals(PlayerContainer.BLOCK_ATLAS)) - return; - SpriteShifter.getAllTargetSprites() - .forEach(event::addSprite); - } - - public static void onModelRegistry(ModelRegistryEvent event) { - getCustomRenderedItems().foreach((item, modelFunc) -> modelFunc.apply(null) - .getModelLocations() - .forEach(ModelLoader::addSpecialModel)); - } - - public static void onModelBake(ModelBakeEvent event) { - Map modelRegistry = event.getModelRegistry(); - - getCustomBlockModels() - .foreach((block, modelFunc) -> swapModels(modelRegistry, getAllBlockStateModelLocations(block), modelFunc)); - getCustomItemModels() - .foreach((item, modelFunc) -> swapModels(modelRegistry, getItemModelLocation(item), modelFunc)); - getCustomRenderedItems().foreach((item, modelFunc) -> { - swapModels(modelRegistry, getItemModelLocation(item), m -> modelFunc.apply(m) - .loadPartials(event)); - }); - } - - protected static ModelResourceLocation getItemModelLocation(Item item) { - return new ModelResourceLocation(item.getRegistryName(), "inventory"); - } - - protected static List getAllBlockStateModelLocations(Block block) { - List models = new ArrayList<>(); - block.getStateDefinition() - .getPossibleStates() - .forEach(state -> { - models.add(getBlockModelLocation(block, BlockModelShapes.statePropertiesToString(state.getValues()))); - }); - return models; - } - - protected static ModelResourceLocation getBlockModelLocation(Block block, String suffix) { - return new ModelResourceLocation(block.getRegistryName(), suffix); - } - - protected static void swapModels(Map modelRegistry, - List locations, Function factory) { - locations.forEach(location -> { - swapModels(modelRegistry, location, factory); - }); - } - - protected static void swapModels(Map modelRegistry, - ModelResourceLocation location, Function factory) { - modelRegistry.put(location, factory.apply(modelRegistry.get(location))); - } - protected static void registerLayerRenderers(EntityRendererManager renderManager) { CopperBacktankArmorLayer.registerOnAll(renderManager); } - public static CustomItemModels getCustomItemModels() { - if (customItemModels == null) - customItemModels = new CustomItemModels(); - return customItemModels; - } - - public static CustomRenderedItems getCustomRenderedItems() { - if (customRenderedItems == null) - customRenderedItems = new CustomRenderedItems(); - return customRenderedItems; - } - - public static CustomBlockModels getCustomBlockModels() { - if (customBlockModels == null) - customBlockModels = new CustomBlockModels(); - return customBlockModels; - } - - public static CasingConnectivity getCasingConnectivity() { - if (casingConnectivity == null) - casingConnectivity = new CasingConnectivity(); - return casingConnectivity; - } - public static void invalidateRenderers() { BUFFER_CACHE.invalidate(); @@ -233,4 +138,5 @@ public class CreateClient { mc.gui.handleChat(ChatType.CHAT, text, mc.player.getUUID()); } + } diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index 2cf7dcf90..39d2c68f7 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -40,6 +40,7 @@ import com.simibubi.create.content.contraptions.components.press.MechanicalPress import com.simibubi.create.content.contraptions.components.saw.SawTileEntity; import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager; import com.simibubi.create.content.contraptions.processing.BasinRecipe; +import com.simibubi.create.content.curiosities.toolbox.ToolboxScreen; import com.simibubi.create.content.curiosities.tools.BlueprintScreen; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateScreen; import com.simibubi.create.content.logistics.item.LinkedControllerScreen; @@ -78,7 +79,7 @@ import net.minecraftforge.fml.ModList; @SuppressWarnings("unused") public class CreateJEI implements IModPlugin { - private static final ResourceLocation ID = new ResourceLocation(Create.ID, "jei_plugin"); + private static final ResourceLocation ID = Create.asResource("jei_plugin"); public IIngredientManager ingredientManager; private final List> allCategories = new ArrayList<>(); @@ -254,6 +255,7 @@ public class CreateJEI implements IModPlugin { registration.addGuiContainerHandler(AttributeFilterScreen.class, slotMover); registration.addGuiContainerHandler(BlueprintScreen.class, slotMover); registration.addGuiContainerHandler(LinkedControllerScreen.class, slotMover); + registration.addGuiContainerHandler(ToolboxScreen.class, slotMover); registration.addGhostIngredientHandler(AbstractFilterScreen.class, new GhostIngredientHandler()); registration.addGhostIngredientHandler(BlueprintScreen.class, new GhostIngredientHandler()); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java index 359c4ee06..a309a6955 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java @@ -45,7 +45,7 @@ public abstract class CreateRecipeCategory> implements IRec } public void setCategoryId(String name) { - this.uid = new ResourceLocation(Create.ID, name); + this.uid = Create.asResource(name); this.name = name; } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java index f3fc6ee9e..4e88e2ca2 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java @@ -9,11 +9,13 @@ import com.simibubi.create.compat.jei.category.animations.AnimatedDeployer; import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe; import com.simibubi.create.foundation.fluid.FluidIngredient; import com.simibubi.create.foundation.gui.AllGuiTextures; +import com.simibubi.create.foundation.utility.Lang; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; import mezz.jei.api.ingredients.IIngredients; +import net.minecraft.util.text.TextFormatting; public class DeployingCategory extends CreateRecipeCategory { @@ -53,7 +55,18 @@ public class DeployingCategory extends CreateRecipeCategory { + if (!input) + return; + if (slotIndex != 1) + return; + tooltip.add(1, Lang.translate("recipe.deploying.not_consumed") + .withStyle(TextFormatting.GOLD)); + }); + } + addStochasticTooltip(itemStacks, recipe.getRollableResults(), 2); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java index 99810a1e1..bf4345225 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java @@ -10,12 +10,16 @@ import com.simibubi.create.compat.jei.category.animations.AnimatedDeployer; import com.simibubi.create.compat.jei.category.animations.AnimatedPress; import com.simibubi.create.compat.jei.category.animations.AnimatedSaw; import com.simibubi.create.compat.jei.category.animations.AnimatedSpout; +import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe; +import com.simibubi.create.content.contraptions.itemAssembly.IAssemblyRecipe; import com.simibubi.create.content.contraptions.itemAssembly.SequencedRecipe; import com.simibubi.create.foundation.fluid.FluidIngredient; import com.simibubi.create.foundation.gui.AllGuiTextures; +import com.simibubi.create.foundation.utility.Lang; import mezz.jei.api.gui.ingredient.IGuiFluidStackGroup; import mezz.jei.api.gui.ingredient.IGuiItemStackGroup; +import net.minecraft.util.text.TextFormatting; public abstract class SequencedAssemblySubCategory { @@ -115,6 +119,19 @@ public abstract class SequencedAssemblySubCategory { .getIngredients() .get(1) .getItems())); + + IAssemblyRecipe contained = recipe.getAsAssemblyRecipe(); + if (contained instanceof DeployerApplicationRecipe && ((DeployerApplicationRecipe) contained).shouldKeepHeldItem()) { + itemStacks.addTooltipCallback((slotIndex, input, ingredient, tooltip) -> { + if (!input) + return; + if (slotIndex != index) + return; + tooltip.add(1, Lang.translate("recipe.deploying.not_consumed") + .withStyle(TextFormatting.GOLD)); + }); + } + return 1; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/CutoutRotatingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/CutoutRotatingInstance.java index c8f3d4335..65b164208 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/CutoutRotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/CutoutRotatingInstance.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.contraptions.base; -import com.jozufozu.flywheel.backend.instancing.Instancer; import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.foundation.render.AllMaterialSpecs; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java index c845b8a48..9a2f61bd9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.contraptions.base; +import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.material.MaterialManager; -import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel; import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; 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 6d93e5c95..147ae09bf 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 @@ -5,7 +5,7 @@ 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 com.simibubi.create.foundation.block.WrenchableDirectionalBlock; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.Block; @@ -20,7 +20,7 @@ import net.minecraft.world.World; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class PortableStorageInterfaceBlock extends ProperDirectionalBlock +public class PortableStorageInterfaceBlock extends WrenchableDirectionalBlock implements ITE { boolean fluids; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/ConnectedInputHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/ConnectedInputHandler.java index 39e725e9b..2c4c78fa2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/ConnectedInputHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/ConnectedInputHandler.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.LinkedList; import java.util.List; import java.util.Objects; @@ -22,6 +23,8 @@ import net.minecraft.nbt.ListNBT; import net.minecraft.nbt.NBTUtil; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants.NBT; @@ -181,7 +184,24 @@ public class ConnectedInputHandler { return input.getItemHandler(world, controllerPos); } + Direction facing = Direction.SOUTH; + BlockState blockState = world.getBlockState(pos); + if (blockState.hasProperty(MechanicalCrafterBlock.HORIZONTAL_FACING)) + facing = blockState.getValue(MechanicalCrafterBlock.HORIZONTAL_FACING); + AxisDirection axisDirection = facing.getAxisDirection(); + Axis compareAxis = facing.getClockWise() + .getAxis(); + + Comparator invOrdering = (p1, p2) -> { + int compareY = -Integer.compare(p1.getY(), p2.getY()); + int modifier = axisDirection.getStep() * (compareAxis == Axis.Z ? -1 : 1); + int c1 = compareAxis.choose(p1.getX(), p1.getY(), p1.getZ()); + int c2 = compareAxis.choose(p2.getX(), p2.getY(), p2.getZ()); + return compareY != 0 ? compareY : modifier * Integer.compare(c1, c2); + }; + List list = data.stream() + .sorted(invOrdering) .map(l -> CrafterHelper.getCrafter(world, pos.offset(l))) .filter(Objects::nonNull) .map(crafter -> crafter.getInventory()) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/BeltDeployerCallbacks.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/BeltDeployerCallbacks.java index b0900e2be..697089b22 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/BeltDeployerCallbacks.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/BeltDeployerCallbacks.java @@ -45,6 +45,11 @@ public class BeltDeployerCallbacks { if (deployerTileEntity.redstoneLocked) return ProcessingResult.PASS; + DeployerFakePlayer player = deployerTileEntity.getPlayer(); + ItemStack held = player == null ? ItemStack.EMPTY : player.getMainHandItem(); + + if (held.isEmpty()) + return ProcessingResult.HOLD; if (deployerTileEntity.getRecipe(s.stack) == null) return ProcessingResult.PASS; @@ -60,6 +65,12 @@ public class BeltDeployerCallbacks { BlockState blockState = deployerTileEntity.getBlockState(); if (!blockState.hasProperty(FACING) || blockState.getValue(FACING) != Direction.DOWN) return ProcessingResult.PASS; + + DeployerFakePlayer player = deployerTileEntity.getPlayer(); + ItemStack held = player == null ? ItemStack.EMPTY : player.getMainHandItem(); + if (held.isEmpty()) + return ProcessingResult.HOLD; + IRecipe recipe = deployerTileEntity.getRecipe(s.stack); if (recipe == null) return ProcessingResult.PASS; @@ -68,10 +79,10 @@ public class BeltDeployerCallbacks { activate(s, i, deployerTileEntity, recipe); return ProcessingResult.HOLD; } - + if (deployerTileEntity.state == State.WAITING) { if (deployerTileEntity.redstoneLocked) - return ProcessingResult.PASS; + return ProcessingResult.PASS; deployerTileEntity.start(); } @@ -92,6 +103,10 @@ public class BeltDeployerCallbacks { copy.angle = centered ? 180 : Create.RANDOM.nextInt(360); return copy; }) + .map(t -> { + t.locked = false; + return t; + }) .collect(Collectors.toList()); TransportedItemStack left = transported.copy(); @@ -104,10 +119,17 @@ public class BeltDeployerCallbacks { handler.handleProcessingOnItem(transported, TransportedResult.convertToAndLeaveHeld(collect, left)); ItemStack heldItem = deployerTileEntity.player.getMainHandItem(); - if (heldItem.isDamageableItem()) - heldItem.hurtAndBreak(1, deployerTileEntity.player, s -> s.broadcastBreakEvent(Hand.MAIN_HAND)); - else - heldItem.shrink(1); + boolean unbreakable = heldItem.hasTag() && heldItem.getTag() + .getBoolean("Unbreakable"); + boolean keepHeld = + recipe instanceof DeployerApplicationRecipe && ((DeployerApplicationRecipe) recipe).shouldKeepHeldItem(); + + if (!unbreakable && !keepHeld) { + if (heldItem.isDamageableItem()) + heldItem.hurtAndBreak(1, deployerTileEntity.player, s -> s.broadcastBreakEvent(Hand.MAIN_HAND)); + else + heldItem.shrink(1); + } BlockPos pos = deployerTileEntity.getBlockPos(); World world = deployerTileEntity.getLevel(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java index 3fb54e05f..aabfa2846 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java @@ -5,6 +5,7 @@ import java.util.Set; import java.util.function.Supplier; import java.util.stream.Collectors; +import com.google.gson.JsonObject; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllTags.AllItemTags; @@ -18,7 +19,9 @@ import com.simibubi.create.foundation.utility.Lang; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.IItemProvider; +import net.minecraft.util.JSONUtils; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; @@ -30,8 +33,11 @@ import net.minecraftforge.items.wrapper.RecipeWrapper; public class DeployerApplicationRecipe extends ProcessingRecipe implements IAssemblyRecipe { + private boolean keepHeldItem; + public DeployerApplicationRecipe(ProcessingRecipeParams params) { super(AllRecipeTypes.DEPLOYING, params); + keepHeldItem = false; } @Override @@ -52,6 +58,10 @@ public class DeployerApplicationRecipe extends ProcessingRecipe i return 2; } + public boolean shouldKeepHeldItem() { + return keepHeldItem; + } + public Ingredient getRequiredHeldItem() { if (ingredients.isEmpty()) throw new IllegalStateException("Deploying Recipe: " + id.toString() + " has no tool!"); @@ -66,12 +76,14 @@ public class DeployerApplicationRecipe extends ProcessingRecipe i public static List convert(List> sandpaperRecipes) { return sandpaperRecipes.stream() - .map(r -> new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new, new ResourceLocation(r.getId().getNamespace(), r.getId() - .getPath() + "_using_deployer")).require(r.getIngredients() - .get(0)) - .require(AllItemTags.SANDPAPER.tag) - .output(r.getResultItem()) - .build()) + .map(r -> new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new, new ResourceLocation(r.getId() + .getNamespace(), + r.getId() + .getPath() + "_using_deployer")).require(r.getIngredients() + .get(0)) + .require(AllItemTags.SANDPAPER.tag) + .output(r.getResultItem()) + .build()) .collect(Collectors.toList()); } @@ -80,6 +92,31 @@ public class DeployerApplicationRecipe extends ProcessingRecipe i list.add(ingredients.get(1)); } + @Override + public void readAdditional(JsonObject json) { + super.readAdditional(json); + keepHeldItem = JSONUtils.getAsBoolean(json, "keepHeldItem", false); + } + + @Override + public void writeAdditional(JsonObject json) { + super.writeAdditional(json); + if (keepHeldItem) + json.addProperty("keepHeldItem", keepHeldItem); + } + + @Override + public void readAdditional(PacketBuffer buffer) { + super.readAdditional(buffer); + keepHeldItem = buffer.readBoolean(); + } + + @Override + public void writeAdditional(PacketBuffer buffer) { + super.writeAdditional(buffer); + buffer.writeBoolean(keepHeldItem); + } + @Override @OnlyIn(Dist.CLIENT) public ITextComponent getDescriptionForAssembly() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java index dc943711a..f37c808c2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java @@ -4,7 +4,7 @@ import javax.annotation.ParametersAreNonnullByDefault; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; -import com.simibubi.create.foundation.block.ProperDirectionalBlock; +import com.simibubi.create.foundation.block.WrenchableDirectionalBlock; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.Block; @@ -24,7 +24,7 @@ import net.minecraft.world.World; @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public class NozzleBlock extends ProperDirectionalBlock { +public class NozzleBlock extends WrenchableDirectionalBlock { public NozzleBlock(Properties p_i48415_1_) { super(p_i48415_1_); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java index ea35ee0e3..5c20fe6db 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java @@ -8,8 +8,8 @@ import java.util.List; import com.google.common.collect.Lists; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; import com.jozufozu.flywheel.backend.instancing.InstanceData; -import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.instancing.Instancer; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.materials.ModelData; import com.jozufozu.flywheel.util.transform.MatrixTransformStack; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineInstance.java index 230960d90..cb02e4da7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineInstance.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.components.flywheel.engine; -import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.materials.ModelData; import com.jozufozu.flywheel.util.transform.MatrixTransformStack; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java index c1b5b796b..3635706fa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java @@ -74,7 +74,7 @@ public class BlockMovementChecks { private static final List BRITTLE_CHECKS = new ArrayList<>(); private static final List ATTACHED_CHECKS = new ArrayList<>(); private static final List NOT_SUPPORTIVE_CHECKS = new ArrayList<>(); - public static final ResourceLocation NON_MOVABLE = new ResourceLocation(Create.ID, "non_movable"); + public static final ResourceLocation NON_MOVABLE = Create.asResource("non_movable"); // Registration // Add new checks to the front instead of the end diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementContext.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementContext.java index d100c6707..bfad9ad5a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementContext.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementContext.java @@ -75,7 +75,7 @@ public class MovementContext { nbt.put("Position", VecHelper.writeNBT(position)); nbt.putBoolean("Stall", stall); nbt.putBoolean("FirstMovement", firstMovement); - nbt.put("Data", data); + nbt.put("Data", data.copy()); return nbt; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java index 73fd3b67e..75370e103 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java @@ -10,7 +10,7 @@ import javax.annotation.Nullable; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; -import com.simibubi.create.foundation.block.ProperDirectionalBlock; +import com.simibubi.create.foundation.block.WrenchableDirectionalBlock; import com.simibubi.create.foundation.utility.DyeHelper; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.placement.IPlacementHelper; @@ -41,7 +41,7 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -public class SailBlock extends ProperDirectionalBlock { +public class SailBlock extends WrenchableDirectionalBlock { public static SailBlock frame(Properties properties) { return new SailBlock(properties, true); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java index ba22c9f79..fab3a2e05 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.ch import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTileEntities; import com.simibubi.create.foundation.block.ITE; -import com.simibubi.create.foundation.block.ProperDirectionalBlock; +import com.simibubi.create.foundation.block.WrenchableDirectionalBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -25,7 +25,7 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -public class StickerBlock extends ProperDirectionalBlock implements ITE { +public class StickerBlock extends WrenchableDirectionalBlock implements ITE { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public static final BooleanProperty EXTENDED = BlockStateProperties.EXTENDED; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerInstance.java index 050fbc56d..250f73941 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerInstance.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.contraptions.components.structureMovement.chassis; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; -import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.materials.ModelData; import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueInstance.java index 751fe2236..c4c560fb9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueInstance.java @@ -4,16 +4,12 @@ import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat; import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; import com.jozufozu.flywheel.backend.instancing.ITickableInstance; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.entity.EntityInstance; import com.jozufozu.flywheel.backend.material.MaterialGroup; -import com.jozufozu.flywheel.backend.model.BufferedModel; -import com.jozufozu.flywheel.backend.model.ElementBuffer; -import com.jozufozu.flywheel.backend.model.IndexedModel; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.state.TextureRenderState; import com.jozufozu.flywheel.core.Formats; import com.jozufozu.flywheel.core.Materials; -import com.jozufozu.flywheel.core.QuadConverter; import com.jozufozu.flywheel.core.instancing.ConditionalInstance; import com.jozufozu.flywheel.core.materials.OrientedData; import com.jozufozu.flywheel.core.model.IModel; @@ -36,7 +32,7 @@ import net.minecraft.world.LightType; public class GlueInstance extends EntityInstance implements ITickableInstance { private static final boolean USE_ATLAS = false; - private static final ResourceLocation TEXTURE = new ResourceLocation(Create.ID, "textures/entity/super_glue/slime.png"); + private static final ResourceLocation TEXTURE = Create.asResource("textures/entity/super_glue/slime.png"); private final Quaternion rotation; protected ConditionalInstance model; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java index 10b91afec..9c2ad5ef3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java @@ -30,7 +30,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public class SuperGlueRenderer extends EntityRenderer { - private ResourceLocation regular = new ResourceLocation(Create.ID, "textures/entity/super_glue/slime.png"); + private ResourceLocation regular = Create.asResource("textures/entity/super_glue/slime.png"); private float[] insideQuad; private float[] outsideQuad; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java index ac665c58f..09678c268 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java @@ -5,7 +5,7 @@ import static com.simibubi.create.content.contraptions.components.structureMovem import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.PistonState; -import com.simibubi.create.foundation.block.ProperDirectionalBlock; +import com.simibubi.create.foundation.block.WrenchableDirectionalBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -30,7 +30,7 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; -public class MechanicalPistonHeadBlock extends ProperDirectionalBlock implements IWaterLoggable { +public class MechanicalPistonHeadBlock extends WrenchableDirectionalBlock implements IWaterLoggable { public static final EnumProperty TYPE = BlockStateProperties.PISTON_TYPE; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java index 79f82e7f4..c944cb4ec 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java @@ -10,7 +10,7 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.PistonState; import com.simibubi.create.content.contraptions.wrench.IWrenchable; -import com.simibubi.create.foundation.block.ProperDirectionalBlock; +import com.simibubi.create.foundation.block.WrenchableDirectionalBlock; import com.simibubi.create.foundation.utility.placement.IPlacementHelper; import com.simibubi.create.foundation.utility.placement.PlacementHelpers; import com.simibubi.create.foundation.utility.placement.util.PoleHelper; @@ -44,7 +44,7 @@ import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraftforge.common.ToolType; -public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements IWrenchable, IWaterLoggable { +public class PistonExtensionPoleBlock extends WrenchableDirectionalBlock implements IWrenchable, IWaterLoggable { private static final int placementHelperId = PlacementHelpers.register(PlacementHelper.get()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionInstanceManager.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionInstanceManager.java index 47cd9258a..261aca5d5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionInstanceManager.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionInstanceManager.java @@ -7,8 +7,8 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.tile.TileInstanceManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java index 98e5e9fbb..bb906a32f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java @@ -18,7 +18,6 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Abs import com.simibubi.create.content.contraptions.components.structureMovement.Contraption; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; -import com.simibubi.create.foundation.render.Compartment; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.TileEntityRenderHelper; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/LightVolumeDebugger.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/LightVolumeDebugger.java index 82f6e64e6..b63caab74 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/LightVolumeDebugger.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/LightVolumeDebugger.java @@ -1,13 +1,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.render; -import java.util.ArrayList; - -import com.jozufozu.flywheel.light.GridAlignedBB; import com.mojang.blaze3d.matrix.MatrixStack; -import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; -import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.Pair; -import com.simibubi.create.foundation.utility.outliner.AABBOutline; +import com.simibubi.create.foundation.render.SuperRenderTypeBuffer; public class LightVolumeDebugger { public static void render(MatrixStack ms, SuperRenderTypeBuffer buffer) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java index 8d62bc67c..e801e40c4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java @@ -80,6 +80,7 @@ public class WaterWheelBlock extends DirectionalKineticBlock implements ITE provideHandler() { @@ -68,7 +68,7 @@ public abstract class FlowSource { } public void manageSource(World world) { - if (fluidHandler.isPresent()) + if (fluidHandler.isPresent() && world.getGameTime() % 20 != 0) return; TileEntity tileEntity = world.getBlockEntity(location.getConnectedPos()); if (tileEntity != null) 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 f6b08b2e8..eedcc0cd9 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 @@ -91,7 +91,7 @@ public class FluidNetwork { if (!pipeConnection.hasFlow()) continue; - + Flow flow = pipeConnection.flow.get(); if (!fluid.isEmpty() && !flow.fluid.isFluidEqual(fluid)) { iterator.remove(); @@ -104,7 +104,7 @@ public class FluidNetwork { } if (!flow.complete) continue; - + if (fluid.isEmpty()) fluid = flow.fluid; @@ -158,14 +158,14 @@ public class FluidNetwork { source = sourceSupplier.get(); if (!source.isPresent()) return; - + keepPortableFluidInterfaceEngaged(); - + if (targets.isEmpty()) return; for (Pair> pair : targets) { if (pair.getSecond() - .isPresent()) + .isPresent() && world.getGameTime() % 40 != 0) continue; PipeConnection pipeConnection = get(pair.getFirst()); if (pipeConnection == null) @@ -183,7 +183,7 @@ public class FluidNetwork { IFluidHandler handler = source.orElse(null); if (handler == null) return; - + FluidStack transfer = FluidStack.EMPTY; for (int i = 0; i < handler.getTanks(); i++) { FluidStack contained = handler.getFluidInTank(i); @@ -194,13 +194,13 @@ public class FluidNetwork { FluidStack toExtract = FluidHelper.copyStackWithAmount(contained, flowSpeed); transfer = handler.drain(toExtract, action); } - + if (transfer.isEmpty()) { FluidStack genericExtract = handler.drain(flowSpeed, action); if (!genericExtract.isEmpty() && genericExtract.isFluidEqual(fluid)) transfer = genericExtract; } - + if (transfer.isEmpty()) return; @@ -258,7 +258,7 @@ public class FluidNetwork { private void keepPortableFluidInterfaceEngaged() { IFluidHandler handler = source.orElse(null); - if (!(handler instanceof InterfaceFluidHandler)) + if (!(handler instanceof InterfaceFluidHandler)) return; if (frontier.isEmpty()) return; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java index d660caedc..1caa73897 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java @@ -2,8 +2,6 @@ package com.simibubi.create.content.contraptions.fluids; import java.util.Random; -import org.apache.commons.lang3.mutable.MutableBoolean; - import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock; @@ -57,18 +55,7 @@ public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable @Override public BlockState updateAfterWrenched(BlockState newState, ItemUseContext context) { - BlockState state = super.updateAfterWrenched(newState, context); - World world = context.getLevel(); - BlockPos pos = context.getClickedPos(); - if (world.isClientSide) - return state; - TileEntity tileEntity = world.getBlockEntity(pos); - if (!(tileEntity instanceof PumpTileEntity)) - return state; - PumpTileEntity pump = (PumpTileEntity) tileEntity; - pump.sidesToUpdate.forEach(MutableBoolean::setTrue); - pump.reversed = !pump.reversed; - return state; + return super.updateAfterWrenched(newState, context); } @Override @@ -94,22 +81,6 @@ public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable return; world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); -// if (world.isRemote) -// return; -// if (otherBlock instanceof FluidPipeBlock) -// return; -// TileEntity tileEntity = world.getTileEntity(pos); -// if (!(tileEntity instanceof PumpTileEntity)) -// return; -// PumpTileEntity pump = (PumpTileEntity) tileEntity; -// Direction facing = state.get(FACING); -// for (boolean front : Iterate.trueAndFalse) { -// Direction side = front ? facing : facing.getOpposite(); -// if (!pos.offset(side) -// .equals(neighborPos)) -// continue; -// pump.updatePipesOnSide(side); -// } } @Override @@ -125,8 +96,8 @@ public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable } @Override - public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, - IWorld world, BlockPos pos, BlockPos neighbourPos) { + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, IWorld world, + BlockPos pos, BlockPos neighbourPos) { if (state.getValue(BlockStateProperties.WATERLOGGED)) { world.getLiquidTicks() .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); @@ -148,11 +119,21 @@ public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable @Override public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + super.onPlace(state, world, pos, oldState, isMoving); if (world.isClientSide) return; if (state != oldState) world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); + + if (isPump(state) && isPump(oldState) && state.getValue(FACING) == oldState.getValue(FACING) + .getOpposite()) { + TileEntity tileEntity = world.getBlockEntity(pos); + if (!(tileEntity instanceof PumpTileEntity)) + return; + PumpTileEntity pump = (PumpTileEntity) tileEntity; + pump.pressureUpdate = true; + } } public static boolean isOpenAt(BlockState state, Direction d) { @@ -173,10 +154,10 @@ public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity())) world.removeBlockEntity(pos); } - + @Override public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } - + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java index ff46cfa22..9428867f0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java @@ -39,6 +39,7 @@ public class PumpTileEntity extends KineticTileEntity { LerpedFloat arrowDirection; Couple sidesToUpdate; + boolean pressureUpdate; boolean reversed; public PumpTileEntity(TileEntityType typeIn) { @@ -73,6 +74,9 @@ public class PumpTileEntity extends KineticTileEntity { if (!isVirtual()) return; } + +// if (pressureUpdate) +// updatePressureChange(); sidesToUpdate.forEachWithContext((update, isFront) -> { if (update.isFalse()) @@ -85,6 +89,7 @@ public class PumpTileEntity extends KineticTileEntity { return; if (speed < 0 != reversed) { reversed = speed < 0; + updatePressureChange(); return; } } @@ -100,6 +105,11 @@ public class PumpTileEntity extends KineticTileEntity { if (level.isClientSide && !isVirtual()) return; + updatePressureChange(); + } + + public void updatePressureChange() { + pressureUpdate = false; BlockPos frontPos = worldPosition.relative(getFront()); BlockPos backPos = worldPosition.relative(getFront().getOpposite()); FluidPropagator.propagateChangedPipe(level, frontPos, level.getBlockState(frontPos)); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java index a417ef747..186aa9589 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java @@ -90,11 +90,11 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { protected int maxBlocks() { return AllConfigs.SERVER.fluids.hosePulleyBlockThreshold.get(); } - + protected boolean fillInfinite() { return AllConfigs.SERVER.fluids.fillInfinite.get(); } - + public void reset() { if (affectedArea != null) scheduleUpdatesInAffectedArea(); @@ -113,7 +113,9 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { protected void scheduleUpdatesInAffectedArea() { World world = getWorld(); - BlockPos.betweenClosedStream(new BlockPos(affectedArea.x0 - 1, affectedArea.y0 - 1, affectedArea.z0 - 1), new BlockPos(affectedArea.x1 + 1, affectedArea.y1 + 1, affectedArea.z1 + 1)) + BlockPos + .betweenClosedStream(new BlockPos(affectedArea.x0 - 1, affectedArea.y0 - 1, affectedArea.z0 - 1), + new BlockPos(affectedArea.x1 + 1, affectedArea.y1 + 1, affectedArea.z1 + 1)) .forEach(pos -> { FluidState nextFluidState = world.getFluidState(pos); if (nextFluidState.isEmpty()) @@ -200,9 +202,9 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { : fluid.getAttributes() .getEmptySound(); if (soundevent == null) - soundevent = fluid.is(FluidTags.LAVA) - ? fillSound ? SoundEvents.BUCKET_FILL_LAVA : SoundEvents.BUCKET_EMPTY_LAVA - : fillSound ? SoundEvents.BUCKET_FILL : SoundEvents.BUCKET_EMPTY; + soundevent = + fluid.is(FluidTags.LAVA) ? fillSound ? SoundEvents.BUCKET_FILL_LAVA : SoundEvents.BUCKET_EMPTY_LAVA + : fillSound ? SoundEvents.BUCKET_FILL : SoundEvents.BUCKET_EMPTY; world.playSound(null, splooshPos, soundevent, SoundCategory.BLOCKS, 0.3F, 1.0F); if (world instanceof ServerWorld) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java index 9a096c2f9..588f3f620 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java @@ -7,7 +7,7 @@ import com.simibubi.create.content.contraptions.base.RotatedPillarKineticBlock; import com.simibubi.create.content.contraptions.fluids.FluidPropagator; import com.simibubi.create.content.contraptions.relays.elementary.AbstractShaftBlock; import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock; -import com.simibubi.create.foundation.block.ProperDirectionalBlock; +import com.simibubi.create.foundation.block.WrenchableDirectionalBlock; import com.simibubi.create.foundation.utility.Lang; import net.minecraft.block.Block; @@ -19,7 +19,7 @@ import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.IStringSerializable; -public class BracketBlock extends ProperDirectionalBlock { +public class BracketBlock extends WrenchableDirectionalBlock { public static final BooleanProperty AXIS_ALONG_FIRST_COORDINATE = DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java index 8f4c9b6b7..dbf49a8f3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java @@ -39,6 +39,7 @@ import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.IBlockDisplayReader; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; @@ -60,11 +61,28 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren World world = context.getLevel(); BlockPos pos = context.getClickedPos(); + Direction clickedFace = context.getClickedFace(); + Axis axis = getAxis(world, pos, state); - if (axis == null) - return ActionResultType.PASS; - if (context.getClickedFace() - .getAxis() == axis) + if (axis == null) { + Vector3d clickLocation = context.getClickLocation() + .subtract(pos.getX(), pos.getY(), pos.getZ()); + double closest = Float.MAX_VALUE; + Direction argClosest = Direction.UP; + for (Direction direction : Iterate.directions) { + if (clickedFace.getAxis() == direction.getAxis()) + continue; + Vector3d centerOf = Vector3d.atCenterOf(direction.getNormal()); + double distance = centerOf.distanceToSqr(clickLocation); + if (distance < closest) { + closest = distance; + argClosest = direction; + } + } + axis = argClosest.getAxis(); + } + + if (clickedFace.getAxis() == axis) return ActionResultType.PASS; if (!world.isClientSide) { FluidTransportBehaviour.cacheFlows(world, pos); @@ -97,7 +115,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren defaultState = defaultState.setValue(PROPERTY_BY_DIRECTION.get(d), d.getAxis() == axis); return defaultState; } - + @Nullable private Axis getAxis(IBlockReader world, BlockPos pos, BlockState state) { return FluidPropagator.getStraightPipeAxis(state); @@ -155,16 +173,18 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren return state.getBlock() instanceof FluidPipeBlock; } - public static boolean canConnectTo(IBlockDisplayReader world, BlockPos neighbourPos, BlockState neighbour, Direction direction) { + public static boolean canConnectTo(IBlockDisplayReader world, BlockPos neighbourPos, BlockState neighbour, + Direction direction) { if (FluidPropagator.hasFluidCapability(world, neighbourPos, direction.getOpposite())) return true; if (neighbour.hasProperty(BlockStateProperties.LEVEL_HONEY)) return true; FluidTransportBehaviour transport = TileEntityBehaviour.get(world, neighbourPos, FluidTransportBehaviour.TYPE); - BracketedTileEntityBehaviour bracket = TileEntityBehaviour.get(world, neighbourPos, BracketedTileEntityBehaviour.TYPE); + BracketedTileEntityBehaviour bracket = + TileEntityBehaviour.get(world, neighbourPos, BracketedTileEntityBehaviour.TYPE); if (isPipe(neighbour)) return bracket == null || !bracket.isBracketPresent() - || FluidPropagator.getStraightPipeAxis(neighbour) == direction.getAxis(); + || FluidPropagator.getStraightPipeAxis(neighbour) == direction.getAxis(); if (transport == null) return false; return transport.canHaveFlowToward(neighbour, direction.getOpposite()); @@ -228,8 +248,8 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren } @Override - public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, - IWorld world, BlockPos pos, BlockPos neighbourPos) { + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, IWorld world, + BlockPos pos, BlockPos neighbourPos) { if (state.getValue(BlockStateProperties.WATERLOGGED)) world.getLiquidTicks() .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); @@ -248,9 +268,9 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren BlockState prevState = state; int prevStateSides = (int) Arrays.stream(Iterate.directions) - .map(PROPERTY_BY_DIRECTION::get) - .filter(prevState::getValue) - .count(); + .map(PROPERTY_BY_DIRECTION::get) + .filter(prevState::getValue) + .count(); // Update sides that are not ignored for (Direction d : Iterate.directions) @@ -279,7 +299,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren // Use preferred return state.setValue(PROPERTY_BY_DIRECTION.get(preferredDirection), true) - .setValue(PROPERTY_BY_DIRECTION.get(preferredDirection.getOpposite()), true); + .setValue(PROPERTY_BY_DIRECTION.get(preferredDirection.getOpposite()), true); } @Override 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 index d2395c2c6..b4f03bf4e 100644 --- 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 @@ -102,6 +102,7 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi @Override public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + super.onPlace(state, world, pos, oldState, isMoving); if (world.isClientSide) return; if (state != oldState) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java index 86b64da1c..0a1637e17 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java @@ -5,6 +5,7 @@ import java.util.Random; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.fluids.FluidPropagator; +import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.VoxelShaper; @@ -28,7 +29,7 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -public class SmartFluidPipeBlock extends HorizontalFaceBlock implements IAxisPipe { +public class SmartFluidPipeBlock extends HorizontalFaceBlock implements IAxisPipe, IWrenchable { public SmartFluidPipeBlock(Properties p_i48339_1_) { super(p_i48339_1_); diff --git a/src/main/java/com/simibubi/create/content/contraptions/goggles/IHaveGoggleInformation.java b/src/main/java/com/simibubi/create/content/contraptions/goggles/IHaveGoggleInformation.java index b67227e94..f9a34b0eb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/goggles/IHaveGoggleInformation.java +++ b/src/main/java/com/simibubi/create/content/contraptions/goggles/IHaveGoggleInformation.java @@ -95,7 +95,7 @@ public interface IHaveGoggleInformation { class Format { - private NumberFormat format = NumberFormat.getNumberInstance(Locale.ROOT);; + private NumberFormat format = NumberFormat.getNumberInstance(Locale.ROOT); private Format() {} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java index a45124772..b7e57b5bd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRecipe.java @@ -145,9 +145,9 @@ public class BasinRecipe extends ProcessingRecipe { if (fluidsAffected) { basin.getBehaviour(SmartFluidTankBehaviour.INPUT) - .foreach(TankSegment::onFluidStackChanged); + .forEach(TankSegment::onFluidStackChanged); basin.getBehaviour(SmartFluidTankBehaviour.OUTPUT) - .foreach(TankSegment::onFluidStackChanged); + .forEach(TankSegment::onFluidStackChanged); } if (simulate) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java index 9d83395c3..38404346b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java @@ -90,7 +90,9 @@ public class ProcessingRecipeSerializer> extends F if (JSONUtils.isValidNode(json, "heatRequirement")) builder.requiresHeat(HeatCondition.deserialize(JSONUtils.getAsString(json, "heatRequirement"))); - return builder.build(); + T recipe = builder.build(); + recipe.readAdditional(json); + return recipe; } protected void writeToBuffer(PacketBuffer buffer, T recipe) { @@ -112,6 +114,8 @@ public class ProcessingRecipeSerializer> extends F buffer.writeVarInt(recipe.getProcessingDuration()); buffer.writeVarInt(recipe.getRequiredHeat() .ordinal()); + + recipe.writeAdditional(buffer); } protected T readFromBuffer(ResourceLocation recipeId, PacketBuffer buffer) { @@ -123,26 +127,28 @@ public class ProcessingRecipeSerializer> extends F int size = buffer.readVarInt(); for (int i = 0; i < size; i++) ingredients.add(Ingredient.fromNetwork(buffer)); - + size = buffer.readVarInt(); for (int i = 0; i < size; i++) fluidIngredients.add(FluidIngredient.read(buffer)); - + size = buffer.readVarInt(); for (int i = 0; i < size; i++) results.add(ProcessingOutput.read(buffer)); - + size = buffer.readVarInt(); for (int i = 0; i < size; i++) fluidResults.add(FluidStack.readFromPacket(buffer)); - return new ProcessingRecipeBuilder<>(factory, recipeId).withItemIngredients(ingredients) + T recipe = new ProcessingRecipeBuilder<>(factory, recipeId).withItemIngredients(ingredients) .withItemOutputs(results) .withFluidIngredients(fluidIngredients) .withFluidOutputs(fluidResults) .duration(buffer.readVarInt()) .requiresHeat(HeatCondition.values()[buffer.readVarInt()]) .build(); + recipe.readAdditional(buffer); + return recipe; } public final void write(JsonObject json, T recipe) { 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 a9a3d4c98..ee3cd3801 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 @@ -101,11 +101,12 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis @Override public void tick() { - super.tick(); - // Init belt if (beltLength == 0) BeltBlock.initBelt(level, worldPosition); + + super.tick(); + if (!AllBlocks.BELT.has(level.getBlockState(worldPosition))) return; @@ -211,6 +212,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis @Override protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { + int prevBeltLength = beltLength; super.fromTag(state, compound, clientPacket); if (compound.getBoolean("IsController")) @@ -224,14 +226,9 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis controller = NBTUtil.readBlockPos(compound.getCompound("Controller")); trackerUpdateTag = compound; index = compound.getInt("Index"); - int length = compound.getInt("Length"); - if (beltLength != length) { - beltLength = length; - if (level != null) - initializeLight(); - else - light = null; - } + beltLength = compound.getInt("Length"); + if (prevBeltLength != beltLength) + light = null; } if (isController()) @@ -523,7 +520,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis return getController().equals(((BeltTileEntity) target).getController()) ? 1 : 0; return 0; } - + public void invalidateItemHandler() { itemHandler.invalidate(); } @@ -535,12 +532,13 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis BlockState state = getBlockState(); return state != null && state.hasProperty(BeltBlock.PART) && state.getValue(BeltBlock.PART) == BeltPart.START; } - + @Override public boolean onLightUpdate(IBlockDisplayReader world, LightType type, GridAlignedBB changed) { - if (this.remove) { + if (this.remove) return true; - } + if (this.level == null || this.light == null) + return false; GridAlignedBB beltVolume = getBeltVolume(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCTBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCTBehaviour.java index 0676729fa..566a6f150 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCTBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedCTBehaviour.java @@ -22,7 +22,7 @@ public class EncasedCTBehaviour extends ConnectedTextureBehaviour { Direction face) { if (isBeingBlocked(state, reader, pos, otherPos, face)) return false; - CasingConnectivity cc = CreateClient.getCasingConnectivity(); + CasingConnectivity cc = CreateClient.CASING_CONNECTIVITY; CasingConnectivity.Entry entry = cc.get(state); CasingConnectivity.Entry otherEntry = cc.get(other); if (entry == null || otherEntry == null) diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java index 73ed999ca..dc5193c81 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java @@ -3,8 +3,8 @@ package com.simibubi.create.content.contraptions.relays.encased; import java.util.ArrayList; import com.jozufozu.flywheel.backend.instancing.InstanceData; -import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.instancing.Instancer; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.IRotate; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java index 0b86084aa..da4b1f8f6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java @@ -4,8 +4,8 @@ import java.util.EnumMap; import java.util.Map; import com.jozufozu.flywheel.backend.instancing.InstanceData; -import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.instancing.Instancer; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileInstance; diff --git a/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java index 41ae4fec9..dbc677fd0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java @@ -7,6 +7,7 @@ import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollVal import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.item.ItemStack; import net.minecraft.util.math.vector.Vector3f; @@ -26,4 +27,9 @@ public class WrenchItemRenderer extends CustomRenderedItemModelRenderer context) { + context.get().enqueueWork(() -> { + ServerPlayerEntity player = context.get().getSender(); + if (player == null) { + return; + } + ItemStack stack = player.getItemInHand(hand); + if (stack.getItem() instanceof SymmetryWandItem) { + SymmetryWandItem.configureSettings(stack, mirror); + } + }); + context.get().setPacketHandled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java index f912de98b..c2a39906a 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java @@ -181,10 +181,15 @@ public class SymmetryWandItem extends Item { public static SymmetryMirror getMirror(ItemStack stack) { checkNBT(stack); - return SymmetryMirror.fromNBT((CompoundNBT) stack.getTag() + return SymmetryMirror.fromNBT(stack.getTag() .getCompound(SYMMETRY)); } + public static void configureSettings(ItemStack stack, SymmetryMirror mirror) { + checkNBT(stack); + stack.getTag().put(SYMMETRY, mirror.writeToNbt()); + } + public static void apply(World world, ItemStack wand, PlayerEntity player, BlockPos pos, BlockState block) { checkNBT(wand); if (!isEnabled(wand)) 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 7760f56b2..875326f8b 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 @@ -15,17 +15,14 @@ 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.networking.AllPackets; -import com.simibubi.create.foundation.networking.NbtPacket; import com.simibubi.create.foundation.utility.Lang; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.Hand; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.math.vector.Vector3f; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; -import net.minecraftforge.fml.network.PacketDistributor; public class SymmetryWandScreen extends AbstractSimiScreen { @@ -45,8 +42,6 @@ public class SymmetryWandScreen extends AbstractSimiScreen { private Hand hand; public SymmetryWandScreen(ItemStack wand, Hand hand) { - super(); - background = AllGuiTextures.WAND_OF_SYMMETRY; currentElement = SymmetryWandItem.getMirror(wand); @@ -150,19 +145,14 @@ public class SymmetryWandScreen extends AbstractSimiScreen { @Override public void removed() { - ItemStack heldItem = minecraft.player.getItemInHand(hand); - CompoundNBT compound = heldItem.getTag(); - compound.put(SymmetryWandItem.SYMMETRY, currentElement.writeToNbt()); - heldItem.setTag(compound); - AllPackets.channel.send(PacketDistributor.SERVER.noArg(), new NbtPacket(heldItem, hand)); - minecraft.player.setItemInHand(hand, heldItem); - super.removed(); + SymmetryWandItem.configureSettings(wand, currentElement); + AllPackets.channel.sendToServer(new ConfigureSymmetryWandPacket(hand, currentElement)); } @Override public boolean mouseClicked(double x, double y, int button) { if (confirmButton.isHovered()) { - minecraft.player.closeContainer(); + onClose(); return true; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/client/SymmetryWandItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/client/SymmetryWandItemRenderer.java index 0f71a9cde..ef8089330 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/client/SymmetryWandItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/client/SymmetryWandItemRenderer.java @@ -6,6 +6,7 @@ import com.simibubi.create.foundation.item.render.PartialItemModelRenderer; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.item.ItemStack; import net.minecraft.util.math.MathHelper; @@ -32,4 +33,9 @@ public class SymmetryWandItemRenderer extends CustomRenderedItemModelRenderer= 0 && slot < 9) + return stack; + return super.insertItem(slot, stack, simulate); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/RadialToolboxMenu.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/RadialToolboxMenu.java new file mode 100644 index 000000000..406f8cd54 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/RadialToolboxMenu.java @@ -0,0 +1,342 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import java.util.List; + +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllKeys; +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.networking.AllPackets; +import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.utility.Lang; + +import net.minecraft.client.MainWindow; +import net.minecraft.client.Minecraft; +import net.minecraft.client.util.InputMappings; +import net.minecraft.item.DyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; + +public class RadialToolboxMenu extends AbstractSimiScreen { + + public static enum State { + SELECT_BOX, SELECT_ITEM, SELECT_ITEM_UNEQUIP, DETACH + } + + private State state; + private int ticksOpen; + private int hoveredSlot; + private boolean scrollMode; + private int scrollSlot = 0; + private List toolboxes; + private ToolboxTileEntity selectedBox; + + private static final int DEPOSIT = -7; + private static final int UNEQUIP = -5; + + public RadialToolboxMenu(List toolboxes, State state) { + this.toolboxes = toolboxes; + this.state = state; + hoveredSlot = -1; + + if (state == State.SELECT_ITEM_UNEQUIP || state == State.SELECT_ITEM) + selectedBox = toolboxes.get(0); + } + + public void prevSlot(int slot) { + scrollSlot = slot; + } + + @Override + protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + float fade = MathHelper.clamp((ticksOpen + AnimationTickHolder.getPartialTicks()) / 10f, 1 / 512f, 1); + + hoveredSlot = -1; + MainWindow window = getMinecraft().getWindow(); + float hoveredX = mouseX - window.getGuiScaledWidth() / 2; + float hoveredY = mouseY - window.getGuiScaledHeight() / 2; + + float distance = hoveredX * hoveredX + hoveredY * hoveredY; + if (distance > 25 && distance < 10000) + hoveredSlot = + (MathHelper.floor((AngleHelper.deg(MathHelper.atan2(hoveredY, hoveredX)) + 360 + 180 - 22.5f)) % 360) + / 45; + boolean renderCenterSlot = state == State.SELECT_ITEM_UNEQUIP; + if (scrollMode && distance > 150) + scrollMode = false; + if (renderCenterSlot && distance <= 150) + hoveredSlot = UNEQUIP; + + ms.pushPose(); + ms.translate(width / 2, height / 2, 0); + ITextComponent tip = null; + + if (state == State.DETACH) { + + tip = Lang.translate("toolbox.outOfRange"); + if (hoveredX > -20 && hoveredX < 20 && hoveredY > -80 && hoveredY < -20) + hoveredSlot = UNEQUIP; + + ms.pushPose(); + AllGuiTextures.TOOLBELT_INACTIVE_SLOT.draw(ms, this, -12, -12); + GuiGameElement.of(AllBlocks.TOOLBOXES.get(DyeColor.BROWN) + .asStack()) + .at(-9, -9) + .render(ms); + + ms.translate(0, -40 + (10 * (1 - fade) * (1 - fade)), 0); + AllGuiTextures.TOOLBELT_SLOT.draw(ms, this, -12, -12); + ms.translate(-0.5, 0.5, 0); + AllIcons.I_DISABLE.draw(ms, this, -9, -9); + ms.translate(0.5, -0.5, 0); + if (!scrollMode && hoveredSlot == UNEQUIP) { + AllGuiTextures.TOOLBELT_SLOT_HIGHLIGHT.draw(ms, this, -13, -13); + tip = Lang.translate("toolbox.detach") + .withStyle(TextFormatting.GOLD); + } + ms.popPose(); + + } else { + + if (hoveredX > 60 && hoveredX < 100 && hoveredY > -20 && hoveredY < 20) + hoveredSlot = DEPOSIT; + + ms.pushPose(); + ms.translate(80 + (-5 * (1 - fade) * (1 - fade)), 0, 0); + AllGuiTextures.TOOLBELT_SLOT.draw(ms, this, -12, -12); + ms.translate(-0.5, 0.5, 0); + AllIcons.I_TOOLBOX.draw(ms, this, -9, -9); + ms.translate(0.5, -0.5, 0); + if (!scrollMode && hoveredSlot == DEPOSIT) { + AllGuiTextures.TOOLBELT_SLOT_HIGHLIGHT.draw(ms, this, -13, -13); + tip = Lang.translate(state == State.SELECT_BOX ? "toolbox.depositAll" : "toolbox.depositBox") + .withStyle(TextFormatting.GOLD); + } + ms.popPose(); + + for (int slot = 0; slot < 8; slot++) { + ms.pushPose(); + MatrixTransformStack.of(ms) + .rotateZ(slot * 45 - 45) + .translate(0, -40 + (10 * (1 - fade) * (1 - fade)), 0) + .rotateZ(-slot * 45 + 45); + ms.translate(-12, -12, 0); + + if (state == State.SELECT_ITEM || state == State.SELECT_ITEM_UNEQUIP) { + ToolboxInventory inv = selectedBox.inventory; + ItemStack stackInSlot = inv.filters.get(slot); + + if (!stackInSlot.isEmpty()) { + boolean empty = inv.getStackInSlot(slot * ToolboxInventory.STACKS_PER_COMPARTMENT) + .isEmpty(); + + (empty ? AllGuiTextures.TOOLBELT_INACTIVE_SLOT : AllGuiTextures.TOOLBELT_SLOT).draw(ms, this, 0, + 0); + GuiGameElement.of(stackInSlot) + .at(3, 3) + .render(ms); + + if (slot == (scrollMode ? scrollSlot : hoveredSlot) && !empty) { + AllGuiTextures.TOOLBELT_SLOT_HIGHLIGHT.draw(ms, this, -1, -1); + tip = stackInSlot.getHoverName(); + } + } else + AllGuiTextures.TOOLBELT_EMPTY_SLOT.draw(ms, this, 0, 0); + + } else if (state == State.SELECT_BOX) { + + if (slot < toolboxes.size()) { + AllGuiTextures.TOOLBELT_SLOT.draw(ms, this, 0, 0); + ToolboxTileEntity toolboxTileEntity = toolboxes.get(slot); + GuiGameElement.of(AllBlocks.TOOLBOXES.get(toolboxTileEntity.getColor()) + .asStack()) + .at(3, 3) + .render(ms); + + if (slot == (scrollMode ? scrollSlot : hoveredSlot)) { + AllGuiTextures.TOOLBELT_SLOT_HIGHLIGHT.draw(ms, this, -1, -1); + tip = toolboxTileEntity.getDisplayName(); + } + } else + AllGuiTextures.TOOLBELT_EMPTY_SLOT.draw(ms, this, 0, 0); + + } + + ms.popPose(); + } + + if (renderCenterSlot) { + ms.pushPose(); + AllGuiTextures.TOOLBELT_SLOT.draw(ms, this, -12, -12); + (scrollMode ? AllIcons.I_REFRESH : AllIcons.I_FLIP).draw(ms, this, -9, -9); + if (!scrollMode && UNEQUIP == hoveredSlot) { + AllGuiTextures.TOOLBELT_SLOT_HIGHLIGHT.draw(ms, this, -13, -13); + tip = Lang.translate("toolbox.unequip", minecraft.player.getMainHandItem() + .getHoverName()) + .withStyle(TextFormatting.GOLD); + } + ms.popPose(); + } + } + ms.popPose(); + + if (tip != null) { + int i1 = (int) (fade * 255.0F); + if (i1 > 255) + i1 = 255; + + if (i1 > 8) { + ms.pushPose(); + ms.translate((float) (width / 2), (float) (height - 68), 0.0F); + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + int k1 = 16777215; + int k = i1 << 24 & -16777216; + int l = font.width(tip); + font.draw(ms, tip, (float) (-l / 2), -4.0F, k1 | k); + RenderSystem.disableBlend(); + ms.popPose(); + } + } + + } + + @Override + public void renderBackground(MatrixStack p_238651_1_, int p_238651_2_) { + int a = ((int) (0x50 * Math.min(1, (ticksOpen + AnimationTickHolder.getPartialTicks()) / 20f))) << 24; + fillGradient(p_238651_1_, 0, 0, this.width, this.height, 0x101010 | a, 0x101010 | a); + } + + @Override + public void tick() { + ticksOpen++; + super.tick(); + } + + @Override + public void removed() { + super.removed(); + + int selected = (scrollMode ? scrollSlot : hoveredSlot); + + if (selected == DEPOSIT) { + if (state == State.DETACH) + return; + else if (state == State.SELECT_BOX) + toolboxes.forEach(te -> AllPackets.channel.sendToServer(new ToolboxDisposeAllPacket(te.getBlockPos()))); + else + AllPackets.channel.sendToServer(new ToolboxDisposeAllPacket(selectedBox.getBlockPos())); + return; + } + + if (state == State.SELECT_BOX) + return; + + if (state == State.DETACH) { + if (selected == UNEQUIP) + AllPackets.channel.sendToServer( + new ToolboxEquipPacket(null, selected, Minecraft.getInstance().player.inventory.selected)); + return; + } + + if (selected == UNEQUIP) + AllPackets.channel.sendToServer(new ToolboxEquipPacket(selectedBox.getBlockPos(), selected, + Minecraft.getInstance().player.inventory.selected)); + + if (selected < 0) + return; + ToolboxInventory inv = selectedBox.inventory; + ItemStack stackInSlot = inv.filters.get(selected); + if (stackInSlot.isEmpty()) + return; + if (inv.getStackInSlot(selected * ToolboxInventory.STACKS_PER_COMPARTMENT) + .isEmpty()) + return; + + AllPackets.channel.sendToServer(new ToolboxEquipPacket(selectedBox.getBlockPos(), selected, + Minecraft.getInstance().player.inventory.selected)); + } + + @Override + public boolean mouseScrolled(double mouseX, double mouseY, double delta) { + MainWindow window = getMinecraft().getWindow(); + double hoveredX = mouseX - window.getGuiScaledWidth() / 2; + double hoveredY = mouseY - window.getGuiScaledHeight() / 2; + double distance = hoveredX * hoveredX + hoveredY * hoveredY; + if (distance <= 150) { + scrollMode = true; + scrollSlot = (((int) (scrollSlot - delta)) + 8) % 8; + for (int i = 0; i < 10; i++) { + + if (state == State.SELECT_ITEM || state == State.SELECT_ITEM_UNEQUIP) { + ToolboxInventory inv = selectedBox.inventory; + ItemStack stackInSlot = inv.filters.get(scrollSlot); + if (!stackInSlot.isEmpty() + && !inv.getStackInSlot(scrollSlot * ToolboxInventory.STACKS_PER_COMPARTMENT) + .isEmpty()) + break; + } + + if (state == State.SELECT_BOX) + if (scrollSlot < toolboxes.size()) + break; + + if (state == State.DETACH) + break; + + scrollSlot -= MathHelper.sign(delta); + scrollSlot = (scrollSlot + 8) % 8; + } + return true; + } + + return super.mouseScrolled(mouseX, mouseY, delta); + } + + @Override + public boolean mouseClicked(double x, double y, int button) { + int selected = (scrollMode ? scrollSlot : hoveredSlot); + + if (selected == DEPOSIT) { + onClose(); + ToolboxHandlerClient.COOLDOWN = 2; + return true; + } + + if (state == State.SELECT_BOX && selected >= 0 && selected < toolboxes.size()) { + state = State.SELECT_ITEM; + selectedBox = toolboxes.get(selected); + return true; + } + + if (state == State.DETACH || state == State.SELECT_ITEM || state == State.SELECT_ITEM_UNEQUIP) { + if (selected == UNEQUIP || selected >= 0) { + onClose(); + ToolboxHandlerClient.COOLDOWN = 2; + return true; + } + } + + return super.mouseClicked(x, y, button); + } + + @Override + public boolean keyReleased(int code, int p_keyPressed_2_, int p_keyPressed_3_) { + InputMappings.Input mouseKey = InputMappings.getKey(code, p_keyPressed_2_); + if (AllKeys.TOOLBELT.getKeybind() + .isActiveAndMatches(mouseKey)) { + this.onClose(); + return true; + } + return super.keyReleased(code, p_keyPressed_2_, p_keyPressed_3_); + } + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxBlock.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxBlock.java new file mode 100644 index 000000000..4fe4c4615 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxBlock.java @@ -0,0 +1,190 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import static net.minecraft.state.properties.BlockStateProperties.WATERLOGGED; + +import java.util.Optional; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllShapes; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.foundation.block.ITE; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.block.IWaterLoggable; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.fluid.FluidState; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.DyeColor; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.fml.network.NetworkHooks; + +public class ToolboxBlock extends HorizontalBlock implements IWaterLoggable, ITE { + + private final DyeColor color; + + public ToolboxBlock(Properties p_i48440_1_, DyeColor color) { + super(p_i48440_1_); + this.color = color; + registerDefaultState(super.defaultBlockState().setValue(WATERLOGGED, false)); + } + + @Override + public void fillItemCategory(ItemGroup group, NonNullList p_149666_2_) { + if (group != ItemGroup.TAB_SEARCH && color != DyeColor.BROWN) + return; + super.fillItemCategory(group, p_149666_2_); + } + + @Override + public FluidState getFluidState(BlockState state) { + return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : Fluids.EMPTY.defaultFluidState(); + } + + @Override + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(WATERLOGGED) + .add(FACING)); + } + + @Override + public void setPlacedBy(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { + super.setPlacedBy(worldIn, pos, state, placer, stack); + if (worldIn.isClientSide) + return; + if (stack == null) + return; + withTileEntityDo(worldIn, pos, te -> { + te.readInventory(stack.getOrCreateTag() + .getCompound("Inventory")); + if (stack.hasCustomHoverName()) + te.setCustomName(stack.getHoverName()); + }); + } + + @Override + public void onRemove(BlockState state, World world, BlockPos pos, BlockState newState, boolean moving) { + if (state.hasTileEntity() && (!state.is(newState.getBlock()) || !newState.hasTileEntity())) + world.removeBlockEntity(pos); + } + + @Override + public void attack(BlockState state, World world, BlockPos pos, PlayerEntity player) { + if (player instanceof FakePlayer) + return; + if (world.isClientSide) + return; + withTileEntityDo(world, pos, ToolboxTileEntity::unequipTracked); + if (world instanceof ServerWorld) { + ItemStack cloneItemStack = getCloneItemStack(world, pos, state); + world.destroyBlock(pos, false); + if (world.getBlockState(pos) != state) + player.inventory.placeItemBackInInventory(world, cloneItemStack); + } + } + + @Override + public ItemStack getCloneItemStack(IBlockReader world, BlockPos pos, BlockState state) { + ItemStack item = new ItemStack(this); + Optional tileEntityOptional = getTileEntityOptional(world, pos); + + CompoundNBT tag = item.getOrCreateTag(); + CompoundNBT inv = tileEntityOptional.map(tb -> tb.inventory.serializeNBT()) + .orElse(new CompoundNBT()); + tag.put("Inventory", inv); + + ITextComponent customName = tileEntityOptional.map(ToolboxTileEntity::getCustomName) + .orElse(null); + if (customName != null) + item.setHoverName(customName); + return item; + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, IWorld world, + BlockPos pos, BlockPos neighbourPos) { + if (state.getValue(WATERLOGGED)) + world.getLiquidTicks() + .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); + return state; + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, + ISelectionContext p_220053_4_) { + return AllShapes.TOOLBOX.get(state.getValue(FACING)); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + BlockRayTraceResult ray) { + + if (player == null || player.isCrouching()) + return ActionResultType.PASS; + if (player instanceof FakePlayer) + return ActionResultType.PASS; + if (world.isClientSide) + return ActionResultType.SUCCESS; + + withTileEntityDo(world, pos, + toolbox -> NetworkHooks.openGui((ServerPlayerEntity) player, toolbox, toolbox::sendToContainer)); + return ActionResultType.SUCCESS; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.TOOLBOX.create(); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + FluidState ifluidstate = context.getLevel() + .getFluidState(context.getClickedPos()); + return super.getStateForPlacement(context).setValue(FACING, context.getHorizontalDirection() + .getOpposite()) + .setValue(WATERLOGGED, Boolean.valueOf(ifluidstate.getType() == Fluids.WATER)); + } + + @Override + public Class getTileEntityClass() { + return ToolboxTileEntity.class; + } + + public DyeColor getColor() { + return color; + } + + public static Ingredient getMainBox() { + return Ingredient.of(AllBlocks.TOOLBOXES.get(DyeColor.BROWN) + .get()); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxContainer.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxContainer.java new file mode 100644 index 000000000..7856d3bec --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxContainer.java @@ -0,0 +1,158 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import static com.simibubi.create.content.curiosities.toolbox.ToolboxInventory.STACKS_PER_COMPARTMENT; + +import com.simibubi.create.AllContainerTypes; +import com.simibubi.create.foundation.gui.ContainerBase; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.ClickType; +import net.minecraft.inventory.container.ContainerType; +import net.minecraft.inventory.container.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.items.SlotItemHandler; + +public class ToolboxContainer extends ContainerBase { + + public static ToolboxContainer create(int id, PlayerInventory inv, ToolboxTileEntity te) { + return new ToolboxContainer(AllContainerTypes.TOOLBOX.get(), id, inv, te); + } + + public ToolboxContainer(ContainerType type, int id, PlayerInventory inv, PacketBuffer extraData) { + super(type, id, inv, extraData); + } + + public ToolboxContainer(ContainerType type, int id, PlayerInventory inv, ToolboxTileEntity te) { + super(type, id, inv, te); + te.startOpen(player); + } + + @Override + protected ToolboxTileEntity createOnClient(PacketBuffer extraData) { + BlockPos readBlockPos = extraData.readBlockPos(); + CompoundNBT readNbt = extraData.readNbt(); + + ClientWorld world = Minecraft.getInstance().level; + TileEntity tileEntity = world.getBlockEntity(readBlockPos); + if (tileEntity instanceof ToolboxTileEntity) { + ToolboxTileEntity toolbox = (ToolboxTileEntity) tileEntity; + toolbox.handleUpdateTag(toolbox.getBlockState(), readNbt); + return toolbox; + } + + return null; + } + + @Override + public ItemStack quickMoveStack(PlayerEntity player, int index) { + Slot clickedSlot = getSlot(index); + if (!clickedSlot.hasItem()) + return ItemStack.EMPTY; + + ItemStack stack = clickedSlot.getItem(); + int size = contentHolder.inventory.getSlots(); + if (index < size) { + moveItemStackTo(stack, size, slots.size(), false); + contentHolder.inventory.onContentsChanged(index); + } else + moveItemStackTo(stack, 0, size - 1, false); + + return ItemStack.EMPTY; + } + + @Override + protected void initAndReadInventory(ToolboxTileEntity contentHolder) { + + } + + @Override + public ItemStack clicked(int index, int flags, ClickType type, PlayerEntity player) { + int size = contentHolder.inventory.getSlots(); + + if (index >= 0 && index < size) { + + ItemStack itemInClickedSlot = getSlot(index).getItem(); + PlayerInventory playerInv = player.inventory; + ItemStack carried = playerInv.getCarried(); + + if (type == ClickType.PICKUP && !carried.isEmpty() && !itemInClickedSlot.isEmpty() + && ToolboxInventory.canItemsShareCompartment(itemInClickedSlot, carried)) { + int subIndex = index % STACKS_PER_COMPARTMENT; + if (subIndex != STACKS_PER_COMPARTMENT - 1) + return clicked(index - subIndex + STACKS_PER_COMPARTMENT - 1, flags, type, player); + } + + if (type == ClickType.PICKUP && carried.isEmpty() && itemInClickedSlot.isEmpty()) + if (!player.level.isClientSide) { + contentHolder.inventory.filters.set(index / STACKS_PER_COMPARTMENT, ItemStack.EMPTY); + contentHolder.sendData(); + } + + } + return super.clicked(index, flags, type, player); + } + + @Override + public boolean canDragTo(Slot slot) { + return slot.index > contentHolder.inventory.getSlots() && super.canDragTo(slot); + } + + public ItemStack getFilter(int compartment) { + return contentHolder.inventory.filters.get(compartment); + } + + public int totalCountInCompartment(int compartment) { + int count = 0; + int baseSlot = compartment * STACKS_PER_COMPARTMENT; + for (int i = 0; i < STACKS_PER_COMPARTMENT; i++) + count += getSlot(baseSlot + i).getItem() + .getCount(); + return count; + } + + public boolean renderPass; + + @Override + protected void addSlots() { + ToolboxInventory inventory = contentHolder.inventory; + + int x = 59; + int y = 37; + + int[] xOffsets = { x, x + 33, x + 66, x + 66 + 6, x + 66, x + 33, x, x - 6 }; + int[] yOffsets = { y, y - 6, y, y + 33, y + 66, y + 66 + 6, y + 66, y + 33 }; + + for (int compartment = 0; compartment < 8; compartment++) { + int baseIndex = compartment * STACKS_PER_COMPARTMENT; + + // Representative Slots + addSlot(new ToolboxSlot(this, inventory, baseIndex, xOffsets[compartment], yOffsets[compartment])); + + // Hidden Slots + for (int i = 1; i < STACKS_PER_COMPARTMENT; i++) + addSlot(new SlotItemHandler(inventory, baseIndex + i, -100, -100)); + } + + addPlayerSlots(-12, 166); + } + + @Override + protected void saveData(ToolboxTileEntity contentHolder) { + + } + + @Override + public void removed(PlayerEntity playerIn) { + super.removed(playerIn); + if (!playerIn.level.isClientSide) + contentHolder.stopOpen(playerIn); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxDisposeAllPacket.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxDisposeAllPacket.java new file mode 100644 index 000000000..071c61df6 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxDisposeAllPacket.java @@ -0,0 +1,81 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import java.util.function.Supplier; + +import org.apache.commons.lang3.mutable.MutableBoolean; + +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import net.minecraftforge.items.ItemHandlerHelper; + +public class ToolboxDisposeAllPacket extends SimplePacketBase { + + private BlockPos toolboxPos; + + public ToolboxDisposeAllPacket(BlockPos toolboxPos) { + this.toolboxPos = toolboxPos; + } + + public ToolboxDisposeAllPacket(PacketBuffer buffer) { + toolboxPos = buffer.readBlockPos(); + } + + @Override + public void write(PacketBuffer buffer) { + buffer.writeBlockPos(toolboxPos); + } + + @Override + public void handle(Supplier context) { + Context ctx = context.get(); + ctx.enqueueWork(() -> { + ServerPlayerEntity player = ctx.getSender(); + World world = player.level; + TileEntity blockEntity = world.getBlockEntity(toolboxPos); + + double maxRange = ToolboxHandler.getMaxRange(player); + if (player.distanceToSqr(toolboxPos.getX() + 0.5, toolboxPos.getY(), toolboxPos.getZ() + 0.5) > maxRange + * maxRange) + return; + if (!(blockEntity instanceof ToolboxTileEntity)) + return; + ToolboxTileEntity toolbox = (ToolboxTileEntity) blockEntity; + + CompoundNBT compound = player.getPersistentData() + .getCompound("CreateToolboxData"); + MutableBoolean sendData = new MutableBoolean(false); + + toolbox.inventory.inLimitedMode(inventory -> { + for (int i = 0; i < 36; i++) { + String key = String.valueOf(i); + if (compound.contains(key) && NBTUtil.readBlockPos(compound.getCompound(key) + .getCompound("Pos")) + .equals(toolboxPos)) { + ToolboxHandler.unequip(player, i, true); + sendData.setTrue(); + } + + ItemStack itemStack = player.inventory.getItem(i); + ItemStack remainder = ItemHandlerHelper.insertItemStacked(toolbox.inventory, itemStack, false); + if (remainder.getCount() != itemStack.getCount()) + player.inventory.setItem(i, remainder); + } + }); + + if (sendData.booleanValue()) + ToolboxHandler.syncData(player); + + }); + ctx.setPacketHandled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxEquipPacket.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxEquipPacket.java new file mode 100644 index 000000000..1c3b39e7a --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxEquipPacket.java @@ -0,0 +1,108 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import java.util.function.Supplier; + +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import net.minecraftforge.items.ItemHandlerHelper; + +public class ToolboxEquipPacket extends SimplePacketBase { + + private BlockPos toolboxPos; + private int slot; + private int hotbarSlot; + + public ToolboxEquipPacket(BlockPos toolboxPos, int slot, int hotbarSlot) { + this.toolboxPos = toolboxPos; + this.slot = slot; + this.hotbarSlot = hotbarSlot; + } + + public ToolboxEquipPacket(PacketBuffer buffer) { + if (buffer.readBoolean()) + toolboxPos = buffer.readBlockPos(); + slot = buffer.readVarInt(); + hotbarSlot = buffer.readVarInt(); + } + + @Override + public void write(PacketBuffer buffer) { + buffer.writeBoolean(toolboxPos != null); + if (toolboxPos != null) + buffer.writeBlockPos(toolboxPos); + buffer.writeVarInt(slot); + buffer.writeVarInt(hotbarSlot); + } + + @Override + public void handle(Supplier context) { + Context ctx = context.get(); + ctx.enqueueWork(() -> { + ServerPlayerEntity player = ctx.getSender(); + World world = player.level; + + if (toolboxPos == null) { + ToolboxHandler.unequip(player, hotbarSlot, false); + ToolboxHandler.syncData(player); + return; + } + + TileEntity blockEntity = world.getBlockEntity(toolboxPos); + + double maxRange = ToolboxHandler.getMaxRange(player); + if (player.distanceToSqr(toolboxPos.getX() + 0.5, toolboxPos.getY(), toolboxPos.getZ() + 0.5) > maxRange + * maxRange) + return; + if (!(blockEntity instanceof ToolboxTileEntity)) + return; + + ToolboxHandler.unequip(player, hotbarSlot, false); + + if (slot < 0 || slot >= 8) { + ToolboxHandler.syncData(player); + return; + } + + ToolboxTileEntity toolboxTileEntity = (ToolboxTileEntity) blockEntity; + + ItemStack playerStack = player.inventory.getItem(hotbarSlot); + if (!playerStack.isEmpty() && !ToolboxInventory.canItemsShareCompartment(playerStack, + toolboxTileEntity.inventory.filters.get(slot))) { + toolboxTileEntity.inventory.inLimitedMode(inventory -> { + ItemStack remainder = ItemHandlerHelper.insertItemStacked(inventory, playerStack, false); + if (!remainder.isEmpty()) + remainder = ItemHandlerHelper.insertItemStacked(new ItemReturnInvWrapper(player.inventory), + remainder, false); + if (remainder.getCount() != playerStack.getCount()) + player.inventory.setItem(hotbarSlot, remainder); + }); + } + + CompoundNBT compound = player.getPersistentData() + .getCompound("CreateToolboxData"); + String key = String.valueOf(hotbarSlot); + + CompoundNBT data = new CompoundNBT(); + data.putInt("Slot", slot); + data.put("Pos", NBTUtil.writeBlockPos(toolboxPos)); + compound.put(key, data); + + player.getPersistentData() + .put("CreateToolboxData", compound); + + toolboxTileEntity.connectPlayer(slot, player, hotbarSlot); + ToolboxHandler.syncData(player); + }); + ctx.setPacketHandled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandler.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandler.java new file mode 100644 index 000000000..e21a775be --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandler.java @@ -0,0 +1,153 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import java.util.List; +import java.util.WeakHashMap; +import java.util.stream.Collectors; + +import com.simibubi.create.foundation.config.AllConfigs; +import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.networking.ISyncPersistentData; +import com.simibubi.create.foundation.utility.WorldAttached; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.fml.network.PacketDistributor; + +public class ToolboxHandler { + + public static final WorldAttached> toolboxes = + new WorldAttached<>(w -> new WeakHashMap<>()); + + public static void onLoad(ToolboxTileEntity te) { + toolboxes.get(te.getLevel()) + .put(te.getBlockPos(), te); + } + + public static void onUnload(ToolboxTileEntity te) { + toolboxes.get(te.getLevel()) + .remove(te.getBlockPos()); + } + + static int validationTimer = 20; + + public static void entityTick(Entity entity, World world) { + if (world.isClientSide) + return; + if (!(world instanceof ServerWorld)) + return; + if (!(entity instanceof ServerPlayerEntity)) + return; + if (entity.tickCount % validationTimer != 0) + return; + + ServerPlayerEntity player = (ServerPlayerEntity) entity; + if (!player.getPersistentData() + .contains("CreateToolboxData")) + return; + + boolean sendData = false; + CompoundNBT compound = player.getPersistentData() + .getCompound("CreateToolboxData"); + for (int i = 0; i < 9; i++) { + String key = String.valueOf(i); + if (!compound.contains(key)) + continue; + + CompoundNBT data = compound.getCompound(key); + BlockPos pos = NBTUtil.readBlockPos(data.getCompound("Pos")); + int slot = data.getInt("Slot"); + + if (!world.isAreaLoaded(pos, 0)) + continue; + if (!(world.getBlockState(pos) + .getBlock() instanceof ToolboxBlock)) { + compound.remove(key); + sendData = true; + continue; + } + + TileEntity prevBlockEntity = world.getBlockEntity(pos); + if (prevBlockEntity instanceof ToolboxTileEntity) + ((ToolboxTileEntity) prevBlockEntity).connectPlayer(slot, player, i); + } + + if (sendData) + syncData(player); + } + + public static void playerLogin(PlayerEntity player) { + if (!(player instanceof ServerPlayerEntity)) + return; + if (player.getPersistentData() + .contains("CreateToolboxData") + && !player.getPersistentData() + .getCompound("CreateToolboxData") + .isEmpty()) { + syncData(player); + } + } + + public static void syncData(PlayerEntity player) { + AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) player), + new ISyncPersistentData.Packet(player)); + } + + public static List getNearest(IWorld world, PlayerEntity player, int maxAmount) { + Vector3d location = player.position(); + double maxRange = getMaxRange(player); + return toolboxes.get(world) + .keySet() + .stream() + .filter(p -> distance(location, p) < maxRange * maxRange) + .sorted((p1, p2) -> Double.compare(distance(location, p1), distance(location, p2))) + .limit(maxAmount) + .map(toolboxes.get(world)::get) + .collect(Collectors.toList()); + } + + public static void unequip(PlayerEntity player, int hotbarSlot, boolean keepItems) { + CompoundNBT compound = player.getPersistentData() + .getCompound("CreateToolboxData"); + World world = player.level; + String key = String.valueOf(hotbarSlot); + if (!compound.contains(key)) + return; + + CompoundNBT prevData = compound.getCompound(key); + BlockPos prevPos = NBTUtil.readBlockPos(prevData.getCompound("Pos")); + int prevSlot = prevData.getInt("Slot"); + + TileEntity prevBlockEntity = world.getBlockEntity(prevPos); + if (prevBlockEntity instanceof ToolboxTileEntity) { + ToolboxTileEntity toolbox = (ToolboxTileEntity) prevBlockEntity; + toolbox.unequip(prevSlot, player, hotbarSlot, keepItems || !ToolboxHandler.withinRange(player, toolbox)); + } + compound.remove(key); + } + + public static boolean withinRange(PlayerEntity player, ToolboxTileEntity box) { + if (player.level != box.getLevel()) + return false; + double maxRange = getMaxRange(player); + return distance(player.position(), box.getBlockPos()) < maxRange * maxRange; + } + + public static double distance(Vector3d location, BlockPos p) { + return location.distanceToSqr(p.getX() + 0.5f, p.getY(), p.getZ() + 0.5f); + } + + public static double getMaxRange(PlayerEntity player) { + return AllConfigs.SERVER.curiosities.toolboxRange.get() + .doubleValue(); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandlerClient.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandlerClient.java new file mode 100644 index 000000000..741eb326b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxHandlerClient.java @@ -0,0 +1,185 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import static com.simibubi.create.foundation.gui.AllGuiTextures.TOOLBELT_HOTBAR_OFF; +import static com.simibubi.create.foundation.gui.AllGuiTextures.TOOLBELT_HOTBAR_ON; +import static com.simibubi.create.foundation.gui.AllGuiTextures.TOOLBELT_SELECTED_OFF; +import static com.simibubi.create.foundation.gui.AllGuiTextures.TOOLBELT_SELECTED_ON; + +import java.util.List; + +import com.google.common.collect.ImmutableList; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.simibubi.create.AllKeys; +import com.simibubi.create.foundation.gui.AllGuiTextures; +import com.simibubi.create.foundation.gui.ScreenOpener; +import com.simibubi.create.foundation.networking.AllPackets; + +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.client.MainWindow; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.EntityRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +public class ToolboxHandlerClient { + + static int COOLDOWN = 0; + + public static void clientTick() { + if (COOLDOWN > 0 && !AllKeys.TOOLBELT.isPressed()) + COOLDOWN--; + } + + public static boolean onPickItem() { + Minecraft mc = Minecraft.getInstance(); + ClientPlayerEntity player = mc.player; + if (player == null) + return false; + World level = player.level; + RayTraceResult hitResult = mc.hitResult; + + if (hitResult == null || hitResult.getType() == RayTraceResult.Type.MISS) + return false; + if (player.isCreative()) + return false; + + ItemStack result = ItemStack.EMPTY; + List toolboxes = ToolboxHandler.getNearest(player.level, player, 8); + + if (toolboxes.isEmpty()) + return false; + + if (hitResult.getType() == RayTraceResult.Type.BLOCK) { + BlockPos pos = ((BlockRayTraceResult) hitResult).getBlockPos(); + BlockState state = level.getBlockState(pos); + if (state.getMaterial() == Material.AIR) + return false; + result = state.getPickBlock(hitResult, level, pos, player); + + } else if (hitResult.getType() == RayTraceResult.Type.ENTITY) { + Entity entity = ((EntityRayTraceResult) hitResult).getEntity(); + result = entity.getPickedResult(hitResult); + } + + if (result.isEmpty()) + return false; + + for (ToolboxTileEntity toolboxTileEntity : toolboxes) { + ToolboxInventory inventory = toolboxTileEntity.inventory; + for (int comp = 0; comp < 8; comp++) { + ItemStack inSlot = inventory.takeFromCompartment(1, comp, true); + if (inSlot.isEmpty()) + continue; + if (inSlot.getItem() != result.getItem()) + continue; + if (!ItemStack.tagMatches(inSlot, result)) + continue; + + AllPackets.channel.sendToServer( + new ToolboxEquipPacket(toolboxTileEntity.getBlockPos(), comp, player.inventory.selected)); + return true; + } + + } + + return false; + } + + public static void onKeyInput(int key, boolean pressed) { + if (key != AllKeys.TOOLBELT.getBoundCode()) + return; + if (COOLDOWN > 0) + return; + ClientPlayerEntity player = Minecraft.getInstance().player; + if (player == null) + return; + World level = player.level; + + List toolboxes = ToolboxHandler.getNearest(player.level, player, 8); + CompoundNBT compound = player.getPersistentData() + .getCompound("CreateToolboxData"); + + String slotKey = String.valueOf(player.inventory.selected); + boolean equipped = compound.contains(slotKey); + + if (equipped) { + BlockPos pos = NBTUtil.readBlockPos(compound.getCompound(slotKey) + .getCompound("Pos")); + double max = ToolboxHandler.getMaxRange(player); + boolean canReachToolbox = ToolboxHandler.distance(player.position(), pos) < max * max; + + if (canReachToolbox) { + TileEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof ToolboxTileEntity) { + RadialToolboxMenu screen = new RadialToolboxMenu(ImmutableList.of((ToolboxTileEntity) blockEntity), + RadialToolboxMenu.State.SELECT_ITEM_UNEQUIP); + screen.prevSlot(compound.getCompound(slotKey) + .getInt("Slot")); + ScreenOpener.open(screen); + return; + } + } + + ScreenOpener.open(new RadialToolboxMenu(ImmutableList.of(), RadialToolboxMenu.State.DETACH)); + return; + } + + if (toolboxes.isEmpty()) + return; + + if (toolboxes.size() == 1) + ScreenOpener.open(new RadialToolboxMenu(toolboxes, RadialToolboxMenu.State.SELECT_ITEM)); + else + ScreenOpener.open(new RadialToolboxMenu(toolboxes, RadialToolboxMenu.State.SELECT_BOX)); + } + + public static void renderOverlay(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay, + float partialTicks) { + MainWindow mainWindow = Minecraft.getInstance() + .getWindow(); + int x = mainWindow.getGuiScaledWidth() / 2 - 90; + int y = mainWindow.getGuiScaledHeight() - 23; + RenderSystem.enableDepthTest(); + + PlayerEntity player = Minecraft.getInstance().player; + CompoundNBT persistentData = player.getPersistentData(); + if (!persistentData.contains("CreateToolboxData")) + return; + + CompoundNBT compound = player.getPersistentData() + .getCompound("CreateToolboxData"); + + if (compound.isEmpty()) + return; + + ms.pushPose(); + for (int slot = 0; slot < 9; slot++) { + String key = String.valueOf(slot); + if (!compound.contains(key)) + continue; + BlockPos pos = NBTUtil.readBlockPos(compound.getCompound(key) + .getCompound("Pos")); + double max = ToolboxHandler.getMaxRange(player); + boolean selected = player.inventory.selected == slot; + int offset = selected ? 1 : 0; + AllGuiTextures texture = ToolboxHandler.distance(player.position(), pos) < max * max + ? selected ? TOOLBELT_SELECTED_ON : TOOLBELT_HOTBAR_ON + : selected ? TOOLBELT_SELECTED_OFF : TOOLBELT_HOTBAR_OFF; + texture.draw(ms, x + 20 * slot - offset, y + offset); + } + ms.popPose(); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxInventory.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxInventory.java new file mode 100644 index 000000000..a1c4dffec --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxInventory.java @@ -0,0 +1,209 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +import javax.annotation.Nonnull; + +import com.simibubi.create.AllItems; +import com.simibubi.create.AllTags.AllItemTags; +import com.simibubi.create.foundation.utility.NBTHelper; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraftforge.common.util.Constants.NBT; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.items.ItemStackHandler; + +public class ToolboxInventory extends ItemStackHandler { + + public static final int STACKS_PER_COMPARTMENT = 4; + List filters; + boolean settling; + private ToolboxTileEntity te; + + private boolean limitedMode; + + public ToolboxInventory(ToolboxTileEntity te) { + super(8 * STACKS_PER_COMPARTMENT); + this.te = te; + limitedMode = false; + filters = new ArrayList<>(); + settling = false; + for (int i = 0; i < 8; i++) + filters.add(ItemStack.EMPTY); + } + + public void inLimitedMode(Consumer action) { + limitedMode = true; + action.accept(this); + limitedMode = false; + } + + public void settle(int compartment) { + int totalCount = 0; + boolean valid = true; + boolean shouldBeEmpty = false; + ItemStack sample = ItemStack.EMPTY; + + for (int i = 0; i < STACKS_PER_COMPARTMENT; i++) { + ItemStack stackInSlot = getStackInSlot(compartment * STACKS_PER_COMPARTMENT + i); + totalCount += stackInSlot.getCount(); + if (!shouldBeEmpty) + shouldBeEmpty = stackInSlot.isEmpty() || stackInSlot.getCount() != stackInSlot.getMaxStackSize(); + else if (!stackInSlot.isEmpty()) { + valid = false; + sample = stackInSlot; + } + } + + if (valid) + return; + + settling = true; + if (!sample.isStackable()) { + for (int i = 0; i < STACKS_PER_COMPARTMENT; i++) { + if (!getStackInSlot(compartment * STACKS_PER_COMPARTMENT + i).isEmpty()) + continue; + for (int j = i + 1; j < STACKS_PER_COMPARTMENT; j++) { + ItemStack stackInSlot = getStackInSlot(compartment * STACKS_PER_COMPARTMENT + j); + if (stackInSlot.isEmpty()) + continue; + setStackInSlot(compartment * STACKS_PER_COMPARTMENT + i, stackInSlot); + setStackInSlot(compartment * STACKS_PER_COMPARTMENT + j, ItemStack.EMPTY); + break; + } + } + } else { + for (int i = 0; i < STACKS_PER_COMPARTMENT; i++) { + ItemStack copy = totalCount <= 0 ? ItemStack.EMPTY + : ItemHandlerHelper.copyStackWithSize(sample, Math.min(totalCount, sample.getMaxStackSize())); + setStackInSlot(compartment * STACKS_PER_COMPARTMENT + i, copy); + totalCount -= copy.getCount(); + } + } + settling = false; + te.sendData(); + } + + @Override + public boolean isItemValid(int slot, ItemStack stack) { + if (AllItemTags.TOOLBOXES.matches(stack)) + return false; + if (slot < 0 || slot >= getSlots()) + return false; + int compartment = slot / STACKS_PER_COMPARTMENT; + ItemStack filter = filters.get(compartment); + if (limitedMode && filter.isEmpty()) + return false; + if (filter.isEmpty() || ToolboxInventory.canItemsShareCompartment(filter, stack)) + return super.isItemValid(slot, stack); + return false; + } + + @Override + public void setStackInSlot(int slot, ItemStack stack) { + super.setStackInSlot(slot, stack); + int compartment = slot / STACKS_PER_COMPARTMENT; + if (!stack.isEmpty() && filters.get(compartment) + .isEmpty()) { + filters.set(compartment, ItemHandlerHelper.copyStackWithSize(stack, 1)); + te.sendData(); + } + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + ItemStack insertItem = super.insertItem(slot, stack, simulate); + if (insertItem.getCount() != stack.getCount()) { + int compartment = slot / STACKS_PER_COMPARTMENT; + if (!stack.isEmpty() && filters.get(compartment) + .isEmpty()) { + filters.set(compartment, ItemHandlerHelper.copyStackWithSize(stack, 1)); + te.sendData(); + } + } + return insertItem; + } + + @Override + public CompoundNBT serializeNBT() { + CompoundNBT compound = super.serializeNBT(); + compound.put("Compartments", NBTHelper.writeItemList(filters)); + return compound; + } + + @Override + protected void onContentsChanged(int slot) { + if (!settling && !te.getWorld().isClientSide) + settle(slot / STACKS_PER_COMPARTMENT); + super.onContentsChanged(slot); + } + + @Override + public void deserializeNBT(CompoundNBT nbt) { + filters = NBTHelper.readItemList(nbt.getList("Compartments", NBT.TAG_COMPOUND)); + if (filters.size() != 8) { + filters.clear(); + for (int i = 0; i < 8; i++) + filters.add(ItemStack.EMPTY); + } + super.deserializeNBT(nbt); + } + + public ItemStack distributeToCompartment(@Nonnull ItemStack stack, int compartment, boolean simulate) { + if (stack.isEmpty()) + return stack; + if (filters.get(compartment) + .isEmpty()) + return stack; + + for (int i = STACKS_PER_COMPARTMENT - 1; i >= 0; i--) { + int slot = compartment * STACKS_PER_COMPARTMENT + i; + stack = insertItem(slot, stack, simulate); + if (stack.isEmpty()) + return ItemStack.EMPTY; + } + + return stack; + } + + public ItemStack takeFromCompartment(int amount, int compartment, boolean simulate) { + if (amount == 0) + return ItemStack.EMPTY; + + int remaining = amount; + ItemStack lastValid = ItemStack.EMPTY; + + for (int i = STACKS_PER_COMPARTMENT - 1; i >= 0; i--) { + int slot = compartment * STACKS_PER_COMPARTMENT + i; + ItemStack extracted = extractItem(slot, remaining, simulate); + remaining -= extracted.getCount(); + if (!extracted.isEmpty()) + lastValid = extracted; + if (remaining == 0) + return ItemHandlerHelper.copyStackWithSize(lastValid, amount); + } + + if (remaining == amount) + return ItemStack.EMPTY; + + return ItemHandlerHelper.copyStackWithSize(lastValid, amount - remaining); + } + + public static ItemStack cleanItemNBT(ItemStack stack) { + if (AllItems.BELT_CONNECTOR.isIn(stack)) + stack.removeTagKey("FirstPulley"); + return stack; + } + + public static boolean canItemsShareCompartment(ItemStack stack1, ItemStack stack2) { + if (!stack1.isStackable() && !stack2.isStackable() && stack1.isDamageableItem() && stack2.isDamageableItem()) + return stack1.getItem() == stack2.getItem(); + if (AllItems.BELT_CONNECTOR.isIn(stack1) && AllItems.BELT_CONNECTOR.isIn(stack2)) + return true; + return ItemHandlerHelper.canItemStacksStack(stack1, stack2); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxRenderer.java new file mode 100644 index 000000000..948470de1 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxRenderer.java @@ -0,0 +1,60 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.foundation.render.PartialBufferer; +import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; +import com.simibubi.create.foundation.utility.Iterate; + +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; + +public class ToolboxRenderer extends SmartTileEntityRenderer { + + public ToolboxRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + @Override + protected void renderSafe(ToolboxTileEntity tileEntityIn, float partialTicks, MatrixStack ms, + IRenderTypeBuffer buffer, int light, int overlay) { + + BlockState blockState = tileEntityIn.getBlockState(); + Direction facing = blockState.getValue(ToolboxBlock.FACING) + .getOpposite(); + SuperByteBuffer lid = + PartialBufferer.get(AllBlockPartials.TOOLBOX_LIDS.get(tileEntityIn.getColor()), blockState); + SuperByteBuffer drawer = PartialBufferer.get(AllBlockPartials.TOOLBOX_DRAWER, blockState); + + float lidAngle = tileEntityIn.lid.getValue(partialTicks); + float drawerOffset = tileEntityIn.drawers.getValue(partialTicks); + + IVertexBuilder layer = buffer.getBuffer(RenderType.solid()); + lid.matrixStacker() + .centre() + .rotateY(-facing.toYRot()) + .unCentre() + .translate(0, 6 / 16f, 12 / 16f) + .rotateX(135 * lidAngle) + .translate(0, -6 / 16f, -12 / 16f); + lid.light(light) + .renderInto(ms, layer); + + for (int offset : Iterate.zeroAndOne) { + drawer.matrixStacker() + .centre() + .rotateY(-facing.toYRot()) + .unCentre(); + drawer.translate(0, offset * 1 / 8f, -drawerOffset * .175f * (2 - offset)) + .light(light) + .renderInto(ms, layer); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxScreen.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxScreen.java new file mode 100644 index 000000000..f2e3ab3ea --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxScreen.java @@ -0,0 +1,177 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import java.util.Collections; +import java.util.List; + +import com.google.common.collect.ImmutableList; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.gui.AbstractSimiContainerScreen; +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; +import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.Lang; + +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Slot; +import net.minecraft.item.DyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; + +public class ToolboxScreen extends AbstractSimiContainerScreen { + + AllGuiTextures BG = AllGuiTextures.TOOLBOX; + AllGuiTextures PLAYER = AllGuiTextures.PLAYER_INVENTORY; + protected Slot hoveredToolboxSlot; + private IconButton confirmButton; + private IconButton disposeButton; + private DyeColor color; + + private List extraAreas = Collections.emptyList(); + + public ToolboxScreen(ToolboxContainer container, PlayerInventory inv, ITextComponent title) { + super(container, inv, title); + init(); + } + + @Override + protected void init() { + super.init(); + widgets.clear(); + setWindowSize(BG.width, 256); + confirmButton = new IconButton(getGuiLeft() + BG.width - 23, getGuiTop() + BG.height - 24, AllIcons.I_CONFIRM); + disposeButton = new IconButton(getGuiLeft() + 91, getGuiTop() + 69, AllIcons.I_TOOLBOX); + disposeButton.setToolTip(Lang.translate("toolbox.depositBox")); + widgets.add(confirmButton); + widgets.add(disposeButton); + color = menu.contentHolder.getColor(); + + extraAreas = ImmutableList.of(new Rectangle2d(118, 155, 80, 100), new Rectangle2d(308, 125, 100, 70)); + } + + @Override + public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + menu.renderPass = true; + super.render(matrixStack, mouseX, mouseY, partialTicks); + menu.renderPass = false; + } + + @Override + public void setBlitOffset(int p_230926_1_) { + super.setBlitOffset(p_230926_1_); + } + + @Override + protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + BG.draw(ms, this, leftPos + 10, topPos); + PLAYER.draw(ms, this, leftPos + (BG.width - PLAYER.width) / 2 - 26, topPos + imageHeight - PLAYER.height); + font.draw(ms, title, leftPos + 24, topPos + 4, 0x442000); + font.draw(ms, inventory.getDisplayName(), leftPos - 13, topPos + 154, 0x404040); + + renderToolbox(ms, mouseX, mouseY, partialTicks); + + hoveredToolboxSlot = null; + for (int compartment = 0; compartment < 8; compartment++) { + int baseIndex = compartment * ToolboxInventory.STACKS_PER_COMPARTMENT; + Slot slot = menu.slots.get(baseIndex); + ItemStack itemstack = slot.getItem(); + int i = slot.x + leftPos; + int j = slot.y + topPos; + + if (itemstack.isEmpty()) + itemstack = menu.getFilter(compartment); + + if (!itemstack.isEmpty()) { + int count = menu.totalCountInCompartment(compartment); + String s = count + ""; + setBlitOffset(100); + itemRenderer.blitOffset = 100.0F; + RenderSystem.enableDepthTest(); + itemRenderer.renderAndDecorateItem(minecraft.player, itemstack, i, j); + itemRenderer.renderGuiItemDecorations(font, itemstack, i, j, s); + setBlitOffset(0); + itemRenderer.blitOffset = 0.0F; + } + + if (isHovering(slot.x, slot.y, 16, 16, mouseX, mouseY)) { + hoveredToolboxSlot = slot; + RenderSystem.disableDepthTest(); + RenderSystem.colorMask(true, true, true, false); + int slotColor = this.getSlotColor(baseIndex); + fillGradient(ms, i, j, i + 16, j + 16, slotColor, slotColor); + RenderSystem.colorMask(true, true, true, true); + RenderSystem.enableDepthTest(); + } + } + } + + private void renderToolbox(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + ms.pushPose(); + ms.translate(397, 190, 100); + MatrixTransformStack.of(ms) + .scale(50) + .rotateX(-22) + .rotateY(-202); + + GuiGameElement.of(AllBlocks.TOOLBOXES.get(color) + .getDefaultState()) + .render(ms); + + ms.pushPose(); + MatrixTransformStack.of(ms) + .translate(0, -6 / 16f, 12 / 16f) + .rotateX(-105 * menu.contentHolder.lid.getValue(partialTicks)) + .translate(0, 6 / 16f, -12 / 16f); + GuiGameElement.of(AllBlockPartials.TOOLBOX_LIDS.get(color)) + .render(ms); + ms.popPose(); + + for (int offset : Iterate.zeroAndOne) { + ms.pushPose(); + ms.translate(0, -offset * 1 / 8f, + menu.contentHolder.drawers.getValue(partialTicks) * -.175f * (2 - offset)); + GuiGameElement.of(AllBlockPartials.TOOLBOX_DRAWER) + .render(ms); + ms.popPose(); + } + ms.popPose(); + } + + @Override + protected void renderWindowForeground(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + if (hoveredToolboxSlot != null) + hoveredSlot = hoveredToolboxSlot; + super.renderWindowForeground(matrixStack, mouseX, mouseY, partialTicks); + } + + @Override + public boolean mouseClicked(double x, double y, int button) { + boolean mouseClicked = super.mouseClicked(x, y, button); + + if (button == 0) { + if (confirmButton.isHovered()) { + minecraft.player.closeContainer(); + return true; + } + if (disposeButton.isHovered()) { + AllPackets.channel.sendToServer(new ToolboxDisposeAllPacket(menu.contentHolder.getBlockPos())); + return true; + } + } + + return mouseClicked; + } + + @Override + public List getExtraAreas() { + return extraAreas; + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxSlot.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxSlot.java new file mode 100644 index 000000000..b14d0573f --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxSlot.java @@ -0,0 +1,20 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +public class ToolboxSlot extends SlotItemHandler { + + private ToolboxContainer toolboxMenu; + + public ToolboxSlot(ToolboxContainer container, IItemHandler itemHandler, int index, int xPosition, int yPosition) { + super(itemHandler, index, xPosition, yPosition); + this.toolboxMenu = container; + } + + @Override + public boolean isActive() { + return !toolboxMenu.renderPass && super.isActive(); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxTileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxTileEntity.java new file mode 100644 index 000000000..c3a13eb47 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/toolbox/ToolboxTileEntity.java @@ -0,0 +1,389 @@ +package com.simibubi.create.content.curiosities.toolbox; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.WeakHashMap; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.VecHelper; +import com.simibubi.create.foundation.utility.animation.LerpedFloat; +import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.DyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.INameable; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; + +public class ToolboxTileEntity extends SmartTileEntity implements INamedContainerProvider, INameable { + + public LerpedFloat lid = LerpedFloat.linear() + .startWithValue(0); + + public LerpedFloat drawers = LerpedFloat.linear() + .startWithValue(0); + + ToolboxInventory inventory; + LazyOptional inventoryProvider; + LazyOptional colorProvider; + protected int openCount; + + Map> connectedPlayers; + + private ITextComponent customName; + + public ToolboxTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + connectedPlayers = new HashMap<>(); + inventory = new ToolboxInventory(this); + inventoryProvider = LazyOptional.of(() -> inventory); + colorProvider = LazyOptional.of(() -> { + BlockState blockState = getBlockState(); + if (blockState != null && blockState.getBlock() instanceof ToolboxBlock) + return ((ToolboxBlock) blockState.getBlock()).getColor(); + return DyeColor.BROWN; + }); + setLazyTickRate(10); + } + + public DyeColor getColor() { + return colorProvider.orElse(DyeColor.BROWN); + } + + @Override + public void addBehaviours(List behaviours) {} + + @Override + public void initialize() { + super.initialize(); + ToolboxHandler.onLoad(this); + } + + @Override + public void setRemoved() { + super.setRemoved(); + ToolboxHandler.onUnload(this); + } + + @Override + public void tick() { + super.tick(); + + if (level.isClientSide) + tickAudio(); + if (!level.isClientSide) + tickPlayers(); + + lid.chase(openCount > 0 ? 1 : 0, 0.2f, Chaser.LINEAR); + drawers.chase(openCount > 0 ? 1 : 0, 0.2f, Chaser.EXP); + lid.tickChaser(); + drawers.tickChaser(); + } + + private void tickPlayers() { + boolean update = false; + + for (Iterator>> toolboxSlots = connectedPlayers.entrySet() + .iterator(); toolboxSlots.hasNext();) { + + Entry> toolboxSlotEntry = toolboxSlots.next(); + WeakHashMap set = toolboxSlotEntry.getValue(); + int slot = toolboxSlotEntry.getKey(); + + ItemStack referenceItem = inventory.filters.get(slot); + boolean clear = referenceItem.isEmpty(); + + for (Iterator> playerEntries = set.entrySet() + .iterator(); playerEntries.hasNext();) { + Entry playerEntry = playerEntries.next(); + + PlayerEntity player = playerEntry.getKey(); + int hotbarSlot = playerEntry.getValue(); + + if (!clear && !ToolboxHandler.withinRange(player, this)) + continue; + + ItemStack playerStack = player.inventory.getItem(hotbarSlot); + + if (clear || !playerStack.isEmpty() + && !ToolboxInventory.canItemsShareCompartment(playerStack, referenceItem)) { + player.getPersistentData() + .getCompound("CreateToolboxData") + .remove(String.valueOf(hotbarSlot)); + playerEntries.remove(); + if (player instanceof ServerPlayerEntity) + ToolboxHandler.syncData(player); + continue; + } + + int count = playerStack.getCount(); + int targetAmount = (referenceItem.getMaxStackSize() + 1) / 2; + + if (count < targetAmount) { + int amountToReplenish = targetAmount - count; + + if (isOpenInContainer(player)) { + ItemStack extracted = inventory.takeFromCompartment(amountToReplenish, slot, true); + if (!extracted.isEmpty()) { + ToolboxHandler.unequip(player, hotbarSlot, false); + ToolboxHandler.syncData(player); + continue; + } + } + + ItemStack extracted = inventory.takeFromCompartment(amountToReplenish, slot, false); + if (!extracted.isEmpty()) { + update = true; + ItemStack template = playerStack.isEmpty() ? extracted : playerStack; + player.inventory.setItem(hotbarSlot, + ItemHandlerHelper.copyStackWithSize(template, count + extracted.getCount())); + } + } + + if (count > targetAmount) { + int amountToDeposit = count - targetAmount; + ItemStack toDistribute = ItemHandlerHelper.copyStackWithSize(playerStack, amountToDeposit); + + if (isOpenInContainer(player)) { + int deposited = amountToDeposit - inventory.distributeToCompartment(toDistribute, slot, true) + .getCount(); + if (deposited > 0) { + ToolboxHandler.unequip(player, hotbarSlot, true); + ToolboxHandler.syncData(player); + continue; + } + } + + int deposited = amountToDeposit - inventory.distributeToCompartment(toDistribute, slot, false) + .getCount(); + if (deposited > 0) { + update = true; + player.inventory.setItem(hotbarSlot, + ItemHandlerHelper.copyStackWithSize(playerStack, count - deposited)); + } + } + } + + if (clear) + toolboxSlots.remove(); + } + + if (update) + + sendData(); + + } + + private boolean isOpenInContainer(PlayerEntity player) { + return player.containerMenu instanceof ToolboxContainer + && ((ToolboxContainer) player.containerMenu).contentHolder == this; + } + + public void unequipTracked() { + if (level.isClientSide) + return; + + Set affected = new HashSet<>(); + + for (Iterator>> toolboxSlots = connectedPlayers.entrySet() + .iterator(); toolboxSlots.hasNext();) { + + Entry> toolboxSlotEntry = toolboxSlots.next(); + WeakHashMap set = toolboxSlotEntry.getValue(); + + for (Iterator> playerEntries = set.entrySet() + .iterator(); playerEntries.hasNext();) { + Entry playerEntry = playerEntries.next(); + + PlayerEntity player = playerEntry.getKey(); + int hotbarSlot = playerEntry.getValue(); + + ToolboxHandler.unequip(player, hotbarSlot, false); + if (player instanceof ServerPlayerEntity) + affected.add((ServerPlayerEntity) player); + } + } + + for (ServerPlayerEntity player : affected) + ToolboxHandler.syncData(player); + connectedPlayers.clear(); + } + + public void unequip(int slot, PlayerEntity player, int hotbarSlot, boolean keepItems) { + if (!connectedPlayers.containsKey(slot)) + return; + connectedPlayers.get(slot) + .remove(player); + if (keepItems) + return; + + ItemStack playerStack = player.inventory.getItem(hotbarSlot); + ItemStack toInsert = ToolboxInventory.cleanItemNBT(playerStack.copy()); + ItemStack remainder = inventory.distributeToCompartment(toInsert, slot, false); + + if (remainder.getCount() != toInsert.getCount()) + player.inventory.setItem(hotbarSlot, remainder); + } + + private void tickAudio() { + Vector3d vec = VecHelper.getCenterOf(worldPosition); + if (lid.settled()) { + if (openCount > 0 && lid.getChaseTarget() == 0) { + level.playLocalSound(vec.x, vec.y, vec.z, SoundEvents.IRON_DOOR_OPEN, SoundCategory.BLOCKS, 0.25F, + level.random.nextFloat() * 0.1F + 1.2F, true); + level.playLocalSound(vec.x, vec.y, vec.z, SoundEvents.CHEST_OPEN, SoundCategory.BLOCKS, 0.1F, + level.random.nextFloat() * 0.1F + 1.1F, true); + } + if (openCount == 0 && lid.getChaseTarget() == 1) + level.playLocalSound(vec.x, vec.y, vec.z, SoundEvents.CHEST_CLOSE, SoundCategory.BLOCKS, 0.1F, + level.random.nextFloat() * 0.1F + 1.1F, true); + + } else if (openCount == 0 && lid.getChaseTarget() == 0 && lid.getValue(0) > 1 / 16f + && lid.getValue(1) < 1 / 16f) + level.playLocalSound(vec.x, vec.y, vec.z, SoundEvents.IRON_DOOR_CLOSE, SoundCategory.BLOCKS, 0.25F, + level.random.nextFloat() * 0.1F + 1.2F, true); + } + + @Override + public LazyOptional getCapability(Capability cap, Direction side) { + if (isItemHandlerCap(cap)) + return inventoryProvider.cast(); + return super.getCapability(cap, side); + } + + @Override + protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { + inventory.deserializeNBT(compound.getCompound("Inventory")); + super.fromTag(state, compound, clientPacket); + if (compound.contains("CustomName", 8)) + this.customName = ITextComponent.Serializer.fromJson(compound.getString("CustomName")); + if (clientPacket) + openCount = compound.getInt("OpenCount"); + } + + @Override + protected void write(CompoundNBT compound, boolean clientPacket) { + compound.put("Inventory", inventory.serializeNBT()); + if (customName != null) + compound.putString("CustomName", ITextComponent.Serializer.toJson(customName)); + super.write(compound, clientPacket); + if (clientPacket) + compound.putInt("OpenCount", openCount); + } + + @Override + public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) { + return ToolboxContainer.create(id, inv, this); + } + + @Override + public void lazyTick() { + updateOpenCount(); + // keep re-advertising active TEs + ToolboxHandler.onLoad(this); + super.lazyTick(); + } + + void updateOpenCount() { + if (level.isClientSide) + return; + if (openCount == 0) + return; + + int prevOpenCount = openCount; + openCount = 0; + + for (PlayerEntity playerentity : level.getEntitiesOfClass(PlayerEntity.class, + new AxisAlignedBB(worldPosition).inflate(8))) + if (playerentity.containerMenu instanceof ToolboxContainer + && ((ToolboxContainer) playerentity.containerMenu).contentHolder == this) + openCount++; + + if (prevOpenCount != openCount) + sendData(); + } + + public void startOpen(PlayerEntity player) { + if (player.isSpectator()) + return; + if (openCount < 0) + openCount = 0; + openCount++; + sendData(); + } + + public void stopOpen(PlayerEntity player) { + if (player.isSpectator()) + return; + openCount--; + sendData(); + } + + public void connectPlayer(int slot, PlayerEntity player, int hotbarSlot) { + if (level.isClientSide) + return; + WeakHashMap map = connectedPlayers.computeIfAbsent(slot, WeakHashMap::new); + Integer previous = map.get(player); + if (previous != null) { + if (previous == hotbarSlot) + return; + ToolboxHandler.unequip(player, previous, false); + } + map.put(player, hotbarSlot); + } + + public void readInventory(CompoundNBT compound) { + inventory.deserializeNBT(compound); + } + + public void setCustomName(ITextComponent customName) { + this.customName = customName; + } + + @Override + public ITextComponent getDisplayName() { + return customName != null ? customName + : AllBlocks.TOOLBOXES.get(getColor()) + .get() + .getName(); + } + + @Override + public ITextComponent getCustomName() { + return customName; + } + + @Override + public boolean hasCustomName() { + return customName != null; + } + + @Override + public ITextComponent getName() { + return customName; + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintContainer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintContainer.java index bf08dde69..966e65579 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintContainer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintContainer.java @@ -112,7 +112,8 @@ public class BlueprintContainer extends GhostItemContainer { } @Override - protected void readData(BlueprintSection contentHolder) { + protected void initAndReadInventory(BlueprintSection contentHolder) { + super.initAndReadInventory(contentHolder); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java index 7c2078bda..41b2bad89 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java @@ -8,6 +8,7 @@ import com.simibubi.create.foundation.item.render.PartialItemModelRenderer; import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType; import net.minecraft.item.ItemStack; import net.minecraft.util.math.MathHelper; @@ -107,4 +108,9 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer { @Override - public void renderByItem(ItemStack stack, TransformType transformType, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { + protected void render(ItemStack stack, SandPaperModel model, PartialItemModelRenderer renderer, + TransformType transformType, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); ClientPlayerEntity player = Minecraft.getInstance().player; - SandPaperModel mainModel = (SandPaperModel) itemRenderer.getModel(stack, Minecraft.getInstance().level, null); float partialTicks = AnimationTickHolder.getPartialTicks(); boolean leftHand = transformType == TransformType.FIRST_PERSON_LEFT_HAND; boolean firstPerson = leftHand || transformType == TransformType.FIRST_PERSON_RIGHT_HAND; - ms.pushPose(); - ms.translate(.5f, .5f, .5f); - CompoundNBT tag = stack.getOrCreateTag(); boolean jeiMode = tag.contains("JEI"); + ms.pushPose(); + if (tag.contains("Polishing")) { ms.pushPose(); @@ -74,22 +74,22 @@ public class SandPaperItemRenderer extends ItemStackTileEntityRenderer { } } - itemRenderer.render(stack, TransformType.NONE, false, ms, buffer, light, overlay, mainModel.getOriginalModel()); + itemRenderer.render(stack, TransformType.NONE, false, ms, buffer, light, overlay, model.getOriginalModel()); ms.popPose(); } + @Override + public SandPaperModel createModel(IBakedModel originalModel) { + return new SandPaperModel(originalModel); + } + public static class SandPaperModel extends CreateCustomRenderedItemModel { public SandPaperModel(IBakedModel template) { super(template, ""); } - @Override - public ItemStackTileEntityRenderer createRenderer() { - return new SandPaperItemRenderer(); - } - } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/BuiltinPotatoProjectileTypes.java similarity index 71% rename from src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java rename to src/main/java/com/simibubi/create/content/curiosities/weapons/BuiltinPotatoProjectileTypes.java index cb1159fbe..c3856616c 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/BuiltinPotatoProjectileTypes.java @@ -1,8 +1,5 @@ package com.simibubi.create.content.curiosities.weapons; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; import java.util.UUID; import java.util.function.BiPredicate; import java.util.function.Predicate; @@ -23,7 +20,6 @@ import net.minecraft.entity.monster.ZombieVillagerEntity; import net.minecraft.entity.passive.FoxEntity; import net.minecraft.item.Food; import net.minecraft.item.Foods; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.potion.Effect; @@ -31,8 +27,6 @@ import net.minecraft.potion.EffectInstance; import net.minecraft.potion.Effects; import net.minecraft.util.Direction; import net.minecraft.util.Hand; -import net.minecraft.util.IItemProvider; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvents; @@ -50,16 +44,14 @@ import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.event.entity.living.EntityTeleportEvent; import net.minecraftforge.registries.IRegistryDelegate; -public class PotatoCannonProjectileTypes { +public class BuiltinPotatoProjectileTypes { private static final GameProfile ZOMBIE_CONVERTER_NAME = new GameProfile(UUID.fromString("be12d3dc-27d3-4992-8c97-66be53fd49c5"), "Converter"); private static final WorldAttached ZOMBIE_CONVERTERS = new WorldAttached<>(w -> new FakePlayer((ServerWorld) w, ZOMBIE_CONVERTER_NAME)); - public static final Map ALL = new HashMap<>(); - public static final Map, PotatoCannonProjectileTypes> ITEM_MAP = new HashMap<>(); - public static final PotatoCannonProjectileTypes + public static final PotatoCannonProjectileType FALLBACK = create("fallback").damage(0) .register(), @@ -250,94 +242,11 @@ public class PotatoCannonProjectileTypes { .preEntityHit(setFire(12)) .soundPitch(1.0f) .registerAndAssign(AllItems.BLAZE_CAKE.get()) + ; - public static void registerType(ResourceLocation resLoc, PotatoCannonProjectileTypes type) { - synchronized (ALL) { - ALL.put(resLoc, type); - } - } - - public static void assignType(IRegistryDelegate item, PotatoCannonProjectileTypes type) { - synchronized (ITEM_MAP) { - ITEM_MAP.put(item, type); - } - } - - public static Optional getProjectileTypeOf(ItemStack item) { - if (item.isEmpty()) - return Optional.empty(); - return Optional.ofNullable(ITEM_MAP.get(item.getItem().delegate)); - } - - public static void register() {} - - private static PotatoCannonProjectileTypes.Builder create(String name) { - return new PotatoCannonProjectileTypes.Builder(Create.asResource(name)); - } - - private float gravityMultiplier = 1; - private float velocityMultiplier = 1; - private float drag = 0.99f; - private float knockback = 1; - private int reloadTicks = 10; - private int damage = 1; - private int split = 1; - private float fwoompPitch = 1; - private boolean sticky = false; - private PotatoProjectileRenderMode renderMode = new PotatoProjectileRenderMode.Billboard(); - private Predicate preEntityHit = e -> false; // True if hit should be canceled - private Predicate onEntityHit = e -> false; // True if shouldn't recover projectile - private BiPredicate onBlockHit = (w, ray) -> false; - - public float getGravityMultiplier() { - return gravityMultiplier; - } - - public float getDrag() { - return drag; - } - - public int getSplit() { - return split; - } - - public float getVelocityMultiplier() { - return velocityMultiplier; - } - - public float getKnockback() { - return knockback; - } - - public int getReloadTicks() { - return reloadTicks; - } - - public float getSoundPitch() { - return fwoompPitch; - } - - public PotatoProjectileRenderMode getRenderMode() { - return renderMode; - } - - public int getDamage() { - return damage; - } - - public boolean isSticky() { return sticky; } - - public boolean preEntityHit(EntityRayTraceResult ray) { - return preEntityHit.test(ray); - } - - public boolean onEntityHit(EntityRayTraceResult ray) { - return onEntityHit.test(ray); - } - - public boolean onBlockHit(IWorld world, BlockRayTraceResult ray) { - return onBlockHit.test(world, ray); + private static PotatoCannonProjectileType.Builder create(String name) { + return new PotatoCannonProjectileType.Builder(Create.asResource(name)); } private static Predicate setFire(int seconds) { @@ -477,103 +386,6 @@ public class PotatoCannonProjectileTypes { }; } - public static class Builder { - - protected ResourceLocation loc; - protected PotatoCannonProjectileTypes result; - - public Builder(ResourceLocation loc) { - this.result = new PotatoCannonProjectileTypes(); - this.loc = loc; - } - - public Builder damage(int damage) { - result.damage = damage; - return this; - } - - public Builder gravity(float modifier) { - result.gravityMultiplier = modifier; - return this; - } - - public Builder knockback(float knockback) { - result.knockback = knockback; - return this; - } - - public Builder drag(float drag) { - result.drag = drag; - return this; - } - - public Builder reloadTicks(int reload) { - result.reloadTicks = reload; - return this; - } - - public Builder splitInto(int split) { - result.split = split; - return this; - } - - public Builder soundPitch(float pitch) { - result.fwoompPitch = pitch; - return this; - } - - public Builder velocity(float velocity) { - result.velocityMultiplier = velocity; - return this; - } - - public Builder renderTumbling() { - result.renderMode = new PotatoProjectileRenderMode.Tumble(); - return this; - } - - public Builder renderBillboard() { - result.renderMode = new PotatoProjectileRenderMode.Billboard(); - return this; - } - - public Builder renderTowardMotion(int spriteAngle, float spin) { - result.renderMode = new PotatoProjectileRenderMode.TowardMotion(spriteAngle, spin); - return this; - } - - public Builder sticky() { - result.sticky = true; - return this; - } - - public Builder preEntityHit(Predicate callback) { - result.preEntityHit = callback; - return this; - } - - public Builder onEntityHit(Predicate callback) { - result.onEntityHit = callback; - return this; - } - - public Builder onBlockHit(BiPredicate callback) { - result.onBlockHit = callback; - return this; - } - - public PotatoCannonProjectileTypes register() { - registerType(loc, result); - return result; - } - - public PotatoCannonProjectileTypes registerAndAssign(IItemProvider... items) { - registerType(loc, result); - for (IItemProvider provider : items) - assignType(provider.asItem().delegate, result); - return result; - } - - } + public static void register() {} } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index 7c7db65a1..46fb0767d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -49,13 +49,12 @@ public class PotatoCannonItem extends ShootableItem { public static ItemStack CLIENT_CURRENT_AMMO = ItemStack.EMPTY; public static final int MAX_DAMAGE = 100; - public PotatoCannonItem(Properties p_i48487_1_) { - super(p_i48487_1_); + public PotatoCannonItem(Properties properties) { + super(properties); } @Override - public boolean canAttackBlock(BlockState p_195938_1_, World p_195938_2_, BlockPos p_195938_3_, - PlayerEntity p_195938_4_) { + public boolean canAttackBlock(BlockState state, World world, BlockPos pos, PlayerEntity player) { return false; } @@ -137,8 +136,8 @@ public class PotatoCannonItem extends ShootableItem { .subtract(player.position() .add(0, player.getEyeHeight(), 0)); - PotatoCannonProjectileTypes projectileType = PotatoCannonProjectileTypes.getProjectileTypeOf(itemStack) - .orElse(PotatoCannonProjectileTypes.FALLBACK); + PotatoCannonProjectileType projectileType = PotatoProjectileTypeManager.getTypeForStack(itemStack) + .orElse(BuiltinPotatoProjectileTypes.FALLBACK); Vector3d lookVec = player.getLookAngle(); Vector3d motion = lookVec.add(correction) .normalize() @@ -181,8 +180,8 @@ public class PotatoCannonItem extends ShootableItem { stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(hand)); Integer cooldown = - findAmmoInInventory(world, player, stack).flatMap(PotatoCannonProjectileTypes::getProjectileTypeOf) - .map(PotatoCannonProjectileTypes::getReloadTicks) + findAmmoInInventory(world, player, stack).flatMap(PotatoProjectileTypeManager::getTypeForStack) + .map(PotatoCannonProjectileType::getReloadTicks) .orElse(10); ShootableGadgetItemMethods.applyCooldown(player, stack, hand, this::isCannon, cooldown); @@ -200,7 +199,7 @@ public class PotatoCannonItem extends ShootableItem { private Optional findAmmoInInventory(World world, PlayerEntity player, ItemStack held) { ItemStack findAmmo = player.getProjectile(held); - return PotatoCannonProjectileTypes.getProjectileTypeOf(findAmmo) + return PotatoProjectileTypeManager.getTypeForStack(findAmmo) .map($ -> findAmmo); } @@ -215,7 +214,7 @@ public class PotatoCannonItem extends ShootableItem { if (player == null) return Optional.empty(); ItemStack findAmmo = player.getProjectile(cannon); - Optional found = PotatoCannonProjectileTypes.getProjectileTypeOf(findAmmo) + Optional found = PotatoProjectileTypeManager.getTypeForStack(findAmmo) .map($ -> findAmmo); found.ifPresent(stack -> CLIENT_CURRENT_AMMO = stack); return found; @@ -237,7 +236,7 @@ public class PotatoCannonItem extends ShootableItem { tooltip.add(new StringTextComponent("")); tooltip.add(new TranslationTextComponent(ammo.getDescriptionId()).append(new StringTextComponent(":")) .withStyle(TextFormatting.GRAY)); - PotatoCannonProjectileTypes type = PotatoCannonProjectileTypes.getProjectileTypeOf(ammo) + PotatoCannonProjectileType type = PotatoProjectileTypeManager.getTypeForStack(ammo) .get(); StringTextComponent spacing = new StringTextComponent(" "); TextFormatting green = TextFormatting.GREEN; @@ -269,7 +268,7 @@ public class PotatoCannonItem extends ShootableItem { @Override public Predicate getAllSupportedProjectiles() { - return stack -> PotatoCannonProjectileTypes.getProjectileTypeOf(stack) + return stack -> PotatoProjectileTypeManager.getTypeForStack(stack) .isPresent(); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItemRenderer.java index 25911adbc..b4280d984 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItemRenderer.java @@ -11,6 +11,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.item.ItemStack; @@ -62,4 +63,9 @@ public class PotatoCannonItemRenderer extends CustomRenderedItemModelRenderer> items = new HashSet<>(); + + private int reloadTicks = 10; + private int damage = 1; + private int split = 1; + private float knockback = 1; + private float drag = 0.99f; + private float velocityMultiplier = 1; + private float gravityMultiplier = 1; + private float soundPitch = 1; + private boolean sticky = false; + private PotatoProjectileRenderMode renderMode = PotatoProjectileRenderMode.Billboard.INSTANCE; + + private Predicate preEntityHit = e -> false; // True if hit should be canceled + private Predicate onEntityHit = e -> false; // True if shouldn't recover projectile + private BiPredicate onBlockHit = (w, ray) -> false; + + protected PotatoCannonProjectileType() { + } + + public Set> getItems() { + return items; + } + + public int getReloadTicks() { + return reloadTicks; + } + + public int getDamage() { + return damage; + } + + public int getSplit() { + return split; + } + + public float getKnockback() { + return knockback; + } + + public float getDrag() { + return drag; + } + + public float getVelocityMultiplier() { + return velocityMultiplier; + } + + public float getGravityMultiplier() { + return gravityMultiplier; + } + + public float getSoundPitch() { + return soundPitch; + } + + public boolean isSticky() { + return sticky; + } + + public PotatoProjectileRenderMode getRenderMode() { + return renderMode; + } + + public boolean preEntityHit(EntityRayTraceResult ray) { + return preEntityHit.test(ray); + } + + public boolean onEntityHit(EntityRayTraceResult ray) { + return onEntityHit.test(ray); + } + + public boolean onBlockHit(IWorld world, BlockRayTraceResult ray) { + return onBlockHit.test(world, ray); + } + + public static PotatoCannonProjectileType fromJson(JsonObject object) { + PotatoCannonProjectileType type = new PotatoCannonProjectileType(); + try { + JsonElement itemsElement = object.get("items"); + if (itemsElement != null && itemsElement.isJsonArray()) { + for (JsonElement element : itemsElement.getAsJsonArray()) { + if (element.isJsonPrimitive()) { + JsonPrimitive primitive = element.getAsJsonPrimitive(); + if (primitive.isString()) { + try { + Item item = ForgeRegistries.ITEMS.getValue(new ResourceLocation(primitive.getAsString())); + if (item != null) { + type.items.add(item.delegate); + } + } catch (ResourceLocationException e) { + // + } + } + } + } + } + + parseJsonPrimitive(object, "reload_ticks", JsonPrimitive::isNumber, primitive -> type.reloadTicks = primitive.getAsInt()); + parseJsonPrimitive(object, "damage", JsonPrimitive::isNumber, primitive -> type.damage = primitive.getAsInt()); + parseJsonPrimitive(object, "split", JsonPrimitive::isNumber, primitive -> type.split = primitive.getAsInt()); + parseJsonPrimitive(object, "knockback", JsonPrimitive::isNumber, primitive -> type.knockback = primitive.getAsFloat()); + parseJsonPrimitive(object, "drag", JsonPrimitive::isNumber, primitive -> type.drag = primitive.getAsFloat()); + parseJsonPrimitive(object, "velocity_multiplier", JsonPrimitive::isNumber, primitive -> type.velocityMultiplier = primitive.getAsFloat()); + parseJsonPrimitive(object, "gravity_multiplier", JsonPrimitive::isNumber, primitive -> type.gravityMultiplier = primitive.getAsFloat()); + parseJsonPrimitive(object, "sound_pitch", JsonPrimitive::isNumber, primitive -> type.soundPitch = primitive.getAsFloat()); + parseJsonPrimitive(object, "sticky", JsonPrimitive::isBoolean, primitive -> type.sticky = primitive.getAsBoolean()); + } catch (Exception e) { + // + } + return type; + } + + private static void parseJsonPrimitive(JsonObject object, String key, Predicate predicate, Consumer consumer) { + JsonElement element = object.get(key); + if (element != null && element.isJsonPrimitive()) { + JsonPrimitive primitive = element.getAsJsonPrimitive(); + if (predicate.test(primitive)) { + consumer.accept(primitive); + } + } + } + + public static void toBuffer(PotatoCannonProjectileType type, PacketBuffer buffer) { + buffer.writeVarInt(type.items.size()); + for (IRegistryDelegate delegate : type.items) { + buffer.writeResourceLocation(delegate.name()); + } + buffer.writeInt(type.reloadTicks); + buffer.writeInt(type.damage); + buffer.writeInt(type.split); + buffer.writeFloat(type.knockback); + buffer.writeFloat(type.drag); + buffer.writeFloat(type.velocityMultiplier); + buffer.writeFloat(type.gravityMultiplier); + buffer.writeFloat(type.soundPitch); + buffer.writeBoolean(type.sticky); + } + + public static PotatoCannonProjectileType fromBuffer(PacketBuffer buffer) { + PotatoCannonProjectileType type = new PotatoCannonProjectileType(); + int size = buffer.readVarInt(); + for (int i = 0; i < size; i++) { + Item item = ForgeRegistries.ITEMS.getValue(buffer.readResourceLocation()); + if (item != null) { + type.items.add(item.delegate); + } + } + type.reloadTicks = buffer.readInt(); + type.damage = buffer.readInt(); + type.split = buffer.readInt(); + type.knockback = buffer.readFloat(); + type.drag = buffer.readFloat(); + type.velocityMultiplier = buffer.readFloat(); + type.gravityMultiplier = buffer.readFloat(); + type.soundPitch = buffer.readFloat(); + type.sticky = buffer.readBoolean(); + return type; + } + + public static class Builder { + + protected ResourceLocation id; + protected PotatoCannonProjectileType result; + + public Builder(ResourceLocation id) { + this.id = id; + this.result = new PotatoCannonProjectileType(); + } + + public Builder reloadTicks(int reload) { + result.reloadTicks = reload; + return this; + } + + public Builder damage(int damage) { + result.damage = damage; + return this; + } + + public Builder splitInto(int split) { + result.split = split; + return this; + } + + public Builder knockback(float knockback) { + result.knockback = knockback; + return this; + } + + public Builder drag(float drag) { + result.drag = drag; + return this; + } + + public Builder velocity(float velocity) { + result.velocityMultiplier = velocity; + return this; + } + + public Builder gravity(float modifier) { + result.gravityMultiplier = modifier; + return this; + } + + public Builder soundPitch(float pitch) { + result.soundPitch = pitch; + return this; + } + + public Builder sticky() { + result.sticky = true; + return this; + } + + public Builder renderMode(PotatoProjectileRenderMode renderMode) { + result.renderMode = renderMode; + return this; + } + + public Builder renderBillboard() { + renderMode(PotatoProjectileRenderMode.Billboard.INSTANCE); + return this; + } + + public Builder renderTumbling() { + renderMode(PotatoProjectileRenderMode.Tumble.INSTANCE); + return this; + } + + public Builder renderTowardMotion(int spriteAngle, float spin) { + renderMode(new PotatoProjectileRenderMode.TowardMotion(spriteAngle, spin)); + return this; + } + + public Builder preEntityHit(Predicate callback) { + result.preEntityHit = callback; + return this; + } + + public Builder onEntityHit(Predicate callback) { + result.onEntityHit = callback; + return this; + } + + public Builder onBlockHit(BiPredicate callback) { + result.onBlockHit = callback; + return this; + } + + public Builder addItems(IItemProvider... items) { + for (IItemProvider provider : items) + result.items.add(provider.asItem().delegate); + return this; + } + + public PotatoCannonProjectileType register() { + PotatoProjectileTypeManager.registerBuiltinType(id, result); + return result; + } + + public PotatoCannonProjectileType registerAndAssign(IItemProvider... items) { + addItems(items); + register(); + return result; + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java index 0cd481f15..73c5d924d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java @@ -39,17 +39,17 @@ import net.minecraftforge.items.ItemHandlerHelper; public class PotatoProjectileEntity extends DamagingProjectileEntity implements IEntityAdditionalSpawnData { - PotatoCannonProjectileTypes type; - ItemStack stack = ItemStack.EMPTY; + protected PotatoCannonProjectileType type; + protected ItemStack stack = ItemStack.EMPTY; - Entity stuckEntity; - Vector3d stuckOffset; - PotatoProjectileRenderMode stuckRenderer; - double stuckFallSpeed; + protected Entity stuckEntity; + protected Vector3d stuckOffset; + protected PotatoProjectileRenderMode stuckRenderer; + protected double stuckFallSpeed; - float additionalDamageMult = 1; - float additionalKnockback = 0; - float recoveryChance = 0; + protected float additionalDamageMult = 1; + protected float additionalKnockback = 0; + protected float recoveryChance = 0; public PotatoProjectileEntity(EntityType type, World world) { super(type, world); @@ -63,10 +63,10 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements this.stack = stack; } - public PotatoCannonProjectileTypes getProjectileType() { + public PotatoCannonProjectileType getProjectileType() { if (type == null) - type = PotatoCannonProjectileTypes.getProjectileTypeOf(stack) - .orElse(PotatoCannonProjectileTypes.FALLBACK); + type = PotatoProjectileTypeManager.getTypeForStack(stack) + .orElse(BuiltinPotatoProjectileTypes.FALLBACK); return type; } @@ -128,7 +128,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements } public void tick() { - PotatoCannonProjectileTypes projectileType = getProjectileType(); + PotatoCannonProjectileType projectileType = getProjectileType(); Entity stuckEntity = getStuckEntity(); if (stuckEntity != null) { @@ -174,7 +174,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements Vector3d hit = ray.getLocation(); Entity target = ray.getEntity(); - PotatoCannonProjectileTypes projectileType = getProjectileType(); + PotatoCannonProjectileType projectileType = getProjectileType(); float damage = projectileType.getDamage() * additionalDamageMult; float knockback = projectileType.getKnockback() + additionalKnockback; Entity owner = this.getOwner(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java index 14908086d..aa8111556 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java @@ -20,6 +20,8 @@ public interface PotatoProjectileRenderMode { public static class Billboard implements PotatoProjectileRenderMode { + public static final Billboard INSTANCE = new Billboard(); + @Override @OnlyIn(Dist.CLIENT) public void transform(MatrixStack ms, PotatoProjectileEntity entity, float pt) { @@ -35,10 +37,13 @@ public interface PotatoProjectileRenderMode { .rotateX(180 + AngleHelper.deg(MathHelper.atan2(diff.y, -MathHelper.sqrt(diff.x * diff.x + diff.z * diff.z)))); } + } public static class Tumble extends Billboard { + public static final Tumble INSTANCE = new Tumble(); + @Override @OnlyIn(Dist.CLIENT) public void transform(MatrixStack ms, PotatoProjectileEntity entity, float pt) { @@ -47,6 +52,7 @@ public interface PotatoProjectileRenderMode { .rotateZ((entity.tickCount + pt) * 2 * entityRandom(entity, 16)) .rotateX((entity.tickCount + pt) * entityRandom(entity, 32)); } + } public static class TowardMotion implements PotatoProjectileRenderMode { diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileTypeManager.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileTypeManager.java new file mode 100644 index 000000000..86539ef5e --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileTypeManager.java @@ -0,0 +1,160 @@ +package com.simibubi.create.content.curiosities.weapons; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.simibubi.create.AllItems; +import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.client.resources.JsonReloadListener; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.profiler.IProfiler; +import net.minecraft.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import net.minecraftforge.fml.network.PacketDistributor; +import net.minecraftforge.registries.IRegistryDelegate; + +public class PotatoProjectileTypeManager { + + private static final Map BUILTIN_TYPE_MAP = new HashMap<>(); + private static final Map CUSTOM_TYPE_MAP = new HashMap<>(); + private static final Map, PotatoCannonProjectileType> ITEM_TO_TYPE_MAP = new HashMap<>(); + + public static void registerBuiltinType(ResourceLocation id, PotatoCannonProjectileType type) { + synchronized (BUILTIN_TYPE_MAP) { + BUILTIN_TYPE_MAP.put(id, type); + } + } + + public static PotatoCannonProjectileType getBuiltinType(ResourceLocation id) { + return BUILTIN_TYPE_MAP.get(id); + } + + public static PotatoCannonProjectileType getCustomType(ResourceLocation id) { + return CUSTOM_TYPE_MAP.get(id); + } + + public static PotatoCannonProjectileType getTypeForItem(IRegistryDelegate item) { + return ITEM_TO_TYPE_MAP.get(item); + } + + public static Optional getTypeForStack(ItemStack item) { + if (item.isEmpty()) + return Optional.empty(); + return Optional.ofNullable(getTypeForItem(item.getItem().delegate)); + } + + public static void clear() { + CUSTOM_TYPE_MAP.clear(); + ITEM_TO_TYPE_MAP.clear(); + } + + public static void fillItemMap() { + for (Map.Entry entry : BUILTIN_TYPE_MAP.entrySet()) { + PotatoCannonProjectileType type = entry.getValue(); + for (IRegistryDelegate delegate : type.getItems()) { + ITEM_TO_TYPE_MAP.put(delegate, type); + } + } + for (Map.Entry entry : CUSTOM_TYPE_MAP.entrySet()) { + PotatoCannonProjectileType type = entry.getValue(); + for (IRegistryDelegate delegate : type.getItems()) { + ITEM_TO_TYPE_MAP.put(delegate, type); + } + } + ITEM_TO_TYPE_MAP.remove(AllItems.POTATO_CANNON.get().delegate); + } + + public static void toBuffer(PacketBuffer buffer) { + buffer.writeVarInt(CUSTOM_TYPE_MAP.size()); + for (Map.Entry entry : CUSTOM_TYPE_MAP.entrySet()) { + buffer.writeResourceLocation(entry.getKey()); + PotatoCannonProjectileType.toBuffer(entry.getValue(), buffer); + } + } + + public static void fromBuffer(PacketBuffer buffer) { + clear(); + + int size = buffer.readVarInt(); + for (int i = 0; i < size; i++) { + CUSTOM_TYPE_MAP.put(buffer.readResourceLocation(), PotatoCannonProjectileType.fromBuffer(buffer)); + } + + fillItemMap(); + } + + public static void syncTo(ServerPlayerEntity player) { + AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> player), new SyncPacket()); + } + + public static void syncToAll() { + AllPackets.channel.send(PacketDistributor.ALL.noArg(), new SyncPacket()); + } + + public static class ReloadListener extends JsonReloadListener { + + private static final Gson GSON = new Gson(); + + public static final ReloadListener INSTANCE = new ReloadListener(); + + protected ReloadListener() { + super(GSON, "potato_cannon_projectile_types"); + } + + @Override + protected void apply(Map map, IResourceManager resourceManager, IProfiler profiler) { + clear(); + + for (Map.Entry entry : map.entrySet()) { + JsonElement element = entry.getValue(); + if (element.isJsonObject()) { + ResourceLocation id = entry.getKey(); + JsonObject object = element.getAsJsonObject(); + PotatoCannonProjectileType type = PotatoCannonProjectileType.fromJson(object); + CUSTOM_TYPE_MAP.put(id, type); + } + } + + fillItemMap(); + } + + } + + public static class SyncPacket extends SimplePacketBase { + + private PacketBuffer buffer; + + public SyncPacket() { + } + + public SyncPacket(PacketBuffer buffer) { + this.buffer = buffer; + } + + @Override + public void write(PacketBuffer buffer) { + toBuffer(buffer); + } + + @Override + public void handle(Supplier context) { + context.get().enqueueWork(() -> { + fromBuffer(buffer); + }); + context.get().setPacketHandled(true); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/ProperProjectileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/ProperProjectileEntity.java deleted file mode 100644 index e8271d2f4..000000000 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/ProperProjectileEntity.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.simibubi.create.content.curiosities.weapons; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.network.IPacket; -import net.minecraft.world.World; - -public abstract class ProperProjectileEntity extends Entity { - - public ProperProjectileEntity(EntityType p_i48580_1_, World p_i48580_2_) { - super(p_i48580_1_, p_i48580_2_); - // TODO Auto-generated constructor stub - } - - @Override - protected void defineSynchedData() { - // TODO Auto-generated method stub - - } - - @Override - protected void readAdditionalSaveData(CompoundNBT p_70037_1_) { - // TODO Auto-generated method stub - - } - - @Override - protected void addAdditionalSaveData(CompoundNBT p_213281_1_) { - // TODO Auto-generated method stub - - } - - @Override - public IPacket getAddEntityPacket() { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ConfigureZapperPacket.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ConfigureZapperPacket.java new file mode 100644 index 000000000..ee0026820 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ConfigureZapperPacket.java @@ -0,0 +1,51 @@ +package com.simibubi.create.content.curiosities.zapper; + +import java.util.function.Supplier; + +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.Hand; +import net.minecraftforge.fml.network.NetworkEvent.Context; + +public abstract class ConfigureZapperPacket extends SimplePacketBase { + + protected Hand hand; + protected PlacementPatterns pattern; + + public ConfigureZapperPacket(Hand hand, PlacementPatterns pattern) { + this.hand = hand; + this.pattern = pattern; + } + + public ConfigureZapperPacket(PacketBuffer buffer) { + hand = buffer.readEnum(Hand.class); + pattern = buffer.readEnum(PlacementPatterns.class); + } + + @Override + public void write(PacketBuffer buffer) { + buffer.writeEnum(hand); + buffer.writeEnum(pattern); + } + + @Override + public void handle(Supplier context) { + context.get().enqueueWork(() -> { + ServerPlayerEntity player = context.get().getSender(); + if (player == null) { + return; + } + ItemStack stack = player.getItemInHand(hand); + if (stack.getItem() instanceof ZapperItem) { + configureZapper(stack); + } + }); + context.get().setPacketHandled(true); + } + + public abstract void configureZapper(ItemStack stack); + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/PlacementPatterns.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/PlacementPatterns.java index 416400af0..9a8f85b9e 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/PlacementPatterns.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/PlacementPatterns.java @@ -21,8 +21,8 @@ public enum PlacementPatterns { Chance50(AllIcons.I_PATTERN_CHANCE_50), Chance75(AllIcons.I_PATTERN_CHANCE_75); - public String translationKey; - public AllIcons icon; + public final String translationKey; + public final AllIcons icon; private PlacementPatterns(AllIcons icon) { this.translationKey = Lang.asId(name()); diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetRenderHandler.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetRenderHandler.java index ae67e4cfd..e381b7be9 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetRenderHandler.java @@ -65,7 +65,7 @@ public abstract class ShootableGadgetRenderHandler { protected abstract void transformHand(MatrixStack ms, float flip, float equipProgress, float recoil, float pt); - public void register(IEventBus bus) { + public void registerListeners(IEventBus bus) { bus.addListener(this::onRenderPlayerHand); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java index c8f895948..a42370581 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java @@ -10,6 +10,7 @@ import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.item.ItemDescription; import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.NBTProcessors; import net.minecraft.block.BlockState; @@ -90,7 +91,7 @@ public abstract class ZapperItem extends Item { .isShiftKeyDown()) { if (context.getLevel().isClientSide) { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - openHandgunGUI(context.getItemInHand(), context.getHand() == Hand.OFF_HAND); + openHandgunGUI(context.getItemInHand(), context.getHand()); }); context.getPlayer() .getCooldowns() @@ -112,7 +113,7 @@ public abstract class ZapperItem extends Item { if (player.isShiftKeyDown()) { if (world.isClientSide) { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - openHandgunGUI(item, hand == Hand.OFF_HAND); + openHandgunGUI(item, hand); }); player.getCooldowns() .addCooldown(item.getItem(), 10); @@ -187,7 +188,7 @@ public abstract class ZapperItem extends Item { BlockRayTraceResult raytrace, CompoundNBT data); @OnlyIn(Dist.CLIENT) - protected abstract void openHandgunGUI(ItemStack item, boolean b); + protected abstract void openHandgunGUI(ItemStack item, Hand hand); protected abstract int getCooldownDelay(ItemStack item); @@ -212,6 +213,11 @@ public abstract class ZapperItem extends Item { return UseAction.NONE; } + public static void configureSettings(ItemStack stack, PlacementPatterns pattern) { + CompoundNBT nbt = stack.getOrCreateTag(); + NBTHelper.writeEnum(nbt, "Pattern", pattern); + } + public static void setTileData(World world, BlockPos pos, BlockState state, CompoundNBT data, PlayerEntity player) { if (data != null && AllBlockTags.SAFE_NBT.matches(state)) { TileEntity tile = world.getBlockEntity(pos); 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 a546067d2..feaf0561e 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 @@ -9,8 +9,8 @@ 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; -import com.simibubi.create.foundation.networking.NbtPacket; import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.NBTHelper; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -22,29 +22,34 @@ import net.minecraft.util.math.vector.Vector3f; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; -public class ZapperScreen extends AbstractSimiScreen { - - protected ItemStack zapper; - protected boolean offhand; - protected float animationProgress; - protected AllGuiTextures background; - private IconButton confirmButton; +public abstract class ZapperScreen extends AbstractSimiScreen { protected final ITextComponent patternSection = Lang.translate("gui.terrainzapper.patternSection"); + protected AllGuiTextures background; + protected ItemStack zapper; + protected Hand hand; + + protected float animationProgress; + protected ITextComponent title; - protected Vector patternButtons; + protected Vector patternButtons = new Vector<>(6); + private IconButton confirmButton; protected int brightColor; protected int fontColor; - public ZapperScreen(AllGuiTextures background, ItemStack zapper, boolean offhand) { - super(); + protected PlacementPatterns currentPattern; + + public ZapperScreen(AllGuiTextures background, ItemStack zapper, Hand hand) { this.background = background; this.zapper = zapper; - this.offhand = offhand; + this.hand = hand; title = StringTextComponent.EMPTY; brightColor = 0xFEFEFE; fontColor = AllGuiTextures.FONT_COLOR; + + CompoundNBT nbt = zapper.getOrCreateTag(); + currentPattern = NBTHelper.readEnum(nbt, "Pattern", PlacementPatterns.class); } @Override @@ -63,9 +68,7 @@ public class ZapperScreen extends AbstractSimiScreen { new IconButton(x + background.width - 33, y + background.height - 24, AllIcons.I_CONFIRM); widgets.add(confirmButton); - CompoundNBT nbt = zapper.getOrCreateTag(); - - patternButtons = new Vector<>(6); + patternButtons.clear(); for (int row = 0; row <= 1; row++) { for (int col = 0; col <= 2; col++) { int id = patternButtons.size(); @@ -77,9 +80,7 @@ public class ZapperScreen extends AbstractSimiScreen { } } - if (nbt.contains("Pattern")) - patternButtons.get(PlacementPatterns.valueOf(nbt.getString("Pattern")) - .ordinal()).active = false; + patternButtons.get(currentPattern.ordinal()).active = false; widgets.addAll(patternButtons); } @@ -108,21 +109,19 @@ public class ZapperScreen extends AbstractSimiScreen { @Override public void removed() { - CompoundNBT nbt = zapper.getTag(); - writeAdditionalOptions(nbt); - AllPackets.channel.sendToServer(new NbtPacket(zapper, offhand ? Hand.OFF_HAND : Hand.MAIN_HAND)); + ConfigureZapperPacket packet = getConfigurationPacket(); + packet.configureZapper(zapper); + AllPackets.channel.sendToServer(packet); } @Override public boolean mouseClicked(double x, double y, int button) { - CompoundNBT nbt = zapper.getTag(); - for (IconButton patternButton : patternButtons) { if (patternButton.isHovered()) { patternButtons.forEach(b -> b.active = true); patternButton.active = false; patternButton.playDownSound(minecraft.getSoundManager()); - nbt.putString("Pattern", PlacementPatterns.values()[patternButtons.indexOf(patternButton)].name()); + currentPattern = PlacementPatterns.values()[patternButtons.indexOf(patternButton)]; } } @@ -159,6 +158,6 @@ public class ZapperScreen extends AbstractSimiScreen { ms.popPose(); } - protected void writeAdditionalOptions(CompoundNBT nbt) {} + protected abstract ConfigureZapperPacket getConfigurationPacket(); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/ConfigureWorldshaperPacket.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/ConfigureWorldshaperPacket.java new file mode 100644 index 000000000..a5b849c85 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/ConfigureWorldshaperPacket.java @@ -0,0 +1,55 @@ +package com.simibubi.create.content.curiosities.zapper.terrainzapper; + +import com.simibubi.create.content.curiosities.zapper.ConfigureZapperPacket; +import com.simibubi.create.content.curiosities.zapper.PlacementPatterns; + +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.Hand; + +public class ConfigureWorldshaperPacket extends ConfigureZapperPacket { + + protected TerrainBrushes brush; + protected int brushParamX; + protected int brushParamY; + protected int brushParamZ; + protected TerrainTools tool; + protected PlacementOptions placement; + + public ConfigureWorldshaperPacket(Hand hand, PlacementPatterns pattern, TerrainBrushes brush, int brushParamX, int brushParamY, int brushParamZ, TerrainTools tool, PlacementOptions placement) { + super(hand, pattern); + this.brush = brush; + this.brushParamX = brushParamX; + this.brushParamY = brushParamY; + this.brushParamZ = brushParamZ; + this.tool = tool; + this.placement = placement; + } + + public ConfigureWorldshaperPacket(PacketBuffer buffer) { + super(buffer); + brush = buffer.readEnum(TerrainBrushes.class); + brushParamX = buffer.readVarInt(); + brushParamY = buffer.readVarInt(); + brushParamZ = buffer.readVarInt(); + tool = buffer.readEnum(TerrainTools.class); + placement = buffer.readEnum(PlacementOptions.class); + } + + @Override + public void write(PacketBuffer buffer) { + super.write(buffer); + buffer.writeEnum(brush); + buffer.writeVarInt(brushParamX); + buffer.writeVarInt(brushParamY); + buffer.writeVarInt(brushParamZ); + buffer.writeEnum(tool); + buffer.writeEnum(placement); + } + + @Override + public void configureZapper(ItemStack stack) { + WorldshaperItem.configureSettings(stack, pattern, brush, brushParamX, brushParamY, brushParamZ, tool, placement); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java index 107aa9a8b..ddaf57ad8 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java @@ -14,6 +14,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.NBTUtil; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.text.ITextComponent; @@ -29,8 +30,8 @@ public class WorldshaperItem extends ZapperItem { @Override @OnlyIn(value = Dist.CLIENT) - protected void openHandgunGUI(ItemStack item, boolean b) { - ScreenOpener.open(new WorldshaperScreen(item, b)); + protected void openHandgunGUI(ItemStack item, Hand hand) { + ScreenOpener.open(new WorldshaperScreen(item, hand)); } @Override @@ -82,4 +83,13 @@ public class WorldshaperItem extends ZapperItem { return true; } + public static void configureSettings(ItemStack stack, PlacementPatterns pattern, TerrainBrushes brush, int brushParamX, int brushParamY, int brushParamZ, TerrainTools tool, PlacementOptions placement) { + ZapperItem.configureSettings(stack, pattern); + CompoundNBT nbt = stack.getOrCreateTag(); + NBTHelper.writeEnum(nbt, "Brush", brush); + nbt.put("BrushParams", NBTUtil.writeBlockPos(new BlockPos(brushParamX, brushParamY, brushParamZ))); + NBTHelper.writeEnum(nbt, "Tool", tool); + NBTHelper.writeEnum(nbt, "Placement", placement); + } + } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItemRenderer.java index d7f6fb113..810272fd5 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItemRenderer.java @@ -12,6 +12,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.item.ItemStack; import net.minecraft.util.HandSide; @@ -59,4 +60,9 @@ public class WorldshaperItemRenderer extends ZapperItemRenderer brushParams; - protected Vector