diff --git a/build.gradle b/build.gradle index 94ae11c67..d8cd566cd 100644 --- a/build.gradle +++ b/build.gradle @@ -155,8 +155,8 @@ dependencies { // i'll leave this here commented for easier testing //runtimeOnly fg.deobf("vazkii.arl:AutoRegLib:1.4-35.69") //runtimeOnly fg.deobf("vazkii.quark:Quark:r2.0-212.984") - //runtimeOnly fg.deobf("slimeknights.mantle:Mantle:1.16.5-1.6.103") - //runtimeOnly fg.deobf("slimeknights.tconstruct:TConstruct:1.16.5-3.0.3.168") + //runtimeOnly fg.deobf("slimeknights.mantle:Mantle:1.16.5-1.6.115") + //runtimeOnly fg.deobf("slimeknights.tconstruct:TConstruct:1.16.5-3.1.1.252") annotationProcessor 'org.spongepowered:mixin:0.8.2:processor' } diff --git a/gradle.properties b/gradle.properties index dff493265..e77ab6368 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G org.gradle.daemon = false # mod version info -mod_version = 0.3.2d +mod_version = 0.3.2e minecraft_version = 1.16.5 forge_version = 36.2.0 diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 5a1b5d0de..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,30 +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 -f5c05d84c11e6db204c42169228329c8d361ca51 assets/create/lang/unfinished/es_es.json -edf3dab78e95aa442c3c667d8d1d574bfc69d5d7 assets/create/lang/unfinished/es_mx.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 @@ -512,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 @@ -555,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 @@ -609,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 @@ -837,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 @@ -871,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 @@ -908,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 @@ -929,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 @@ -1074,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 @@ -1144,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 @@ -1154,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 @@ -1234,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 @@ -1269,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 @@ -1285,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 @@ -1339,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 @@ -1452,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 @@ -1479,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 @@ -1498,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 @@ -1530,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 @@ -1580,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 @@ -1617,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 @@ -1689,18 +1734,20 @@ 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 a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json 58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json -5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json +0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json @@ -1832,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 @@ -2462,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 @@ -2477,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 @@ -2509,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 @@ -2616,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 @@ -2643,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 @@ -2668,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 @@ -2701,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 @@ -2753,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 @@ -2788,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 @@ -2850,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 @@ -2934,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 @@ -3378,11 +3507,11 @@ bbf64f7eb3868e354756e57348493e2b1ae6b0d9 data/create/recipes/limestone_cobblesto 88fa2b1ab746d5e13a8afd6e7e7d80ad843e0016 data/create/recipes/limestone_cobblestone_wall_from_limestone_cobblestone_stonecutting.json 327bb8a6535b60bb65d0dda9d5205e988bc82526 data/create/recipes/limestone_pillar.json c2e15ac0c9109bad3face6d13efc32d7116b4c25 data/create/recipes/limestone_pillar_from_limestone_stonecutting.json -88173753ceaf121c5430bbf928a40e3c046dbfe0 data/create/recipes/mechanical_crafting/crushing_wheel.json -14e322d4de8fae35d952274376497740bb3d5962 data/create/recipes/mechanical_crafting/extendo_grip.json -de7fea84434753873dfa2b929d9b5f5f86ac6a5c data/create/recipes/mechanical_crafting/flywheel.json -e491fd8a8873308270f9dc2a57ac8f2c70431dcc data/create/recipes/mechanical_crafting/furnace_engine.json -8e5224d22b228f69473ca48ca0d874b34660b573 data/create/recipes/mechanical_crafting/potato_cannon.json +66674d07de63aada0991d2fdff07e22e00450135 data/create/recipes/mechanical_crafting/crushing_wheel.json +599f8b87c24c131350ba7ceb69a0c8b9829c62bc data/create/recipes/mechanical_crafting/extendo_grip.json +f26ed47c10cc63613759b0f8ae4ef349000de60d data/create/recipes/mechanical_crafting/flywheel.json +2dc00d6e4c159e06ab2a705e666e83e4238a7814 data/create/recipes/mechanical_crafting/furnace_engine.json +b77911c169b6205a09001a09ca074eb2234f0d29 data/create/recipes/mechanical_crafting/potato_cannon.json 98f877bf8f3f8a686fc6cf7479a0fba5744248ce data/create/recipes/milling/allium.json 8c7e1cbc87c7ca7df2bf949957e89422fef8ad94 data/create/recipes/milling/aluminum_ore.json bcff4d30ae09a0729bce8b2dbde4ddd6719a998b data/create/recipes/milling/andesite.json @@ -3748,28 +3877,35 @@ 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 893a01e6004d6d8272bd1658e98da88bb572ee57 data/create/tags/blocks/wrench_pickup.json 081f5aa35602fc27af2ca01ea9f2fd5e7eb284dc data/create/tags/items/create_ingots.json 94c62bf22678ef55b2b8a5398a7960e5b00682dc data/create/tags/items/crushed_ores.json +bce28787b0271382842823d04a977912a88b01c2 data/create/tags/items/sandpaper.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/items/seats.json -f1092005b5d01e1f29457e90f75e5750f7f0226b data/create/tags/items/upright_on_belt.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 146880bfd..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: 57", + "_": "Missing Localizations: 39", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,14 +28,16 @@ "block.create.belt": "Cinta", "block.create.birch_window": "Ventana de abedul", "block.create.birch_window_pane": "Panel de ventana de abedul", - "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", + "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": "UNLOCALIZED: Blue Nixie Tube", + "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", @@ -43,9 +45,10 @@ "block.create.brass_encased_shaft": "Eje revestido de latón", "block.create.brass_funnel": "Embudo de latón", "block.create.brass_tunnel": "Túnel de latón", - "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", + "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", @@ -76,9 +79,10 @@ "block.create.crushing_wheel": "Rueda trituradora", "block.create.crushing_wheel_controller": "Controlador de Rueda trituradora", "block.create.cuckoo_clock": "Reloj de cuco", - "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", + "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", @@ -183,16 +187,18 @@ "block.create.granite_cobblestone_stairs": "Escaleras de adoquínes de granito", "block.create.granite_cobblestone_wall": "Muro de adoquínes de granito", "block.create.granite_pillar": "Pilar de granito", - "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", + "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": "UNLOCALIZED: Green Nixie Tube", + "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": "UNLOCALIZED: Haunted Bell", + "block.create.haunted_bell": "Campana encantada", "block.create.honey": "Miel", "block.create.horizontal_framed_glass": "Cristal con marco horizontal", "block.create.horizontal_framed_glass_pane": "Panel de cristal con marco horizontal", @@ -210,18 +216,21 @@ "block.create.layered_limestone": "Piedra caliza estratificada", "block.create.layered_scoria": "Escoria estratificada", "block.create.layered_weathered_limestone": "Caliza erosionada estratificada", - "block.create.lectern_controller": "Lectern Controller", - "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", + "block.create.lectern_controller": "Controlador de atril", + "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": "UNLOCALIZED: Light Gray Nixie Tube", + "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": "UNLOCALIZED: Lime Nixie Tube", + "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", @@ -236,9 +245,10 @@ "block.create.limestone_pillar": "Pilar de piedra caliza", "block.create.linear_chassis": "Chasis lineal", "block.create.lit_blaze_burner": "Quemador de Blaze encendido", - "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", + "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", @@ -320,10 +331,11 @@ "block.create.paved_weathered_limestone_slab": "Losa de piedra caliza erosionada pavimentada", "block.create.paved_weathered_limestone_stairs": "Escaleras de piedra caliza erosionada pavimentada", "block.create.paved_weathered_limestone_wall": "Muro de piedra caliza erosionada pavimentada", - "block.create.peculiar_bell": "Peculiar Bell", - "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", + "block.create.peculiar_bell": "Campana peculiar", + "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", @@ -356,14 +368,16 @@ "block.create.powered_toggle_latch": "Palanca de cierre motorizada", "block.create.pulley_magnet": "Imán de la polea", "block.create.pulse_repeater": "Repetidor de pulsos de redstone", - "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", + "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": "UNLOCALIZED: Red Nixie Tube", + "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", @@ -418,26 +432,28 @@ "block.create.weathered_limestone_cobblestone_wall": "Muro de adoquínes de piedra caliza erosionada", "block.create.weathered_limestone_pillar": "Pilar de piedra caliza erosionada", "block.create.weighted_ejector": "Eyector de peso", - "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", + "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": "UNLOCALIZED: Yellow Nixie Tube", + "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", - "enchantment.create.capacity": "UNLOCALIZED: Capacity", - "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "enchantment.create.capacity": "Capacidad", + "enchantment.create.potato_recovery": "Recuperación de patatas", "entity.create.contraption": "Artilugio", "entity.create.crafting_blueprint": "Plano de elaboración", "entity.create.gantry_contraption": "Artilugio de grúa", - "entity.create.potato_projectile": "Potato Projectile", + "entity.create.potato_projectile": "Proyectil de patata", "entity.create.seat": "Asiento", "entity.create.stationary_contraption": "Artilugio estacionario", "entity.create.super_glue": "Pegamento", @@ -467,7 +483,7 @@ "item.create.copper_sheet": "Lámina de cobre", "item.create.crafter_slot_cover": "Tapa de ranura del ensamblador mecánico", "item.create.crafting_blueprint": "Plano de elaboración", - "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", + "item.create.creative_blaze_cake": "´Pastel de blaze creativo", "item.create.crushed_aluminum_ore": "Mineral de aluminio molido", "item.create.crushed_brass": "Latón molido", "item.create.crushed_copper_ore": "Mineral de cobre molido", @@ -496,17 +512,17 @@ "item.create.handheld_worldshaper": "Worldshaper Creativo", "item.create.honey_bucket": "Cubo con miel", "item.create.honeyed_apple": "Manzana con miel", - "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", - "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", - "item.create.incomplete_precision_mechanism": "UNLOCALIZED: Incomplete Precision Mechanism", + "item.create.incomplete_cogwheel": "Engranaje pequeño incompleto", + "item.create.incomplete_large_cogwheel": "Engranaje grande incompleto", + "item.create.incomplete_precision_mechanism": "Mecanismo de precisión incompleto", "item.create.iron_sheet": "Lámina de hierro", "item.create.linked_controller": "Controlador enlazado", "item.create.minecart_contraption": "Artilugio de vagoneta", "item.create.minecart_coupling": "Acoplamiento de vagoneta", "item.create.polished_rose_quartz": "Cuarzo rosado pulido", - "item.create.potato_cannon": "Potato Cannon", + "item.create.potato_cannon": "Cañón de patatas", "item.create.powdered_obsidian": "Polvo de obsidiana", - "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", + "item.create.precision_mechanism": "Mecanismo de precisión", "item.create.propeller": "Hélice", "item.create.red_sand_paper": "Papel de lija rojo", "item.create.refined_radiance": "Resplandor refinado", @@ -651,12 +667,12 @@ "advancement.create.flywheel.desc": "Conecta con éxito un motor a la rueda de inercia.", "advancement.create.overstress_flywheel": "Altos niveles de estrés", "advancement.create.overstress_flywheel.desc": "Sobrecarga un motor de horno.", - "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", - "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", + "advancement.create.precision_mechanism": "Curiosidades complejas", + "advancement.create.precision_mechanism.desc": "Monta un mecanismo de precisión.", "advancement.create.mechanical_arm": "¡Manos ocupadas!", "advancement.create.mechanical_arm.desc": "Crea un brazo mecánico, selecciona las entradas y salidas, colócalo en el suelo y dale energía; luego observa cómo hace todo el trabajo por ti.", "advancement.create.musical_arm": "¡Tócame la melodía!", - "advancement.create.musical_arm.desc": "Vea cómo un brazo mecánico maneja su Jukebox.", + "advancement.create.musical_arm.desc": "Vea cómo un brazo mecánico maneja su tocadiscos.", "advancement.create.arm_many_targets": "Organize-o-Tron", "advancement.create.arm_many_targets.desc": "Programa un brazo mecánico con diez o más posiciones de salida.", "advancement.create.arm_blaze_burner": "Combust-o-Tron", @@ -667,7 +683,7 @@ "advancement.create.crushing_wheel.desc": "Crea algunas ruedas de trituración para descomponer más materiales de forma más eficaz.", "advancement.create.blaze_cake": "Fiebre del azúcar", "advancement.create.blaze_cake.desc": "Hornea en tu quemador de blaze un pastel especial.", - "advancement.create.chromatic_compound": "Mysterious Minerals", + "advancement.create.chromatic_compound": "Minerales misteriosos", "advancement.create.chromatic_compound.desc": "Crea una barra de compuesto cromático.", "advancement.create.shadow_steel": "Retorno del vacío", "advancement.create.shadow_steel.desc": "Crea acero sombrío, una barra de metal de la nada.", @@ -680,7 +696,7 @@ "advancement.create.extendo_grip": "¡Boioioing!", "advancement.create.extendo_grip.desc": "Hazte con un agarre extentido.", "advancement.create.potato_cannon": "Fwoomp!", - "advancement.create.potato_cannon.desc": "Defeat an enemy with your Potato Cannon.", + "advancement.create.potato_cannon.desc": "Derrota a un enemigo con tu cañón de patatas.", "advancement.create.dual_extendo_grip": "La última edad del boing", "advancement.create.dual_extendo_grip.desc": "Doble empuñadura extendida para un alcance sobrehumano.", "advancement.create.eob": "Fin de la beta", @@ -693,29 +709,29 @@ "itemGroup.create.palettes": "Paletas", "death.attack.create.crush": "%1$s se procesó en las ruedas de trituración", - "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", + "death.attack.create.crush.player": "%1$s fue arrojado a las ruedas de trituración por %2$s", "death.attack.create.fan_fire": "%1$s murió quemado por el aire caliente", - "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", + "death.attack.create.fan_fire.player": "%1$s fue arrojado a un ahumador por %2$s", "death.attack.create.fan_lava": "%1$s murió quemado por un abanico de lava", - "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", + "death.attack.create.fan_lava.player": "%1$s fue arrojado a una fundición por %2$s", "death.attack.create.mechanical_drill": "%1$s fue empalado por un taladro mecánico", - "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", + "death.attack.create.mechanical_drill.player": "%1$s fue lanzado frente a un taladro por %2$s", "death.attack.create.mechanical_saw": "%1$s fue cortado por la mitad por una sierra mecánica", - "death.attack.create.mechanical_saw.player": "UNLOCALIZED: %1$s was thrown into a Saw by %2$s", - "death.attack.create.potato_cannon": "%1$s was shot by %2$s's Potato Cannon", - "death.attack.create.potato_cannon.item": "%1$s was shot by %2$s using %3$s", + "death.attack.create.mechanical_saw.player": "%1$s fue arrojado a una sierra por %2$s", + "death.attack.create.potato_cannon": "%1$s fue disparado por el cañón de patatas de %2$s's", + "death.attack.create.potato_cannon.item": "%1$s fue disparado por %2$s utilizando %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s fue volado por los aires por un reloj de cuco manipulado", - "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.cuckoo_clock_explosion.player": "%1$s fue volado por un reloj de cuco manipulado", - "create.block.deployer.damage_source_name": "un Desplegador rebelde", + "create.block.deployer.damage_source_name": "Un desplegador rebelde", "create.block.cart_assembler.invalid": "Coloque su Ensamblador de vagonetas en un bloque de Raíles", "create.menu.return": "Regresar al menú", "create.menu.configure": "Configurar...", - "create.menu.ponder_index": "Ponder Index", - "create.menu.only_ingame": "Available in the Pause Menu", + "create.menu.ponder_index": "Índice", + "create.menu.only_ingame": "Disponible en el menú de pausa", "create.menu.project_page": "Página del proyecto", - "create.menu.report_bugs": "Informar de problemas", + "create.menu.report_bugs": "Reportar problemas", "create.menu.support": "Apóyenos", "create.recipe.crushing": "Trituración", @@ -742,17 +758,18 @@ "create.recipe.mystery_conversion": "Conversión misteriosa", "create.recipe.spout_filling": "Llenar por el pico", "create.recipe.draining": "Drenador de objetos", - "create.recipe.sequenced_assembly": "Sequenced Assembly", - "create.recipe.assembly.next": "Next: %1$s", - "create.recipe.assembly.step": "Step %1$s:", - "create.recipe.assembly.progress": "Progress: %1$s/%2$s", - "create.recipe.assembly.pressing": "Process in Press", - "create.recipe.assembly.spout_filling_fluid": "Spout %1$s", - "create.recipe.assembly.deploying_item": "Deploy %1$s", - "create.recipe.assembly.cutting": "Cut with Saw", - "create.recipe.assembly.repeat": "Repeat Sequence %1$s Times", - "create.recipe.assembly.junk": "Random junk", + "create.recipe.sequenced_assembly": "Montaje secuenciado", + "create.recipe.assembly.next": "Siguiente: %1$s", + "create.recipe.assembly.step": "Fase %1$s:", + "create.recipe.assembly.progress": "Progreso: %1$s/%2$s", + "create.recipe.assembly.pressing": "Proceso en prensa", + "create.recipe.assembly.spout_filling_fluid": "Pico %1$s", + "create.recipe.assembly.deploying_item": "Despliegue %1$s", + "create.recipe.assembly.cutting": "Corte con sierra", + "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)", @@ -788,9 +806,16 @@ "create.gui.scrollInput.scrollToModify": "Usa la rueda del ratón para modificar", "create.gui.scrollInput.scrollToAdjustAmount": "Usa la rueda del ratón para ajustar la cantidad", "create.gui.scrollInput.scrollToSelect": "Usa la rueda del ratón para seleccionar", - "create.gui.scrollInput.shiftScrollsFaster": "[Mayús izdo.] para usar la rueda del ratón más rápido", + "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", @@ -832,7 +857,7 @@ "create.gui.terrainzapper.tool.overlay": "Superponer", "create.gui.terrainzapper.tool.flatten": "Aplanar", - "create.terrainzapper.shiftRightClickToSet": "[Mayús izdo.] + clic derecho para seleccionar una forma", + "create.terrainzapper.shiftRightClickToSet": "Mayús izdo + clic derecho para seleccionar una forma", "create.terrainzapper.usingBlock": "Usando: %1$s", "create.terrainzapper.leftClickToSet": "Clic izquierdo a un bloque para establecer el material", @@ -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": "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á 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:", @@ -1165,9 +1194,9 @@ "create.tooltip.chute.fans_pull_up": "Los ventiladores tiran desde arriba", "create.tooltip.chute.fans_pull_down": "Los ventiladores tiran desde abajo", "create.tooltip.chute.contains": "Contiene: %1$s x%2$s", - "create.tooltip.brass_tunnel.contains": "UNLOCALIZED: Currently distributing:", - "create.tooltip.brass_tunnel.contains_entry": "UNLOCALIZED: > %1$s x%2$s", - "create.tooltip.brass_tunnel.retrieve": "UNLOCALIZED: Right-Click to retrieve", + "create.tooltip.brass_tunnel.contains": "Actualmente distribuye:", + "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", + "create.tooltip.brass_tunnel.retrieve": "Haga clic derecho para recuperar", "create.linked_controller.bind_mode": "Modo de enlace activo", "create.linked_controller.press_keybind": "Presiona %1$s, %2$s, %3$s, %4$s, %5$s o %6$s, para vincular esta frecuencia a la tecla correspondiente", @@ -1183,9 +1212,9 @@ "create.crafting_blueprint.secondary_display_slot": "Ranura de pantalla secundaria", "create.crafting_blueprint.optional": "Opcional", - "create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage", - "create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks", - "create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback", + "create.potato_cannon.ammo.attack_damage": "%1$s Daño de ataque", + "create.potato_cannon.ammo.reload_ticks": "%1$s Recarga por Ticks", + "create.potato_cannon.ammo.knockback": "%1$s Golpe de efecto", "create.hint.hose_pulley.title": "Suministro ilimitado", "create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita.", @@ -1225,13 +1254,13 @@ "create.subtitle.mechanical_press_activation_belt": "", "create.subtitle.fwoomp": "", "create.subtitle.worldshaper_place": "", - "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", + "create.subtitle.crushing_1": "", "create.subtitle.depot_slide": "", "create.subtitle.saw_activate_stone": "", "create.subtitle.blaze_munch": "", "create.subtitle.funnel_flap": "", "create.subtitle.schematicannon_finish": "", - "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", + "create.subtitle.haunted_bell_use": "", "create.subtitle.scroll_value": "", "create.subtitle.crafter_craft": "", "create.subtitle.controller_put": "", @@ -1242,7 +1271,7 @@ "create.subtitle.wrench_rotate": "", "create.subtitle.potato_hit": "", "create.subtitle.saw_activate_wood": "", - "create.subtitle.haunted_bell_convert": "UNLOCALIZED: Haunted Bell awakens", + "create.subtitle.haunted_bell_convert": "", "create.subtitle.deployer_polish": "", "create.subtitle.deny": "", "create.subtitle.controller_click": "", @@ -1271,12 +1300,12 @@ "block.create.wooden_bracket.tooltip.summary": "Decora tus _ejes_, _engranajes_ y _ductos_ con un acogedor refuerzo de madera.", "block.create.metal_bracket.tooltip": "SOPORTE DE METAL PARA EJES", - "block.create.metal_bracket.tooltip.summary": "Decora tus _ejes_, _engranajes_ y _ductos_ con un poco de refuerzo industrial robusto.", + "block.create.metal_bracket.tooltip.summary": "Decora tus _ejes_, _engranajes_ y _ductos_ con un poco de robusto refuerzo industrial.", "block.create.seat.tooltip": "ASIENTO", "block.create.seat.tooltip.summary": "¡Siéntate y disfruta del viaje! Anclará a un jugador en un artilugio en movimiento. También es ideal para muebles estáticos. Viene en una variedad de colores.", "block.create.seat.tooltip.condition1": "Cuando se hace clic derecho en el asiento", - "block.create.seat.tooltip.behaviour1": "Sienta al jugador en el _asiento_. Pulsa [Mayús izdo.] para dejar el asiento.", + "block.create.seat.tooltip.behaviour1": "Sienta al jugador en el _asiento_. Pulsa Mayús izdo para dejar el asiento.", "item.create.blaze_cake.tooltip": "PASTEL DE BLAZE", "item.create.blaze_cake.tooltip.summary": "Un delicioso regalo para sus esforzados _quemadores de blaze_. ¡Los pone en marcha!.", @@ -1289,7 +1318,7 @@ "item.create.wand_of_symmetry.tooltip.action1": "_Crea_ o _mueve_ el espejo.", "item.create.wand_of_symmetry.tooltip.control2": "Cuando se hace clic derecho en el aire", "item.create.wand_of_symmetry.tooltip.action2": "_Quita_ el espejo activo.", - "item.create.wand_of_symmetry.tooltip.control3": "[Mayús izdo.] + clic derecho", + "item.create.wand_of_symmetry.tooltip.control3": "Mayús izdo + clic derecho", "item.create.wand_of_symmetry.tooltip.action3": "Abre la interfaz de configuración.", "item.create.handheld_worldshaper.tooltip": "WORLDSHAPER", @@ -1298,7 +1327,7 @@ "item.create.handheld_worldshaper.tooltip.action1": "Establece los bloques colocados por la herramienta en el bloque objetivo.", "item.create.handheld_worldshaper.tooltip.control2": "Cuando se hace clic derecho en un bloque", "item.create.handheld_worldshaper.tooltip.action2": "Aplica el _pincel_ y la _herramienta_ actualmente seleccionadas en el lugar deseado.", - "item.create.handheld_worldshaper.tooltip.control3": "[Mayús izdo.] + clic derecho", + "item.create.handheld_worldshaper.tooltip.control3": "Mayús izdo + clic derecho", "item.create.handheld_worldshaper.tooltip.action3": "Abre la interfaz de configuración.", "item.create.tree_fertilizer.tooltip": "FERTILIZANTE PARA ÁRBOLES", @@ -1307,18 +1336,18 @@ "item.create.tree_fertilizer.tooltip.behaviour1": "Hace crecer los árboles _independientemente_ de sus condiciones de _espacio_.", "item.create.extendo_grip.tooltip": "AGARRE EXTENDIDO", - "item.create.extendo_grip.tooltip.summary": "¡Boioioing! Aumenta enormemente la _distancia de alcance_ del portador. Can be powered with Air Pressure from a _Copper_ _Backtank_", + "item.create.extendo_grip.tooltip.summary": "¡Boioioing! Aumenta enormemente la _distancia de alcance_ del portador. Se puede alimentar con la presión de aire de un _depósito trasero de cobre_", "item.create.extendo_grip.tooltip.condition1": "Cuando está fuera de la mano", "item.create.extendo_grip.tooltip.behaviour1": "Aumenta la _distancia de alcance_ de los objetos usados en la _mano principal_.", - "item.create.extendo_grip.tooltip.condition2": "While wearing Copper Backtank", - "item.create.extendo_grip.tooltip.behaviour2": "_No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", + "item.create.extendo_grip.tooltip.condition2": "Mientras se usa un depósito trasero de cobre", + "item.create.extendo_grip.tooltip.behaviour2": "No se utilizará _durabilidad_. En su lugar, la _presión del aire_ se drena desde el tanque", - "item.create.potato_cannon.tooltip": "POTATO CANNON", - "item.create.potato_cannon.tooltip.summary": "Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Copper_ _Backtank_", - "item.create.potato_cannon.tooltip.condition1": "When R-Clicked", - "item.create.potato_cannon.tooltip.behaviour1": "_Shoots_ a suitable item from your _Inventory_.", - "item.create.potato_cannon.tooltip.condition2": "While wearing Copper Backtank", - "item.create.potato_cannon.tooltip.behaviour2": "_No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", + "item.create.potato_cannon.tooltip": "CANÓN DE PATATAS", + "item.create.potato_cannon.tooltip.summary": "Fwoomp! Lanza tus verduras caseras a tus enemigos. Se puede alimentar con la presión de aire de un _depósito trasero de cobre_", + "item.create.potato_cannon.tooltip.condition1": "Cuando se usa clic derecho", + "item.create.potato_cannon.tooltip.behaviour1": "_Dispara_ un objeto adecuado desde tu inventario_.", + "item.create.potato_cannon.tooltip.condition2": "Mientras se usa un depósito trasero de cobre", + "item.create.potato_cannon.tooltip.behaviour2": "No se utilizará _durabilidad_. En su lugar, la _presión del aire_ se drena desde el tanque", "item.create.filter.tooltip": "FILTRO", "item.create.filter.tooltip.summary": "Controla las _salidas_ y _entradas_ de los _dispositivos logísticos_ con más precisión, comparándolas con un _conjunto de objetos_ o varios _filtros anidados_.", @@ -1341,7 +1370,7 @@ "item.create.schematic.tooltip.summary": "Contiene una estructura para ser posicionada y colocada en el mundo. Posiciona el holograma como desees y utiliza un _cañón de esquemas_ para construirla.", "item.create.schematic.tooltip.condition1": "Cuando se sostiene en la mano", "item.create.schematic.tooltip.behaviour1": "Se puede posicionar utilizando las herramientas en pantalla.", - "item.create.schematic.tooltip.control1": "[Mayús izdo.] + clic derecho", + "item.create.schematic.tooltip.control1": "Mayús izdo + clic derecho", "item.create.schematic.tooltip.action1": "Abre una _interfaz_ para introducir las _coordenadas_ exactas.", "item.create.schematic_and_quill.tooltip": "ESQUEMA Y PLUMA", @@ -1354,7 +1383,7 @@ "item.create.schematic_and_quill.tooltip.action1": "Selecciona un punto de esquina / confirmar guardar.", "item.create.schematic_and_quill.tooltip.control2": "Cuando mantiene [Ctrl]", "item.create.schematic_and_quill.tooltip.action2": "Selecciona puntos en _medio del aire_. Rueda del ratón para ajustar la distancia.", - "item.create.schematic_and_quill.tooltip.control3": "[Mayús izdo.] + clic derecho", + "item.create.schematic_and_quill.tooltip.control3": "Mayús izdo + clic derecho", "item.create.schematic_and_quill.tooltip.action3": "_Reinicia_ y elimina la selección.", "block.create.schematicannon.tooltip": "CAÑÓN DE ESQUEMAS", @@ -1380,7 +1409,7 @@ "item.create.wrench.tooltip.summary": "Una herramienta útil para trabajar en artilugios cinéticos. Se puede utilizar para _rotar_, _desmantelar_ y para _configurar_ componentes.", "item.create.wrench.tooltip.control1": "Cuando se hace clic derecho en un bloque cinético", "item.create.wrench.tooltip.action1": "Rota los componentes hacia o desde la cara con la que ha interactuado.", - "item.create.wrench.tooltip.control2": "[Mayús izdo.] + clic derecho", + "item.create.wrench.tooltip.control2": "Mayús izdo + clic derecho", "item.create.wrench.tooltip.action2": "Desmonta los _componentes cinéticos_ y los devuelve a tu inventario_.", "block.create.nozzle.tooltip": "BOQUILLA", @@ -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_.", @@ -1412,10 +1454,10 @@ "block.create.creative_crate.tooltip.condition1": "Cuando el elemento está en la ranura para filtros", "block.create.creative_crate.tooltip.behaviour1": "Todo lo que se _extraiga_ de este contenedor proporcionará un suministro _ilimitado_ del elemento especificado. Los objetos _insertados_ en esta caja serán _evitados_.", - "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": "PASTEL CREATIVO", + "item.create.creative_blaze_cake.tooltip.summary": "Un regalo muy especial para los _Quemadores de Blaze_ que permite _controlar su nivel de calor_. Después de comer este pastel, los Quemadores de blaze _nunca se quedarán sin combustible_.", + "item.create.creative_blaze_cake.tooltip.condition1": "Click derecho en un Quemador de blaze", + "item.create.creative_blaze_cake.tooltip.behaviour1": "Bloquea el nivel de calor del Quemador de blaze. Si se utiliza de nuevo, _cicla_ el nivel de calor del Quemador de blaze.", "block.create.controller_rail.tooltip": "RAÍL DE CONTROL", "block.create.controller_rail.tooltip.summary": "Un raíl energizado _unidireccional_ capaz de _controlar con precisión_ la _velocidad de movimiento_ de una vagoneta.", @@ -1437,19 +1479,19 @@ "item.create.shadow_steel.tooltip": "ACERO SOMBRÍO", "item.create.shadow_steel.tooltip.summary": "Un material cromático forjado en el _vacío_.", - "item.create.shadow_steel.tooltip.condition1": "Work In Progress", - "item.create.shadow_steel.tooltip.behaviour1": "Usages for this material will be available in a future release.", + "item.create.shadow_steel.tooltip.condition1": "Trabajo en curso", + "item.create.shadow_steel.tooltip.behaviour1": "Los usos de este material estarán disponibles en una futura versión.", "item.create.linked_controller.tooltip": "CONTROLADOR ENLAZADO", - "item.create.linked_controller.tooltip.summary": "Permite el control manual de las frecuencias de _enlaces de redstone_ asignadas a sus seis botones..", + "item.create.linked_controller.tooltip.summary": "Permite el control manual de las frecuencias de _enlaces de redstone_ asignadas a sus seis botones.", "item.create.linked_controller.tooltip.condition1": "Al hacer clic derecho", "item.create.linked_controller.tooltip.behaviour1": "Activa el _controlador_. Los _controles de movimiento_ se adquieren mientras está activo.", - "item.create.linked_controller.tooltip.condition2": "Al usar [Mayús izdo.] + clic derecho", + "item.create.linked_controller.tooltip.condition2": "Al usar Mayús izdo + clic derecho", "item.create.linked_controller.tooltip.behaviour2": "Abre la interfaz de configuración manual.", "item.create.linked_controller.tooltip.condition3": "Al usar clic derecho en un receptor de enlaces de redstone", "item.create.linked_controller.tooltip.behaviour3": "Activa el _modo de vinculación_, pulsa uno de los _seis controles_ para vincularlo a la _frecuencia de los enlaces_.", - "item.create.linked_controller.tooltip.condition4": "UNLOCALIZED: R-Click on Lectern", - "item.create.linked_controller.tooltip.behaviour4": "UNLOCALIZED: Places the Controller into the Lectern for easy activation. (R-Click while Sneaking to retrieve it)", + "item.create.linked_controller.tooltip.condition4": "Clic derecho en un atril", + "item.create.linked_controller.tooltip.behaviour4": "Coloca el controlador en el atril para facilitar su activación. (Clic derecho + mayús izq. para recuperarlo)", "item.create.diving_helmet.tooltip": "CASCO DE BUCEO", "item.create.diving_helmet.tooltip.summary": "Junto con un _depósito trasero de cobre_, permite que el usuario pueda respirar bajo el agua durante un tiempo prolongado.", @@ -1480,13 +1522,13 @@ "item.create.minecart_coupling.tooltip.condition1": "Cuando se utiliza en vagonetas", "item.create.minecart_coupling.tooltip.behaviour1": "_Acopla_ dos vagonetas, intentando mantenerlas a una _distancia constante_ mientras se mueven.", - "block.create.peculiar_bell.tooltip": "PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip": "CAMPANA PECULIAR", + "block.create.peculiar_bell.tooltip.summary": "Una campana decorativa de latón. Al colocarla sobre un _Fuego del alma_ o una _Fogata del alma_ puede producirse una transformación espeluznante...", - "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A _Cursed Bell_ haunted by lost souls of the Nether.", - "block.create.haunted_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", + "block.create.haunted_bell.tooltip": "CAMPANA ENCANTADA", + "block.create.haunted_bell.tooltip.summary": "Una _campana maldita_ perseguida por las almas perdidas del Nether", + "block.create.haunted_bell.tooltip.condition1": "Cuando se sostiene o suena", + "block.create.haunted_bell.tooltip.behaviour1": "Resalta los _puntos sin luz_ cercanos en los que pueden aparecer las _criaturas hostiles_.", "_": "->------------------------] Ponder Content [------------------------<-", @@ -1503,11 +1545,11 @@ "create.ponder.replay": "Repetición", "create.ponder.think_back": "Volver atrás", "create.ponder.slow_text": "Lectura cómoda", - "create.ponder.exit": "Exit", - "create.ponder.welcome": "Welcome to Ponder", - "create.ponder.categories": "Available Categories in Create", - "create.ponder.index_description": "Click one of the icons to learn about its associated Items and Blocks", - "create.ponder.index_title": "Ponder Index", + "create.ponder.exit": "Salir", + "create.ponder.welcome": "Bienvenido al instructivo de Create", + "create.ponder.categories": "Categorías disponibles", + "create.ponder.index_description": "Haga clic en uno de los iconos para conocer sus objetos y bloques asociados", + "create.ponder.index_title": "Índice", "create.ponder.shared.rpm16": "16 RPM", "create.ponder.shared.behaviour_modify_wrench": "Este comportamiento puede modificarse mediante una llave inglesa", "create.ponder.shared.storage_on_contraption": "Los inventarios unidos al artilugio recogerán sus producciones automáticamente", @@ -1559,7 +1601,7 @@ "create.ponder.analog_lever.header": "Controlar señales mediante la palanca analógica", "create.ponder.analog_lever.text_1": "Las palancas analógicas son una fuente compacta y precisa de energía de redstone", "create.ponder.analog_lever.text_2": "Haz clic derecho para aumentar su potencia analógica", - "create.ponder.analog_lever.text_3": "Usa [Mayús izdo.] + clic derecho para volver a disminuir su potencia", + "create.ponder.analog_lever.text_3": "Usa Mayús izdo + clic derecho para volver a disminuir su potencia", "create.ponder.andesite_tunnel.header": "Usar túneles de andesita", "create.ponder.andesite_tunnel.text_1": "Los túneles de andesita se pueden utilizar para tapar las correas", @@ -1588,7 +1630,7 @@ "create.ponder.belt_connector.header": "El uso de las correas mecánicas", "create.ponder.belt_connector.text_1": "Al hacer clic derecho en dos ejes con una correa mecánica se conectarán entre sí", - "create.ponder.belt_connector.text_2": "Las selecciones accidentales pueden ser canceladas con [Mayús izdo.] + clic derecho", + "create.ponder.belt_connector.text_2": "Las selecciones accidentales pueden ser canceladas con Mayús izdo + clic derecho", "create.ponder.belt_connector.text_3": "Se pueden añadir ejes adicionales en toda la correa", "create.ponder.belt_connector.text_4": "Los ejes conectados a través de correas girarán con velocidad y dirección idénticas", "create.ponder.belt_connector.text_5": "Los ejes añadidos se pueden quitar con la llave inglesa", @@ -1654,8 +1696,8 @@ "create.ponder.cart_assembler_modes.header": "Configurar la orientación de los artilugios de vagonetas", "create.ponder.cart_assembler_modes.text_1": "Los artilugios de vagonetas girarán para orientarse hacia el movimiento de sus vagonetas", - "create.ponder.cart_assembler_modes.text_2": "This Arrow indicates which side of the Structure will be considered the front", - "create.ponder.cart_assembler_modes.text_3": "If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + "create.ponder.cart_assembler_modes.text_2": "Esta flecha indica qué lado de la estructura se considerará la parte delantera", + "create.ponder.cart_assembler_modes.text_3": "Si el ensamblador está configurado para bloquear la rotación, la orientación de los artilugios nunca cambiará", "create.ponder.cart_assembler_rails.header": "Otros tipos de vagonetas y raíles", "create.ponder.cart_assembler_rails.text_1": "Los ensambladores de vagonetas en raíles normales no afectarán el movimiento de las vagonetas que pasen", @@ -1710,10 +1752,10 @@ "create.ponder.cogwheel.text_2": "Los ejes adyacentes conectados así, girarán en direcciones opuestas", "create.ponder.creative_fluid_tank.header": "Tanque de fluídos creativo", - "create.ponder.creative_fluid_tank.text_1": "Creative Fluid Tanks can be used to provide a bottomless supply of fluid", - "create.ponder.creative_fluid_tank.text_2": "Right-Click with a fluid containing item to configure it", - "create.ponder.creative_fluid_tank.text_3": "Pipe Networks can now endlessly draw the assigned fluid from the tank", - "create.ponder.creative_fluid_tank.text_4": "Any Fluids pushed back into a Creative Fluid Tank will be voided", + "create.ponder.creative_fluid_tank.text_1": "Los depósitos de fluidos creativos pueden utilizarse para proporcionar un suministro de fluidos sin fondo", + "create.ponder.creative_fluid_tank.text_2": "Haga clic con el botón derecho en un elemento que contenga fluido para configurarlo", + "create.ponder.creative_fluid_tank.text_3": "Las redes de tuberías pueden ahora extraer sin cesar el fluido asignado del depósito", + "create.ponder.creative_fluid_tank.text_4": "Cualquier fluido empujado de vuelta a un tanque de fluido creativo será anulado", "create.ponder.creative_motor.header": "Generar fuerza rotacional con motores creativos", "create.ponder.creative_motor.text_1": "Los motores creativos son una fuente compacta y configurable de fuerza rotacional", @@ -1773,13 +1815,13 @@ "create.ponder.empty_blaze_burner.text_2": "Alternativamente, los blaze pueden ser recogidos de sus spawners directamente", "create.ponder.empty_blaze_burner.text_3": "Ahora tienes una fuente de calor ideal para varias máquinas", "create.ponder.empty_blaze_burner.text_4": "Por motivos estéticos, los quemadores de blaze vacíos también se pueden encender con pedernal y acero", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_5": "La llama puede transformarse utilizando un objeto con alma", "create.ponder.empty_blaze_burner.text_6": "Sin embargo, no son adecuados para la calefacción industrial", "create.ponder.encased_fluid_pipe.header": "Revestir tuberías de fluídos", - "create.ponder.encased_fluid_pipe.text_1": "Copper Casing can be used to decorate Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_2": "Aside from being conceiled, Encased Pipes are locked into their connectivity state", - "create.ponder.encased_fluid_pipe.text_3": "It will no longer react to any neighbouring blocks being added or removed", + "create.ponder.encased_fluid_pipe.text_1": "El revestidor de cobre puede utilizarse para decorar las tuberías de fluidos", + "create.ponder.encased_fluid_pipe.text_2": "Además de estar ocultas, las tuberías revestidas están bloqueadas en su estado de conectividad", + "create.ponder.encased_fluid_pipe.text_3": "Ya no reaccionará a los bloques vecinos que se añadan o eliminen", "create.ponder.fan_direction.header": "El flujo de aire de los ventiladores revestidos", "create.ponder.fan_direction.text_1": "Los ventiladores revestidos utilizan la fuerza rotacional para crear una corriente de aire", @@ -1800,33 +1842,33 @@ "create.ponder.fan_source.text_2": "Cuando se les da una señal de redstone, los ventiladores comenzarán a proporcionar fuerza", "create.ponder.fluid_pipe_flow.header": "Transportar fluidos mediante tuberías de cobre", - "create.ponder.fluid_pipe_flow.text_1": "Fluid Pipes can connect two or more fluid sources and targets", - "create.ponder.fluid_pipe_flow.text_2": "Using a wrench, a straight pipe segment can be given a window", - "create.ponder.fluid_pipe_flow.text_3": "Windowed pipes will not connect to any other adjacent pipe segments", - "create.ponder.fluid_pipe_flow.text_4": "Powered by Mechanical Pumps, the Pipes can transport Fluids", - "create.ponder.fluid_pipe_flow.text_5": "No fluid is being extracted at first", - "create.ponder.fluid_pipe_flow.text_6": "Once the flow connects them, the endpoints gradually transfer their contents", - "create.ponder.fluid_pipe_flow.text_7": "Thus, the Pipe blocks themselves never 'physically' contain any fluid", + "create.ponder.fluid_pipe_flow.text_1": "Las tuberías de fluidos pueden conectar dos o más fuentes y objetivos de fluidos", + "create.ponder.fluid_pipe_flow.text_2": "Utilizando una llave, se puede dar a un segmento de tubo recto una ventana", + "create.ponder.fluid_pipe_flow.text_3": "Las tuberías con ventanas no se conectarán a ningún otro segmento de tubería adyacente", + "create.ponder.fluid_pipe_flow.text_4": "Accionadas por bombas mecánicas, las tuberías pueden transportar fluidos", + "create.ponder.fluid_pipe_flow.text_5": "Al principio no se extrae ningún líquido", + "create.ponder.fluid_pipe_flow.text_6": "Una vez que el flujo los conecta, los puntos finales transfieren gradualmente su contenido", + "create.ponder.fluid_pipe_flow.text_7": "Así, los bloques de tuberías nunca contienen 'físicamente' ningún fluido", "create.ponder.fluid_pipe_interaction.header": "Drenaje y llenado de contenedores de fluidos", - "create.ponder.fluid_pipe_interaction.text_1": "Endpoints of a pipe network can interact with a variety of blocks", - "create.ponder.fluid_pipe_interaction.text_2": "Any block with fluid storage capabilities can be filled or drained", - "create.ponder.fluid_pipe_interaction.text_3": "Source blocks right in front of an open end can be picked up...", - "create.ponder.fluid_pipe_interaction.text_4": "...while spilling into empty spaces can create fluid sources", - "create.ponder.fluid_pipe_interaction.text_5": "Pipes can also extract fluids from a handful of other blocks directly", + "create.ponder.fluid_pipe_interaction.text_1": "Los puntos finales de una red de tuberías pueden interactuar con una variedad de bloques", + "create.ponder.fluid_pipe_interaction.text_2": "Cualquier bloque con capacidad para almacenar fluidos puede ser llenado o vaciado", + "create.ponder.fluid_pipe_interaction.text_3": "Los bloques de origen justo delante de un extremo abierto pueden ser recogidos...", + "create.ponder.fluid_pipe_interaction.text_4": "...mientras que el derrame en espacios vacíos puede crear fuentes de fluidos", + "create.ponder.fluid_pipe_interaction.text_5": "Las tuberías también pueden extraer fluidos de un puñado de otros bloques directamente", "create.ponder.fluid_tank_sizes.header": "Dimensiones de un depósito de fluidos", - "create.ponder.fluid_tank_sizes.text_1": "Fluid Tanks can be combined to increase the total capacity", - "create.ponder.fluid_tank_sizes.text_2": "Their base square can be up to 3 blocks wide...", - "create.ponder.fluid_tank_sizes.text_3": "...and grow in height by more than 30 additional layers", - "create.ponder.fluid_tank_sizes.text_4": "Using a Wrench, a tanks' window can be toggled", + "create.ponder.fluid_tank_sizes.text_1": "Los depósitos de fluidos pueden combinarse para aumentar la capacidad total", + "create.ponder.fluid_tank_sizes.text_2": "Su cuadrado base puede tener hasta 3 bloques de ancho...", + "create.ponder.fluid_tank_sizes.text_3": "...y crecen en altura en más de 30 capas adicionales", + "create.ponder.fluid_tank_sizes.text_4": "Con una llave inglesa, se puede cambiar la ventana de un tanque", "create.ponder.fluid_tank_storage.header": "Almacenar fluidos en depósitos de fluidos", - "create.ponder.fluid_tank_storage.text_1": "Fluid Tanks can be used to store large amounts of fluid", - "create.ponder.fluid_tank_storage.text_2": "Pipe networks can push and pull fluids from any side", - "create.ponder.fluid_tank_storage.text_3": "The contained fluid can be measured by a Comparator", - "create.ponder.fluid_tank_storage.text_4": "However, in Survival Mode Fluids cannot be added or taken manually", - "create.ponder.fluid_tank_storage.text_5": "You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", + "create.ponder.fluid_tank_storage.text_1": "Los depósitos de fluidos pueden utilizarse para almacenar grandes cantidades de fluidos", + "create.ponder.fluid_tank_storage.text_2": "Las redes de tuberías pueden empujar y arrastrar fluidos desde cualquier lado", + "create.ponder.fluid_tank_storage.text_3": "El fluido contenido puede ser medido por un Comparador", + "create.ponder.fluid_tank_storage.text_4": "Sin embargo, en el Modo Supervivencia no se pueden añadir o tomar fluidos manualmente", + "create.ponder.fluid_tank_storage.text_5": "Puede utilizar cuencas, drenadores de objetos y tuberías para vaciar o llenar objetos que contengan líquido", "create.ponder.flywheel.header": "Generar fuerza rotacional con la rueda de inercia", "create.ponder.flywheel.text_1": "Las ruedas de inercia son necesarias para generar fuerza rotacional con el motor de horno", @@ -1841,7 +1883,7 @@ "create.ponder.funnel_direction.header": "Dirección de la transferencia", "create.ponder.funnel_direction.text_1": "Colocado normalmente, extrae objetos del inventario", - "create.ponder.funnel_direction.text_2": "Colocado mientras pulsa [Mayús izdo.], pone objetos en el inventario", + "create.ponder.funnel_direction.text_2": "Colocado mientras pulsa Mayús izdo, pone objetos en el inventario", "create.ponder.funnel_direction.text_3": "Usando una llave inglesa, el embudo puede ser volteado después de su colocación", "create.ponder.funnel_direction.text_4": "Se aplicarán las mismas reglas para la mayoría de las orientaciones", "create.ponder.funnel_direction.text_5": "Los embudos en las correas extraerán/insertarán dependiendo de su dirección de movimiento", @@ -1899,35 +1941,35 @@ "create.ponder.hand_crank.text_1": "Las manivelas pueden ser utilizadas para aplicar fuerza rotacional manualmente", "create.ponder.hand_crank.text_2": "Mantén pulsado clic derecho para girar en sentido antihorario", "create.ponder.hand_crank.text_3": "Su velocidad de transmisión es relativamente alta", - "create.ponder.hand_crank.text_4": "[Mayús izdo.] + clic derecho pulsado para girar en sentido horario", + "create.ponder.hand_crank.text_4": "Mayús izdo + clic derecho pulsado para girar en sentido horario", "create.ponder.hose_pulley.header": "Llenado y vaciado de fuentes mediante poleas de manguera", - "create.ponder.hose_pulley.text_1": "Hose Pulleys can be used to fill or drain large bodies of Fluid", - "create.ponder.hose_pulley.text_2": "With the Kinetic Input, the height of the pulleys' hose can be controlled", - "create.ponder.hose_pulley.text_3": "The Pulley retracts while the input rotation is inverted", - "create.ponder.hose_pulley.text_4": "On the opposite side, pipes can be connected", - "create.ponder.hose_pulley.text_5": "Attached pipe networks can either provide fluid to the hose...", - "create.ponder.hose_pulley.text_6": "...or pull from it, draining the pool instead", - "create.ponder.hose_pulley.text_7": "Fill and Drain speed of the pulley depends entirely on the fluid networks' throughput", + "create.ponder.hose_pulley.text_1": "Las poleas para mangueras pueden utilizarse para llenar o drenar grandes masas de fluido", + "create.ponder.hose_pulley.text_2": "Con entrada cinética, se puede controlar la altura de la manguera de las poleas", + "create.ponder.hose_pulley.text_3": "La polea se retrae mientras la rotación de entrada se invierte", + "create.ponder.hose_pulley.text_4": "En el lado opuesto, se pueden conectar las tuberías", + "create.ponder.hose_pulley.text_5": "Las redes de tuberías conectadas pueden proporcionar fluido a la manguera...", + "create.ponder.hose_pulley.text_6": "...o tirar de él, vaciando la piscina en su lugar", + "create.ponder.hose_pulley.text_7": "La velocidad de llenado y vaciado de la polea depende totalmente del caudal de las redes de fluidos", "create.ponder.hose_pulley_infinite.header": "Llenado y drenaje pasivo de grandes masas de fluido", - "create.ponder.hose_pulley_infinite.text_1": "When deploying the Hose Pulley into a large enough ocean...", - "create.ponder.hose_pulley_infinite.text_2": "It will provide/dispose fluids without affecting the source", - "create.ponder.hose_pulley_infinite.text_3": "Pipe networks can limitlessly take fluids from/to such pulleys", + "create.ponder.hose_pulley_infinite.text_1": "Al desplegar la polea de manguera en un océano lo suficientemente grande...", + "create.ponder.hose_pulley_infinite.text_2": "Proporcionará/eliminará fluidos sin afectar a la fuente", + "create.ponder.hose_pulley_infinite.text_3": "Las redes de tuberías pueden llevar fluidos de forma ilimitada desde/hacia dichas poleas", "create.ponder.hose_pulley_level.header": "Nivel de llenado y vaciado de las poleas de las mangueras", - "create.ponder.hose_pulley_level.text_1": "While fully retracted, the Hose Pulley cannot operate", - "create.ponder.hose_pulley_level.text_2": "Draining runs from top to bottom", - "create.ponder.hose_pulley_level.text_3": "The surface level will end up just below where the hose ends", - "create.ponder.hose_pulley_level.text_4": "Filling runs from bottom to top", - "create.ponder.hose_pulley_level.text_5": "The filled pool will not grow beyond the layer above the hose end", + "create.ponder.hose_pulley_level.text_1": "Mientras esté totalmente retraída, la polea de la manguera no puede funcionar", + "create.ponder.hose_pulley_level.text_2": "El drenaje va de arriba a abajo", + "create.ponder.hose_pulley_level.text_3": "El nivel de la superficie terminará justo debajo de donde termina la manguera", + "create.ponder.hose_pulley_level.text_4": "El llenado va de abajo a arriba", + "create.ponder.hose_pulley_level.text_5": "La piscina llena no crecerá más allá de la capa por encima del extremo de la manguera", "create.ponder.item_drain.header": "Vaciar contenedores de fluidos mediante drenajes de objetos", - "create.ponder.item_drain.text_1": "Item Drains can extract fluids from items", - "create.ponder.item_drain.text_2": "Right-click it to pour fluids from your held item into it", - "create.ponder.item_drain.text_3": "When items are inserted from the side...", - "create.ponder.item_drain.text_4": "...they roll across, emptying out their contained fluid", - "create.ponder.item_drain.text_5": "Pipe Networks can now pull the fluid from the drains' internal buffer", + "create.ponder.item_drain.text_1": "Los drenajes de objetos pueden extraer los fluidos de los objetos", + "create.ponder.item_drain.text_2": "Haz clic derecho para verter los fluidos de tu objeto retenido en él", + "create.ponder.item_drain.text_3": "Cuando los artículos se insertan desde el lado...", + "create.ponder.item_drain.text_4": "...ruedan a través, vaciando su líquido contenido", + "create.ponder.item_drain.text_5": "Las redes de tuberías pueden ahora extraer el fluido del buffer interno de los desagües", "create.ponder.large_cogwheel.header": "Transmitir fuerza rotacional mediante engranajes grandes", "create.ponder.large_cogwheel.text_1": "Los engranajes grandes pueden conectarse entre sí en ángulo recto", @@ -1936,7 +1978,7 @@ "create.ponder.linear_chassis_attachment.header": "Fijar bloques mediante el chasis lineal", "create.ponder.linear_chassis_attachment.text_1": "Las caras abiertas de un chasis lineal pueden hacerse pegajosas", "create.ponder.linear_chassis_attachment.text_2": "Haz clic de nuevo para que se pegue el lado opuesto", - "create.ponder.linear_chassis_attachment.text_3": "[Mayús izdo.] + clic derecho con la mano vacía para eliminar el pegamento", + "create.ponder.linear_chassis_attachment.text_3": "Mayús izdo + clic derecho con la mano vacía para eliminar el pegamento", "create.ponder.linear_chassis_attachment.text_4": "Las caras pegadas del chasis lineal fijarán una línea de bloques delante de él", "create.ponder.linear_chassis_attachment.text_5": "Utilizando una llave inglesa, se puede especificar un rango preciso", "create.ponder.linear_chassis_attachment.text_6": "Manteniendo pulsada la tecla [Ctrl] y usando la rueda central del ratón, se ajusta el rango de todos los bloques de chasis adjuntos", @@ -2052,19 +2094,19 @@ "create.ponder.mechanical_press_compacting.text_4": "La ranura para filtros se puede utilizar en caso de que dos recetas sean conflictivas.", "create.ponder.mechanical_pump_flow.header": "Transportar fluidos mediante bombas mecánicas", - "create.ponder.mechanical_pump_flow.text_1": "Mechanical Pumps govern the flow of their attached pipe networks", - "create.ponder.mechanical_pump_flow.text_2": "When powered, their arrow indicates the direction of flow", - "create.ponder.mechanical_pump_flow.text_3": "The network behind is now pulling fluids...", - "create.ponder.mechanical_pump_flow.text_4": "...while the network in front is transferring it outward", - "create.ponder.mechanical_pump_flow.text_5": "Reversing the input rotation reverses the direction of flow", - "create.ponder.mechanical_pump_flow.text_6": "Use a Wrench to reverse the orientation of pumps manually", + "create.ponder.mechanical_pump_flow.text_1": "Las bombas mecánicas gobiernan el flujo de sus redes de tuberías anexas", + "create.ponder.mechanical_pump_flow.text_2": "Cuando están alimentadas, su flecha indica la dirección del flujo", + "create.ponder.mechanical_pump_flow.text_3": "La red de atrás está ahora tirando de fluidos...", + "create.ponder.mechanical_pump_flow.text_4": "...mientras la red de enfrente la transfiere hacia el exterior", + "create.ponder.mechanical_pump_flow.text_5": "Al invertir la rotación de la entrada se invierte el sentido del flujo", + "create.ponder.mechanical_pump_flow.text_6": "Utilice una llave inglesa para invertir la orientación de las bombas manualmente", "create.ponder.mechanical_pump_speed.header": "Rendimiento de las bombas mecánicas", - "create.ponder.mechanical_pump_speed.text_1": "Regardless of speed, Mechanical Pumps affect pipes connected up to 16 blocks away", - "create.ponder.mechanical_pump_speed.text_2": "Speeding up the input rotation changes the speed of flow propagation...", - "create.ponder.mechanical_pump_speed.text_3": "...aswell as how quickly fluids are transferred", - "create.ponder.mechanical_pump_speed.text_4": "Pumps can combine their throughputs within shared pipe networks", - "create.ponder.mechanical_pump_speed.text_5": "Alternating their orientation can help align their flow directions", + "create.ponder.mechanical_pump_speed.text_1": "Independientemente de la velocidad, las bombas mecánicas afectan a las tuberías conectadas hasta 16 bloques de distancia", + "create.ponder.mechanical_pump_speed.text_2": "Acelerar la rotación de entrada cambia la velocidad de propagación del flujo...", + "create.ponder.mechanical_pump_speed.text_3": "...así como la rapidez con la que se transfieren los fluidos", + "create.ponder.mechanical_pump_speed.text_4": "Las bombas pueden combinar sus rendimientos en redes de tuberías compartidas", + "create.ponder.mechanical_pump_speed.text_5": "Alternar su orientación puede ayudar a alinear sus direcciones de flujo", "create.ponder.mechanical_saw_breaker.header": "Cortar árboles con la sierra mecánica", "create.ponder.mechanical_saw_breaker.text_1": "Cuando se le da una fuerza rotacional, la sierra mecánica cortará los árboles que estén directamente frente a ella", @@ -2091,21 +2133,21 @@ "create.ponder.nixie_tube.header": "Usar los tubos Nixie", "create.ponder.nixie_tube.text_1": "Cuando son alimentados con redstone, los tubos nixie mostrarán la fuerza de las señales de redstone", "create.ponder.nixie_tube.text_2": "Con las etiquetas editadas en un yunque, pueden mostar un texto personalizado", - "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "create.ponder.nixie_tube.text_3": "Haga clic derecho con un tinte para cambiar su color de visualización", "create.ponder.piston_pole.header": "Pértigas de extensión de pistones", "create.ponder.piston_pole.text_1": "Sin las pértigas de extensión unidas, un pistón mecánico no puede moverse", "create.ponder.piston_pole.text_2": "La longitud de la pértiga añadida en su parte posterior determina el rango de alcance", "create.ponder.portable_fluid_interface.header": "Interfaz de fluidos portátil", - "create.ponder.portable_fluid_interface.text_1": "Fluid Tanks on moving contraptions cannot be accessed by any pipes", - "create.ponder.portable_fluid_interface.text_2": "This component can interact with fluid tanks without the need to stop the contraption", - "create.ponder.portable_fluid_interface.text_3": "Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_fluid_interface.text_4": "Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_fluid_interface.text_5": "While engaged, the stationary interface will represent ALL Tanks on the contraption", - "create.ponder.portable_fluid_interface.text_6": "Fluid can now be inserted...", - "create.ponder.portable_fluid_interface.text_7": "...or extracted from the contraption", - "create.ponder.portable_fluid_interface.text_8": "After no contents have been exchanged for a while, the contraption will continue on its way", + "create.ponder.portable_fluid_interface.text_1": "No se puede acceder a los depósitos de fluidos de los artilugios en movimiento por ninguna tubería", + "create.ponder.portable_fluid_interface.text_2": "Este componente puede interactuar con los depósitos de fluidos sin necesidad de detener el artilugio", + "create.ponder.portable_fluid_interface.text_3": "Coloca una segunda con un espacio de 1 o 2 bloques entre ellas", + "create.ponder.portable_fluid_interface.text_4": "Cada vez que pasen por delante de la otra, entablarán una conexión", + "create.ponder.portable_fluid_interface.text_5": "Mientras esté activada, la interfaz estacionaria representará TODOS los tanques del artilugio", + "create.ponder.portable_fluid_interface.text_6": "Ahora se puede introducir el fluido...", + "create.ponder.portable_fluid_interface.text_7": "...o extraerlo del artilugio", + "create.ponder.portable_fluid_interface.text_8": "Cuando no se intercambien contenidos durante un tiempo, el artilugio seguirá su camino", "create.ponder.portable_storage_interface.header": "Interfaz de almacenamiento portátil", "create.ponder.portable_storage_interface.text_1": "Los jugadores no pueden acceder a los inventarios de los artilugios en movimiento.", @@ -2140,7 +2182,7 @@ "create.ponder.radial_chassis.text_2": "Cuando uno es movido por un artilugio, los otros son arrastrados con él", "create.ponder.radial_chassis.text_3": "Las caras laterales de un chasis radial pueden hacerse adhesivas", "create.ponder.radial_chassis.text_4": "Haga clic de nuevo para que todos los demás lados sean pegajosos", - "create.ponder.radial_chassis.text_5": "[Mayús izdo.] + clic derecho con la mano vacía para eliminar el pegamento", + "create.ponder.radial_chassis.text_5": "Mayús izdo + clic derecho con la mano vacía para eliminar el pegamento", "create.ponder.radial_chassis.text_6": "Cada vez que un bloque está junto a una cara pegajosa...", "create.ponder.radial_chassis.text_7": "...adjuntará todos los bloques alcanzables dentro de un radio en esa capa", "create.ponder.radial_chassis.text_8": "Con una llave inglesa y usando la rueda de desplazamiento del ratón se puede especificar un radio preciso", @@ -2152,7 +2194,7 @@ "create.ponder.redstone_link.header": "Usar los enlaces de redstone", "create.ponder.redstone_link.text_1": "Los enlaces de redstone pueden transmitir señales redstone de forma inalámbrica", - "create.ponder.redstone_link.text_2": "[Mayús izdo.] + clic derecho para cambiar el modo de recepción", + "create.ponder.redstone_link.text_2": "Mayús izdo + clic derecho para cambiar el modo de recepción", "create.ponder.redstone_link.text_3": "Un simple clic derecho con una llave inglesa puede hacer lo mismo", "create.ponder.redstone_link.text_4": "Los receptores emiten la potencia de redstone de los transmisores en 128 bloques", "create.ponder.redstone_link.text_5": "Colocando objetos en las dos ranuras puede especificar una frecuencia", @@ -2205,10 +2247,10 @@ "create.ponder.smart_chute.text_4": "La energía de redstone impedirá que funcionen.", "create.ponder.smart_pipe.header": "Controlar el flujo de fluidos mediante tuberías inteligentes", - "create.ponder.smart_pipe.text_1": "Smart pipes can help control flows by fluid type", - "create.ponder.smart_pipe.text_2": "When placed directly at the source, they can specify the type of fluid to extract", - "create.ponder.smart_pipe.text_3": "Simply Right-Click their filter slot with any item containing the desired fluid", - "create.ponder.smart_pipe.text_4": "When placed further down a pipe network, smart pipes will only let matching fluids continue", + "create.ponder.smart_pipe.text_1": "Las tuberías inteligentes pueden ayudar a controlar los flujos por tipo de fluido", + "create.ponder.smart_pipe.text_2": "Cuando se colocan directamente en la fuente, pueden especificar el tipo de fluido a extraer", + "create.ponder.smart_pipe.text_3": "Simplemente haga clic derecho en su ranura de filtro con cualquier elemento que contenga el fluido deseado", + "create.ponder.smart_pipe.text_4": "Cuando se colocan detrás de una red de tuberías, las tuberías inteligentes sólo dejan que los fluidos coincidentes continúen", "create.ponder.speedometer.header": "Controlar la información cinética mediante el velocímetro", "create.ponder.speedometer.text_1": "El velocímetro muestra la velocidad actual de los componentes conectados", @@ -2216,12 +2258,12 @@ "create.ponder.speedometer.text_3": "Los comparadores pueden emitir señales analógicas de redstone en relación con las mediciones del velocímetro", "create.ponder.spout_filling.header": "Llenar objetos con un surtidor", - "create.ponder.spout_filling.text_1": "The Spout can fill fluid holding items provided beneath it", - "create.ponder.spout_filling.text_2": "The content of a Spout cannot be accessed manually", - "create.ponder.spout_filling.text_3": "Instead, Pipes can be used to supply it with fluids", - "create.ponder.spout_filling.text_4": "The Input items can be placed on a Depot under the Spout", - "create.ponder.spout_filling.text_5": "When items are provided on a belt...", - "create.ponder.spout_filling.text_6": "The Spout will hold and process them automatically", + "create.ponder.spout_filling.text_1": "El surtidor puede llenar los elementos de retención de fluidos que se encuentran debajo de él", + "create.ponder.spout_filling.text_2": "No se puede acceder manualmente al contenido de un surtidor", + "create.ponder.spout_filling.text_3": "En su lugar, se pueden utilizar tuberías para suministrarle fluidos", + "create.ponder.spout_filling.text_4": "Los objetos de entrada pueden colocarse en un depósito bajo el surtidor", + "create.ponder.spout_filling.text_5": "Cuando los artículos se proporcionan en una cinta...", + "create.ponder.spout_filling.text_6": "El surtidor los retendrá y procesará automáticamente", "create.ponder.stabilized_bearings.header": "Estabilizar artilugios", "create.ponder.stabilized_bearings.text_1": "Siempre que los rodamientos mecánicos formen parte de una estructura móvil...", @@ -2251,14 +2293,14 @@ "create.ponder.valve_handle.text_1": "Los jugadores pueden utilizar las asas de válvulas para aplicar fuerza rotacional manualmente", "create.ponder.valve_handle.text_2": "Mantén pulsado el clic derecho para rotar en sentido contrario a las agujas del reloj", "create.ponder.valve_handle.text_3": "Su velocidad de transmisión es lenta y precisa", - "create.ponder.valve_handle.text_4": "[Mayús izdo.] + clic derecho para rotar en el sentido de las agujas del reloj", + "create.ponder.valve_handle.text_4": "Mayús izdo + clic derecho para rotar en el sentido de las agujas del reloj", "create.ponder.valve_handle.text_5": "Las asas de las válvulas pueden teñirse con fines estéticos", "create.ponder.valve_pipe.header": "Controlar el flujo de fluidos mediante válvulas", - "create.ponder.valve_pipe.text_1": "Valve pipes help control fluids propagating through pipe networks", - "create.ponder.valve_pipe.text_2": "Their shaft input controls whether fluid is currently allowed through", - "create.ponder.valve_pipe.text_3": "Given Rotational Force in the opening direction, the valve will open up", - "create.ponder.valve_pipe.text_4": "It can be closed again by reversing the input rotation", + "create.ponder.valve_pipe.text_1": "Las tuberías con válvulas ayudan a controlar los fluidos que se propagan por las redes de tuberías", + "create.ponder.valve_pipe.text_2": "Su entrada en el eje controla si el fluido puede pasar por", + "create.ponder.valve_pipe.text_3": "Dada la fuerza de rotación en la dirección de apertura, la válvula se abrirá", + "create.ponder.valve_pipe.text_4": "Se puede volver a cerrar invirtiendo el giro de entrada", "create.ponder.water_wheel.header": "Generar fuerza rotacional mediante ruedas hidráulicas", "create.ponder.water_wheel.text_1": "Las ruedas hidráulicas extraen la fuerza de las corrientes de agua adyacentes", @@ -2267,7 +2309,7 @@ "create.ponder.water_wheel.text_4": "Orientadas hacia el lado contrario, no serán tan eficaces", "create.ponder.weighted_ejector.header": "Usar eyectores de peso", - "create.ponder.weighted_ejector.text_1": "[Mayús izdo.] + clic derecho sosteniendo un eyector de peso para seleccionar la ubicación de destino", + "create.ponder.weighted_ejector.text_1": "Mayús izdo + clic derecho sosteniendo un eyector de peso para seleccionar la ubicación de destino", "create.ponder.weighted_ejector.text_10": "Ahora estára limitado a este tamaño de pila, y sólo se activara cuando su pila retenida alcance esta cantidad", "create.ponder.weighted_ejector.text_11": "Otras entidades activarán el eyector al pisarlos", "create.ponder.weighted_ejector.text_2": "El eyector colocado lanzará ahora los objetos al lugar marcado", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json deleted file mode 100644 index 40315c425..000000000 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ /dev/null @@ -1,2306 +0,0 @@ -{ - "_": "Missing Localizations: 1501", - - "_": "->------------------------] Game Elements [------------------------<-", - - "block.create.acacia_window": "Ventana de Acacia", - "block.create.acacia_window_pane": "Panel de Ventana de Acacia", - "block.create.adjustable_chain_gearshift": "Cambio Ajustable de Velocidad de Cadena", - "block.create.adjustable_crate": "Caja Ajustable", - "block.create.adjustable_pulse_repeater": "Repetidor de Pulso Ajustable", - "block.create.adjustable_repeater": "Repetidor Ajustable", - "block.create.analog_lever": "Palanca Analogica", - "block.create.andesite_belt_funnel": "UNLOCALIZED: Andesite Belt Funnel", - "block.create.andesite_bricks": "Ladrillos de Andesita", - "block.create.andesite_bricks_slab": "Losa de Ladrillos de Andesita", - "block.create.andesite_bricks_stairs": "Escaleras de Ladrillos de Andesita", - "block.create.andesite_bricks_wall": "Pared de Ladrillos de Andesita", - "block.create.andesite_casing": "Carcasa de Andesita", - "block.create.andesite_cobblestone": "Piedra Labrada de Andesita", - "block.create.andesite_cobblestone_slab": "Losa de Piedra Labrada de Andesita", - "block.create.andesite_cobblestone_stairs": "Escaleras de Piedra Labrada de Andesita", - "block.create.andesite_cobblestone_wall": "Pared de Piedra Labrada de Andesita", - "block.create.andesite_encased_shaft": "Eje empotrado de Andesita", - "block.create.andesite_funnel": "Embudo de Andesita", - "block.create.andesite_pillar": "Pilar de Andesita", - "block.create.andesite_tunnel": "Túnel de Andesita", - "block.create.basin": "Cuenco", - "block.create.belt": "Correa", - "block.create.birch_window": "Ventana de Abedul", - "block.create.birch_window_pane": "Panel de Ventana de Abedul", - "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", - "block.create.black_sail": "Vela Negra", - "block.create.black_seat": "Asiento Negro", - "block.create.black_valve_handle": "Manija de Válvula Negra", - "block.create.blaze_burner": "Quemador de Blaze", - "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", - "block.create.blue_sail": "Vela Azul", - "block.create.blue_seat": "Asiento Azul", - "block.create.blue_valve_handle": "Manija de Válvula Azul", - "block.create.brass_belt_funnel": "UNLOCALIZED:Brass Belt Funnel", - "block.create.brass_block": "Bloque de Latón", - "block.create.brass_casing": "Carcasa de Latón", - "block.create.brass_encased_shaft": "Eje empotrado de Latón", - "block.create.brass_funnel": "Embudo de Latón", - "block.create.brass_tunnel": "Túnel de Latón", - "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", - "block.create.brown_sail": "Vela Café", - "block.create.brown_seat": "Asiento Café ", - "block.create.brown_valve_handle": "Manija de Válvula Café", - "block.create.cart_assembler": "Ensamblador de Vagonetas", - "block.create.chiseled_dark_scoria": "Escoria Oscura Grabada", - "block.create.chiseled_dolomite": "Dolomita Grabada", - "block.create.chiseled_gabbro": "Gabro Grabado", - "block.create.chiseled_limestone": "Caliza Grabada", - "block.create.chiseled_scoria": "Escoria Grabada", - "block.create.chiseled_weathered_limestone": "Caliza Meteorizada Grabada", - "block.create.chocolate": "Chocolate", - "block.create.chute": "Vertedor", - "block.create.clockwork_bearing": "Rodamiento de Reloj", - "block.create.clutch": "Embrague", - "block.create.cogwheel": "Rueda Dentada", - "block.create.content_observer": "Observador de Contenido", - "block.create.controller_rail": "Vía de Control", - "block.create.copper_backtank": "UNLOCALIZED: Copper Backtank", - "block.create.copper_block": "Bloque de Cobre", - "block.create.copper_casing": "Carcasa de Cobre", - "block.create.copper_ore": "Mineral de Cobre", - "block.create.copper_shingles": "Techado de Cobre", - "block.create.copper_tiles": "Baldosas de Cobre", - "block.create.copper_valve_handle": "Manija de Válvula de Cobre", - "block.create.creative_crate": "Caja del Creativo", - "block.create.creative_fluid_tank": "Tanque de Fluido del Creativo", - "block.create.creative_motor": "Motor del Creativo", - "block.create.crimson_window": "Ventana Carmesí", - "block.create.crimson_window_pane": "Panel de Ventana Carmesí", - "block.create.crushing_wheel": "Rueda Trituradora", - "block.create.crushing_wheel_controller": "UNLOCALIZED:Crushing Wheel Controller", - "block.create.cuckoo_clock": "Reloj Cuco", - "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", - "block.create.cyan_sail": "Vela Cian", - "block.create.cyan_seat": "Asiento Cian", - "block.create.cyan_valve_handle": "Manija 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", - "block.create.dark_scoria": "Escoria Oscura", - "block.create.dark_scoria_bricks": "Ladrillos de Escoria Oscura", - "block.create.dark_scoria_bricks_slab": "Losa de Ladrillos de Escoria Oscura", - "block.create.dark_scoria_bricks_stairs": "Escaleras de Ladrillos de Escoria Oscura", - "block.create.dark_scoria_bricks_wall": "Pared de Ladrillos de Escoria Oscura", - "block.create.dark_scoria_cobblestone": "Piedra Labrada de Escoria Oscura", - "block.create.dark_scoria_cobblestone_slab": "Losa de Piedra Labrada de Escoria Oscura", - "block.create.dark_scoria_cobblestone_stairs": "Escaleras de Piedra Labrada de Escoria Oscura", - "block.create.dark_scoria_cobblestone_wall": "Pared de Piedra Labrada de Escoria Oscura", - "block.create.dark_scoria_pillar": "Pilar de Escoria Oscura", - "block.create.deployer": "Desplegador", - "block.create.depot": "Depósito", - "block.create.diorite_bricks": "Ladrillos de Diorita", - "block.create.diorite_bricks_slab": "Losa de Ladrillos de Diorita", - "block.create.diorite_bricks_stairs": "Escaleras de Ladrillos de Diorita", - "block.create.diorite_bricks_wall": "Pared de Ladrillos de Diorita", - "block.create.diorite_cobblestone": "Piedra Labrada de Diorita", - "block.create.diorite_cobblestone_slab": "Losa de Piedra Labrada de Diorita", - "block.create.diorite_cobblestone_stairs": "Escaleras de Piedra Labrada de Diorita", - "block.create.diorite_cobblestone_wall": "Pared de Piedra Labrada de Diorita", - "block.create.diorite_pillar": "Pared de Diorita", - "block.create.dolomite": "Dolomita", - "block.create.dolomite_bricks": "Ladrillos de Dolomita", - "block.create.dolomite_bricks_slab": "Losa de Ladrillos de Dolomita", - "block.create.dolomite_bricks_stairs": "Escaleras de Ladrillos de Dolomita", - "block.create.dolomite_bricks_wall": "Pared de Ladrillos de Dolomita", - "block.create.dolomite_cobblestone": "Piedra Labrada de Dolomita", - "block.create.dolomite_cobblestone_slab": "Losa de Piedra Labrada de Dolomita", - "block.create.dolomite_cobblestone_stairs": "Escaleras de Piedra Labrada de Dolomita", - "block.create.dolomite_cobblestone_wall": "Pared de Piedra Labrada de Dolomita", - "block.create.dolomite_pillar": "Pilar de Dolomita", - "block.create.encased_chain_drive": "Transmisión de Cadena Empotrada", - "block.create.encased_fan": "Ventilador Acoplado", - "block.create.encased_fluid_pipe": "Tubería de Fluidos Recubierta", - "block.create.fancy_andesite_bricks": "Ladrillos de Andesita Elegantes", - "block.create.fancy_andesite_bricks_slab": "Losa de Ladrillos de Andesita Elegantes", - "block.create.fancy_andesite_bricks_stairs": "Escaleras de Ladrillos de Andesita Elegantes", - "block.create.fancy_andesite_bricks_wall": "Pared de Ladrillos de Andesita Elegantes", - "block.create.fancy_dark_scoria_bricks": "Ladrillos de Escoria Oscura Elegantes", - "block.create.fancy_dark_scoria_bricks_slab": "Losa de Ladrillos de Escoria Oscura Elegantes", - "block.create.fancy_dark_scoria_bricks_stairs": "Escaleras de Ladrillos de Escoria Oscura Elegantes", - "block.create.fancy_dark_scoria_bricks_wall": "Pared de Ladrillos de Escoria Oscura Elegantes", - "block.create.fancy_diorite_bricks": "Ladrillos de Diorita Elegantes", - "block.create.fancy_diorite_bricks_slab": "Losa de Ladrillos de Diorita Elegantes", - "block.create.fancy_diorite_bricks_stairs": "Escaleras de Ladrillos de Diorita Elegantes", - "block.create.fancy_diorite_bricks_wall": "Pared de Ladrillos de Diorita Elegantes", - "block.create.fancy_dolomite_bricks": "Ladrillos de Dolomita Elegantes", - "block.create.fancy_dolomite_bricks_slab": "Losa de Ladrillos de Dolomita Elegantes", - "block.create.fancy_dolomite_bricks_stairs": "Escaleras de Ladrillos de Dolomita Elegantes", - "block.create.fancy_dolomite_bricks_wall": "Pared de Ladrillos de Dolomita Elegantes", - "block.create.fancy_gabbro_bricks": "Ladrillos de Gabro Elegantes", - "block.create.fancy_gabbro_bricks_slab": "Losa Ladrillos de Gabro Elegantes", - "block.create.fancy_gabbro_bricks_stairs": "Escaleras Ladrillos de Gabro Elegantes", - "block.create.fancy_gabbro_bricks_wall": "Pared de Ladrillos de Gabro Elegantes", - "block.create.fancy_granite_bricks": "Ladrillos de Granito Elegantes", - "block.create.fancy_granite_bricks_slab": "Losa de Ladrillos de Granito Elegantes", - "block.create.fancy_granite_bricks_stairs": "Escaleras de Ladrillos de Granito Elegantes", - "block.create.fancy_granite_bricks_wall": "Pared de Ladrillos de Granito Elegantes", - "block.create.fancy_limestone_bricks": "Ladrillos de Caliza Elegantes", - "block.create.fancy_limestone_bricks_slab": "Losa de Ladrillos de Caliza Elegantes", - "block.create.fancy_limestone_bricks_stairs": "Escaleras de Ladrillos de Caliza Elegantes", - "block.create.fancy_limestone_bricks_wall": "Pared de Ladrillos de Caliza Elegantes", - "block.create.fancy_scoria_bricks": "Ladrillos de Escoria Elegantes", - "block.create.fancy_scoria_bricks_slab": "Losa de Ladrillos de Escoria Elegantes", - "block.create.fancy_scoria_bricks_stairs": "Escaleras de Ladrillos de Escoria Elegantes", - "block.create.fancy_scoria_bricks_wall": "Pared de Ladrillos de Escoria Elegantes", - "block.create.fancy_weathered_limestone_bricks": "Ladrillos de Caliza Meteorizada Elegantes", - "block.create.fancy_weathered_limestone_bricks_slab": "Losa de Ladrillos de Caliza Meteorizada Elegantes", - "block.create.fancy_weathered_limestone_bricks_stairs": "Escaleras de Ladrillos de Caliza Meteorizada Elegantes", - "block.create.fancy_weathered_limestone_bricks_wall": "Pared de Ladrillos de Caliza Meteorizada Elegantes", - "block.create.fluid_pipe": "Tubería de Fluidos", - "block.create.fluid_tank": "Tanque de Fluidos", - "block.create.fluid_valve": "Válvula de Fluidos", - "block.create.flywheel": "Rueda de Inercia", - "block.create.framed_glass": "Vidrio Enmarcado", - "block.create.framed_glass_pane": "Panel de Vidrio Enmarcado", - "block.create.furnace_engine": "Motor de Horno", - "block.create.gabbro": "Gabro", - "block.create.gabbro_bricks": "Ladrillos de Gabro", - "block.create.gabbro_bricks_slab": "Losa de Ladrillos de Gabro", - "block.create.gabbro_bricks_stairs": "Escaleras de Ladrillos de Gabro", - "block.create.gabbro_bricks_wall": "Pared de Ladrillos de Gabro", - "block.create.gabbro_cobblestone": "Piedra Labrada de Gabro", - "block.create.gabbro_cobblestone_slab": "Losa de Piedra Labrada de Gabro", - "block.create.gabbro_cobblestone_stairs": "Escaleras de Piedra Labrada de Gabro", - "block.create.gabbro_cobblestone_wall": "Pared de Piedra Labrada de Gabro", - "block.create.gabbro_pillar": "Pilar de Gabro", - "block.create.gantry_carriage": "UNLOCALIZED: Gantry Carriage", - "block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft", - "block.create.gearbox": "Transmisión", - "block.create.gearshift": "Cambio de Marcha", - "block.create.glass_fluid_pipe": "Tubería de Fluidos de Vidrio", - "block.create.granite_bricks": "Ladrillos de Granito", - "block.create.granite_bricks_slab": "Losa de Ladrillos de Granito", - "block.create.granite_bricks_stairs": "Escaleras de Ladrillos de Granito", - "block.create.granite_bricks_wall": "Pared de Ladrillos de Granito", - "block.create.granite_cobblestone": "Piedra Labrada de Granito", - "block.create.granite_cobblestone_slab": "Losa de Piedra Labrada de Granito", - "block.create.granite_cobblestone_stairs": "Escaleras de Piedra Labrada de Granito", - "block.create.granite_cobblestone_wall": "Pared de Piedra Labrada de Granito", - "block.create.granite_pillar": "Pilar de Granito", - "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", - "block.create.gray_sail": "Vela Gris", - "block.create.gray_seat": "Asiento Gris", - "block.create.gray_valve_handle": "Manija de Válvula Gris", - "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", - "block.create.green_sail": "Vela Verde", - "block.create.green_seat": "Asiento Verde", - "block.create.green_valve_handle": "Manija de Válvula Verde", - "block.create.hand_crank": "Manivela", - "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", - "block.create.honey": "Miel", - "block.create.horizontal_framed_glass": "Vidrio Enmarcado Horizontal", - "block.create.horizontal_framed_glass_pane": "Panel de Vidrio Enmarcado Horizontal", - "block.create.hose_pulley": "Polea con Manguera", - "block.create.item_drain": "Extractor de Fluidos", - "block.create.jungle_window": "Ventana de Jungla", - "block.create.jungle_window_pane": "Panel de Ventana de Jungla", - "block.create.large_cogwheel": "Rueda Dentada Grande", - "block.create.layered_andesite": "Andesita en Capas", - "block.create.layered_dark_scoria": "Escoria Oscura en Capas", - "block.create.layered_diorite": "Diorita en Capas", - "block.create.layered_dolomite": "Dolomita en Capas", - "block.create.layered_gabbro": "Gabro en Capas", - "block.create.layered_granite": "Granito en Capas", - "block.create.layered_limestone": "Caliza en Capas", - "block.create.layered_scoria": "Escoria en Capas", - "block.create.layered_weathered_limestone": "Caliza Meteorizada en Capas", - "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", - "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", - "block.create.light_blue_sail": "Vela Azul Claro", - "block.create.light_blue_seat": "Asiento Azul Claro", - "block.create.light_blue_valve_handle": "Manija de Válvula Azul Claro", - "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", - "block.create.light_gray_sail": "Vela Gris Claro", - "block.create.light_gray_seat": "Asiento Gris Claro", - "block.create.light_gray_valve_handle": "Manija de Válvula Gris Claro", - "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", - "block.create.lime_sail": "Vela Verde Lima", - "block.create.lime_seat": "Asiento Verde Lima", - "block.create.lime_valve_handle": "Manija de Válvula Verde Lima", - "block.create.limesand": "Arena de Caliza", - "block.create.limestone": "Caliza", - "block.create.limestone_bricks": "Ladrillos de Caliza", - "block.create.limestone_bricks_slab": "Losa de Ladrillos de Caliza", - "block.create.limestone_bricks_stairs": "Escaleras de Ladrillos de Caliza", - "block.create.limestone_bricks_wall": "Pared de Ladrillos de Caliza", - "block.create.limestone_cobblestone": "Piedra Labrada de Caliza", - "block.create.limestone_cobblestone_slab": "Losa de Piedra Labrada de Caliza", - "block.create.limestone_cobblestone_stairs": "Escaleras de Piedra Labrada de Caliza", - "block.create.limestone_cobblestone_wall": "Pared de Piedra Labrada de Caliza", - "block.create.limestone_pillar": "Pilar de Caliza", - "block.create.linear_chassis": "Chasis Lineal", - "block.create.lit_blaze_burner": "Quemador de Blaze Iluminado", - "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", - "block.create.magenta_sail": "Vela Magenta", - "block.create.magenta_seat": "Asiento Magenta", - "block.create.magenta_valve_handle": "Manija de Válvula Magenta", - "block.create.mechanical_arm": "Brazo Mecánico", - "block.create.mechanical_bearing": "Rodamiento Mecánico", - "block.create.mechanical_crafter": "Crafter Mecánico", - "block.create.mechanical_drill": "Taladro Mecánico", - "block.create.mechanical_harvester": "Cosechador Mecánico", - "block.create.mechanical_mixer": "Mezcladora Mecánica", - "block.create.mechanical_piston": "Pistón Mecánico", - "block.create.mechanical_piston_head": "Cabeza de Pistón Mecánico", - "block.create.mechanical_plough": "Arado Mecánico", - "block.create.mechanical_press": "Prensa Mecánica", - "block.create.mechanical_pump": "Bomba Mecánica", - "block.create.mechanical_saw": "Sierra Mecánica", - "block.create.metal_bracket": "Soporte de Metal", - "block.create.millstone": "Molino", - "block.create.minecart_anchor": "Ancla de Vagonetas", - "block.create.mossy_andesite": "Andesita Musgosa", - "block.create.mossy_dark_scoria": "Escoria Oscura Musgosa", - "block.create.mossy_diorite": "Diorita Musgosa", - "block.create.mossy_dolomite": "Dolomita Musgosa", - "block.create.mossy_gabbro": "Gabro Musgoso", - "block.create.mossy_granite": "Granito Musgoso", - "block.create.mossy_limestone": "Caliza Musgosa", - "block.create.mossy_scoria": "Escoria Musgosa", - "block.create.mossy_weathered_limestone": "Caliza Meteorizada Musgosa", - "block.create.mysterious_cuckoo_clock": "Reloj Cuco", - "block.create.natural_scoria": "Escoria Natural", - "block.create.nixie_tube": "Tubo Nixie", - "block.create.nozzle": "Boquilla", - "block.create.oak_window": "Ventana de Roble", - "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_valve_handle": "Manija de Válvula Naranja", - "block.create.ornate_iron_window": "Ventana Ornamentada", - "block.create.ornate_iron_window_pane": "Panel de Ventana Ornamentada", - "block.create.overgrown_andesite": "Andesita Descuidada", - "block.create.overgrown_dark_scoria": "Escoria Oscura Descuidada", - "block.create.overgrown_diorite": "Diorita Descuidada", - "block.create.overgrown_dolomite": "Dolomita Descuidada", - "block.create.overgrown_gabbro": "Gabro Descuidado", - "block.create.overgrown_granite": "Granito Descuidado", - "block.create.overgrown_limestone": "Caliza Descuidada", - "block.create.overgrown_scoria": "Escoria Descuidada", - "block.create.overgrown_weathered_limestone": "Caliza Meteorizada Descuidada", - "block.create.paved_andesite": "Andesita Pavimentada", - "block.create.paved_andesite_slab": "Losa de Andesita Pavimentada", - "block.create.paved_andesite_stairs": "Escaleras de Andesita Pavimentada", - "block.create.paved_andesite_wall": "Pared de Andesita Pavimentada", - "block.create.paved_dark_scoria": "Escoria Oscura Pavimentada", - "block.create.paved_dark_scoria_slab": "Losa de Escoria Oscura Pavimentada", - "block.create.paved_dark_scoria_stairs": "Escaleras de Escoria Oscura Pavimentada", - "block.create.paved_dark_scoria_wall": "Pared de Escoria Oscura Pavimentada", - "block.create.paved_diorite": "Diorita Pavimentada", - "block.create.paved_diorite_slab": "Losa de Diorita Pavimentada", - "block.create.paved_diorite_stairs": "Escaleras de Diorita Pavimentada", - "block.create.paved_diorite_wall": "Pared de Diorita Pavimentada", - "block.create.paved_dolomite": "Dolomita Pavimentada", - "block.create.paved_dolomite_slab": "Losa de Dolomita Pavimentada", - "block.create.paved_dolomite_stairs": "Escaleras de Dolomita Pavimentada", - "block.create.paved_dolomite_wall": "Pared de Dolomita Pavimentada", - "block.create.paved_gabbro": "Gabro Pavimentado", - "block.create.paved_gabbro_slab": "Losa de Gabro Pavimentado", - "block.create.paved_gabbro_stairs": "Escaleras de Gabro Pavimentado", - "block.create.paved_gabbro_wall": "Pared de Gabro Pavimentado", - "block.create.paved_granite": "Granito Pavimentado", - "block.create.paved_granite_slab": "Losa de Granito Pavimentado", - "block.create.paved_granite_stairs": "Escaleras de Granito Pavimentado", - "block.create.paved_granite_wall": "Pared de Granito Pavimentado", - "block.create.paved_limestone": "Caliza Pavimentada", - "block.create.paved_limestone_slab": "Losa de Caliza Pavimentada", - "block.create.paved_limestone_stairs": "Escaleras de Caliza Pavimentada", - "block.create.paved_limestone_wall": "Pared de Caliza Pavimentada", - "block.create.paved_scoria": "Escoria Pavimentada", - "block.create.paved_scoria_slab": "Losa de Escoria Pavimentada", - "block.create.paved_scoria_stairs": "Escaleras de Escoria Pavimentada", - "block.create.paved_scoria_wall": "Pared de Escoria Pavimentada", - "block.create.paved_weathered_limestone": "Caliza Meteorizada Pavimentada", - "block.create.paved_weathered_limestone_slab": "Losa de Caliza Meteorizada Pavimentada", - "block.create.paved_weathered_limestone_stairs": "Escaleras de Caliza Meteorizada Pavimentada", - "block.create.paved_weathered_limestone_wall": "Pared de Caliza Meteorizada Pavimentada", - "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", - "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", - "block.create.pink_sail": "Vela Rosa", - "block.create.pink_seat": "Asiento Rosa", - "block.create.pink_valve_handle": "Manija de Válvula Rosa", - "block.create.piston_extension_pole": "Poste de Extensión de Pistón", - "block.create.polished_dark_scoria": "Escoria Oscura Pulida", - "block.create.polished_dark_scoria_slab": "Losa de Escoria Oscura Pulida", - "block.create.polished_dark_scoria_stairs": "Escaleras de Escoria Oscura Pulida", - "block.create.polished_dark_scoria_wall": "Pared de Escoria Oscura Pulida", - "block.create.polished_dolomite": "Dolomita Pulida", - "block.create.polished_dolomite_slab": "Losa de Dolomita Pulida", - "block.create.polished_dolomite_stairs": "Escaleras de Dolomita Pulida", - "block.create.polished_dolomite_wall": "Pared de Dolomita Pulida", - "block.create.polished_gabbro": "Gabro Pulido", - "block.create.polished_gabbro_slab": "Losa de Gabro Pulido", - "block.create.polished_gabbro_stairs": "Escaleras de Gabro Pulido", - "block.create.polished_gabbro_wall": "Pared de Gabro Pulido", - "block.create.polished_limestone": "Caliza Pulida", - "block.create.polished_limestone_slab": "Losa de Caliza Pulida", - "block.create.polished_limestone_stairs": "Escaleras de Caliza Pulida", - "block.create.polished_limestone_wall": "Pared de Caliza Pulida", - "block.create.polished_scoria": "Escoria Pulida", - "block.create.polished_scoria_slab": "Losa de Escoria Pulida", - "block.create.polished_scoria_stairs": "Escaleras de Escoria Pulida", - "block.create.polished_scoria_wall": "Pared de Escoria Pulida", - "block.create.polished_weathered_limestone": "Caliza Meteorizada Pulida", - "block.create.polished_weathered_limestone_slab": "Losa de Escoria Pulida", - "block.create.polished_weathered_limestone_stairs": "Escaleras de Escoria Pulida", - "block.create.polished_weathered_limestone_wall": "Pared de Escoria Pulida", - "block.create.portable_fluid_interface": "Interfaz de Fluidos Portable", - "block.create.portable_storage_interface": "Interfaz de Almacenamiento Portable", - "block.create.powered_latch": "Cerradura Electrica", - "block.create.powered_toggle_latch": "Cerradura Electrica de Palanca", - "block.create.pulley_magnet": "Polea con Imán", - "block.create.pulse_repeater": "Repetidor de Pulso", - "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", - "block.create.purple_sail": "Vela Morada", - "block.create.purple_seat": "Asiento Morado", - "block.create.purple_valve_handle": "Manija de Válvula Morada", - "block.create.radial_chassis": "Chasis Radial", - "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", - "block.create.red_sail": "Vela Roja", - "block.create.red_seat": "Asiento Rojo", - "block.create.red_valve_handle": "Manija de Válvula Roja", - "block.create.redstone_contact": "Contacto de Redstone", - "block.create.redstone_link": "Enlace de Redstone", - "block.create.refined_radiance_casing": "Carcasa Radiante", - "block.create.reinforced_rail": "Vía Reforzada", - "block.create.rope": "Cuerda", - "block.create.rope_pulley": "Polea con Cuerda", - "block.create.rotation_speed_controller": "Controlador de Velocidad de Rotación", - "block.create.sail_frame": "Marco de Vela", - "block.create.schematic_table": "Mesa de Esquemas", - "block.create.schematicannon": "Esquemacañon", - "block.create.scoria": "Escoria", - "block.create.scoria_bricks": "Ladrillos de Escoria", - "block.create.scoria_bricks_slab": "Losa de Ladrillos de Escoria", - "block.create.scoria_bricks_stairs": "Escaleras de Ladrillos de Escoria", - "block.create.scoria_bricks_wall": "Pared de Ladrillos de Escoria", - "block.create.scoria_cobblestone": "Piedra Labrada de Escoria", - "block.create.scoria_cobblestone_slab": "Losa de Piedra Labrada de Escoria", - "block.create.scoria_cobblestone_stairs": "Escaleras de Piedra Labrada de Escoria", - "block.create.scoria_cobblestone_wall": "Pared de Piedra Labrada de Escoria", - "block.create.scoria_pillar": "Pilar de Escoria", - "block.create.secondary_linear_chassis": "Chasis Lineal Secundario", - "block.create.sequenced_gearshift": "Cambio de Marcha Secuenciado", - "block.create.shadow_steel_casing": "Carcasa Sombría", - "block.create.shaft": "Eje", - "block.create.smart_chute": "UNLOCALIZED: Smart Chute", - "block.create.smart_fluid_pipe": "Tubería de Fluidos Inteligente", - "block.create.speedometer": "Velocímetro", - "block.create.spout": "Canaleta", - "block.create.spruce_window": "Ventana de Abeto", - "block.create.spruce_window_pane": "Panel de Ventana de Abeto", - "block.create.sticker": "UNLOCALIZED: Sticker", - "block.create.sticky_mechanical_piston": "Pistón Mecánico Pegajoso", - "block.create.stockpile_switch": "Interruptor de Pila", - "block.create.stressometer": "Estresómetro", - "block.create.tiled_glass": "Vidrio de Azulejos", - "block.create.tiled_glass_pane": "Panel de Vidrio de Azulejos", - "block.create.turntable": "Mesa Giratoria", - "block.create.vertical_framed_glass": "Vidrio Enmarcado Vertical", - "block.create.vertical_framed_glass_pane": "Panel de Vidrio Enmarcado Vertical", - "block.create.warped_window": "Ventana Distorsionada", - "block.create.warped_window_pane": "Panel de ventana Distorsionada", - "block.create.water_wheel": "Rueda Hidráulica", - "block.create.weathered_limestone": "Caliza Meteorizada", - "block.create.weathered_limestone_bricks": "Ladrillos de Caliza Meteorizada", - "block.create.weathered_limestone_bricks_slab": "Losa de Caliza Meteorizada", - "block.create.weathered_limestone_bricks_stairs": "Escaleras de Caliza Meteorizada", - "block.create.weathered_limestone_bricks_wall": "Pared de Caliza Meteorizada", - "block.create.weathered_limestone_cobblestone": "Piedra Labrada de Caliza Meteorizada", - "block.create.weathered_limestone_cobblestone_slab": "Losa de Piedra Labrada de Caliza Meteorizada", - "block.create.weathered_limestone_cobblestone_stairs": "Escaleras de Piedra Labrada de Caliza Meteorizada", - "block.create.weathered_limestone_cobblestone_wall": "Pared de Piedra Labrada de Caliza Meteorizada", - "block.create.weathered_limestone_pillar": "Pilar de Caliza Meteorizada", - "block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector", - "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", - "block.create.white_sail": "Vela Blanca", - "block.create.white_seat": "Asiento Blanco", - "block.create.white_valve_handle": "Manija de Válvula Blanca", - "block.create.windmill_bearing": "Rodamiento de Molino de Viento", - "block.create.wooden_bracket": "Soporte de Madera", - "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", - "block.create.yellow_sail": "Vela Amarilla", - "block.create.yellow_seat": "Asiento Amarillo", - "block.create.yellow_valve_handle": "Manija de Válvula Amarilla", - "block.create.zinc_block": "Bloque de Zinc", - "block.create.zinc_ore": "Mineral de Zinc", - - "enchantment.create.capacity": "UNLOCALIZED: Capacity", - "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", - - "entity.create.contraption": "Artefacto", - "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption", - "entity.create.potato_projectile": "UNLOCALIZED: Potato Projectile", - "entity.create.seat": "Asiento", - "entity.create.stationary_contraption": "Artefacto Estacionario", - "entity.create.super_glue": "Super Pegamento", - - "fluid.create.potion": "Poción", - "fluid.create.tea": "Té del Constructor", - - "item.create.andesite_alloy": "Aleación de Andesita", - "item.create.attribute_filter": "Filtro por Atributos", - "item.create.bar_of_chocolate": "Barra de Chocolate", - "item.create.belt_connector": "Conector de Correa", - "item.create.blaze_cake": "Pastel de Blaze", - "item.create.blaze_cake_base": "Base de Pastel de Blaze", - "item.create.brass_hand": "Mano de Latón", - "item.create.brass_ingot": "Lingote de Latón", - "item.create.brass_nugget": "Pepita de Latón", - "item.create.brass_sheet": "Lámina de Latón", - "item.create.builders_tea": "Té del Constructor", - "item.create.chest_minecart_contraption": "Artefacto de Vagón con Cofre", - "item.create.chocolate_bucket": "Cubeta de Chocolate", - "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", - "item.create.chromatic_compound": "Compuesto Cromático", - "item.create.cinder_flour": "Ceniza Molida", - "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", - "item.create.copper_ingot": "Lingote de Cobre", - "item.create.copper_nugget": "Pepita de Cobre", - "item.create.copper_sheet": "Lámina de Cobre", - "item.create.crafter_slot_cover": "Cubierta de Ranura del Crafter", - "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", - "item.create.crushed_aluminum_ore": "Mineral de Aluminio Molido", - "item.create.crushed_brass": "Latón Molido", - "item.create.crushed_copper_ore": "Mineral de Cobre Molido", - "item.create.crushed_gold_ore": "Mineral de Oro Molido", - "item.create.crushed_iron_ore": "Mineral de Hierro Molido", - "item.create.crushed_lead_ore": "Mineral de Plomo Molido", - "item.create.crushed_nickel_ore": "Mineral de Nickel Molido", - "item.create.crushed_osmium_ore": "Mineral de Osmio Molido", - "item.create.crushed_platinum_ore": "Mineral de Platino Molido", - "item.create.crushed_quicksilver_ore": "Mineral de Mercurio Molido", - "item.create.crushed_silver_ore": "Mineral de Plata Molido", - "item.create.crushed_tin_ore": "Mineral de Estaño Molido", - "item.create.crushed_uranium_ore": "Mineral de Uranio Molido", - "item.create.crushed_zinc_ore": "Mineral de Zinc Molido", - "item.create.diving_boots": "UNLOCALIZED: Diving Boots", - "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", - "item.create.dough": "Masa", - "item.create.electron_tube": "Válvula Electrónica", - "item.create.empty_blaze_burner": "Quemador de Blaze Vacío", - "item.create.empty_schematic": "Esquema Vacío", - "item.create.extendo_grip": "Brazo Extensor", - "item.create.filter": "Filtro", - "item.create.furnace_minecart_contraption": "Artefacto de Vagón con Horno", - "item.create.goggles": "Gafas de Protección para Ingenieros", - "item.create.golden_sheet": "Lámina de Oro", - "item.create.handheld_worldshaper": "Pistola de Manipulación de Mundo", - "item.create.honey_bucket": "Cubeta de Miel", - "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", - "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", - "item.create.incomplete_precision_mechanism": "UNLOCALIZED: Incomplete Precision Mechanism", - "item.create.iron_sheet": "Lámina de Hierro", - "item.create.linked_controller": "UNLOCALIZED: Linked Controller", - "item.create.minecart_contraption": "Artefacto de Vagón", - "item.create.minecart_coupling": "Acoplamiento de Vagonetas", - "item.create.polished_rose_quartz": "Cuarzo Rosa Pulido", - "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", - "item.create.powdered_obsidian": "Polvo de Obsidiana", - "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", - "item.create.propeller": "Hélice", - "item.create.red_sand_paper": "Papel de Arena Roja", - "item.create.refined_radiance": "Radiancia Refinada", - "item.create.rose_quartz": "Cuarzo Rosa", - "item.create.sand_paper": "Papel de Arena", - "item.create.schematic": "Esquema", - "item.create.schematic_and_quill": "Esquema y Pluma", - "item.create.shadow_steel": "Acero Sombrío", - "item.create.super_glue": "Super Pegamento", - "item.create.sweet_roll": "UNLOCALIZED: Sweet Roll", - "item.create.tree_fertilizer": "Fertilizador de Árboles", - "item.create.vertical_gearbox": "Transmisión Vertical", - "item.create.wand_of_symmetry": "Vara de la Simetria", - "item.create.wheat_flour": "Harina de Trigo", - "item.create.whisk": "Batidor", - "item.create.wrench": "Llave Inglesa", - "item.create.zinc_ingot": "Lingote de Zinc", - "item.create.zinc_nugget": "Pepita de Zinc", - - - "_": "->------------------------] Advancements [------------------------<-", - - "advancement.create.root": "UNLOCALIZED: Welcome to Create", - "advancement.create.root.desc": "UNLOCALIZED: It's time to start building some amazing Contraptions!", - "advancement.create.andesite_alloy": "UNLOCALIZED: Alliterations Aplenty", - "advancement.create.andesite_alloy.desc": "UNLOCALIZED: Create's materials have weird names, Andesite Alloy is one of them.", - "advancement.create.its_alive": "UNLOCALIZED: It's Alive!", - "advancement.create.its_alive.desc": "UNLOCALIZED: Watch your first kinetic component spin.", - "advancement.create.shifting_gears": "UNLOCALIZED: Shifting Gears", - "advancement.create.shifting_gears.desc": "UNLOCALIZED: Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your contraption.", - "advancement.create.overstressed": "UNLOCALIZED: Overstressed", - "advancement.create.overstressed.desc": "UNLOCALIZED: Experience the limits of stress firsthand.", - "advancement.create.belt": "UNLOCALIZED: Kelp Drive", - "advancement.create.belt.desc": "UNLOCALIZED: Connect two shafts with a Mechanical Belt.", - "advancement.create.tunnel": "UNLOCALIZED: Take cover!", - "advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your mechanical belt with a Tunnel.", - "advancement.create.splitter_tunnel": "UNLOCALIZED: Divide and Conquer", - "advancement.create.splitter_tunnel.desc": "UNLOCALIZED: Create a splitter with a group of Brass Tunnels.", - "advancement.create.chute": "UNLOCALIZED: Tumbling down", - "advancement.create.chute.desc": "UNLOCALIZED: Place a chute, the vertical counterpart of the belt.", - "advancement.create.upward_chute": "UNLOCALIZED: Aerial Abduction", - "advancement.create.upward_chute.desc": "UNLOCALIZED: Watch a thrown item fly up into a fan-powered chute.", - "advancement.create.belt_funnel": "UNLOCALIZED: Funnels' Flappy Danglers", - "advancement.create.belt_funnel.desc": "UNLOCALIZED: Place a sideways funnel on top of a belt or depot to create a special type.", - "advancement.create.belt_funnel_kiss": "UNLOCALIZED: The Parrots and the Flaps", - "advancement.create.belt_funnel_kiss.desc": "UNLOCALIZED: Make two belt mounted funnels kiss.", - "advancement.create.fan": "UNLOCALIZED: Mechanical Airbender", - "advancement.create.fan.desc": "UNLOCALIZED: Ride the stream of air provided by an Encased Fan.", - "advancement.create.fan_lava": "UNLOCALIZED: Geothermal Space Heater", - "advancement.create.fan_lava.desc": "UNLOCALIZED: Get caught in a stream of air that smelts things.", - "advancement.create.fan_water": "UNLOCALIZED: Wacky Washing", - "advancement.create.fan_water.desc": "UNLOCALIZED: Get caught in a stream of air that washes things.", - "advancement.create.fan_smoke": "UNLOCALIZED: Mechanical Bellows", - "advancement.create.fan_smoke.desc": "UNLOCALIZED: Get caught in a stream of air that smokes items.", - "advancement.create.wrench": "UNLOCALIZED: Configure Conveniently", - "advancement.create.wrench.desc": "UNLOCALIZED: Create a Wrench to aid you in building your contraptions.", - "advancement.create.goggles": "UNLOCALIZED: Stress-O-Vision", - "advancement.create.goggles.desc": "UNLOCALIZED: Create some Engineer's Goggles to aid you in getting more kinetic information from components.", - "advancement.create.speedometer": "UNLOCALIZED: But How Fast Exactly?", - "advancement.create.speedometer.desc": "UNLOCALIZED: Place and power a Speedometer. Look at it through your goggles to read its exact value.", - "advancement.create.stressometer": "UNLOCALIZED: But How Stressed Exactly?", - "advancement.create.stressometer.desc": "UNLOCALIZED: Place and power a Stressometer. Look at it through your goggles to read its exact value.", - "advancement.create.aesthetics": "UNLOCALIZED: Boom, Aesthetics!", - "advancement.create.aesthetics.desc": "UNLOCALIZED: Place brackets on a shaft, pipe and cogwheel.", - "advancement.create.reinforced": "UNLOCALIZED: Boom, Reinforced!", - "advancement.create.reinforced.desc": "UNLOCALIZED: Use fitting casing blocks on a shaft, pipe and mechanical belt.", - "advancement.create.water_wheel": "UNLOCALIZED: Harnessing Hydraulics", - "advancement.create.water_wheel.desc": "UNLOCALIZED: Place a Water Wheel and try getting it to spin!", - "advancement.create.chocolate_wheel": "UNLOCALIZED: Tasteful power", - "advancement.create.chocolate_wheel.desc": "UNLOCALIZED: Run a Water Wheel with molten Chocolate.", - "advancement.create.lava_wheel": "UNLOCALIZED: Magma Wheel", - "advancement.create.lava_wheel.desc": "UNLOCALIZED: This shouldn't have worked.", - "advancement.create.cuckoo": "UNLOCALIZED: Is it time?", - "advancement.create.cuckoo.desc": "UNLOCALIZED: Witness a cuckhoo clock announce bedtime.", - "advancement.create.millstone": "UNLOCALIZED: Pocket Crusher", - "advancement.create.millstone.desc": "UNLOCALIZED: Place and power a Millstone.", - "advancement.create.windmill": "UNLOCALIZED: A mild Breeze", - "advancement.create.windmill.desc": "UNLOCALIZED: Assemble a windmill.", - "advancement.create.maxed_windmill": "UNLOCALIZED: A strong breeze", - "advancement.create.maxed_windmill.desc": "UNLOCALIZED: Assemble a windmill of maximum strength.", - "advancement.create.andesite_casing": "UNLOCALIZED: The Andesite Age", - "advancement.create.andesite_casing.desc": "UNLOCALIZED: Use some Andesite Alloy and Wood to create a basic Casing.", - "advancement.create.mechanical_drill": "UNLOCALIZED: Stationary Breakers", - "advancement.create.mechanical_drill.desc": "UNLOCALIZED: Place and power a Mechanical Drill.", - "advancement.create.press": "UNLOCALIZED: Press Goes 'Bonk!'", - "advancement.create.press.desc": "UNLOCALIZED: Power a Mechanical Press and use it to create some Sheets.", - "advancement.create.polished_rose_quartz": "UNLOCALIZED: Pink Diamonds", - "advancement.create.polished_rose_quartz.desc": "UNLOCALIZED: Use a piece of Sand Paper to polish Rose Quartz until it becomes transparent.", - "advancement.create.electron_tube": "UNLOCALIZED: Beep Boop", - "advancement.create.electron_tube.desc": "UNLOCALIZED: Make some Electron Tubes, useful in crafting less primitive machinery.", - "advancement.create.mechanical_saw": "UNLOCALIZED: Stationary Chopping", - "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical Saw.", - "advancement.create.basin": "UNLOCALIZED: Basin Operation", - "advancement.create.basin.desc": "UNLOCALIZED: Place a Basin and try throwing items into it.", - "advancement.create.mixer": "UNLOCALIZED: Mixin' It Up", - "advancement.create.mixer.desc": "UNLOCALIZED: Place a Mechanical Mixer above the Basin, power it, and start mixing some ingredients.", - "advancement.create.blaze_burner": "UNLOCALIZED: A living Fireplace", - "advancement.create.blaze_burner.desc": "UNLOCALIZED: Obtain a Blaze Burner.", - "advancement.create.compact": "UNLOCALIZED: Automated Compacting", - "advancement.create.compact.desc": "UNLOCALIZED: Use a Press and a Basin to compact some items.", - "advancement.create.brass": "UNLOCALIZED: Actual Alloys", - "advancement.create.brass.desc": "UNLOCALIZED: Use Crushed Copper and Crushed Zinc to create some Brass.", - "advancement.create.brass_casing": "UNLOCALIZED: The Brass Age", - "advancement.create.brass_casing.desc": "UNLOCALIZED: Use newly obtained Brass and some Wood to create a more advanced Casing.", - "advancement.create.copper_casing": "UNLOCALIZED: The Copper Age", - "advancement.create.copper_casing.desc": "UNLOCALIZED: Use some Copper Sheets and Wood to create some Copper Casings.", - "advancement.create.spout": "UNLOCALIZED: Sploosh", - "advancement.create.spout.desc": "UNLOCALIZED: Watch a fluid item being filled using a spout.", - "advancement.create.spout_potion": "UNLOCALIZED: Global Brewery", - "advancement.create.spout_potion.desc": "UNLOCALIZED: Watch a spout fill a bottle with potion fluid.", - "advancement.create.chocolate": "UNLOCALIZED: A world of Imagination", - "advancement.create.chocolate.desc": "UNLOCALIZED: Obtain a bucket of Molten Chocolate.", - "advancement.create.item_drain": "UNLOCALIZED: Tumble Draining", - "advancement.create.item_drain.desc": "UNLOCALIZED: Watch a fluid item being emptied by an item drain.", - "advancement.create.chained_item_drain": "UNLOCALIZED: Let it roll!", - "advancement.create.chained_item_drain.desc": "UNLOCALIZED: Watch an item roll across several chained item drains.", - "advancement.create.glass_pipe": "UNLOCALIZED: Flow Spy", - "advancement.create.glass_pipe.desc": "UNLOCALIZED: Watch fluid propagate through a windowed fluid pipe. Straight fluid pipes become windowed when a wrench is used on them.", - "advancement.create.pipe_collision": "UNLOCALIZED: Never cross the Streams!", - "advancement.create.pipe_collision.desc": "UNLOCALIZED: Watch two fluids meet in your pipe network.", - "advancement.create.pipe_spill": "UNLOCALIZED: There's a leak!", - "advancement.create.pipe_spill.desc": "UNLOCALIZED: Watch an open end of a pipe take or place fluids into the world.", - "advancement.create.hose_pulley": "UNLOCALIZED: Industrial Spillage", - "advancement.create.hose_pulley.desc": "UNLOCALIZED: Lower a hose pulley and watch it drain or fill a body of fluid.", - "advancement.create.infinite_water": "UNLOCALIZED: Draining the Ocean", - "advancement.create.infinite_water.desc": "UNLOCALIZED: Pump from a body of Water large enough to be considered Infinite.", - "advancement.create.infinite_lava": "UNLOCALIZED: Draining the Planets' Core", - "advancement.create.infinite_lava.desc": "UNLOCALIZED: Pump from a body of Lava large enough to be considered Infinite.", - "advancement.create.infinite_chocolate": "UNLOCALIZED: Drowning in Imagination", - "advancement.create.infinite_chocolate.desc": "UNLOCALIZED: Pump from a body of Molten Chocolate large enough to be considered Infinite.", - "advancement.create.crafter": "UNLOCALIZED: Automated Assembly", - "advancement.create.crafter.desc": "UNLOCALIZED: Place and power some Mechanical Crafters.", - "advancement.create.clockwork_bearing": "UNLOCALIZED: Contraption o'clock", - "advancement.create.clockwork_bearing.desc": "UNLOCALIZED: Assemble a Structure mounted on a Clockwork Bearing.", - "advancement.create.nixie_tube": "UNLOCALIZED: Signs of Style", - "advancement.create.nixie_tube.desc": "UNLOCALIZED: Obtain and place down a pair of Nixie Tubes.", - "advancement.create.deployer": "UNLOCALIZED: Poke, Place, and Attack", - "advancement.create.deployer.desc": "UNLOCALIZED: Place and power a Deployer, the perfect reflection of yourself.", - "advancement.create.speed_controller": "UNLOCALIZED: Engineers hate him!", - "advancement.create.speed_controller.desc": "UNLOCALIZED: Place a Rotation Speed Controller, the ultimate device for changing gear.", - "advancement.create.flywheel": "UNLOCALIZED: Heart of the Factory", - "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an engine to the Flywheel.", - "advancement.create.overstress_flywheel": "UNLOCALIZED: High levels of Stress", - "advancement.create.overstress_flywheel.desc": "UNLOCALIZED: Overstress a Furnace Engine.", - "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", - "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", - "advancement.create.mechanical_arm": "UNLOCALIZED: Busy Hands!", - "advancement.create.mechanical_arm.desc": "UNLOCALIZED: Craft a Mechanical Arm, select in- and outputs, place it down and give it power; then watch as it does all the work for you.", - "advancement.create.musical_arm": "UNLOCALIZED: Play Me My Theme Tune!", - "advancement.create.musical_arm.desc": "UNLOCALIZED: Watch a Mechanical Arm operate your Jukebox.", - "advancement.create.arm_many_targets": "UNLOCALIZED: Organize-o-Tron", - "advancement.create.arm_many_targets.desc": "UNLOCALIZED: Program a Mechanical Arm with ten or more output locations.", - "advancement.create.arm_blaze_burner": "UNLOCALIZED: Combust-o-Tron", - "advancement.create.arm_blaze_burner.desc": "UNLOCALIZED: Instruct a Mechanical Arm to feed your Blaze Burner.", - "advancement.create.fist_bump": "UNLOCALIZED: Pound It, Bro!", - "advancement.create.fist_bump.desc": "UNLOCALIZED: Make two Deployers fist-bump.", - "advancement.create.crushing_wheel": "UNLOCALIZED: A Pair of Giants", - "advancement.create.crushing_wheel.desc": "UNLOCALIZED: Create some Crushing Wheels to break down more materials more effectively.", - "advancement.create.blaze_cake": "UNLOCALIZED: Sugar Rush", - "advancement.create.blaze_cake.desc": "UNLOCALIZED: Bake your blaze burner a special cake.", - "advancement.create.chromatic_compound": "UNLOCALIZED: Mysterious Minerals", - "advancement.create.chromatic_compound.desc": "UNLOCALIZED: Create a Bar of Chromatic Compound.", - "advancement.create.shadow_steel": "UNLOCALIZED: Void Returner", - "advancement.create.shadow_steel.desc": "UNLOCALIZED: Create Shadow Steel, a metal bar of nothingness.", - "advancement.create.refined_radiance": "UNLOCALIZED: Bright and Inspiring", - "advancement.create.refined_radiance.desc": "UNLOCALIZED: Create Refined Radiance, a powerful chromatic substance.", - "advancement.create.chromatic_age": "UNLOCALIZED: The Chromatic Age", - "advancement.create.chromatic_age.desc": "UNLOCALIZED: Create casing blocks of the light and dark.", - "advancement.create.wand_of_symmetry": "UNLOCALIZED: Radiant Mirrors", - "advancement.create.wand_of_symmetry.desc": "UNLOCALIZED: Craft a Staff of Symmetry.", - "advancement.create.extendo_grip": "UNLOCALIZED: Boioioing!", - "advancement.create.extendo_grip.desc": "UNLOCALIZED: Get hold of an Extendo Grip.", - "advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!", - "advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.", - "advancement.create.dual_extendo_grip": "UNLOCALIZED: Ultimate Boing-age", - "advancement.create.dual_extendo_grip.desc": "UNLOCALIZED: Dual wield Extendo Grips for super-human reach.", - "advancement.create.eob": "UNLOCALIZED: End of Beta", - "advancement.create.eob.desc": "UNLOCALIZED: Expect more content here in the future. <3", - - - "_": "->------------------------] UI & Messages [------------------------<-", - - "itemGroup.create.base": "UNLOCALIZED: Create", - "itemGroup.create.palettes": "UNLOCALIZED: Create Palettes", - - "death.attack.create.crush": "UNLOCALIZED: %1$s was processed by Crushing Wheels", - "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", - "death.attack.create.fan_fire": "UNLOCALIZED: %1$s got smoked by an Encased Fan", - "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", - "death.attack.create.fan_lava": "UNLOCALIZED: %1$s was incinerated by an Encased Fan", - "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", - "death.attack.create.mechanical_drill": "UNLOCALIZED: %1$s was impaled by a Mechanical Drill", - "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", - "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw", - "death.attack.create.mechanical_saw.player": "UNLOCALIZED: %1$s was thrown into a Saw by %2$s", - "death.attack.create.potato_cannon": "UNLOCALIZED: %1$s was shot by %2$s's Potato Cannon", - "death.attack.create.potato_cannon.item": "UNLOCALIZED: %1$s was shot by %2$s using %3$s", - "death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", - "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", - - "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", - "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", - - "create.menu.return": "UNLOCALIZED: Return to Menu", - "create.menu.configure": "UNLOCALIZED: Configure...", - "create.menu.ponder_index": "UNLOCALIZED: Ponder Index", - "create.menu.only_ingame": "UNLOCALIZED: Available in the Pause Menu", - "create.menu.project_page": "UNLOCALIZED: Project Page", - "create.menu.report_bugs": "UNLOCALIZED: Report Issues", - "create.menu.support": "UNLOCALIZED: Support Us", - - "create.recipe.crushing": "UNLOCALIZED: Crushing", - "create.recipe.milling": "UNLOCALIZED: Milling", - "create.recipe.fan_washing": "UNLOCALIZED: Bulk Washing", - "create.recipe.fan_washing.fan": "UNLOCALIZED: Fan behind Flowing Water", - "create.recipe.fan_smoking": "UNLOCALIZED: Bulk Smoking", - "create.recipe.fan_smoking.fan": "UNLOCALIZED: Fan behind Fire", - "create.recipe.fan_blasting": "UNLOCALIZED: Bulk Blasting", - "create.recipe.fan_blasting.fan": "UNLOCALIZED: Fan behind Lava", - "create.recipe.pressing": "UNLOCALIZED: Pressing", - "create.recipe.mixing": "UNLOCALIZED: Mixing", - "create.recipe.deploying": "UNLOCALIZED: Deploying", - "create.recipe.automatic_shapeless": "UNLOCALIZED: Automated Shapeless Crafting", - "create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing", - "create.recipe.packing": "UNLOCALIZED: Compacting", - "create.recipe.automatic_packing": "UNLOCALIZED: Automated Packing", - "create.recipe.sawing": "UNLOCALIZED: Sawing", - "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", - "create.recipe.automatic_shaped": "UNLOCALIZED: Automated Shaped Crafting", - "create.recipe.block_cutting": "UNLOCALIZED: Block Cutting", - "create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting", - "create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing", - "create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion", - "create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout", - "create.recipe.draining": "UNLOCALIZED: Item Draining", - "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", - "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", - "create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:", - "create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$s", - "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", - "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", - "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", - "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", - "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", - "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", - "create.recipe.processing.chance": "UNLOCALIZED: %1$s%% Chance", - "create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", - "create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", - "create.recipe.heat_requirement.superheated": "UNLOCALIZED: Super-Heated", - - "create.generic.range": "UNLOCALIZED: Range", - "create.generic.radius": "UNLOCALIZED: Radius", - "create.generic.width": "UNLOCALIZED: Width", - "create.generic.height": "UNLOCALIZED: Height", - "create.generic.length": "UNLOCALIZED: Length", - "create.generic.speed": "UNLOCALIZED: Speed", - "create.generic.delay": "UNLOCALIZED: Delay", - "create.generic.unit.ticks": "UNLOCALIZED: Ticks", - "create.generic.unit.seconds": "UNLOCALIZED: Seconds", - "create.generic.unit.minutes": "UNLOCALIZED: Minutes", - "create.generic.unit.rpm": "UNLOCALIZED: RPM", - "create.generic.unit.stress": "UNLOCALIZED: su", - "create.generic.unit.degrees": "UNLOCALIZED: °", - "create.generic.unit.millibuckets": "UNLOCALIZED: %1$smB", - "create.generic.clockwise": "UNLOCALIZED: Clockwise", - "create.generic.counter_clockwise": "UNLOCALIZED: Counter-Clockwise", - - "create.action.scroll": "UNLOCALIZED: Scroll", - "create.action.confirm": "UNLOCALIZED: Confirm", - "create.action.abort": "UNLOCALIZED: Abort", - "create.action.saveToFile": "UNLOCALIZED: Save", - "create.action.discard": "UNLOCALIZED: Discard", - - "create.keyinfo.toolmenu": "UNLOCALIZED: Focus Tool Menu", - "create.keyinfo.scrollup": "UNLOCALIZED: Simulate Mousewheel Up (inworld)", - "create.keyinfo.scrolldown": "UNLOCALIZED: Simulate Mousewheel Down (inworld)", - - "create.gui.scrollInput.defaultTitle": "UNLOCALIZED: Choose an Option:", - "create.gui.scrollInput.scrollToModify": "UNLOCALIZED: Scroll to Modify", - "create.gui.scrollInput.scrollToAdjustAmount": "UNLOCALIZED: Scroll to Adjust Amount", - "create.gui.scrollInput.scrollToSelect": "UNLOCALIZED: Scroll to Select", - "create.gui.scrollInput.shiftScrollsFaster": "UNLOCALIZED: Shift to Scroll Faster", - "create.gui.toolmenu.focusKey": "UNLOCALIZED: Hold [%1$s] to Focus", - "create.gui.toolmenu.cycle": "UNLOCALIZED: [SCROLL] to Cycle", - "create.gui.symmetryWand.mirrorType": "UNLOCALIZED: Mirror", - "create.gui.symmetryWand.orientation": "UNLOCALIZED: Orientation", - - "create.symmetry.mirror.plane": "UNLOCALIZED: Mirror Once", - "create.symmetry.mirror.doublePlane": "UNLOCALIZED: Rectangular", - "create.symmetry.mirror.triplePlane": "UNLOCALIZED: Octagonal", - - "create.orientation.orthogonal": "UNLOCALIZED: Orthogonal", - "create.orientation.diagonal": "UNLOCALIZED: Diagonal", - "create.orientation.horizontal": "UNLOCALIZED: Horizontal", - "create.orientation.alongZ": "UNLOCALIZED: Along Z", - "create.orientation.alongX": "UNLOCALIZED: Along X", - - "create.gui.terrainzapper.title": "UNLOCALIZED: Handheld Blockzapper", - "create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals", - "create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders", - "create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern", - "create.gui.terrainzapper.pattern.solid": "UNLOCALIZED: Solid", - "create.gui.terrainzapper.pattern.checkered": "UNLOCALIZED: Checkerboard", - "create.gui.terrainzapper.pattern.inversecheckered": "UNLOCALIZED: Inverted Checkerboard", - "create.gui.terrainzapper.pattern.chance25": "UNLOCALIZED: 25% Roll", - "create.gui.terrainzapper.pattern.chance50": "UNLOCALIZED: 50% Roll", - "create.gui.terrainzapper.pattern.chance75": "UNLOCALIZED: 75% Roll", - "create.gui.terrainzapper.placement": "UNLOCALIZED: Placement", - "create.gui.terrainzapper.placement.merged": "UNLOCALIZED: Merged", - "create.gui.terrainzapper.placement.attached": "UNLOCALIZED: Attached", - "create.gui.terrainzapper.placement.inserted": "UNLOCALIZED: Inserted", - "create.gui.terrainzapper.brush": "UNLOCALIZED: Brush", - "create.gui.terrainzapper.brush.cuboid": "UNLOCALIZED: Cuboid", - "create.gui.terrainzapper.brush.sphere": "UNLOCALIZED: Sphere", - "create.gui.terrainzapper.brush.cylinder": "UNLOCALIZED: Cylinder", - "create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface", - "create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster", - "create.gui.terrainzapper.tool": "UNLOCALIZED: Tool", - "create.gui.terrainzapper.tool.fill": "UNLOCALIZED: Fill", - "create.gui.terrainzapper.tool.place": "UNLOCALIZED: Place", - "create.gui.terrainzapper.tool.replace": "UNLOCALIZED: Replace", - "create.gui.terrainzapper.tool.clear": "UNLOCALIZED: Clear", - "create.gui.terrainzapper.tool.overlay": "UNLOCALIZED: Overlay", - "create.gui.terrainzapper.tool.flatten": "UNLOCALIZED: Flatten", - - "create.terrainzapper.shiftRightClickToSet": "UNLOCALIZED: Shift-Right-Click to Select a Shape", - "create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s", - "create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material", - - "create.minecart_coupling.two_couplings_max": "UNLOCALIZED: Minecarts cannot have more than two couplings each", - "create.minecart_coupling.unloaded": "UNLOCALIZED: Parts of your train seem to be in unloaded chunks", - "create.minecart_coupling.no_loops": "UNLOCALIZED: Couplings cannot form a loop", - "create.minecart_coupling.removed": "UNLOCALIZED: Removed all couplings from minecart", - "create.minecart_coupling.too_far": "UNLOCALIZED: Minecarts are too far apart", - - "create.contraptions.movement_mode": "UNLOCALIZED: Movement Mode", - "create.contraptions.movement_mode.move_place": "UNLOCALIZED: Always Place when Stopped", - "create.contraptions.movement_mode.move_place_returned": "UNLOCALIZED: Place only in Starting Position", - "create.contraptions.movement_mode.move_never_place": "UNLOCALIZED: Place only when Anchor Destroyed", - "create.contraptions.movement_mode.rotate_place": "UNLOCALIZED: Always Place when Stopped", - "create.contraptions.movement_mode.rotate_place_returned": "UNLOCALIZED: Only Place near Initial Angle", - "create.contraptions.movement_mode.rotate_never_place": "UNLOCALIZED: Only Place when Anchor Destroyed", - "create.contraptions.cart_movement_mode": "UNLOCALIZED: Cart Movement Mode", - "create.contraptions.cart_movement_mode.rotate": "UNLOCALIZED: Always face toward motion", - "create.contraptions.cart_movement_mode.rotate_paused": "UNLOCALIZED: Pause actors while rotating", - "create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation", - "create.contraptions.windmill.rotation_direction": "UNLOCALIZED: Rotation Direction", - "create.contraptions.clockwork.clock_hands": "UNLOCALIZED: Clock Hands", - "create.contraptions.clockwork.hour_first": "UNLOCALIZED: Hour hand first", - "create.contraptions.clockwork.minute_first": "UNLOCALIZED: Minute hand first", - "create.contraptions.clockwork.hour_first_24": "UNLOCALIZED: 24-Hour hand first", - - "create.logistics.filter": "UNLOCALIZED: Filter", - "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", - "create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter", - "create.logistics.firstFrequency": "UNLOCALIZED: Freq. #1", - "create.logistics.secondFrequency": "UNLOCALIZED: Freq. #2", - "create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.", - "create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.", - "create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.", - - "create.gui.goggles.generator_stats": "UNLOCALIZED: Generator Stats:", - "create.gui.goggles.kinetic_stats": "UNLOCALIZED: Kinetic Stats:", - "create.gui.goggles.at_current_speed": "UNLOCALIZED: at current speed", - "create.gui.goggles.pole_length": "UNLOCALIZED: Pole Length:", - "create.gui.goggles.fluid_container": "UNLOCALIZED: Fluid Container Info:", - "create.gui.goggles.fluid_container.capacity": "UNLOCALIZED: Capacity: ", - "create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:", - "create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s,%2$s,%3$s]", - "create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s,%2$s,%3$s] was not in a loaded chunk", - "create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s", - "create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s", - "create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles", - "create.gui.assembly.exception.not_enough_sails": "UNLOCALIZED: Attached structure does not include enough sail-like blocks: %1$s\nA minimum of %2$s are required", - "create.gui.gauge.info_header": "UNLOCALIZED: Gauge Information:", - "create.gui.speedometer.title": "UNLOCALIZED: Rotation Speed", - "create.gui.stressometer.title": "UNLOCALIZED: Network Stress", - "create.gui.stressometer.capacity": "UNLOCALIZED: Remaining Capacity", - "create.gui.stressometer.overstressed": "UNLOCALIZED: Overstressed", - "create.gui.stressometer.no_rotation": "UNLOCALIZED: No Rotation", - "create.gui.contraptions.not_fast_enough": "UNLOCALIZED: It appears that this %1$s is _not_ rotating with _enough_ _speed_.", - "create.gui.contraptions.network_overstressed": "UNLOCALIZED: It appears that this contraption is _overstressed_. Add more sources or _slow_ _down_ the components with a high _stress_ _impact_.", - "create.gui.adjustable_crate.title": "UNLOCALIZED: Adjustable Crate", - "create.gui.adjustable_crate.storageSpace": "UNLOCALIZED: Storage Space", - "create.gui.stockpile_switch.title": "UNLOCALIZED: Stockpile Switch", - "create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal", - "create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%", - "create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%", - "create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift", - "create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction", - "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle", - "create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn", - "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle", - "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry", - "create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston", - "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance", - "create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay", - "create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay", - "create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration", - "create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End", - "create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End", - "create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse", - "create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await", - "create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction", - "create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards", - "create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards", - "create.gui.sequenced_gearshift.speed.back": "UNLOCALIZED: Input speed, Reversed", - "create.gui.sequenced_gearshift.speed.back_fast": "UNLOCALIZED: Double speed, Reversed", - - "create.schematicAndQuill.dimensions": "UNLOCALIZED: Schematic Size: %1$sx%2$sx%3$s", - "create.schematicAndQuill.firstPos": "UNLOCALIZED: First position set.", - "create.schematicAndQuill.secondPos": "UNLOCALIZED: Second position set.", - "create.schematicAndQuill.noTarget": "UNLOCALIZED: Hold [Ctrl] to select Air blocks.", - "create.schematicAndQuill.abort": "UNLOCALIZED: Removed selection.", - "create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:", - "create.schematicAndQuill.convert": "UNLOCALIZED: Save and Upload Immediately", - "create.schematicAndQuill.fallbackName": "UNLOCALIZED: My Schematic", - "create.schematicAndQuill.saved": "UNLOCALIZED: Saved as %1$s", - - "create.schematic.invalid": "UNLOCALIZED: [!] Invalid Item - Use the Schematic Table instead", - "create.schematic.position": "UNLOCALIZED: Position", - "create.schematic.rotation": "UNLOCALIZED: Rotation", - "create.schematic.rotation.none": "UNLOCALIZED: None", - "create.schematic.rotation.cw90": "UNLOCALIZED: Clockwise 90", - "create.schematic.rotation.cw180": "UNLOCALIZED: Clockwise 180", - "create.schematic.rotation.cw270": "UNLOCALIZED: Clockwise 270", - "create.schematic.mirror": "UNLOCALIZED: Mirror", - "create.schematic.mirror.none": "UNLOCALIZED: None", - "create.schematic.mirror.frontBack": "UNLOCALIZED: Front-Back", - "create.schematic.mirror.leftRight": "UNLOCALIZED: Left-Right", - "create.schematic.tool.deploy": "UNLOCALIZED: Position", - "create.schematic.tool.move": "UNLOCALIZED: Move XZ", - "create.schematic.tool.movey": "UNLOCALIZED: Move Y", - "create.schematic.tool.rotate": "UNLOCALIZED: Rotate", - "create.schematic.tool.print": "UNLOCALIZED: Print", - "create.schematic.tool.flip": "UNLOCALIZED: Mirror", - "create.schematic.tool.deploy.description.0": "UNLOCALIZED: Moves the structure to a location.", - "create.schematic.tool.deploy.description.1": "UNLOCALIZED: Right-Click on the ground to place.", - "create.schematic.tool.deploy.description.2": "UNLOCALIZED: Hold [Ctrl] to select at a fixed distance.", - "create.schematic.tool.deploy.description.3": "UNLOCALIZED: [Ctrl]-Scroll to change the distance.", - "create.schematic.tool.move.description.0": "UNLOCALIZED: Shifts the Schematic Horizontally.", - "create.schematic.tool.move.description.1": "UNLOCALIZED: Point at the Schematic and [CTRL]-Scroll to push it.", - "create.schematic.tool.move.description.2": "UNLOCALIZED: ", - "create.schematic.tool.move.description.3": "UNLOCALIZED: ", - "create.schematic.tool.movey.description.0": "UNLOCALIZED: Shifts the Schematic Vertically.", - "create.schematic.tool.movey.description.1": "UNLOCALIZED: [CTRL]-Scroll to move it up/down.", - "create.schematic.tool.movey.description.2": "UNLOCALIZED: ", - "create.schematic.tool.movey.description.3": "UNLOCALIZED: ", - "create.schematic.tool.rotate.description.0": "UNLOCALIZED: Rotates the Schematic around its center.", - "create.schematic.tool.rotate.description.1": "UNLOCALIZED: [CTRL]-Scroll to rotate by 90 Degrees.", - "create.schematic.tool.rotate.description.2": "UNLOCALIZED: ", - "create.schematic.tool.rotate.description.3": "UNLOCALIZED: ", - "create.schematic.tool.print.description.0": "UNLOCALIZED: Instantly places the structure in the world.", - "create.schematic.tool.print.description.1": "UNLOCALIZED: [Right-Click] to confirm placement at the current location.", - "create.schematic.tool.print.description.2": "UNLOCALIZED: This tool is for Creative Mode only.", - "create.schematic.tool.print.description.3": "UNLOCALIZED: ", - "create.schematic.tool.flip.description.0": "UNLOCALIZED: Flips the Schematic along the face you select.", - "create.schematic.tool.flip.description.1": "UNLOCALIZED: Point at the Schematic and [CTRL]-Scroll to flip it.", - "create.schematic.tool.flip.description.2": "UNLOCALIZED: ", - "create.schematic.tool.flip.description.3": "UNLOCALIZED: ", - - "create.schematics.synchronizing": "UNLOCALIZED: Syncing...", - "create.schematics.uploadTooLarge": "UNLOCALIZED: Your schematic exceeds limitations specified by the server.", - "create.schematics.maxAllowedSize": "UNLOCALIZED: The maximum allowed schematic file size is:", - - "create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files", - "create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder", - "create.gui.schematicTable.title": "UNLOCALIZED: Schematic Table", - "create.gui.schematicTable.availableSchematics": "UNLOCALIZED: Available Schematics", - "create.gui.schematicTable.noSchematics": "UNLOCALIZED: No Schematics Saved", - "create.gui.schematicTable.uploading": "UNLOCALIZED: Uploading...", - "create.gui.schematicTable.finished": "UNLOCALIZED: Upload Finished!", - "create.gui.schematicannon.title": "UNLOCALIZED: Schematicannon", - "create.gui.schematicannon.listPrinter": "UNLOCALIZED: Checklist Printer", - "create.gui.schematicannon.gunpowderLevel": "UNLOCALIZED: Gunpowder at %1$s%%", - "create.gui.schematicannon.shotsRemaining": "UNLOCALIZED: Shots left: %1$s", - "create.gui.schematicannon.shotsRemainingWithBackup": "UNLOCALIZED: With backup: %1$s", - "create.gui.schematicannon.optionEnabled": "UNLOCALIZED: Currently Enabled", - "create.gui.schematicannon.optionDisabled": "UNLOCALIZED: Currently Disabled", - "create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings", - "create.gui.schematicannon.option.dontReplaceSolid": "UNLOCALIZED: Don't Replace Solid Blocks", - "create.gui.schematicannon.option.replaceWithSolid": "UNLOCALIZED: Replace Solid with Solid", - "create.gui.schematicannon.option.replaceWithAny": "UNLOCALIZED: Replace Solid with Any", - "create.gui.schematicannon.option.replaceWithEmpty": "UNLOCALIZED: Replace Solid with Empty", - "create.gui.schematicannon.option.skipMissing": "UNLOCALIZED: Skip missing Blocks", - "create.gui.schematicannon.option.skipTileEntities": "UNLOCALIZED: Protect Tile Entities", - "create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon", - "create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic", - "create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.", - "create.gui.schematicannon.option.skipMissing.description": "UNLOCALIZED: If the cannon cannot find a required Block for placement, it will continue at the next Location.", - "create.gui.schematicannon.option.skipTileEntities.description": "UNLOCALIZED: The cannon will avoid replacing data holding blocks such as Chests.", - "create.gui.schematicannon.option.dontReplaceSolid.description": "UNLOCALIZED: The cannon will never replace any Solid blocks in its working area, only non-Solid and Air.", - "create.gui.schematicannon.option.replaceWithSolid.description": "UNLOCALIZED: The cannon will only replace Solid blocks in its working area if the Schematic contains a solid Block at the Location.", - "create.gui.schematicannon.option.replaceWithAny.description": "UNLOCALIZED: The cannon will replace Solid blocks in its working area if the Schematic contains any Block at the Location.", - "create.gui.schematicannon.option.replaceWithEmpty.description": "UNLOCALIZED: The cannon will clear out all blocks in its working area, including those replaced by Air.", - - "create.schematicannon.status.idle": "UNLOCALIZED: Idle", - "create.schematicannon.status.ready": "UNLOCALIZED: Ready", - "create.schematicannon.status.running": "UNLOCALIZED: Running", - "create.schematicannon.status.finished": "UNLOCALIZED: Finished", - "create.schematicannon.status.paused": "UNLOCALIZED: Paused", - "create.schematicannon.status.stopped": "UNLOCALIZED: Stopped", - "create.schematicannon.status.noGunpowder": "UNLOCALIZED: Out of Gunpowder", - "create.schematicannon.status.targetNotLoaded": "UNLOCALIZED: Target is not loaded", - "create.schematicannon.status.targetOutsideRange": "UNLOCALIZED: Target too far away", - "create.schematicannon.status.searching": "UNLOCALIZED: Searching", - "create.schematicannon.status.skipping": "UNLOCALIZED: Skipping", - "create.schematicannon.status.missingBlock": "UNLOCALIZED: Missing Item:", - "create.schematicannon.status.placing": "UNLOCALIZED: Placing", - "create.schematicannon.status.clearing": "UNLOCALIZED: Clearing Blocks", - "create.schematicannon.status.schematicInvalid": "UNLOCALIZED: Schematic Invalid", - "create.schematicannon.status.schematicNotPlaced": "UNLOCALIZED: Schematic not Positioned", - "create.schematicannon.status.schematicExpired": "UNLOCALIZED: Schematic File Expired", - - "create.materialChecklist": "UNLOCALIZED: Material Checklist", - "create.materialChecklist.blocksNotLoaded": "UNLOCALIZED: * Disclaimer *\n\nMaterial List may be inaccurate due to relevant chunks not being loaded.", - - "create.gui.filter.deny_list": "UNLOCALIZED: Deny-List", - "create.gui.filter.deny_list.description": "UNLOCALIZED: Items pass if they do NOT match any of the above. An empty Deny-List accepts everything.", - "create.gui.filter.allow_list": "UNLOCALIZED: Allow-List", - "create.gui.filter.allow_list.description": "UNLOCALIZED: Items pass if they match any of the above. An empty Allow-List rejects everything.", - "create.gui.filter.respect_data": "UNLOCALIZED: Respect Data", - "create.gui.filter.respect_data.description": "UNLOCALIZED: Items only match if their durability, enchantments, and other attributes match as well.", - "create.gui.filter.ignore_data": "UNLOCALIZED: Ignore Data", - "create.gui.filter.ignore_data.description": "UNLOCALIZED: Items match regardless of their attributes.", - - "create.item_attributes.placeable": "UNLOCALIZED: is placeable", - "create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable", - "create.item_attributes.consumable": "UNLOCALIZED: can be eaten", - "create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten", - "create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted", - "create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted", - "create.item_attributes.washable": "UNLOCALIZED: can be Washed", - "create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed", - "create.item_attributes.smokable": "UNLOCALIZED: can be Smoked", - "create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked", - "create.item_attributes.crushable": "UNLOCALIZED: can be Crushed", - "create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed", - "create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace", - "create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace", - "create.item_attributes.enchanted": "UNLOCALIZED: is enchanted", - "create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted", - "create.item_attributes.damaged": "UNLOCALIZED: is damaged", - "create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged", - "create.item_attributes.badly_damaged": "UNLOCALIZED: is heavily damaged", - "create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged", - "create.item_attributes.not_stackable": "UNLOCALIZED: cannot stack", - "create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked", - "create.item_attributes.equipable": "UNLOCALIZED: can be equipped", - "create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped", - "create.item_attributes.furnace_fuel": "UNLOCALIZED: is furnace fuel", - "create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel", - "create.item_attributes.in_tag": "UNLOCALIZED: is tagged %1$s", - "create.item_attributes.in_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", - "create.item_attributes.has_name.inverted": "UNLOCALIZED: does not have the custom name %1$s", - "create.item_attributes.book_author": "UNLOCALIZED: was authored by %1$s", - "create.item_attributes.book_author.inverted": "UNLOCALIZED: was not authored by %1$s", - "create.item_attributes.book_copy_original": "UNLOCALIZED: is an original", - "create.item_attributes.book_copy_original.inverted": "UNLOCALIZED: is not an original", - "create.item_attributes.book_copy_first": "UNLOCALIZED: is a first-generation copy", - "create.item_attributes.book_copy_first.inverted": "UNLOCALIZED: is not a first-generation copy", - "create.item_attributes.book_copy_second": "UNLOCALIZED: is a second-generation copy", - "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.gui.attribute_filter.no_selected_attributes": "UNLOCALIZED: No attributes selected", - "create.gui.attribute_filter.selected_attributes": "UNLOCALIZED: Selected attributes:", - "create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List", - "create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List", - "create.gui.attribute_filter.allow_list_disjunctive": "UNLOCALIZED: Allow-List (Any)", - "create.gui.attribute_filter.allow_list_disjunctive.description": "UNLOCALIZED: Items pass if they have any of the selected attributes.", - "create.gui.attribute_filter.allow_list_conjunctive": "UNLOCALIZED: Allow-List (All)", - "create.gui.attribute_filter.allow_list_conjunctive.description": "UNLOCALIZED: Items pass only if they have ALL of the selected attributes.", - "create.gui.attribute_filter.deny_list": "UNLOCALIZED: Deny-List", - "create.gui.attribute_filter.deny_list.description": "UNLOCALIZED: Items pass if they do NOT have any of the selected attributes.", - "create.gui.attribute_filter.add_reference_item": "UNLOCALIZED: Add Reference Item", - - "create.tooltip.holdForDescription": "UNLOCALIZED: Hold [%1$s] for Summary", - "create.tooltip.holdForControls": "UNLOCALIZED: Hold [%1$s] for Controls", - "create.tooltip.keyShift": "UNLOCALIZED: Shift", - "create.tooltip.keyCtrl": "UNLOCALIZED: Ctrl", - "create.tooltip.speedRequirement": "UNLOCALIZED: Speed Requirement: %1$s", - "create.tooltip.speedRequirement.none": "UNLOCALIZED: None", - "create.tooltip.speedRequirement.medium": "UNLOCALIZED: Moderate", - "create.tooltip.speedRequirement.high": "UNLOCALIZED: Fast", - "create.tooltip.stressImpact": "UNLOCALIZED: Kinetic Stress Impact: %1$s", - "create.tooltip.stressImpact.low": "UNLOCALIZED: Low", - "create.tooltip.stressImpact.medium": "UNLOCALIZED: Moderate", - "create.tooltip.stressImpact.high": "UNLOCALIZED: High", - "create.tooltip.stressImpact.overstressed": "UNLOCALIZED: Overstressed", - "create.tooltip.capacityProvided": "UNLOCALIZED: Kinetic Stress Capacity: %1$s", - "create.tooltip.capacityProvided.low": "UNLOCALIZED: Small", - "create.tooltip.capacityProvided.medium": "UNLOCALIZED: Medium", - "create.tooltip.capacityProvided.high": "UNLOCALIZED: Large", - "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", - "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", - - "create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s", - "create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s", - "create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).", - "create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.", - - "create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected", - "create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)", - "create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)", - "create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]", - "create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size", - - "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", - - "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", - "create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", - "create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target", - - "create.tunnel.selection_mode.split": "UNLOCALIZED: Split", - "create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split", - "create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin", - "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", - "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", - "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", - "create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs", - - "create.tooltip.chute.header": "UNLOCALIZED: Chute Information", - "create.tooltip.chute.items_move_down": "UNLOCALIZED: Items move Downward", - "create.tooltip.chute.items_move_up": "UNLOCALIZED: Items move Upward", - "create.tooltip.chute.no_fans_attached": "UNLOCALIZED: No attached fans", - "create.tooltip.chute.fans_push_up": "UNLOCALIZED: Fans push from Below", - "create.tooltip.chute.fans_push_down": "UNLOCALIZED: Fans push from Above", - "create.tooltip.chute.fans_pull_up": "UNLOCALIZED: Fans pull from Above", - "create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below", - "create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s", - "create.tooltip.brass_tunnel.contains": "UNLOCALIZED: Currently distributing:", - "create.tooltip.brass_tunnel.contains_entry": "UNLOCALIZED: > %1$s x%2$s", - "create.tooltip.brass_tunnel.retrieve": "UNLOCALIZED: Right-Click to retrieve", - - "create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active", - "create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key", - "create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s", - "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": "UNLOCALIZED: Ingredient Slot", - "create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable", - "create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot", - "create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe", - "create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned", - "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", - "create.crafting_blueprint.optional": "UNLOCALIZED: Optional", - - "create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage", - "create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks", - "create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback", - - "create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply", - "create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.", - "create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets", - "create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.", - "create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing", - "create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.", - "create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow", - "create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.", - - "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", - "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", - "create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse", - "create.gui.config.overlay4": "UNLOCALIZED: to move this preview", - "create.gui.config.overlay5": "UNLOCALIZED: Press ESC to exit this screen", - "create.gui.config.overlay6": "UNLOCALIZED: and save the new position", - "create.gui.config.overlay7": "UNLOCALIZED: Run /create overlay reset", - "create.gui.config.overlay8": "UNLOCALIZED: to reset to the default position", - - "create.command.killTPSCommand": "UNLOCALIZED: killtps", - "create.command.killTPSCommand.status.slowed_by.0": "UNLOCALIZED: [Create]: Server tick is currently slowed by %s ms :o", - "create.command.killTPSCommand.status.slowed_by.1": "UNLOCALIZED: [Create]: Server tick is slowed by %s ms now >:)", - "create.command.killTPSCommand.status.slowed_by.2": "UNLOCALIZED: [Create]: Server tick is back to regular speed :D", - "create.command.killTPSCommand.status.usage.0": "UNLOCALIZED: [Create]: use /killtps stop to bring back server tick to regular speed", - "create.command.killTPSCommand.status.usage.1": "UNLOCALIZED: [Create]: use /killtps start to artificially slow down the server tick", - "create.command.killTPSCommand.argument.tickTime": "UNLOCALIZED: tickTime", - - "create.contraption.minecart_contraption_too_big": "UNLOCALIZED: This Cart Contraption seems too big to pick up", - "create.contraption.minecart_contraption_illegal_pickup": "UNLOCALIZED: A mystical force is binding this Cart Contraption to the world", - - - "_": "->------------------------] Subtitles [------------------------<-", - - "create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops", - "create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls", - "create.subtitle.mixing": "UNLOCALIZED: Mixing noises", - "create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks", - "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", - "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", - "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", - "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", - "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", - "create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches", - "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel flaps", - "create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings", - "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", - "create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks", - "create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts", - "create.subtitle.controller_put": "UNLOCALIZED: Controller thumps", - "create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns", - "create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks", - "create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble", - "create.subtitle.slime_added": "UNLOCALIZED: Slime squishes", - "create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used", - "create.subtitle.potato_hit": "UNLOCALIZED: Vegetable impacts", - "create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates", - "create.subtitle.haunted_bell_convert": "UNLOCALIZED: Haunted Bell awakens", - "create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish", - "create.subtitle.deny": "UNLOCALIZED: Declining boop", - "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", - "create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires", - "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", - "create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs", - "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", - "create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks", - "create.subtitle.depot_plop": "UNLOCALIZED: Item lands", - "create.subtitle.confirm": "UNLOCALIZED: Affirmative ding", - - - "_": "->------------------------] Item Descriptions [------------------------<-", - - "item.create.example_item.tooltip": "EXAMPLE ITEM (just a marker that this tooltip exists)", - "item.create.example_item.tooltip.summary": "A brief description of the item. _Underscores_ highlight a term.", - "item.create.example_item.tooltip.condition1": "When this", - "item.create.example_item.tooltip.behaviour1": "Then this item does this. (behaviours show on shift)", - "item.create.example_item.tooltip.condition2": "And When this", - "item.create.example_item.tooltip.behaviour2": "You can add as many behaviours as you like", - "item.create.example_item.tooltip.control1": "When Ctrl pressed", - "item.create.example_item.tooltip.action1": "These controls are displayed.", - - "block.create.wooden_bracket.tooltip": "SOPORTE DE MADERA", - "block.create.wooden_bracket.tooltip.summary": "_Decora_ tus _ejes,_ _ruedas_ _dentadas_ y _tuberías_ con un pequeño y acogedor refuerzo de madera", - - "block.create.metal_bracket.tooltip": "SOPORTE DE METAL", - "block.create.metal_bracket.tooltip.summary": "_Decora_ tus _ejes,_ _ruedas_ _dentadas_ y _tuberías_ con un robusto refuerzo industrial de metal", - - "block.create.seat.tooltip": "ASIENTO", - "block.create.seat.tooltip.summary": "¡Siéntese y disfrute del paseo! Anclará a un jugador en una _artefacto_ en movimiento. ¡También es Grandioso para las construcciones estáticas! Viene en una variedad de colores.", - "block.create.seat.tooltip.condition1": "Click Derecho en el asiento", - "block.create.seat.tooltip.behaviour1": "Sienta al jugador en el _asiento_ . Presiona el shift izquierdo para salir del _asiento._", - - "item.create.blaze_cake.tooltip": "PASTEL DE BLAZE", - "item.create.blaze_cake.tooltip.summary": "Un delicioso regalo para tus grandiosos _quemadores_ _de_ _blaze._ ¡Los enciende a todos!", - - "item.create.wand_of_symmetry.tooltip": "SYMMETRY WAND", - "item.create.wand_of_symmetry.tooltip.summary": "Crea un 'espejo' que refleja perfectamente la colocación de bloques a través de los planos configurados.", - "item.create.wand_of_symmetry.tooltip.condition1": "Cuando esta en la barra de ítems", - "item.create.wand_of_symmetry.tooltip.behaviour1": "Se mantiene activo", - "item.create.wand_of_symmetry.tooltip.control1": "Click Derecho en el suelo", - "item.create.wand_of_symmetry.tooltip.action1": "_Crea_ o _mueve_ el 'espejo'.", - "item.create.wand_of_symmetry.tooltip.control2": "Click Derecho en el aire", - "item.create.wand_of_symmetry.tooltip.action2": "_Remueve_ el 'espejo' activo", - "item.create.wand_of_symmetry.tooltip.control3": "Click Derecho cuando se esta agachado", - "item.create.wand_of_symmetry.tooltip.action3": "Abre la _Interfaz_ _de_ _Configuración_", - - "item.create.handheld_worldshaper.tooltip": "HANDHELD WORLDSHAPER", - "item.create.handheld_worldshaper.tooltip.summary": "Una herramienta útil para crear _paisajes_ y _características_ en el _terreno._", - "item.create.handheld_worldshaper.tooltip.control1": "Click Izquierdo a un bloque", - "item.create.handheld_worldshaper.tooltip.action1": "Establece los bloques que serán colocados por la herramienta en el bloque objetivo.", - "item.create.handheld_worldshaper.tooltip.control2": "Click Derecho en un bloque", - "item.create.handheld_worldshaper.tooltip.action2": "Aplica el _Pincel_ y la _Herramienta_ actualmente seleccionados en el lugar objetivo.", - "item.create.handheld_worldshaper.tooltip.control3": "Click Derecho mientras se está agachado", - "item.create.handheld_worldshaper.tooltip.action3": "Abre la _Interfaz_ _de_ _Configuración._", - - "item.create.tree_fertilizer.tooltip": "TREE FERTILIZER", - "item.create.tree_fertilizer.tooltip.summary": "Una poderosa combinación de minerales adecuados para acelerar el crecimiento de los tipos de árboles comunes.", - "item.create.tree_fertilizer.tooltip.condition1": "Cuando se usa en un retoño de árbol", - "item.create.tree_fertilizer.tooltip.behaviour1": "Hace crecer los árboles, sin importar el espacio entre ellos.", - - "item.create.extendo_grip.tooltip": "EXTENDO GRIP", - "item.create.extendo_grip.tooltip.summary": "Boioioing! En gran medida, _aumenta_ _la_ _distancia_ _de_ _alcance_ del portador.", - "item.create.extendo_grip.tooltip.condition1": "Cuando está en la mano secundaria", - "item.create.extendo_grip.tooltip.behaviour1": "Aumenta el rango de alcance de los objetos usados en la _mano_ _principal._", - "item.create.extendo_grip.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", - "item.create.extendo_grip.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", - - "item.create.potato_cannon.tooltip": "UNLOCALIZED: POTATO CANNON", - "item.create.potato_cannon.tooltip.summary": "UNLOCALIZED: Fwoomp! Launch your home-grown vegetables at your Enemies. Can be powered with Air Pressure from a _Copper_ _Backtank_", - "item.create.potato_cannon.tooltip.condition1": "UNLOCALIZED: When R-Clicked", - "item.create.potato_cannon.tooltip.behaviour1": "UNLOCALIZED: _Shoots_ a suitable item from your _Inventory_.", - "item.create.potato_cannon.tooltip.condition2": "UNLOCALIZED: While wearing Copper Backtank", - "item.create.potato_cannon.tooltip.behaviour2": "UNLOCALIZED: _No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", - - "item.create.filter.tooltip": "FILTER", - "item.create.filter.tooltip.summary": "_Controla_ las _salidas_ y _entradas_ de los dispositivos logísticos con más _precisión,_ comparándolas con un _conjunto_ _de_ _objetos_ o varios _filtros_ _anidados._", - "item.create.filter.tooltip.condition1": "Cuando está en la ranura del filtro", - "item.create.filter.tooltip.behaviour1": "_Controla_ el flujo de objetos según su _configuración._", - "item.create.filter.tooltip.condition2": "Con Click Derecho", - "item.create.filter.tooltip.behaviour2": "Abre la _Interfaz_ _de_ _Configuración._", - - "item.create.attribute_filter.tooltip": "ATTRIBUTE FILTER", - "item.create.attribute_filter.tooltip.summary": "_Controla_ las _salidas_ y _entradas_ de los dispositivos logísticos con más _precisión,_ comparándolas con un _conjunto_ _de_ _atributos_ _de_ _objetos_ y _categorias._", - "item.create.attribute_filter.tooltip.condition1": "Cuando está en la ranura del filtro", - "item.create.attribute_filter.tooltip.behaviour1": "_Controla_ el flujo de objetos según su _configuración._", - "item.create.attribute_filter.tooltip.condition2": "Con Click Derecho", - "item.create.attribute_filter.tooltip.behaviour2": "Abre la _Interfaz_ _de_ _Configuración._", - - "item.create.empty_schematic.tooltip": "EMPTY SCHEMATIC", - "item.create.empty_schematic.tooltip.summary": "Se usa como ingrediente en una receta y para escribir en la _Mesa_ _de_ _Esquemas._", - - "item.create.schematic.tooltip": "SCHEMATIC", - "item.create.schematic.tooltip.summary": "Sostiene una estructura para ser posicionada y colocada en el mundo. Posiciona el Holograma como se desee y usa un _Esquemacañon_ para construirlo.", - "item.create.schematic.tooltip.condition1": "Cuando es sostenido", - "item.create.schematic.tooltip.behaviour1": "Se puede posicionar usando las Herramientas en Pantalla.", - "item.create.schematic.tooltip.control1": "Click Derecho mientras se está agachado", - "item.create.schematic.tooltip.action1": "Abre una _interfaz_ para introducir las _coordenadas_ exactas.", - - "item.create.schematic_and_quill.tooltip": "SCHEMATIC AND QUILL", - "item.create.schematic_and_quill.tooltip.summary": "Se usa para guardar una estructura de tu mundo en un archivo .nbt", - "item.create.schematic_and_quill.tooltip.condition1": "Paso 1", - "item.create.schematic_and_quill.tooltip.behaviour1": "Selecciona dos esquinas con Click Derecho.", - "item.create.schematic_and_quill.tooltip.condition2": "Paso 2", - "item.create.schematic_and_quill.tooltip.behaviour2": "_Ctrl_ _+_ _girar_ _rueda_ _del_ _ratón_ en las caras para ajustar el tamaño. Click Derecho de nuevo para Guardar.", - "item.create.schematic_and_quill.tooltip.control1": "Click Derecho", - "item.create.schematic_and_quill.tooltip.action1": "Selecciona una esquina / confirma el guardado.", - "item.create.schematic_and_quill.tooltip.control2": "Manteniendo la tecla Ctrl", - "item.create.schematic_and_quill.tooltip.action2": "Selecciona los puntos en _medio_ _del_ _aire._ _Girar_ _rueda_ _del_ _ratón_ para ajustar la distancia.", - "item.create.schematic_and_quill.tooltip.control3": "Click Derecho mientras se está agachado", - "item.create.schematic_and_quill.tooltip.action3": "_Reinicia_ y quita la selección.", - - "block.create.schematicannon.tooltip": "SCHEMATICANNON", - "block.create.schematicannon.tooltip.summary": "Dispara bloques para recrear un _esquema_ ya desplegado en el mundo. Utiliza objetos de los inventarios adyacentes y _Pólvora_ como combustible.", - "block.create.schematicannon.tooltip.condition1": "UNLOCALIZED: When R-Clicked", - "block.create.schematicannon.tooltip.behaviour1": "UNLOCALIZED: Opens the _Interface_", - - "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", - "block.create.schematic_table.tooltip.summary": "Escribe los esquemas guardados en un _Esquema_ _Vacío._", - "block.create.schematic_table.tooltip.condition1": "Cuando se le da un esquema vacío", - "block.create.schematic_table.tooltip.behaviour1": "Carga un archivo elegido de su carpeta de esquemas.", - - "item.create.goggles.tooltip": "GOGGLES", - "item.create.goggles.tooltip.summary": "Un par de gafas para aumentar la visión con _información_ _cinética_ útil.", - "item.create.goggles.tooltip.condition1": "Cuando se usan", - "item.create.goggles.tooltip.behaviour1": "Muestra _indicadores_ _con_ _colores_ correspondientes al _Nivel_ _de_ _Velocidad_ de un componente cinético colocado, así como _Impacto_ _de_ _Estrés_ y _Capacidad_ de los componentes individuales.", - "item.create.goggles.tooltip.condition2": "Al mirar el medidor", - "item.create.goggles.tooltip.behaviour2": "Muestra información detallada sobre la _velocidad_ o el _estrés_ de la red a la que está conectado el medidor.", - "item.create.goggles.tooltip.condition3": "UNLOCALIZED: When looking at fluid containers", - "item.create.goggles.tooltip.behaviour3": "UNLOCALIZED: Shows detailed information about the _Capacity_ of the block and any _Fluids_ stored within.", - - "item.create.wrench.tooltip": "WRENCH", - "item.create.wrench.tooltip.summary": "Una herramienta útil para trabajar en artefactos cinéticos. Se puede utilizar para _Rotar,_ _Desmantelar_ y _Configurar_ componentes.", - "item.create.wrench.tooltip.control1": "Click Derecho en un bloqueo cinético", - "item.create.wrench.tooltip.action1": "_Gira_ los componentes hacia o en contra de la cara con la que interactuó.", - "item.create.wrench.tooltip.control2": "Click Derecho mientras se está agachado", - "item.create.wrench.tooltip.action2": "_Desmonta_ los _componentes_ _cinéticos_ y los coloca de nuevo en _tú_ _inventario._", - - "block.create.nozzle.tooltip": "UNLOCALIZED: NOZZLE", - "block.create.nozzle.tooltip.summary": "UNLOCALIZED: Attach to the front of an _Encased Fan_ to distribute its effect on Entities in _all directions_.", - - "block.create.cuckoo_clock.tooltip": "UNLOCALIZED: CUCKOO CLOCK", - "block.create.cuckoo_clock.tooltip.summary": "UNLOCALIZED: Fine craftsmanship for _decorating_ a space and _keeping track of time_.", - "block.create.cuckoo_clock.tooltip.condition1": "UNLOCALIZED: When Powered by Kinetics", - "block.create.cuckoo_clock.tooltip.behaviour1": "UNLOCALIZED: Shows the _current time_ and plays a tune twice a day. _Activates_ once at _noon_ and at dusk, as soon as _players can sleep_.", - - "block.create.turntable.tooltip": "UNLOCALIZED: TURNTABLE", - "block.create.turntable.tooltip.summary": "UNLOCALIZED: Turns _Rotational Force_ into refined Motion Sickness.", - - "block.create.stockpile_switch.tooltip": "UNLOCALIZED: STOCKPILE SWITCH", - "block.create.stockpile_switch.tooltip.summary": "UNLOCALIZED: 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.condition1": "UNLOCALIZED: When R-Clicked", - "block.create.stockpile_switch.tooltip.behaviour1": "UNLOCALIZED: Opens the _Configuration Interface_.", - - "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.adjustable_crate.tooltip": "UNLOCALIZED: ADJUSTABLE CRATE", - "block.create.adjustable_crate.tooltip.summary": "UNLOCALIZED: This _Item Container_ allows Manual control over its capacity. It can hold up to _16 Stacks_ of any Item. Supports _Redstone Comparators_.", - "block.create.adjustable_crate.tooltip.condition1": "UNLOCALIZED: When R-Clicked", - "block.create.adjustable_crate.tooltip.behaviour1": "UNLOCALIZED: Opens the _Interface_.", - - "block.create.creative_crate.tooltip": "UNLOCALIZED: THE ENDLESS CRATE", - "block.create.creative_crate.tooltip.summary": "UNLOCALIZED: This _Storage Container_ allows infinite replication of any item. Place next to a _Schematicannon_ to remove any material requirements.", - "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", - "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - - "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.", - - "block.create.controller_rail.tooltip": "UNLOCALIZED: CONTROLLER RAIL", - "block.create.controller_rail.tooltip.summary": "UNLOCALIZED: A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", - "block.create.controller_rail.tooltip.condition1": "UNLOCALIZED: When Powered by Redstone", - "block.create.controller_rail.tooltip.behaviour1": "UNLOCALIZED: _Accelerates_ or _Decelerates_ passing _minecarts_ corresponding to the _signal strength_. Propagates redstone power to adjacent controller rails. Powering two controller rails with different strengths will cause tracks between them to interpolate their signal.", - - "item.create.sand_paper.tooltip": "UNLOCALIZED: SAND PAPER", - "item.create.sand_paper.tooltip.summary": "UNLOCALIZED: A rough paper that can be used to _polish materials_. Can be automatically applied using the Deployer.", - "item.create.sand_paper.tooltip.condition1": "UNLOCALIZED: When Used", - "item.create.sand_paper.tooltip.behaviour1": "UNLOCALIZED: Applies polish to items held in the _offhand_ or lying on the _floor_ when _looking at them_", - - "item.create.builders_tea.tooltip": "UNLOCALIZED: BUILDERS TEA", - "item.create.builders_tea.tooltip.summary": "UNLOCALIZED: The perfect drink to get the day started- _Motivating_ and _Saturating._", - - "item.create.refined_radiance.tooltip": "UNLOCALIZED: REFINED RADIANCE", - "item.create.refined_radiance.tooltip.summary": "UNLOCALIZED: A Chromatic material forged from _absorbed light_.", - "item.create.refined_radiance.tooltip.condition1": "UNLOCALIZED: Work In Progress", - "item.create.refined_radiance.tooltip.behaviour1": "UNLOCALIZED: Usages for this material will be available in a future release.", - - "item.create.shadow_steel.tooltip": "UNLOCALIZED: SHADOW STEEL", - "item.create.shadow_steel.tooltip.summary": "UNLOCALIZED: A Chromatic material forged _in the void_.", - "item.create.shadow_steel.tooltip.condition1": "UNLOCALIZED: Work In Progress", - "item.create.shadow_steel.tooltip.behaviour1": "UNLOCALIZED: Usages for this material will be available in a future release.", - - "item.create.linked_controller.tooltip": "UNLOCALIZED: LINKED CONTROLLER", - "item.create.linked_controller.tooltip.summary": "UNLOCALIZED: Grants _handheld_ _control_ over _Redstone Link_ frequencies assigned to its _six_ _buttons_.", - "item.create.linked_controller.tooltip.condition1": "UNLOCALIZED: R-Click", - "item.create.linked_controller.tooltip.behaviour1": "UNLOCALIZED: _Toggles_ the controller. _Movement_ _controls_ are taken over while its active.", - "item.create.linked_controller.tooltip.condition2": "UNLOCALIZED: R-Click while Sneaking", - "item.create.linked_controller.tooltip.behaviour2": "UNLOCALIZED: Opens the manual _Configuration Interface_.", - "item.create.linked_controller.tooltip.condition3": "UNLOCALIZED: R-Click on Redstone Link Receiver", - "item.create.linked_controller.tooltip.behaviour3": "UNLOCALIZED: Enables _Bind Mode_, press one of the _six controls_ to bind it to the _Links' Frequency_.", - "item.create.linked_controller.tooltip.condition4": "UNLOCALIZED: R-Click on Lectern", - "item.create.linked_controller.tooltip.behaviour4": "UNLOCALIZED: Places the Controller into the Lectern for easy activation. (R-Click while Sneaking to retrieve it)", - - "item.create.diving_helmet.tooltip": "UNLOCALIZED: DIVING HELMET", - "item.create.diving_helmet.tooltip.summary": "UNLOCALIZED: Together with a _Copper_ _Backtank_, allows the wielder to _breathe_ _underwater_ for an extended amount of time.", - "item.create.diving_helmet.tooltip.condition1": "UNLOCALIZED: When Worn", - "item.create.diving_helmet.tooltip.behaviour1": "UNLOCALIZED: Provides the _Water Breathing_ effect, slowly draining _Air Pressure_ from the Backtank.", - - "item.create.copper_backtank.tooltip": "UNLOCALIZED: COPPER BACKTANK", - "item.create.copper_backtank.tooltip.summary": "UNLOCALIZED: A _Wearable_ _Tank_ for carrying Pressurized Air.", - "item.create.copper_backtank.tooltip.condition1": "UNLOCALIZED: When Worn", - "item.create.copper_backtank.tooltip.behaviour1": "UNLOCALIZED: Provides _Pressurized_ _Air_ to Equipment that requires it.", - "item.create.copper_backtank.tooltip.condition2": "UNLOCALIZED: When placed, Powered by Kinetics", - "item.create.copper_backtank.tooltip.behaviour2": "UNLOCALIZED: _Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", - - "item.create.diving_boots.tooltip": "UNLOCALIZED: DIVING BOOTS", - "item.create.diving_boots.tooltip.summary": "UNLOCALIZED: A pair of _heavy_ _boots_, allowing for better traversal of the Ocean floor.", - "item.create.diving_boots.tooltip.condition1": "UNLOCALIZED: When Worn", - "item.create.diving_boots.tooltip.behaviour1": "UNLOCALIZED: Wielder _sinks_ _faster_ and _cannot_ _swim_. Grants the ability to _walk_ and _jump_ underwater. Wielder also is no longer affected by _Mechanical_ _Belts_.", - - "item.create.crafting_blueprint.tooltip": "UNLOCALIZED: CRAFTING BLUEPRINT", - "item.create.crafting_blueprint.tooltip.summary": "UNLOCALIZED: _Placed_ on a wall, it can be used to _specify_ _ingredient_ _arrangements_ for easier manual crafting. Each slot represents a Recipe.", - "item.create.crafting_blueprint.condition1": "UNLOCALIZED: R-Click empty Slot", - "item.create.crafting_blueprint.behaviour1": "UNLOCALIZED: Opens a _Crafting_ _menu_ allowing you to _configure_ a _recipe_ and items to display.", - "item.create.crafting_blueprint.condition2": "UNLOCALIZED: R-Click configured Slot", - "item.create.crafting_blueprint.behaviour2": "UNLOCALIZED: _Applies_ the _configured_ _recipe_ with matching Ingredients found in your _Inventory_. _Sneak_ to craft up to a _Stack_ of items.", - - "item.create.minecart_coupling.tooltip": "UNLOCALIZED: MINECART COUPLING", - "item.create.minecart_coupling.tooltip.summary": "UNLOCALIZED: _Chains_ all your _Minecarts_ or _Carriage Contraptions_ together to form a majestic Train.", - "item.create.minecart_coupling.tooltip.condition1": "UNLOCALIZED: When Used on Minecart", - "item.create.minecart_coupling.tooltip.behaviour1": "UNLOCALIZED: _Couples_ two Minecarts together, attempting to keep them at a _constant distance_ while moving.", - - "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", - - "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A _Cursed Bell_ haunted by lost souls of the Nether.", - "block.create.haunted_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", - - - "_": "->------------------------] Ponder Content [------------------------<-", - - "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", - "create.ponder.subject": "UNLOCALIZED: Subject of this scene", - "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", - "create.ponder.associated": "UNLOCALIZED: Associated Entries", - "create.ponder.close": "UNLOCALIZED: Close", - "create.ponder.identify": "UNLOCALIZED: Identify", - "create.ponder.next": "UNLOCALIZED: Next Scene", - "create.ponder.previous": "UNLOCALIZED: Previous Scene", - "create.ponder.replay": "UNLOCALIZED: Replay", - "create.ponder.think_back": "UNLOCALIZED: Think Back", - "create.ponder.slow_text": "UNLOCALIZED: Comfy Reading", - "create.ponder.exit": "UNLOCALIZED: Exit", - "create.ponder.welcome": "UNLOCALIZED: Welcome to Ponder", - "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", - "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", - "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", - "create.ponder.shared.behaviour_modify_wrench": "UNLOCALIZED: This behaviour can be modified using a Wrench", - "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", - "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", - "create.ponder.shared.rpm8": "UNLOCALIZED: 8 RPM", - "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", - "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", - "create.ponder.shared.rpm16_source": "UNLOCALIZED: Source: 16 RPM", - "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", - "create.ponder.tag.redstone": "UNLOCALIZED: Logic Components", - "create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering", - "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", - "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", - "create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators", - "create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids", - "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", - "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", - "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", - "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", - "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", - "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", - "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", - "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", - "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", - "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", - "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", - "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", - "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", - "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", - "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", - "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", - "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", - "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", - "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", - "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", - - "create.ponder.adjustable_pulse_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Pulse Repeaters", - "create.ponder.adjustable_pulse_repeater.text_1": "UNLOCALIZED: Adjustable Pulse Repeaters emit a short pulse at a delay", - "create.ponder.adjustable_pulse_repeater.text_2": "UNLOCALIZED: Using the mouse wheel, the charge time can be configured", - "create.ponder.adjustable_pulse_repeater.text_3": "UNLOCALIZED: Configured delays can range up to 30 minutes", - - "create.ponder.adjustable_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Repeaters", - "create.ponder.adjustable_repeater.text_1": "UNLOCALIZED: Adjustable Repeaters behave similarly to regular Repeaters", - "create.ponder.adjustable_repeater.text_2": "UNLOCALIZED: They charge up for a set time...", - "create.ponder.adjustable_repeater.text_3": "UNLOCALIZED: ...and cool down for the same duration", - "create.ponder.adjustable_repeater.text_4": "UNLOCALIZED: Using the mouse wheel, the charge time can be configured", - "create.ponder.adjustable_repeater.text_5": "UNLOCALIZED: Configured delays can range up to 30 minutes", - - "create.ponder.analog_lever.header": "UNLOCALIZED: Controlling signals using the Analog Lever", - "create.ponder.analog_lever.text_1": "UNLOCALIZED: Analog Levers make for a compact and precise source of redstone power", - "create.ponder.analog_lever.text_2": "UNLOCALIZED: Right-click to increase its analog power output", - "create.ponder.analog_lever.text_3": "UNLOCALIZED: Right-click while Sneaking to decrease the power output again", - - "create.ponder.andesite_tunnel.header": "UNLOCALIZED: Using Andesite Tunnels", - "create.ponder.andesite_tunnel.text_1": "UNLOCALIZED: Andesite Tunnels can be used to cover up your belts", - "create.ponder.andesite_tunnel.text_2": "UNLOCALIZED: Whenever an Andesite Tunnel has connections to the sides...", - "create.ponder.andesite_tunnel.text_3": "UNLOCALIZED: ...they will split exactly one item off of any passing stacks", - "create.ponder.andesite_tunnel.text_4": "UNLOCALIZED: The remainder will continue on its path", - - "create.ponder.basin.header": "UNLOCALIZED: Processing Items in the Basin", - "create.ponder.basin.text_1": "UNLOCALIZED: A Basin can hold Items and Fluids for Processing", - "create.ponder.basin.text_2": "UNLOCALIZED: After a processing step, basins try to output below to the side of them", - "create.ponder.basin.text_3": "UNLOCALIZED: When a valid component is present, the Basin will show an output faucet", - "create.ponder.basin.text_4": "UNLOCALIZED: A number of options are applicable here", - "create.ponder.basin.text_5": "UNLOCALIZED: Outputs will be caught by the inventory below", - "create.ponder.basin.text_6": "UNLOCALIZED: Without output faucet, the Basin will retain items created in its processing", - "create.ponder.basin.text_7": "UNLOCALIZED: This can be useful if outputs should be re-used as ingredients", - "create.ponder.basin.text_8": "UNLOCALIZED: Desired outputs will then have to be extracted from the basin", - "create.ponder.basin.text_9": "UNLOCALIZED: A Filter might be necessary to avoid pulling out un-processed items", - - "create.ponder.bearing_modes.header": "UNLOCALIZED: Movement Modes of the Mechanical Bearing", - "create.ponder.bearing_modes.text_1": "UNLOCALIZED: When Stopped, the Bearing will place the structure at the nearest grid-aligned Angle", - "create.ponder.bearing_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only near the angle it started at", - - "create.ponder.belt_casing.header": "UNLOCALIZED: Encasing Belts", - "create.ponder.belt_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Mechanical Belts", - "create.ponder.belt_casing.text_2": "UNLOCALIZED: A wrench can be used to remove the casing", - - "create.ponder.belt_connector.header": "UNLOCALIZED: Using Mechanical Belts", - "create.ponder.belt_connector.text_1": "UNLOCALIZED: Right-Clicking two shafts with a belt item will connect them together", - "create.ponder.belt_connector.text_2": "UNLOCALIZED: Accidental selections can be canceled with Right-Click while Sneaking", - "create.ponder.belt_connector.text_3": "UNLOCALIZED: Additional Shafts can be added throughout the Belt", - "create.ponder.belt_connector.text_4": "UNLOCALIZED: Shafts connected via Belts will rotate with Identical Speed and Direction", - "create.ponder.belt_connector.text_5": "UNLOCALIZED: Added shafts can be removed using the wrench", - "create.ponder.belt_connector.text_6": "UNLOCALIZED: Mechanical Belts can be dyed for aesthetic purposes", - - "create.ponder.belt_directions.header": "UNLOCALIZED: Valid Orientations for Mechanical Belts", - "create.ponder.belt_directions.text_1": "UNLOCALIZED: Belts cannot connect in arbitrary directions", - "create.ponder.belt_directions.text_2": "UNLOCALIZED: 1. They can connect horizontally", - "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", - "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", - "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", - - "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", - "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", - "create.ponder.belt_transport.text_2": "UNLOCALIZED: Right-Click with an empty hand to take items off a belt", - - "create.ponder.blaze_burner.header": "UNLOCALIZED: Feeding Blaze Burners", - "create.ponder.blaze_burner.text_1": "UNLOCALIZED: Blaze Burners can provide Heat to Items processed in a Basin", - "create.ponder.blaze_burner.text_2": "UNLOCALIZED: For this, the Blaze has to be fed with flammable items", - "create.ponder.blaze_burner.text_3": "UNLOCALIZED: With a Blaze Cake, the Burner can reach an even stronger level of heat", - "create.ponder.blaze_burner.text_4": "UNLOCALIZED: The feeding process can be automated using Deployers or Mechanical Arms", - - "create.ponder.brass_funnel.header": "UNLOCALIZED: The Brass Funnel", - "create.ponder.brass_funnel.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", - "create.ponder.brass_funnel.text_2": "UNLOCALIZED: Brass Funnels can extract up to a full stack.", - "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", - "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", - - "create.ponder.brass_tunnel.header": "UNLOCALIZED: Using Brass Tunnels", - "create.ponder.brass_tunnel.text_1": "UNLOCALIZED: Brass Tunnels can be used to cover up your belts", - "create.ponder.brass_tunnel.text_2": "UNLOCALIZED: Brass Tunnels have filter slots on each open side", - "create.ponder.brass_tunnel.text_3": "UNLOCALIZED: Filters on inbound connections simply block non-matching items", - "create.ponder.brass_tunnel.text_4": "UNLOCALIZED: Filters on outbound connections can be used to sort items by type", - "create.ponder.brass_tunnel.text_5": "UNLOCALIZED: Whenever a passing item has multiple valid exits, the distribution mode will decide how to handle it", - "create.ponder.brass_tunnel.text_6": "UNLOCALIZED: Brass Tunnels on parallel belts will form a group", - "create.ponder.brass_tunnel.text_7": "UNLOCALIZED: Incoming Items will now be distributed across all connected exits", - "create.ponder.brass_tunnel.text_8": "UNLOCALIZED: For this, items can also be inserted into the Tunnel block directly", - - "create.ponder.brass_tunnel_modes.header": "UNLOCALIZED: Distribution Modes of the Brass Tunnel", - "create.ponder.brass_tunnel_modes.text_1": "UNLOCALIZED: Using a Wrench, the distribution behaviour of Brass Tunnels can be configured", - "create.ponder.brass_tunnel_modes.text_10": "UNLOCALIZED: 'Synchronize Inputs' is a unique setting for Brass Tunnels", - "create.ponder.brass_tunnel_modes.text_11": "UNLOCALIZED: Items are only allowed past if every tunnel in the group has one waiting", - "create.ponder.brass_tunnel_modes.text_12": "UNLOCALIZED: This ensures that all affected belts supply items at the same rate", - "create.ponder.brass_tunnel_modes.text_2": "UNLOCALIZED: 'Split' will attempt to distribute the stack evenly between available outputs", - "create.ponder.brass_tunnel_modes.text_3": "UNLOCALIZED: If an output is unable to take more items, it will be skipped", - "create.ponder.brass_tunnel_modes.text_4": "UNLOCALIZED: 'Forced Split' will never skip outputs, and instead wait until they are free", - "create.ponder.brass_tunnel_modes.text_5": "UNLOCALIZED: 'Round Robin' keeps stacks whole, and cycles through outputs iteratively", - "create.ponder.brass_tunnel_modes.text_6": "UNLOCALIZED: Once Again, if an output is unable to take more items, it will be skipped", - "create.ponder.brass_tunnel_modes.text_7": "UNLOCALIZED: 'Forced Round Robin' never skips outputs", - "create.ponder.brass_tunnel_modes.text_8": "UNLOCALIZED: 'Prefer Nearest' prioritizes the outputs closest to the items' input location", - "create.ponder.brass_tunnel_modes.text_9": "UNLOCALIZED: 'Randomize' will distribute whole stacks to randomly picked outputs", - - "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", - "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", - "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", - "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", - - "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", - "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", - "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", - "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", - - "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", - "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", - "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: This Arrow indicates which side of the Structure will be considered the front", - "create.ponder.cart_assembler_modes.text_3": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", - - "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", - "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", - "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", - "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", - "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", - - "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", - "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", - "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", - "create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees", - - "create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts", - "create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives", - "create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled", - "create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead", - "create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift", - "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", - "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", - - "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", - "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", - "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", - "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", - - "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", - "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", - "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", - "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", - - "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", - "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", - "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", - "create.ponder.clockwork_bearing.text_3": "UNLOCALIZED: 3:00", - "create.ponder.clockwork_bearing.text_4": "UNLOCALIZED: 4:00", - "create.ponder.clockwork_bearing.text_5": "UNLOCALIZED: Right-Click the bearing to start or stop animating the structure", - "create.ponder.clockwork_bearing.text_6": "UNLOCALIZED: In front of the Hour Hand, a second structure can be added", - "create.ponder.clockwork_bearing.text_7": "UNLOCALIZED: Ensure the two Structures are not attached to each other through super glue or similar", - "create.ponder.clockwork_bearing.text_8": "UNLOCALIZED: The Second Structure will now rotate as the Minute Hand", - - "create.ponder.clutch.header": "UNLOCALIZED: Controlling rotational force using a Clutch", - "create.ponder.clutch.text_1": "UNLOCALIZED: Clutches will relay rotation in a straight line", - "create.ponder.clutch.text_2": "UNLOCALIZED: When powered by Redstone, it breaks the connection", - - "create.ponder.cog_speedup.header": "UNLOCALIZED: Gearshifting with Cogs", - "create.ponder.cog_speedup.text_1": "UNLOCALIZED: Large and Small cogs can be connected diagonally", - "create.ponder.cog_speedup.text_2": "UNLOCALIZED: Shifting from large to small cogs, the conveyed speed will be doubled", - "create.ponder.cog_speedup.text_3": "UNLOCALIZED: Shifting the opposite way, the conveyed speed will be halved", - - "create.ponder.cogwheel.header": "UNLOCALIZED: Relaying rotational force using Cogwheels", - "create.ponder.cogwheel.text_1": "UNLOCALIZED: Cogwheels will relay rotation to other adjacent cogwheels", - "create.ponder.cogwheel.text_2": "UNLOCALIZED: Neighbouring shafts connected like this will rotate in opposite directions", - - "create.ponder.creative_fluid_tank.header": "UNLOCALIZED: Creative Fluid Tanks", - "create.ponder.creative_fluid_tank.text_1": "UNLOCALIZED: Creative Fluid Tanks can be used to provide a bottomless supply of fluid", - "create.ponder.creative_fluid_tank.text_2": "UNLOCALIZED: Right-Click with a fluid containing item to configure it", - "create.ponder.creative_fluid_tank.text_3": "UNLOCALIZED: Pipe Networks can now endlessly draw the assigned fluid from the tank", - "create.ponder.creative_fluid_tank.text_4": "UNLOCALIZED: Any Fluids pushed back into a Creative Fluid Tank will be voided", - - "create.ponder.creative_motor.header": "UNLOCALIZED: Generating Rotational Force using Creative Motors", - "create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force", - "create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output", - - "create.ponder.crushing_wheels.header": "UNLOCALIZED: Processing Items with Crushing Wheels", - "create.ponder.crushing_wheels.text_1": "UNLOCALIZED: A pair of Crushing Wheels can grind items very effectively", - "create.ponder.crushing_wheels.text_2": "UNLOCALIZED: Their Rotational Input has to make them spin into each other", - "create.ponder.crushing_wheels.text_3": "UNLOCALIZED: Items thrown or inserted into the top will get processed", - "create.ponder.crushing_wheels.text_4": "UNLOCALIZED: Items can be inserted and picked up through automated means as well", - - "create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer", - "create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions", - "create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use", - "create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically", - "create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot", - "create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item", - "create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...", - "create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted", - "create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself", - "create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it", - "create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:", - "create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,", - "create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,", - "create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,", - "create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks", - "create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs", - - "create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions", - "create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...", - "create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption", - "create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull", - - "create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer", - "create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction", - "create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead", - - "create.ponder.deployer_processing.header": "UNLOCALIZED: Processing Items using Deployers", - "create.ponder.deployer_processing.text_1": "UNLOCALIZED: With a fitting held item, Deployers can process items provided beneath them", - "create.ponder.deployer_processing.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Deployer", - "create.ponder.deployer_processing.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.deployer_processing.text_4": "UNLOCALIZED: The Deployer will hold and process them automatically", - - "create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone", - "create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate", - "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", - "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", - - "create.ponder.depot.header": "UNLOCALIZED: Using Depots", - "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", - "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", - "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", - "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", - - "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", - "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", - "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", - "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", - "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", - "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating", - - "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", - "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", - - "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", - "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", - "create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input", - - "create.ponder.fan_processing.header": "UNLOCALIZED: Processing Items using Encased Fans", - "create.ponder.fan_processing.text_1": "UNLOCALIZED: When passing through lava, the Air Flow becomes Heated", - "create.ponder.fan_processing.text_2": "UNLOCALIZED: Items caught in the area will be smelted", - "create.ponder.fan_processing.text_3": "UNLOCALIZED: Food items thrown here would be incinerated", - "create.ponder.fan_processing.text_4": "UNLOCALIZED: Instead, a setup for Smoking using Fire should be used for them", - "create.ponder.fan_processing.text_5": "UNLOCALIZED: Air Flows passing through water create a Washing Setup", - "create.ponder.fan_processing.text_6": "UNLOCALIZED: Some interesting new processing can be done with it", - "create.ponder.fan_processing.text_7": "UNLOCALIZED: The Speed of the Fan does NOT affect the processing speed, only its range", - "create.ponder.fan_processing.text_8": "UNLOCALIZED: Fan Processing can also be applied to Items on Depots and Belts", - - "create.ponder.fan_source.header": "UNLOCALIZED: Generating Rotational Force using Encased Fans", - "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", - "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", - - "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", - "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", - "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", - "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", - "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", - "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", - "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", - "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", - - "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", - "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", - "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", - "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", - "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", - "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", - - "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", - "create.ponder.fluid_tank_sizes.text_1": "UNLOCALIZED: Fluid Tanks can be combined to increase the total capacity", - "create.ponder.fluid_tank_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...", - "create.ponder.fluid_tank_sizes.text_3": "UNLOCALIZED: ...and grow in height by more than 30 additional layers", - "create.ponder.fluid_tank_sizes.text_4": "UNLOCALIZED: Using a Wrench, a tanks' window can be toggled", - - "create.ponder.fluid_tank_storage.header": "UNLOCALIZED: Storing Fluids in Fluid Tanks", - "create.ponder.fluid_tank_storage.text_1": "UNLOCALIZED: Fluid Tanks can be used to store large amounts of fluid", - "create.ponder.fluid_tank_storage.text_2": "UNLOCALIZED: Pipe networks can push and pull fluids from any side", - "create.ponder.fluid_tank_storage.text_3": "UNLOCALIZED: The contained fluid can be measured by a Comparator", - "create.ponder.fluid_tank_storage.text_4": "UNLOCALIZED: However, in Survival Mode Fluids cannot be added or taken manually", - "create.ponder.fluid_tank_storage.text_5": "UNLOCALIZED: You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", - - "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", - "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", - "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", - "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", - - "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", - "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", - "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", - "create.ponder.funnel_compat.text_3": "UNLOCALIZED: Depots", - "create.ponder.funnel_compat.text_4": "UNLOCALIZED: Item Drains", - - "create.ponder.funnel_direction.header": "UNLOCALIZED: Direction of Transfer", - "create.ponder.funnel_direction.text_1": "UNLOCALIZED: Placed normally, it pulls items from the inventory.", - "create.ponder.funnel_direction.text_2": "UNLOCALIZED: Placed while sneaking, it puts items into the inventory.", - "create.ponder.funnel_direction.text_3": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.", - "create.ponder.funnel_direction.text_4": "UNLOCALIZED: Same rules will apply for most orientations.", - "create.ponder.funnel_direction.text_5": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", - - "create.ponder.funnel_intro.header": "UNLOCALIZED: Using funnels", - "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", - - "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", - - "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", - "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", - "create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.", - "create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement. A mechanical belt should help here.", - - "create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine", - "create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running", - "create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", - "create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", - - "create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages", - "create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.", - "create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.", - - "create.ponder.gantry_cascaded.header": "UNLOCALIZED: Cascaded Gantries", - "create.ponder.gantry_cascaded.text_1": "UNLOCALIZED: Gantry shafts attach to a carriage without the need of super glue", - "create.ponder.gantry_cascaded.text_2": "UNLOCALIZED: Same applies for carriages on moved Gantry Shafts", - "create.ponder.gantry_cascaded.text_3": "UNLOCALIZED: Thus, a gantry system can be cascaded to cover multiple axes of movement", - - "create.ponder.gantry_direction.header": "UNLOCALIZED: Gantry Movement Direction", - "create.ponder.gantry_direction.text_1": "UNLOCALIZED: Gantry Shafts can have opposite orientations", - "create.ponder.gantry_direction.text_2": "UNLOCALIZED: The movement direction of carriages depend on their shafts' orientation", - "create.ponder.gantry_direction.text_3": "UNLOCALIZED: ...as well as the rotation direction of the shaft", - "create.ponder.gantry_direction.text_4": "UNLOCALIZED: Same rules apply for the propagated rotation", - - "create.ponder.gantry_redstone.header": "UNLOCALIZED: Gantry Power Propagation", - "create.ponder.gantry_redstone.text_1": "UNLOCALIZED: Redstone-powered gantry shafts stop moving their carriages", - "create.ponder.gantry_redstone.text_2": "UNLOCALIZED: Instead, its rotational force is relayed to the carriages' output shaft", - - "create.ponder.gantry_shaft.header": "UNLOCALIZED: Using Gantry Shafts", - "create.ponder.gantry_shaft.text_1": "UNLOCALIZED: Gantry Shafts form the basis of a gantry setup. Attached Carriages will move along them.", - "create.ponder.gantry_shaft.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.", - - "create.ponder.gearbox.header": "UNLOCALIZED: Relaying rotational force using Gearboxes", - "create.ponder.gearbox.text_1": "UNLOCALIZED: Jumping between axes of rotation can get bulky quickly", - "create.ponder.gearbox.text_2": "UNLOCALIZED: A gearbox is the more compact equivalent of this setup", - "create.ponder.gearbox.text_3": "UNLOCALIZED: Shafts around corners rotate in mirrored directions", - "create.ponder.gearbox.text_4": "UNLOCALIZED: Straight connections will be reversed", - - "create.ponder.gearshift.header": "UNLOCALIZED: Controlling rotational force using a Gearshift", - "create.ponder.gearshift.text_1": "UNLOCALIZED: Gearshifts will relay rotation in a straight line", - "create.ponder.gearshift.text_2": "UNLOCALIZED: When powered by Redstone, it reverses the transmission", - - "create.ponder.hand_crank.header": "UNLOCALIZED: Generating Rotational Force using Hand Cranks", - "create.ponder.hand_crank.text_1": "UNLOCALIZED: Hand Cranks can be used by players to apply rotational force manually", - "create.ponder.hand_crank.text_2": "UNLOCALIZED: Hold Right-Click to rotate it Counter-Clockwise", - "create.ponder.hand_crank.text_3": "UNLOCALIZED: Its conveyed speed is relatively high", - "create.ponder.hand_crank.text_4": "UNLOCALIZED: Sneak and Hold Right-Click to rotate it Clockwise", - - "create.ponder.hose_pulley.header": "UNLOCALIZED: Source Filling and Draining using Hose Pulleys", - "create.ponder.hose_pulley.text_1": "UNLOCALIZED: Hose Pulleys can be used to fill or drain large bodies of Fluid", - "create.ponder.hose_pulley.text_2": "UNLOCALIZED: With the Kinetic Input, the height of the pulleys' hose can be controlled", - "create.ponder.hose_pulley.text_3": "UNLOCALIZED: The Pulley retracts while the input rotation is inverted", - "create.ponder.hose_pulley.text_4": "UNLOCALIZED: On the opposite side, pipes can be connected", - "create.ponder.hose_pulley.text_5": "UNLOCALIZED: Attached pipe networks can either provide fluid to the hose...", - "create.ponder.hose_pulley.text_6": "UNLOCALIZED: ...or pull from it, draining the pool instead", - "create.ponder.hose_pulley.text_7": "UNLOCALIZED: Fill and Drain speed of the pulley depends entirely on the fluid networks' throughput", - - "create.ponder.hose_pulley_infinite.header": "UNLOCALIZED: Passively Filling and Draining large bodies of Fluid", - "create.ponder.hose_pulley_infinite.text_1": "UNLOCALIZED: When deploying the Hose Pulley into a large enough ocean...", - "create.ponder.hose_pulley_infinite.text_2": "UNLOCALIZED: It will provide/dispose fluids without affecting the source", - "create.ponder.hose_pulley_infinite.text_3": "UNLOCALIZED: Pipe networks can limitlessly take fluids from/to such pulleys", - - "create.ponder.hose_pulley_level.header": "UNLOCALIZED: Fill and Drain level of Hose Pulleys", - "create.ponder.hose_pulley_level.text_1": "UNLOCALIZED: While fully retracted, the Hose Pulley cannot operate", - "create.ponder.hose_pulley_level.text_2": "UNLOCALIZED: Draining runs from top to bottom", - "create.ponder.hose_pulley_level.text_3": "UNLOCALIZED: The surface level will end up just below where the hose ends", - "create.ponder.hose_pulley_level.text_4": "UNLOCALIZED: Filling runs from bottom to top", - "create.ponder.hose_pulley_level.text_5": "UNLOCALIZED: The filled pool will not grow beyond the layer above the hose end", - - "create.ponder.item_drain.header": "UNLOCALIZED: Emptying Fluid Containers using Item Drains", - "create.ponder.item_drain.text_1": "UNLOCALIZED: Item Drains can extract fluids from items", - "create.ponder.item_drain.text_2": "UNLOCALIZED: Right-click it to pour fluids from your held item into it", - "create.ponder.item_drain.text_3": "UNLOCALIZED: When items are inserted from the side...", - "create.ponder.item_drain.text_4": "UNLOCALIZED: ...they roll across, emptying out their contained fluid", - "create.ponder.item_drain.text_5": "UNLOCALIZED: Pipe Networks can now pull the fluid from the drains' internal buffer", - - "create.ponder.large_cogwheel.header": "UNLOCALIZED: Relaying rotational force using Large Cogwheels", - "create.ponder.large_cogwheel.text_1": "UNLOCALIZED: Large cogwheels can connect to each other at right angles", - "create.ponder.large_cogwheel.text_2": "UNLOCALIZED: It will help relaying conveyed speed to other axes of rotation", - - "create.ponder.linear_chassis_attachment.header": "UNLOCALIZED: Attaching blocks using Linear Chassis", - "create.ponder.linear_chassis_attachment.text_1": "UNLOCALIZED: The open faces of a Linear Chassis can be made Sticky", - "create.ponder.linear_chassis_attachment.text_2": "UNLOCALIZED: Click again to make the opposite side sticky", - "create.ponder.linear_chassis_attachment.text_3": "UNLOCALIZED: Sneak and Right-Click with an empty hand to remove the slime", - "create.ponder.linear_chassis_attachment.text_4": "UNLOCALIZED: Stickied faces of the Linear Chassis will attach a line of blocks in front of it", - "create.ponder.linear_chassis_attachment.text_5": "UNLOCALIZED: Using a Wrench, a precise Range can be specified for this chassis", - "create.ponder.linear_chassis_attachment.text_6": "UNLOCALIZED: Holding CTRL and scrolling adjusts the range of all attached Chassis Blocks", - "create.ponder.linear_chassis_attachment.text_7": "UNLOCALIZED: Attaching blocks to any other side requires the use of Super Glue", - "create.ponder.linear_chassis_attachment.text_8": "UNLOCALIZED: Using these mechanics, structures of any shape can move as a Contraption", - - "create.ponder.linear_chassis_group.header": "UNLOCALIZED: Moving Linear Chassis in groups", - "create.ponder.linear_chassis_group.text_1": "UNLOCALIZED: Linear Chassis connect to identical Chassis blocks next to them", - "create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it", - "create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach", - - "create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms", - "create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed", - "create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets", - "create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)", - "create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection", - "create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously", - "create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range", - "create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly", - "create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap", - - "create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm", - "create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs", - "create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs", - "create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter", - "create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering", - "create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm", - "create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute", - - "create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm", - "create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input", - "create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs", - "create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...", - "create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting", - "create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it", - "create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available", - "create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped", - "create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free", - "create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm", - - "create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone", - "create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate", - "create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles", - "create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", - - "create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing", - "create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them", - "create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption", - - "create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters", - "create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe", - "create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged", - "create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side", - "create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit", - "create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate", - "create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually", - "create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin", - "create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse", - - "create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters", - "create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically", - "create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined", - "create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location", - - "create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters", - "create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path", - "create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement", - "create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters", - - "create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill", - "create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it", - "create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input", - - "create.ponder.mechanical_drill_contraption.header": "UNLOCALIZED: Using Mechanical Drills on Contraptions", - "create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...", - "create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into", - - "create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions", - "create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...", - "create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way", - - "create.ponder.mechanical_mixer.header": "UNLOCALIZED: Processing Items with the Mechanical Mixer", - "create.ponder.mechanical_mixer.text_1": "UNLOCALIZED: With a Mixer and Basin, some Crafting Recipes can be automated", - "create.ponder.mechanical_mixer.text_2": "UNLOCALIZED: Available recipes include any Shapeless Crafting Recipe, plus a couple extra ones", - "create.ponder.mechanical_mixer.text_3": "UNLOCALIZED: Some of those recipes may require the heat of a Blaze Burner", - "create.ponder.mechanical_mixer.text_4": "UNLOCALIZED: The filter slot can be used in case two recipes are conflicting.", - - "create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons", - "create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them", - "create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input", - "create.ponder.mechanical_piston.text_3": "UNLOCALIZED: Sticky Mechanical Pistons can pull the attached blocks back", - - "create.ponder.mechanical_piston_modes.header": "UNLOCALIZED: Movement Modes of the Mechanical Piston", - "create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks", - "create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at", - - "create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions", - "create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...", - "create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox", - "create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland", - "create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them", - - "create.ponder.mechanical_press.header": "UNLOCALIZED: Processing Items with the Mechanical Press", - "create.ponder.mechanical_press.text_1": "UNLOCALIZED: The Mechanical Press can process items provided beneath it", - "create.ponder.mechanical_press.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Press", - "create.ponder.mechanical_press.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.mechanical_press.text_4": "UNLOCALIZED: The Press will hold and process them automatically", - - "create.ponder.mechanical_press_compacting.header": "UNLOCALIZED: Compacting items with the Mechanical Press", - "create.ponder.mechanical_press_compacting.text_1": "UNLOCALIZED: Pressing items held in a Basin will cause them to be Compacted", - "create.ponder.mechanical_press_compacting.text_2": "UNLOCALIZED: Compacting includes any filled 2x2 or 3x3 Crafting Recipe, plus a couple extra ones", - "create.ponder.mechanical_press_compacting.text_3": "UNLOCALIZED: Some of those recipes may require the heat of a Blaze Burner", - "create.ponder.mechanical_press_compacting.text_4": "UNLOCALIZED: The filter slot can be used in case two recipes are conflicting.", - - "create.ponder.mechanical_pump_flow.header": "UNLOCALIZED: Fluid Transportation using Mechanical Pumps", - "create.ponder.mechanical_pump_flow.text_1": "UNLOCALIZED: Mechanical Pumps govern the flow of their attached pipe networks", - "create.ponder.mechanical_pump_flow.text_2": "UNLOCALIZED: When powered, their arrow indicates the direction of flow", - "create.ponder.mechanical_pump_flow.text_3": "UNLOCALIZED: The network behind is now pulling fluids...", - "create.ponder.mechanical_pump_flow.text_4": "UNLOCALIZED: ...while the network in front is transferring it outward", - "create.ponder.mechanical_pump_flow.text_5": "UNLOCALIZED: Reversing the input rotation reverses the direction of flow", - "create.ponder.mechanical_pump_flow.text_6": "UNLOCALIZED: Use a Wrench to reverse the orientation of pumps manually", - - "create.ponder.mechanical_pump_speed.header": "UNLOCALIZED: Throughput of Mechanical Pumps", - "create.ponder.mechanical_pump_speed.text_1": "UNLOCALIZED: Regardless of speed, Mechanical Pumps affect pipes connected up to 16 blocks away", - "create.ponder.mechanical_pump_speed.text_2": "UNLOCALIZED: Speeding up the input rotation changes the speed of flow propagation...", - "create.ponder.mechanical_pump_speed.text_3": "UNLOCALIZED: ...aswell as how quickly fluids are transferred", - "create.ponder.mechanical_pump_speed.text_4": "UNLOCALIZED: Pumps can combine their throughputs within shared pipe networks", - "create.ponder.mechanical_pump_speed.text_5": "UNLOCALIZED: Alternating their orientation can help align their flow directions", - - "create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw", - "create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it", - "create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground", - - "create.ponder.mechanical_saw_contraption.header": "UNLOCALIZED: Using Mechanical Saws on Contraptions", - "create.ponder.mechanical_saw_contraption.text_1": "UNLOCALIZED: Whenever Saws are moved as part of an animated Contraption...", - "create.ponder.mechanical_saw_contraption.text_2": "UNLOCALIZED: ...they will cut any trees the contraption runs them into", - - "create.ponder.mechanical_saw_processing.header": "UNLOCALIZED: Processing Items on the Mechanical Saw", - "create.ponder.mechanical_saw_processing.text_1": "UNLOCALIZED: Upward facing Mechanical Saws can process a variety of items", - "create.ponder.mechanical_saw_processing.text_2": "UNLOCALIZED: The processed item always moves against the rotational input to the saw", - "create.ponder.mechanical_saw_processing.text_3": "UNLOCALIZED: Saws can work in-line with Mechanical Belts", - "create.ponder.mechanical_saw_processing.text_4": "UNLOCALIZED: When an ingredient has multiple possible outcomes, the filter slot can specify it", - "create.ponder.mechanical_saw_processing.text_5": "UNLOCALIZED: Without filter, the Saw would cycle through all outcomes instead", - - "create.ponder.millstone.header": "UNLOCALIZED: Processing Items in the Millstone", - "create.ponder.millstone.text_1": "UNLOCALIZED: Millstones process items by grinding them", - "create.ponder.millstone.text_2": "UNLOCALIZED: They can be powered from the side using cogwheels", - "create.ponder.millstone.text_3": "UNLOCALIZED: Throw or Insert items at the top", - "create.ponder.millstone.text_4": "UNLOCALIZED: After some time, the result can be obtained via Right-click", - "create.ponder.millstone.text_5": "UNLOCALIZED: The outputs can also be extracted by automation", - - "create.ponder.nixie_tube.header": "UNLOCALIZED: Using Nixie Tubes", - "create.ponder.nixie_tube.text_1": "UNLOCALIZED: When powered by Redstone, Nixie Tubes will display the redstone signals' strength", - "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", - "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", - - "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", - "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", - "create.ponder.piston_pole.text_2": "UNLOCALIZED: The Length of pole added at its back determines the Extension Range", - - "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", - "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", - "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", - "create.ponder.portable_fluid_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_fluid_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_fluid_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL Tanks on the contraption", - "create.ponder.portable_fluid_interface.text_6": "UNLOCALIZED: Fluid can now be inserted...", - "create.ponder.portable_fluid_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_fluid_interface.text_8": "UNLOCALIZED: After no contents have been exchanged for a while, the contraption will continue on its way", - - "create.ponder.portable_storage_interface.header": "UNLOCALIZED: Contraption Storage Exchange", - "create.ponder.portable_storage_interface.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.", - "create.ponder.portable_storage_interface.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.", - "create.ponder.portable_storage_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_storage_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_storage_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption", - "create.ponder.portable_storage_interface.text_6": "UNLOCALIZED: Items can now be inserted...", - "create.ponder.portable_storage_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_storage_interface.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way", - - "create.ponder.portable_storage_interface_redstone.header": "UNLOCALIZED: Redstone Control", - "create.ponder.portable_storage_interface_redstone.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging", - - "create.ponder.powered_latch.header": "UNLOCALIZED: Controlling signals using the Powered Latch", - "create.ponder.powered_latch.text_1": "UNLOCALIZED: Powered Latches are redstone controllable Levers", - "create.ponder.powered_latch.text_2": "UNLOCALIZED: Signals at the back switch it on", - "create.ponder.powered_latch.text_3": "UNLOCALIZED: Signals from the side switch it back off", - "create.ponder.powered_latch.text_4": "UNLOCALIZED: Powered latches can also be toggled manually", - - "create.ponder.powered_toggle_latch.header": "UNLOCALIZED: Controlling signals using the Powered Toggle Latch", - "create.ponder.powered_toggle_latch.text_1": "UNLOCALIZED: Powered Toggle Latches are redstone controllable Levers", - "create.ponder.powered_toggle_latch.text_2": "UNLOCALIZED: Signals at the back will toggle its state", - "create.ponder.powered_toggle_latch.text_3": "UNLOCALIZED: ...on and back off", - "create.ponder.powered_toggle_latch.text_4": "UNLOCALIZED: Powered toggle latches can also be toggled manually", - - "create.ponder.pulse_repeater.header": "UNLOCALIZED: Controlling signals using Pulse Repeaters", - "create.ponder.pulse_repeater.text_1": "UNLOCALIZED: Pulse Repeaters will shorten any redstone signal to a single pulse", - - "create.ponder.radial_chassis.header": "UNLOCALIZED: Attaching blocks using Radial Chassis", - "create.ponder.radial_chassis.text_1": "UNLOCALIZED: Radial Chassis connect to identical Chassis blocks in a row", - "create.ponder.radial_chassis.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it", - "create.ponder.radial_chassis.text_3": "UNLOCALIZED: The side faces of a Radial Chassis can be made Sticky", - "create.ponder.radial_chassis.text_4": "UNLOCALIZED: Click again to make all other sides sticky", - "create.ponder.radial_chassis.text_5": "UNLOCALIZED: Sneak and Right-Click with an empty hand to remove the slime", - "create.ponder.radial_chassis.text_6": "UNLOCALIZED: Whenever a Block is next to a sticky face...", - "create.ponder.radial_chassis.text_7": "UNLOCALIZED: ...it will attach all reachable blocks within a radius on that layer", - "create.ponder.radial_chassis.text_8": "UNLOCALIZED: Using a Wrench, a precise Radius can be specified for this chassis", - "create.ponder.radial_chassis.text_9": "UNLOCALIZED: Blocks not reachable by any sticky face will not attach", - - "create.ponder.redstone_contact.header": "UNLOCALIZED: Redstone Contacts", - "create.ponder.redstone_contact.text_1": "UNLOCALIZED: Redstone Contacts facing each other will emit a redstone signal", - "create.ponder.redstone_contact.text_2": "UNLOCALIZED: This still applies when one of them is part of a moving Contraption", - - "create.ponder.redstone_link.header": "UNLOCALIZED: Using Redstone Links", - "create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly", - "create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode", - "create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same", - "create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks", - "create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency", - "create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate", - - "create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys", - "create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force", - "create.ponder.rope_pulley.text_2": "UNLOCALIZED: Direction and Speed of movement depend on the Rotational Input", - - "create.ponder.rope_pulley_attachment.header": "UNLOCALIZED: Moving Pulleys as part of a Contraption", - "create.ponder.rope_pulley_attachment.text_1": "UNLOCALIZED: Whenever Pulleys are themselves being moved by a Contraption...", - "create.ponder.rope_pulley_attachment.text_2": "UNLOCALIZED: ...its attached structure will be dragged with it", - "create.ponder.rope_pulley_attachment.text_3": "UNLOCALIZED: Mind that pulleys are only movable while stopped", - - "create.ponder.rope_pulley_modes.header": "UNLOCALIZED: Movement Modes of the Rope Pulley", - "create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks", - "create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at", - - "create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller", - "create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them", - "create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured", - - "create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails", - "create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with", - "create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks", - "create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them", - "create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames", - - "create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames", - "create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with", - "create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks", - - "create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts", - "create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions", - "create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI", - "create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence", - "create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over", - "create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress", - - "create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.", - - "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", - "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", - - "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", - "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", - "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", - "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", - "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", - - "create.ponder.smart_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Smart Pipes", - "create.ponder.smart_pipe.text_1": "UNLOCALIZED: Smart pipes can help control flows by fluid type", - "create.ponder.smart_pipe.text_2": "UNLOCALIZED: When placed directly at the source, they can specify the type of fluid to extract", - "create.ponder.smart_pipe.text_3": "UNLOCALIZED: Simply Right-Click their filter slot with any item containing the desired fluid", - "create.ponder.smart_pipe.text_4": "UNLOCALIZED: When placed further down a pipe network, smart pipes will only let matching fluids continue", - - "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", - "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", - "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", - "create.ponder.speedometer.text_3": "UNLOCALIZED: Comparators can emit analog Restone Signals relative to the Speedometer's measurements", - - "create.ponder.spout_filling.header": "UNLOCALIZED: Filling Items using a Spout", - "create.ponder.spout_filling.text_1": "UNLOCALIZED: The Spout can fill fluid holding items provided beneath it", - "create.ponder.spout_filling.text_2": "UNLOCALIZED: The content of a Spout cannot be accessed manually", - "create.ponder.spout_filling.text_3": "UNLOCALIZED: Instead, Pipes can be used to supply it with fluids", - "create.ponder.spout_filling.text_4": "UNLOCALIZED: The Input items can be placed on a Depot under the Spout", - "create.ponder.spout_filling.text_5": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.spout_filling.text_6": "UNLOCALIZED: The Spout will hold and process them automatically", - - "create.ponder.stabilized_bearings.header": "UNLOCALIZED: Stabilized Contraptions", - "create.ponder.stabilized_bearings.text_1": "UNLOCALIZED: Whenever Mechanical Bearings are themselves part of a moving Structure..", - "create.ponder.stabilized_bearings.text_2": "UNLOCALIZED: ..they will attempt to keep themselves upright", - "create.ponder.stabilized_bearings.text_3": "UNLOCALIZED: Once again, the bearing will attach to the block in front of it", - "create.ponder.stabilized_bearings.text_4": "UNLOCALIZED: As a result, the entire sub-Contraption will stay upright", - - "create.ponder.sticker.header": "UNLOCALIZED: Attaching blocks using the Sticker", - "create.ponder.sticker.text_1": "UNLOCALIZED: Stickers are ideal for Redstone-controlled block attachment", - "create.ponder.sticker.text_2": "UNLOCALIZED: Upon receiving a signal, it will toggle its state", - "create.ponder.sticker.text_3": "UNLOCALIZED: If it is now moved in a contraption, the block will move with it", - "create.ponder.sticker.text_4": "UNLOCALIZED: Toggled once again, the block is no longer attached", - - "create.ponder.stressometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Stressometer", - "create.ponder.stressometer.text_1": "UNLOCALIZED: The Stressometer displays the current Stress Capacity of the attached kinetic network", - "create.ponder.stressometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", - "create.ponder.stressometer.text_3": "UNLOCALIZED: Comparators can emit analog Restone Signals relative to the Stressometer's measurements", - - "create.ponder.super_glue.header": "UNLOCALIZED: Attaching blocks using Super Glue", - "create.ponder.super_glue.text_1": "UNLOCALIZED: Super Glue can be used between any two blocks", - "create.ponder.super_glue.text_2": "UNLOCALIZED: The attached blocks will move together when assembled into a Contraption", - "create.ponder.super_glue.text_3": "UNLOCALIZED: Whenever Super Glue is held in the off-hand...", - "create.ponder.super_glue.text_4": "UNLOCALIZED: ...added blocks will be glued to the face they were placed on automatically", - "create.ponder.super_glue.text_5": "UNLOCALIZED: Super Glue can be removed with Left-Click", - - "create.ponder.valve_handle.header": "UNLOCALIZED: Generating Rotational Force using Valve Handles", - "create.ponder.valve_handle.text_1": "UNLOCALIZED: Valve Handles can be used by players to apply rotational force manually", - "create.ponder.valve_handle.text_2": "UNLOCALIZED: Hold Right-Click to rotate it Counter-Clockwise", - "create.ponder.valve_handle.text_3": "UNLOCALIZED: Its conveyed speed is slow and precise", - "create.ponder.valve_handle.text_4": "UNLOCALIZED: Sneak and Hold Right-Click to rotate it Clockwise", - "create.ponder.valve_handle.text_5": "UNLOCALIZED: Valve handles can be dyed for aesthetic purposes", - - "create.ponder.valve_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Valves", - "create.ponder.valve_pipe.text_1": "UNLOCALIZED: Valve pipes help control fluids propagating through pipe networks", - "create.ponder.valve_pipe.text_2": "UNLOCALIZED: Their shaft input controls whether fluid is currently allowed through", - "create.ponder.valve_pipe.text_3": "UNLOCALIZED: Given Rotational Force in the opening direction, the valve will open up", - "create.ponder.valve_pipe.text_4": "UNLOCALIZED: It can be closed again by reversing the input rotation", - - "create.ponder.water_wheel.header": "UNLOCALIZED: Generating Rotational Force using Water Wheels", - "create.ponder.water_wheel.text_1": "UNLOCALIZED: Water Wheels draw force from adjacent Water Currents", - "create.ponder.water_wheel.text_2": "UNLOCALIZED: The more faces are powered, the faster the Water Wheel will rotate", - "create.ponder.water_wheel.text_3": "UNLOCALIZED: The Wheels' blades should be oriented against the flow", - "create.ponder.water_wheel.text_4": "UNLOCALIZED: Facing the opposite way, they will not be as effective", - - "create.ponder.weighted_ejector.header": "UNLOCALIZED: Using Weighted Ejectors", - "create.ponder.weighted_ejector.text_1": "UNLOCALIZED: Sneak and Right-Click holding an Ejector to select its target location", - "create.ponder.weighted_ejector.text_10": "UNLOCALIZED: It is now limited to this stack size, and only activates when its held stack reaches this amount", - "create.ponder.weighted_ejector.text_11": "UNLOCALIZED: Other Entities will always trigger an Ejector when stepping on it", - "create.ponder.weighted_ejector.text_2": "UNLOCALIZED: The placed ejector will now launch objects to the marked location", - "create.ponder.weighted_ejector.text_3": "UNLOCALIZED: A valid target can be at any height or distance within range", - "create.ponder.weighted_ejector.text_4": "UNLOCALIZED: They cannot however be off to a side", - "create.ponder.weighted_ejector.text_5": "UNLOCALIZED: If no valid Target was selected, it will simply target the block directly in front", - "create.ponder.weighted_ejector.text_6": "UNLOCALIZED: Supply Rotational Force in order to charge it up", - "create.ponder.weighted_ejector.text_7": "UNLOCALIZED: Items placed on the ejector cause it to trigger", - "create.ponder.weighted_ejector.text_8": "UNLOCALIZED: If Inventories are targeted, the ejector will wait until there is space", - "create.ponder.weighted_ejector.text_9": "UNLOCALIZED: Using the Wrench, a required Stack Size can be configured", - - "create.ponder.weighted_ejector_redstone.header": "UNLOCALIZED: Controlling Weighted Ejectors with Redstone", - "create.ponder.weighted_ejector_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Ejectors will not activate", - "create.ponder.weighted_ejector_redstone.text_2": "UNLOCALIZED: Furthermore, Observers can detect when Ejectors activate", - - "create.ponder.weighted_ejector_tunnel.header": "UNLOCALIZED: Splitting item stacks using Weighted Ejectors", - "create.ponder.weighted_ejector_tunnel.text_1": "UNLOCALIZED: Combined with Brass Tunnels, Ejectors can split item stacks by specific amounts", - "create.ponder.weighted_ejector_tunnel.text_2": "UNLOCALIZED: First, configure the Brass Tunnel to 'Prefer Nearest', in order to prioritize its side output", - "create.ponder.weighted_ejector_tunnel.text_3": "UNLOCALIZED: The Stack Size set on the Ejector now determines the amount to be split off", - "create.ponder.weighted_ejector_tunnel.text_4": "UNLOCALIZED: While a new stack of the configured size exits the side output...", - "create.ponder.weighted_ejector_tunnel.text_5": "UNLOCALIZED: ...the remainder will continue on its path", - - "create.ponder.windmill_source.header": "UNLOCALIZED: Generating Rotational Force using Windmill Bearings", - "create.ponder.windmill_source.text_1": "UNLOCALIZED: Windmill Bearings attach to the block in front of them", - "create.ponder.windmill_source.text_2": "UNLOCALIZED: If enough Sail-like blocks are attached to the block, it can act as a Windmill", - "create.ponder.windmill_source.text_3": "UNLOCALIZED: Activated with Right-Click, the Windmill Bearing will start providing Rotational Force", - "create.ponder.windmill_source.text_4": "UNLOCALIZED: The Amount of Sail Blocks determine its Rotation Speed", - "create.ponder.windmill_source.text_5": "UNLOCALIZED: Use a Wrench to configure its rotation direction", - "create.ponder.windmill_source.text_6": "UNLOCALIZED: Right-click the Bearing anytime to stop and edit the Structure again", - - "create.ponder.windmill_structure.header": "UNLOCALIZED: Windmill Contraptions", - "create.ponder.windmill_structure.text_1": "UNLOCALIZED: Any Structure can count as a valid Windmill, as long as it contains at least 8 sail-like Blocks.", - - "_": "Thank you for translating Create!" - -} \ No newline at end of file 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/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index 59a86f429..d723cbe38 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:large_cogwheel", - "create:cogwheel" + "create:cogwheel", + "create:large_cogwheel" ] } }, 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/recipes/mechanical_crafting/crushing_wheel.json b/src/generated/resources/data/create/recipes/mechanical_crafting/crushing_wheel.json index a8c1170ec..34ad9ea72 100644 --- a/src/generated/resources/data/create/recipes/mechanical_crafting/crushing_wheel.json +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/crushing_wheel.json @@ -21,5 +21,6 @@ "result": { "item": "create:crushing_wheel", "count": 2 - } + }, + "acceptMirrored": false } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json b/src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json index c7fc84b1c..2d69859ee 100644 --- a/src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json @@ -23,5 +23,6 @@ }, "result": { "item": "create:extendo_grip" - } + }, + "acceptMirrored": false } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/flywheel.json b/src/generated/resources/data/create/recipes/mechanical_crafting/flywheel.json index 010b2fbae..dee9cffd7 100644 --- a/src/generated/resources/data/create/recipes/mechanical_crafting/flywheel.json +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/flywheel.json @@ -15,5 +15,6 @@ }, "result": { "item": "create:flywheel" - } + }, + "acceptMirrored": true } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/furnace_engine.json b/src/generated/resources/data/create/recipes/mechanical_crafting/furnace_engine.json index 45765aebe..3842209f0 100644 --- a/src/generated/resources/data/create/recipes/mechanical_crafting/furnace_engine.json +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/furnace_engine.json @@ -26,5 +26,6 @@ }, "result": { "item": "create:furnace_engine" - } + }, + "acceptMirrored": true } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json b/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json index fffb05d24..a21d9bd04 100644 --- a/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json @@ -20,5 +20,6 @@ }, "result": { "item": "create:potato_cannon" - } + }, + "acceptMirrored": true } \ 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/create/tags/items/upright_on_belt.json b/src/generated/resources/data/create/tags/items/upright_on_belt.json index 1f236d151..76dfebfa3 100644 --- a/src/generated/resources/data/create/tags/items/upright_on_belt.json +++ b/src/generated/resources/data/create/tags/items/upright_on_belt.json @@ -9,6 +9,7 @@ "minecraft:potion", "minecraft:splash_potion", "minecraft:lingering_potion", - "minecraft:honey_bottle" + "minecraft:honey_bottle", + "minecraft:cake" ] } \ 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/AllRecipeTypes.java b/src/main/java/com/simibubi/create/AllRecipeTypes.java index ee9ccfb2d..0ec2ecdf3 100644 --- a/src/main/java/com/simibubi/create/AllRecipeTypes.java +++ b/src/main/java/com/simibubi/create/AllRecipeTypes.java @@ -120,6 +120,7 @@ public enum AllRecipeTypes implements IRecipeTypeInfo { public static > IRecipeType simpleType(ResourceLocation id) { String stringId = id.toString(); return Registry.register(Registry.RECIPE_TYPE, id, new IRecipeType() { + @Override public String toString() { return stringId; } 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 f0328a5e6..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,104 +218,95 @@ 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.HONEY_BOTTLE, Items.CAKE); AllBlockTags.WINDMILL_SAILS.includeAll(BlockTags.WOOL); @@ -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 f239305e3..24393754d 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -7,10 +7,12 @@ import org.apache.logging.log4j.Logger; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +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.flywheel.engine.FurnaceEngineModifiers; 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; @@ -58,7 +60,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.3.2d"; + public static final String VERSION = "0.3.2e"; public static final Logger LOGGER = LogManager.getLogger(); @@ -79,6 +81,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 +100,9 @@ public class Create { AllInteractionBehaviours.register(); AllWorldFeatures.register(); AllEnchantments.register(); - AllConfigs.register(ModLoadingContext.get()); + FurnaceEngineModifiers.register(); + AllConfigs.register(modLoadingContext); + BlockSpoutingBehaviour.register(); ForgeMod.enableMilkFluid(); @@ -108,19 +118,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(); @@ -131,7 +142,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/api/behaviour/BlockSpoutingBehaviour.java b/src/main/java/com/simibubi/create/api/behaviour/BlockSpoutingBehaviour.java new file mode 100644 index 000000000..61b11e4fa --- /dev/null +++ b/src/main/java/com/simibubi/create/api/behaviour/BlockSpoutingBehaviour.java @@ -0,0 +1,52 @@ +package com.simibubi.create.api.behaviour; + +import java.util.HashMap; +import java.util.function.Consumer; + +import com.simibubi.create.Create; +import com.simibubi.create.compat.tconstruct.SpoutCasting; +import com.simibubi.create.content.contraptions.fluids.actors.SpoutTileEntity; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +public abstract class BlockSpoutingBehaviour { + + private static final HashMap BLOCK_SPOUTING_BEHAVIOURS = new HashMap<>(); + + public static void addCustomSpoutInteraction(ResourceLocation resourceLocation, + BlockSpoutingBehaviour movementBehaviour) { + BLOCK_SPOUTING_BEHAVIOURS.put(resourceLocation, movementBehaviour); + } + + public static void forEach(Consumer accept) { + BLOCK_SPOUTING_BEHAVIOURS.values() + .forEach(accept); + } + + /** + * While idle, Spouts will call this every tick with simulate == true
+ * When fillBlock returns > 0, the Spout will start its animation cycle
+ *
+ * During this animation cycle, fillBlock is called once again with simulate == false but only on the relevant SpoutingBehaviour
+ * When fillBlock returns > 0 once again, the Spout will drain its content by the returned amount of units
+ * Perform any other side-effects in this method
+ * This method is called server-side only (except in ponder)
+ * + * @param world + * @param pos of the affected block + * @param spout + * @param availableFluid do not modify, return the amount to be subtracted instead + * @param simulate whether the spout is testing or actually performing this behaviour + * @return amount filled into the block, 0 to idle/cancel + */ + public abstract int fillBlock(World world, BlockPos pos, SpoutTileEntity spout, FluidStack availableFluid, + boolean simulate); + + public static void register() { + addCustomSpoutInteraction(Create.asResource("ticon_casting"), new SpoutCasting()); + } + +} diff --git a/src/main/java/com/simibubi/create/api/event/TileEntityBehaviourEvent.java b/src/main/java/com/simibubi/create/api/event/TileEntityBehaviourEvent.java new file mode 100644 index 000000000..03e6e4dc9 --- /dev/null +++ b/src/main/java/com/simibubi/create/api/event/TileEntityBehaviourEvent.java @@ -0,0 +1,56 @@ +package com.simibubi.create.api.event; + +import java.lang.reflect.Type; +import java.util.Map; + +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; + +import net.minecraft.block.BlockState; +import net.minecraftforge.eventbus.api.GenericEvent; + +/** + * Event that is fired just before a SmartTileEntity is being deserealized
+ * Also if a new one is placed
+ * Use it to attach a new {@link TileEntityBehaviour} or replace existing ones (with caution)
+ *
+ * Actual setup of the behaviours internal workings and data should be done in TileEntityBehaviour#read() and TileEntityBehaviour#initialize() respectively.
+ *
+ * Because of the earlyness of this event, the added behaviours will have access to the initial nbt read (unless the TE was placed, not loaded), thereby allowing tiles to store and retrieve data for injected behaviours + */ +public class TileEntityBehaviourEvent extends GenericEvent { + + private BlockState state; + private T smartTileEntity; + private Map, TileEntityBehaviour> behaviours; + + public TileEntityBehaviourEvent(BlockState state, T tileEntity, + Map, TileEntityBehaviour> behaviours) { + this.state = state; + smartTileEntity = tileEntity; + this.behaviours = behaviours; + } + + @Override + public Type getGenericType() { + return smartTileEntity.getClass(); + } + + public void attach(TileEntityBehaviour behaviour) { + behaviours.put(behaviour.getType(), behaviour); + } + + public TileEntityBehaviour remove(BehaviourType type) { + return behaviours.remove(type); + } + + public T getTileEntity() { + return smartTileEntity; + } + + public BlockState getBlockState() { + return state; + } + +} diff --git a/src/main/java/com/simibubi/create/compat/Mods.java b/src/main/java/com/simibubi/create/compat/Mods.java index 85b23626a..b32960505 100644 --- a/src/main/java/com/simibubi/create/compat/Mods.java +++ b/src/main/java/com/simibubi/create/compat/Mods.java @@ -3,13 +3,16 @@ package com.simibubi.create.compat; import java.util.Optional; import java.util.function.Supplier; +import com.simibubi.create.foundation.utility.Lang; + import net.minecraftforge.fml.ModList; /** * For compatibility with and without another mod present, we have to define load conditions of the specific code */ public enum Mods { - DYNAMICTREES; + DYNAMICTREES, + TCONSTRUCT; /** * @return a boolean of whether the mod is loaded or not based on mod id @@ -22,7 +25,7 @@ public enum Mods { * @return the mod id */ public String asId() { - return name().toLowerCase(); + return Lang.asId(name()); } /** 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/BasinCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java index 60bd73223..ddbec7c2c 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java @@ -6,7 +6,6 @@ import java.util.stream.Collectors; import org.apache.commons.lang3.mutable.MutableInt; -import com.google.common.collect.ImmutableList; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; @@ -73,17 +72,10 @@ public class BasinCategory extends CreateRecipeCategory { IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks(); IGuiFluidStackGroup fluidStacks = recipeLayout.getFluidStacks(); - ItemStack itemOutput = recipe.getRollableResultsAsItemStacks() - .isEmpty() ? ItemStack.EMPTY - : recipe.getRollableResultsAsItemStacks() - .get(0); - FluidStack fluidOutput = recipe.getFluidResults() - .isEmpty() ? FluidStack.EMPTY - : recipe.getFluidResults() - .get(0); - NonNullList fluidIngredients = recipe.getFluidIngredients(); List> ingredients = ItemHelper.condenseIngredients(recipe.getIngredients()); + List itemOutputs = recipe.getRollableResultsAsItemStacks(); + NonNullList fluidOutputs = recipe.getFluidResults(); int size = ingredients.size() + fluidIngredients.size(); int xOffset = size < 3 ? (3 - size) * 19 / 2 : 0; @@ -115,28 +107,41 @@ public class BasinCategory extends CreateRecipeCategory { fluidStacks.set(j, withImprovedVisibility(stacks)); } - if (!itemOutput.isEmpty()) { - itemStacks.init(i, false, 141, 50 + yOffset); - itemStacks.set(i, recipe.getResultItem() - .getStack()); - yOffset -= 19; + int outSize = fluidOutputs.size() + recipe.getRollableResults() + .size(); + int outputIndex = 0; + + if (!itemOutputs.isEmpty()) + addStochasticTooltip(itemStacks, recipe.getRollableResults(), i); + + for (; outputIndex < outSize; outputIndex++) { + int xPosition = 141 - (outSize % 2 != 0 && outputIndex == outSize - 1 ? 0 : outputIndex % 2 == 0 ? 10 : -9); + int yPosition = -19 * (outputIndex / 2) + 50 + yOffset; + + if (itemOutputs.size() > outputIndex) { + itemStacks.init(i, false, xPosition, yPosition + yOffset); + itemStacks.set(i, itemOutputs.get(outputIndex)); + i++; + } else { + fluidStacks.init(j, false, xPosition + 1, yPosition + 1 + yOffset); + fluidStacks.set(j, withImprovedVisibility(fluidOutputs.get(outputIndex - itemOutputs.size()))); + j++; + } + } - if (!fluidOutput.isEmpty()) { - fluidStacks.init(j, false, 142, 51 + yOffset); - fluidStacks.set(j, withImprovedVisibility(fluidOutput)); - } - - addFluidTooltip(fluidStacks, fluidIngredients, ImmutableList.of(fluidOutput)); + addFluidTooltip(fluidStacks, fluidIngredients, fluidOutputs); HeatCondition requiredHeat = recipe.getRequiredHeat(); if (!requiredHeat.testBlazeBurner(HeatLevel.NONE)) { - itemStacks.init(++i, true, 133, 80); + itemStacks.init(i, true, 133, 80); itemStacks.set(i, AllBlocks.BLAZE_BURNER.asStack()); + i++; } if (!requiredHeat.testBlazeBurner(HeatLevel.KINDLED)) { - itemStacks.init(++i, true, 152, 80); + itemStacks.init(i, true, 152, 80); itemStacks.set(i, AllItems.BLAZE_CAKE.asStack()); + i++; } } @@ -146,6 +151,8 @@ public class BasinCategory extends CreateRecipeCategory { int size = actualIngredients.size() + recipe.getFluidIngredients() .size(); + int outSize = recipe.getFluidResults().size() + recipe.getRollableResults().size(); + int xOffset = size < 3 ? (3 - size) * 19 / 2 : 0; HeatCondition requiredHeat = recipe.getRequiredHeat(); int yOffset = 0; @@ -154,8 +161,13 @@ public class BasinCategory extends CreateRecipeCategory { AllGuiTextures.JEI_SLOT.draw(matrixStack, 16 + xOffset + (i % 3) * 19, 50 - (i / 3) * 19 + yOffset); boolean noHeat = requiredHeat == HeatCondition.NONE; - AllGuiTextures.JEI_SLOT.draw(matrixStack, 141, 50 + yOffset); - AllGuiTextures.JEI_DOWN_ARROW.draw(matrixStack, 136, 32 + yOffset); + + int vRows = (1 + outSize) / 2; + for (int i = 0; i < outSize; i++) + AllGuiTextures.JEI_SLOT.draw(matrixStack, + 141 - (outSize % 2 != 0 && i == outSize - 1 ? 0 : i % 2 == 0 ? 10 : -9), -19 * (i / 2) + 50 + yOffset); + if (vRows <= 2) + AllGuiTextures.JEI_DOWN_ARROW.draw(matrixStack, 136, -19 * (vRows - 1) + 32 + yOffset); AllGuiTextures shadow = noHeat ? AllGuiTextures.JEI_SHADOW : AllGuiTextures.JEI_LIGHT; shadow.draw(matrixStack, 81, 58 + (noHeat ? 10 : 30)); 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/compat/tconstruct/SpoutCasting.java b/src/main/java/com/simibubi/create/compat/tconstruct/SpoutCasting.java new file mode 100644 index 000000000..88f47a402 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/tconstruct/SpoutCasting.java @@ -0,0 +1,72 @@ +package com.simibubi.create.compat.tconstruct; + +import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour; +import com.simibubi.create.compat.Mods; +import com.simibubi.create.content.contraptions.fluids.actors.SpoutTileEntity; +import com.simibubi.create.foundation.config.AllConfigs; +import com.simibubi.create.foundation.fluid.FluidHelper; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; + +public class SpoutCasting extends BlockSpoutingBehaviour { + + static Boolean TICON_PRESENT = null; + + ResourceLocation TABLE = new ResourceLocation("tconstruct", "table"); + ResourceLocation BASIN = new ResourceLocation("tconstruct", "basin"); + + @Override + public int fillBlock(World level, BlockPos pos, SpoutTileEntity spout, FluidStack availableFluid, + boolean simulate) { + if (!enabled()) + return 0; + + TileEntity te = level.getBlockEntity(pos); + if (te == null) + return 0; + + IFluidHandler handler = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, Direction.UP) + .orElse(null); + if (handler == null) + return 0; + if (handler.getTanks() != 1) + return 0; + + ResourceLocation registryName = te.getType() + .getRegistryName(); + if (!registryName.equals(TABLE) && !registryName.equals(BASIN)) + return 0; + if (!handler.isFluidValid(0, availableFluid)) + return 0; + + FluidStack containedFluid = handler.getFluidInTank(0); + if (!(containedFluid.isEmpty() || containedFluid.isFluidEqual(availableFluid))) + return 0; + + // Do not fill if it would only partially fill the table (unless > 1000mb) + int amount = availableFluid.getAmount(); + if (amount < 1000 + && handler.fill(FluidHelper.copyStackWithAmount(availableFluid, amount + 1), FluidAction.SIMULATE) > amount) + return 0; + + // Return amount filled into the table/basin + return handler.fill(availableFluid, simulate ? FluidAction.SIMULATE : FluidAction.EXECUTE); + } + + private boolean enabled() { + if (TICON_PRESENT == null) + TICON_PRESENT = Mods.TCONSTRUCT.isLoaded(); + if (!TICON_PRESENT) + return false; + return AllConfigs.SERVER.recipes.allowCastingBySpout.get(); + } + +} 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/HarvesterMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java index 87eee9790..e7f604707 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java @@ -12,23 +12,26 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices; +import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; +import net.minecraft.block.AbstractPlantBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.CocoaBlock; import net.minecraft.block.CropsBlock; -import net.minecraft.block.KelpBlock; -import net.minecraft.block.KelpTopBlock; import net.minecraft.block.SugarCaneBlock; +import net.minecraft.block.SweetBerryBushBlock; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.state.IntegerProperty; import net.minecraft.state.Property; import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tags.BlockTags; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; @@ -49,14 +52,16 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { @Nullable @Override - public ActorInstance createInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) { + public ActorInstance createInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, + MovementContext context) { return new HarvesterActorInstance(materialManager, simulationWorld, context); } @Override public void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, ContraptionMatrices matrices, IRenderTypeBuffer buffers) { - if (!Backend.getInstance().canUseInstancing()) + if (!Backend.getInstance() + .canUseInstancing()) HarvesterRenderer.renderInContraption(context, renderWorld, matrices, buffers); } @@ -83,10 +88,20 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { return; } + ItemStack item = ItemStack.EMPTY; + float effectChance = 1; + + if (stateVisited.getBlock() + .is(BlockTags.LEAVES)) { + item = new ItemStack(Items.SHEARS); + effectChance = .45f; + } + MutableBoolean seedSubtracted = new MutableBoolean(notCropButCuttable); BlockState state = stateVisited; - BlockHelper.destroyBlock(world, pos, 1, stack -> { - if (!seedSubtracted.getValue() && stack.sameItem(new ItemStack(state.getBlock()))) { + BlockHelper.destroyBlockAs(world, pos, null, item, effectChance, stack -> { + if (AllConfigs.SERVER.kinetics.harvesterReplants.get() && !seedSubtracted.getValue() + && stack.sameItem(new ItemStack(state.getBlock()))) { stack.shrink(1); seedSubtracted.setTrue(); } @@ -97,23 +112,31 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { } private boolean isValidCrop(World world, BlockPos pos, BlockState state) { + boolean harvestPartial = AllConfigs.SERVER.kinetics.harvestPartiallyGrown.get(); + boolean replant = AllConfigs.SERVER.kinetics.harvesterReplants.get(); + if (state.getBlock() instanceof CropsBlock) { CropsBlock crop = (CropsBlock) state.getBlock(); - if (!crop.isMaxAge(state)) - return false; - return true; + if (harvestPartial) + return state.getValue(crop.getAgeProperty()) != 0 || !replant; + return crop.isMaxAge(state); } + if (state.getCollisionShape(world, pos) .isEmpty() || state.getBlock() instanceof CocoaBlock) { for (Property property : state.getProperties()) { if (!(property instanceof IntegerProperty)) continue; + IntegerProperty ageProperty = (IntegerProperty) property; if (!property.getName() .equals(BlockStateProperties.AGE_1.getName())) continue; - if (((IntegerProperty) property).getPossibleValues() - .size() - 1 != state.getValue((IntegerProperty) property) - .intValue()) + int age = state.getValue(ageProperty) + .intValue(); + if (state.getBlock() instanceof SweetBerryBushBlock && age <= 1 && replant) + continue; + if (age == 0 && replant || !harvestPartial && (ageProperty.getPossibleValues() + .size() - 1 != age)) continue; return true; } @@ -127,12 +150,13 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { return false; if (state.getBlock() instanceof SugarCaneBlock) return true; + if (state.getBlock() + .is(BlockTags.LEAVES)) + return true; if (state.getCollisionShape(world, pos) .isEmpty() || state.getBlock() instanceof CocoaBlock) { - if (state.getBlock() instanceof KelpBlock) - return true; - if (state.getBlock() instanceof KelpTopBlock) + if (state.getBlock() instanceof AbstractPlantBlock) return true; for (Property property : state.getProperties()) { @@ -152,6 +176,14 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { } private BlockState cutCrop(World world, BlockPos pos, BlockState state) { + if (!AllConfigs.SERVER.kinetics.harvesterReplants.get()) { + if (state.getFluidState() + .isEmpty()) + return Blocks.AIR.defaultBlockState(); + return state.getFluidState() + .createLegacyBlock(); + } + Block block = state.getBlock(); if (block instanceof CropsBlock) { CropsBlock crop = (CropsBlock) block; @@ -160,20 +192,20 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { if (block == Blocks.SWEET_BERRY_BUSH) { return state.setValue(BlockStateProperties.AGE_3, Integer.valueOf(1)); } - if (block == Blocks.SUGAR_CANE || block == Blocks.KELP) { + if (block == Blocks.SUGAR_CANE || block instanceof AbstractPlantBlock) { if (state.getFluidState() - .isEmpty()) + .isEmpty()) return Blocks.AIR.defaultBlockState(); return state.getFluidState() - .createLegacyBlock(); + .createLegacyBlock(); } if (state.getCollisionShape(world, pos) - .isEmpty() || block instanceof CocoaBlock) { + .isEmpty() || block instanceof CocoaBlock) { for (Property property : state.getProperties()) { if (!(property instanceof IntegerProperty)) continue; if (!property.getName() - .equals(BlockStateProperties.AGE_1.getName())) + .equals(BlockStateProperties.AGE_1.getName())) continue; return state.setValue((IntegerProperty) property, Integer.valueOf(0)); } 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/crafter/MechanicalCrafterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java index d589cd999..67e38873d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java @@ -17,6 +17,7 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.utility.Pointing; import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; @@ -43,14 +44,16 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer recipeItemsIn, ItemStack recipeOutputIn) { + NonNullList recipeItemsIn, ItemStack recipeOutputIn, boolean acceptMirrored) { super(idIn, groupIn, recipeWidthIn, recipeHeightIn, recipeItemsIn, recipeOutputIn); + this.acceptMirrored = acceptMirrored; } - private static MechanicalCraftingRecipe fromShaped(ShapedRecipe recipe) { + private static MechanicalCraftingRecipe fromShaped(ShapedRecipe recipe, boolean acceptMirrored) { return new MechanicalCraftingRecipe(recipe.getId(), recipe.getGroup(), recipe.getWidth(), recipe.getHeight(), - recipe.getIngredients(), recipe.getResultItem()); + recipe.getIngredients(), recipe.getResultItem(), acceptMirrored); } @Override public boolean matches(CraftingInventory inv, World worldIn) { - return inv instanceof MechanicalCraftingInventory && super.matches(inv, worldIn); + if (!(inv instanceof MechanicalCraftingInventory)) + return false; + if (acceptsMirrored()) + return super.matches(inv, worldIn); + + // From ShapedRecipe except the symmetry + for (int i = 0; i <= inv.getWidth() - this.getWidth(); ++i) + for (int j = 0; j <= inv.getHeight() - this.getHeight(); ++j) + if (this.matchesSpecific(inv, i, j)) + return true; + return false; + } + + // From ShapedRecipe + private boolean matchesSpecific(CraftingInventory inv, int p_77573_2_, int p_77573_3_) { + NonNullList ingredients = getIngredients(); + int width = getWidth(); + int height = getHeight(); + for (int i = 0; i < inv.getWidth(); ++i) { + for (int j = 0; j < inv.getHeight(); ++j) { + int k = i - p_77573_2_; + int l = j - p_77573_3_; + Ingredient ingredient = Ingredient.EMPTY; + if (k >= 0 && l >= 0 && k < width && l < height) + ingredient = ingredients.get(k + l * width); + if (!ingredient.test(inv.getItem(i + j * inv.getWidth()))) + return false; + } + } + return true; } @Override @@ -46,16 +79,30 @@ public class MechanicalCraftingRecipe extends ShapedRecipe { return AllRecipeTypes.MECHANICAL_CRAFTING.getSerializer(); } + public boolean acceptsMirrored() { + return acceptMirrored; + } + public static class Serializer extends ShapedRecipe.Serializer { @Override public ShapedRecipe fromJson(ResourceLocation recipeId, JsonObject json) { - return fromShaped(super.fromJson(recipeId, json)); + return fromShaped(super.fromJson(recipeId, json), JSONUtils.getAsBoolean(json, "acceptMirrored", true)); } @Override public ShapedRecipe fromNetwork(ResourceLocation recipeId, PacketBuffer buffer) { - return fromShaped(super.fromNetwork(recipeId, buffer)); + return fromShaped(super.fromNetwork(recipeId, buffer), buffer.readBoolean() && buffer.readBoolean()); + } + + @Override + public void toNetwork(PacketBuffer p_199427_1_, ShapedRecipe p_199427_2_) { + super.toNetwork(p_199427_1_, p_199427_2_); + if (p_199427_2_ instanceof MechanicalCraftingRecipe) { + p_199427_1_.writeBoolean(true); + p_199427_1_.writeBoolean(((MechanicalCraftingRecipe) p_199427_2_).acceptsMirrored()); + } else + p_199427_1_.writeBoolean(false); } } 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/deployer/DeployerRecipeSearchEvent.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerRecipeSearchEvent.java new file mode 100644 index 000000000..0b204fc4f --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerRecipeSearchEvent.java @@ -0,0 +1,58 @@ +package com.simibubi.create.content.contraptions.components.deployer; + +import java.util.Optional; +import java.util.function.Supplier; + +import javax.annotation.Nullable; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.items.wrapper.RecipeWrapper; + +public class DeployerRecipeSearchEvent extends Event { + private final DeployerTileEntity tileEntity; + private final RecipeWrapper inventory; + @Nullable + IRecipe recipe = null; + private int maxPriority = 0; + + public DeployerRecipeSearchEvent(DeployerTileEntity tileEntity, RecipeWrapper inventory) { + this.tileEntity = tileEntity; + this.inventory = inventory; + } + + @Override + public boolean isCancelable() { + return true; + } + + public DeployerTileEntity getTileEntity() { + return tileEntity; + } + + public RecipeWrapper getInventory() { + return inventory; + } + + // lazyness to not scan for recipes that aren't selected + public boolean shouldAddRecipeWithPriority(int priority) { + return !isCanceled() && priority > maxPriority; + } + + @Nullable + public IRecipe getRecipe() { + if (isCanceled()) + return null; + return recipe; + } + + public void addRecipe(Supplier>> recipeSupplier, int priority) { + if (!shouldAddRecipeWithPriority(priority)) + return; + recipeSupplier.get().ifPresent(newRecipe -> { + this.recipe = newRecipe; + maxPriority = priority; + }); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java index b8af6dae6..22e7c28e7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java @@ -4,7 +4,6 @@ import static com.simibubi.create.content.contraptions.base.DirectionalKineticBl import java.util.ArrayList; import java.util.List; -import java.util.Optional; import javax.annotation.Nullable; @@ -28,6 +27,7 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat; import net.minecraft.block.BlockState; import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.nbt.CompoundNBT; @@ -46,6 +46,7 @@ import net.minecraft.util.math.RayTraceContext.FluidMode; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.text.ITextComponent; import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.common.util.LazyOptional; @@ -441,25 +442,37 @@ public class DeployerTileEntity extends KineticTileEntity { SandPaperInv sandpaperInv = new SandPaperInv(ItemStack.EMPTY); @Nullable - public IRecipe getRecipe(ItemStack stack) { - if (player == null) + public IRecipe getRecipe(ItemStack stack) { + // safety checks + if (player == null || level == null) return null; + + // sandpaper = op ItemStack heldItemMainhand = player.getMainHandItem(); if (heldItemMainhand.getItem() instanceof SandPaperItem) { sandpaperInv.setItem(0, stack); return AllRecipeTypes.SANDPAPER_POLISHING.find(sandpaperInv, level) .orElse(null); } + + // inventory recipeInv.setItem(0, stack); recipeInv.setItem(1, heldItemMainhand); - Optional assemblyRecipe = SequencedAssemblyRecipe.getRecipe(level, recipeInv, - AllRecipeTypes.DEPLOYING.getType(), DeployerApplicationRecipe.class); - if (assemblyRecipe.isPresent()) - return assemblyRecipe.get(); + // event nonsense + DeployerRecipeSearchEvent event = new DeployerRecipeSearchEvent(this, recipeInv); - return AllRecipeTypes.DEPLOYING.find(recipeInv, level) - .orElse(null); + // creates deployer recipes + event.addRecipe(() -> SequencedAssemblyRecipe.getRecipe(level, event.getInventory(), + AllRecipeTypes.DEPLOYING.getType(), DeployerApplicationRecipe.class), 100); + event.addRecipe(() -> AllRecipeTypes.DEPLOYING.find(event.getInventory(), level), 50); + + // post the event, get result + MinecraftForge.EVENT_BUS.post(event); + return event.getRecipe(); } + public DeployerFakePlayer getPlayer() { + return player; + } } 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/flywheel/engine/FurnaceEngineModifiers.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineModifiers.java new file mode 100644 index 000000000..2a77de7b0 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineModifiers.java @@ -0,0 +1,32 @@ +package com.simibubi.create.content.contraptions.components.flywheel.engine; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraftforge.registries.IRegistryDelegate; + +public class FurnaceEngineModifiers { + + public final static FurnaceEngineModifiers INSTANCE = new FurnaceEngineModifiers(); + + protected Map, Float> blockModifiers = new HashMap<>(); + + public void register(IRegistryDelegate block, float modifier) { + this.blockModifiers.put(block, modifier); + } + + public float getModifierOrDefault(BlockState state, float defaultValue) { + return blockModifiers.getOrDefault(state.getBlock().delegate, defaultValue); + } + + public float getModifier(BlockState state) { + return getModifierOrDefault(state, 1f); + } + + public static void register() { + INSTANCE.register(Blocks.BLAST_FURNACE.delegate, 2f); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineTileEntity.java index 22742c712..03f22efe0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineTileEntity.java @@ -25,7 +25,7 @@ public class FurnaceEngineTileEntity extends EngineTileEntity { if (!(state.getBlock() instanceof AbstractFurnaceBlock)) return; - float modifier = state.getBlock() == Blocks.BLAST_FURNACE ? 2 : 1; + float modifier = FurnaceEngineModifiers.INSTANCE.getModifier(state); boolean active = state.hasProperty(AbstractFurnaceBlock.LIT) && state.getValue(AbstractFurnaceBlock.LIT); float speed = active ? 16 * modifier : 0; float capacity = 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..ba3966261 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 @@ -29,8 +29,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pul import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock; import com.simibubi.create.content.contraptions.fluids.tank.FluidTankConnectivityHandler; import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkBlock; -import com.simibubi.create.foundation.config.AllConfigs; -import com.simibubi.create.foundation.config.CKinetics; + +import com.simibubi.create.foundation.config.ContraptionMovementSetting; import net.minecraft.block.AbstractPressurePlateBlock; import net.minecraft.block.AbstractRailBlock; @@ -50,7 +50,6 @@ import net.minecraft.block.LadderBlock; import net.minecraft.block.RedstoneDiodeBlock; import net.minecraft.block.RedstoneWallTorchBlock; import net.minecraft.block.RedstoneWireBlock; -import net.minecraft.block.SpawnerBlock; import net.minecraft.block.StandingSignBlock; import net.minecraft.block.TorchBlock; import net.minecraft.block.WallSignBlock; @@ -74,7 +73,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 @@ -195,8 +194,7 @@ public class BlockMovementChecks { return false; if (state.getBlock().getTags().contains(NON_MOVABLE)) return false; - if (AllConfigs.SERVER.kinetics.spawnerMovement.get() == CKinetics.SpawnerMovementSetting.UNMOVABLE - && block instanceof SpawnerBlock) + if (ContraptionMovementSetting.get(state.getBlock()) == ContraptionMovementSetting.UNMOVABLE) return false; // Move controllers only when they aren't moving diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java index b7b3400eb..08b834108 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java @@ -5,6 +5,7 @@ import javax.annotation.Nullable; import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices; +import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; import net.minecraft.client.renderer.IRenderTypeBuffer; @@ -33,7 +34,11 @@ public abstract class MovementBehaviour { } public void dropItem(MovementContext context, ItemStack stack) { - ItemStack remainder = ItemHandlerHelper.insertItem(context.contraption.inventory, stack, false); + ItemStack remainder; + if (AllConfigs.SERVER.kinetics.moveItemsToStorage.get()) + remainder = ItemHandlerHelper.insertItem(context.contraption.inventory, stack, false); + else + remainder = stack; if (remainder.isEmpty()) return; 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/bearing/WindmillBearingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingTileEntity.java index ff43fe15d..d61a227ed 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingTileEntity.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.be import java.util.List; +import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.INamedIconOptions; @@ -41,7 +42,8 @@ public class WindmillBearingTileEntity extends MechanicalBearingTileEntity { return 0; if (movedContraption == null) return lastGeneratedSpeed; - int sails = ((BearingContraption) movedContraption.getContraption()).getSailBlocks() / 8; + int sails = ((BearingContraption) movedContraption.getContraption()).getSailBlocks() + / AllConfigs.SERVER.kinetics.windmillSailsPerRPM.get(); return MathHelper.clamp(sails, 1, 16) * getAngleSpeedDirection(); } 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/mounted/MinecartContraptionItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java index 1f40b822f..0650302bf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java @@ -11,15 +11,13 @@ import com.simibubi.create.AllItems; import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.Contraption; import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntity; -import com.simibubi.create.foundation.config.AllConfigs; -import com.simibubi.create.foundation.config.CKinetics; +import com.simibubi.create.foundation.config.ContraptionMovementSetting; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.NBTHelper; import net.minecraft.block.AbstractRailBlock; import net.minecraft.block.BlockState; import net.minecraft.block.DispenserBlock; -import net.minecraft.block.SpawnerBlock; import net.minecraft.block.material.Material; import net.minecraft.dispenser.DefaultDispenseItemBehavior; import net.minecraft.dispenser.IBlockSource; @@ -218,14 +216,10 @@ public class MinecartContraptionItem extends Item { return; OrientedContraptionEntity contraption = (OrientedContraptionEntity) passengers.get(0); - if (AllConfigs.SERVER.kinetics.spawnerMovement.get() == CKinetics.SpawnerMovementSetting.NO_PICKUP) { - Contraption blocks = contraption.getContraption(); - if (blocks != null && blocks.getBlocks().values().stream() - .anyMatch(i -> i.state.getBlock() instanceof SpawnerBlock)) { - player.displayClientMessage(Lang.translate("contraption.minecart_contraption_illegal_pickup") - .withStyle(TextFormatting.RED), true); - return; - } + if(ContraptionMovementSetting.isNoPickup(contraption.getContraption().getBlocks().values())) { + player.displayClientMessage(Lang.translate("contraption.minecart_contraption_illegal_pickup") + .withStyle(TextFormatting.RED), true); + return; } if (event.getWorld().isClientSide) { 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/FluidPropagator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java index 9fe68887f..cf4d8f3a7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java @@ -161,6 +161,8 @@ public class FluidPropagator { return true; if (BlockHelper.hasBlockSolidSide(connectedState, reader, connectedPos, side.getOpposite())) return false; + if (hasFluidCapability(reader, connectedPos, side.getOpposite())) + return false; if (!(connectedState.getMaterial() .isReplaceable() && connectedState.getDestroySpeed(reader, connectedPos) != -1) && !connectedState.hasProperty(BlockStateProperties.WATERLOGGED)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java index 87d73c00c..0d7bb5199 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java @@ -29,14 +29,14 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { public static BehaviourType TYPE = new BehaviourType<>(); - enum UpdatePhase { + public enum UpdatePhase { WAIT_FOR_PUMPS, // Do not run Layer II logic while pumps could still be distributing pressure FLIP_FLOWS, // Do not cut any flows until all pipes had a chance to reverse them IDLE; // Operate normally } - Map interfaces; - UpdatePhase phase; + public Map interfaces; + public UpdatePhase phase; public FluidTransportBehaviour(SmartTileEntity te) { super(te); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java index f0b119fa7..47e344737 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java @@ -11,6 +11,7 @@ import javax.annotation.Nullable; import com.simibubi.create.AllFluids; import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler; import com.simibubi.create.foundation.advancement.AllTriggers; +import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.utility.BlockFace; @@ -214,6 +215,10 @@ public class OpenEndedPipe extends FlowSource { .scheduleTick(outputPos, Fluids.WATER, 1); return true; } + + if (!AllConfigs.SERVER.fluids.placeFluidSourceBlocks.get()) + return true; + world.setBlock(outputPos, fluid.getFluid() .defaultFluidState() .createLegacyBlock(), 3); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java index 240883516..3ef881ba0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java @@ -32,7 +32,7 @@ import net.minecraftforge.fml.DistExecutor; public class PipeConnection { - Direction side; + public Direction side; // Layer I Couple pressure; // [inbound, outward] 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/FluidFillingBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java index 7ac14a5e9..814651f9d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidFillingBehaviour.java @@ -7,6 +7,7 @@ import java.util.Objects; import java.util.Set; import com.simibubi.create.foundation.advancement.AllTriggers; +import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; @@ -126,23 +127,25 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { int maxBlocks = maxBlocks(); boolean evaporate = world.dimensionType() .ultraWarm() && fluid.is(FluidTags.WATER); + boolean canPlaceSources = AllConfigs.SERVER.fluids.placeFluidSourceBlocks.get(); - if (infinite || evaporate) { + if ((!fillInfinite() && infinite) || evaporate || !canPlaceSources) { FluidState fluidState = world.getFluidState(rootPos); boolean equivalentTo = fluidState.getType() .isSame(fluid); - if (!equivalentTo && !evaporate) + if (!equivalentTo && !evaporate && canPlaceSources) return false; if (simulate) return true; - playEffect(world, null, fluid, false); + playEffect(world, root, fluid, false); if (evaporate) { int i = root.getX(); int j = root.getY(); int k = root.getZ(); world.playSound(null, i, j, k, SoundEvents.FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); - } + } else if (!canPlaceSources) + AllTriggers.triggerForNearbyPlayers(AllTriggers.HOSE_PULLEY, world, tileEntity.getBlockPos(), 8); return true; } 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 d3ecf1394..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 @@ -6,6 +6,7 @@ import java.util.List; import java.util.Set; import java.util.function.BiConsumer; +import com.simibubi.create.AllTags; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.networking.AllPackets; @@ -90,6 +91,10 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { return AllConfigs.SERVER.fluids.hosePulleyBlockThreshold.get(); } + protected boolean fillInfinite() { + return AllConfigs.SERVER.fluids.fillInfinite.get(); + } + public void reset() { if (affectedArea != null) scheduleUpdatesInAffectedArea(); @@ -108,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()) @@ -195,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) @@ -205,7 +212,7 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { } protected boolean canDrainInfinitely(Fluid fluid) { - return maxBlocks() != -1; // && !AllFluidTags.NO_INFINITE_DRAINING.matches(fluid); + return maxBlocks() != -1 && !AllTags.AllFluidTags.NO_INFINITE_DRAINING.matches(fluid); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/GenericItemFilling.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/GenericItemFilling.java index 27fc51b6e..e8aeb3a9c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/GenericItemFilling.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/GenericItemFilling.java @@ -13,7 +13,6 @@ import net.minecraft.item.MilkBucketItem; import net.minecraft.potion.PotionUtils; import net.minecraft.potion.Potions; import net.minecraft.world.World; -import net.minecraftforge.common.ForgeMod; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java index 5594f5ef7..2136e2b4c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java @@ -39,6 +39,7 @@ public class SpoutRenderer extends SafeTileEntityRenderer { .getValue(partialTicks); if (!fluidStack.isEmpty() && level != 0) { + level = Math.max(level, 0.175f); float min = 2.5f / 16f; float max = min + (11 / 16f); float yOffset = (11 / 16f) * level; @@ -49,8 +50,8 @@ public class SpoutRenderer extends SafeTileEntityRenderer { ms.popPose(); } - int processingTicks = te.getCorrectedProcessingTicks(); - float processingPT = te.getCorrectedProcessingTicks() - partialTicks; + int processingTicks = te.processingTicks; + float processingPT = processingTicks - partialTicks; float processingProgress = 1 - (processingPT - 5) / 10; processingProgress = MathHelper.clamp(processingProgress, 0, 1); float radius = 0; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java index 371e73e47..8d3c6515a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java @@ -6,12 +6,12 @@ import static com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProce import java.util.ArrayList; import java.util.List; -import javax.annotation.Nullable; - +import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour; import com.simibubi.create.content.contraptions.fluids.FluidFX; import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; import com.simibubi.create.foundation.advancement.AllTriggers; +import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour; @@ -27,11 +27,9 @@ import net.minecraft.item.PotionItem; import net.minecraft.nbt.CompoundNBT; import net.minecraft.particles.IParticleData; import net.minecraft.potion.PotionUtils; -import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.text.ITextComponent; import net.minecraftforge.api.distmarker.Dist; @@ -40,28 +38,15 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fml.ModList; public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInformation { - private static final boolean IS_TIC_LOADED = ModList.get().isLoaded("tconstruct"); - private static final Class CASTING_FLUID_HANDLER_CLASS; - static { - Class testClass; - try { - testClass = Class.forName("slimeknights.tconstruct.library.smeltery.CastingFluidHandler"); - } catch (ClassNotFoundException e) { - testClass = null; - } - CASTING_FLUID_HANDLER_CLASS = testClass; - } public static final int FILLING_TIME = 20; - protected BeltProcessingBehaviour beltProcessing; - protected int processingTicks; - protected boolean sendSplash; - private boolean shouldAnimate = true; + + public int processingTicks; + public boolean sendSplash; + public BlockSpoutingBehaviour customProcess; SmartFluidTankBehaviour tank; @@ -104,7 +89,6 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor protected ProcessingResult whenItemHeld(TransportedItemStack transported, TransportedItemStackHandlerBehaviour handler) { - shouldAnimate = true; if (processingTicks != -1 && processingTicks != 5) return HOLD; if (!FillingBySpout.canItemBeFilled(level, transported.stack)) @@ -149,59 +133,6 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor return HOLD; } - private void processTicCastBlock() { - if (!IS_TIC_LOADED || CASTING_FLUID_HANDLER_CLASS == null) - return; - if (level == null) - return; - IFluidHandler localTank = this.tank.getCapability() - .orElse(null); - if (localTank == null) - return; - FluidStack fluid = getCurrentFluidInTank(); - if (fluid.getAmount() == 0) - return; - TileEntity te = level.getBlockEntity(worldPosition.below(2)); - if (te == null) - return; - IFluidHandler handler = getFluidHandler(worldPosition.below(2), Direction.UP); - if (!CASTING_FLUID_HANDLER_CLASS.isInstance(handler)) - return; - if (handler.getTanks() != 1) - return; - if (!handler.isFluidValid(0, this.getCurrentFluidInTank())) - return; - FluidStack containedFluid = handler.getFluidInTank(0); - if (!(containedFluid.isEmpty() || containedFluid.isFluidEqual(fluid))) - return; - if (processingTicks == -1) { - processingTicks = FILLING_TIME; - notifyUpdate(); - return; - } - FluidStack drained = localTank.drain(144, IFluidHandler.FluidAction.SIMULATE); - if (!drained.isEmpty()) { - int filled = handler.fill(drained, IFluidHandler.FluidAction.SIMULATE); - shouldAnimate = filled > 0; - sendSplash = shouldAnimate; - if (processingTicks == 5) { - if (filled > 0) { - drained = localTank.drain(filled, IFluidHandler.FluidAction.EXECUTE); - if (!drained.isEmpty()) { - FluidStack fillStack = drained.copy(); - fillStack.setAmount(Math.min(drained.getAmount(), 6)); - drained.shrink(filled); - fillStack.setAmount(filled); - handler.fill(fillStack, IFluidHandler.FluidAction.EXECUTE); - } - } - tank.getPrimaryHandler() - .setFluid(fluid); - this.notifyUpdate(); - } - } - } - private FluidStack getCurrentFluidInTank() { return tank.getPrimaryHandler() .getFluid(); @@ -239,10 +170,36 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor public void tick() { super.tick(); - processTicCastBlock(); - if (processingTicks >= 0) + + FluidStack currentFluidInTank = getCurrentFluidInTank(); + if (processingTicks == -1 && (isVirtual() || !level.isClientSide()) && !currentFluidInTank.isEmpty()) { + BlockSpoutingBehaviour.forEach(behaviour -> { + if (customProcess != null) + return; + if (behaviour.fillBlock(level, worldPosition.below(2), this, currentFluidInTank, true) > 0) { + processingTicks = FILLING_TIME; + customProcess = behaviour; + notifyUpdate(); + } + }); + } + + if (processingTicks >= 0) { processingTicks--; - if (processingTicks >= 8 && level.isClientSide && shouldAnimate) + if (processingTicks == 5 && customProcess != null) { + int fillBlock = customProcess.fillBlock(level, worldPosition.below(2), this, currentFluidInTank, false); + customProcess = null; + if (fillBlock > 0) { + tank.getPrimaryHandler() + .setFluid(FluidHelper.copyStackWithAmount(currentFluidInTank, + currentFluidInTank.getAmount() - fillBlock)); + sendSplash = true; + notifyUpdate(); + } + } + } + + if (processingTicks >= 8 && level.isClientSide) spawnProcessingParticles(tank.getPrimaryTank() .getRenderedFluid()); } @@ -271,25 +228,9 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor } } - @Nullable - private IFluidHandler getFluidHandler(BlockPos pos, Direction direction) { - if (this.level == null) { - return null; - } else { - TileEntity te = this.level.getBlockEntity(pos); - return te != null ? te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, direction) - .orElse(null) : null; - } - } - - public int getCorrectedProcessingTicks() { - if (shouldAnimate) - return processingTicks; - return -1; - } - @Override public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { - return containedFluidTooltip(tooltip, isPlayerSneaking, getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)); + return containedFluidTooltip(tooltip, isPlayerSneaking, + getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)); } } 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/processing/burner/BlazeBurnerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java index edd70defc..876e91a60 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java @@ -95,7 +95,6 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { activeFuel = FuelType.NONE; updateBlockState(); - notifyUpdate(); } private void tickRotation() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index d72e079f6..45a30857e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -13,6 +13,7 @@ import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.processing.EmptyingByBasin; +import com.simibubi.create.content.contraptions.relays.belt.BeltSlicer.Feedback; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity.CasingType; import com.simibubi.create.content.contraptions.relays.belt.transport.BeltMovementHandler.TransportedEntityInfo; import com.simibubi.create.content.contraptions.relays.belt.transport.BeltTunnelInteractionHandler; @@ -96,7 +97,8 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE getDrops(BlockState state, net.minecraft.loot.LootContext.Builder builder) { @@ -241,6 +234,9 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE { protected int getPackedLight(BeltTileEntity controller, float beltPos) { int segment = (int) Math.floor(beltPos) * 2; - - if (controller.light == null || segment >= controller.light.length) return 0; + if (controller.light == null || segment >= controller.light.length || segment < 0) + return 0; return (controller.light[segment + 1] << 20) | (controller.light[segment] << 4); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltSlicer.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltSlicer.java new file mode 100644 index 000000000..40d842bad --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltSlicer.java @@ -0,0 +1,472 @@ +package com.simibubi.create.content.contraptions.relays.belt; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Optional; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; +import com.simibubi.create.CreateClient; +import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity.CasingType; +import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorItem; +import com.simibubi.create.content.contraptions.relays.belt.transport.BeltInventory; +import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.Minecraft; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.DyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.util.Constants.BlockFlags; + +public class BeltSlicer { + + public static class Feedback { + int color = 0xffffff; + AxisAlignedBB bb; + String langKey; + TextFormatting formatting = TextFormatting.WHITE; + } + + public static ActionResultType useWrench(BlockState state, World world, BlockPos pos, PlayerEntity player, + Hand handIn, BlockRayTraceResult hit, Feedback feedBack) { + BeltTileEntity controllerTE = BeltHelper.getControllerTE(world, pos); + if (controllerTE == null) + return ActionResultType.PASS; + if (state.getValue(BeltBlock.CASING) && hit.getDirection() != Direction.UP) + return ActionResultType.PASS; + if (state.getValue(BeltBlock.PART) == BeltPart.PULLEY && hit.getDirection() + .getAxis() != Axis.Y) + return ActionResultType.PASS; + + int beltLength = controllerTE.beltLength; + if (beltLength == 2) + return ActionResultType.FAIL; + + BlockPos beltVector = new BlockPos(BeltHelper.getBeltVector(state)); + BeltPart part = state.getValue(BeltBlock.PART); + List beltChain = BeltBlock.getBeltChain(world, controllerTE.getBlockPos()); + boolean creative = player.isCreative(); + + // Shorten from End + if (hoveringEnd(state, hit)) { + if (world.isClientSide) + return ActionResultType.SUCCESS; + + for (BlockPos blockPos : beltChain) { + BeltTileEntity belt = BeltHelper.getSegmentTE(world, blockPos); + if (belt == null) + continue; + belt.detachKinetics(); + belt.invalidateItemHandler(); + belt.beltLength = 0; + } + + BeltInventory inventory = controllerTE.inventory; + BlockPos next = part == BeltPart.END ? pos.subtract(beltVector) : pos.offset(beltVector); + BlockState replacedState = world.getBlockState(next); + BeltTileEntity segmentTE = BeltHelper.getSegmentTE(world, next); + KineticTileEntity.switchToBlockState(world, next, + state.setValue(BeltBlock.CASING, segmentTE != null && segmentTE.casing != CasingType.NONE)); + world.setBlock(pos, Blocks.AIR.defaultBlockState(), 3 | BlockFlags.IS_MOVING); + world.removeBlockEntity(pos); + world.levelEvent(2001, pos, Block.getId(state)); + + if (!creative && AllBlocks.BELT.has(replacedState) + && replacedState.getValue(BeltBlock.PART) == BeltPart.PULLEY) + player.inventory.placeItemBackInInventory(world, AllBlocks.SHAFT.asStack()); + + // Eject overshooting items + if (part == BeltPart.END && inventory != null) { + List toEject = new ArrayList<>(); + for (TransportedItemStack transportedItemStack : inventory.getTransportedItems()) + if (transportedItemStack.beltPosition > beltLength - 1) + toEject.add(transportedItemStack); + toEject.forEach(inventory::eject); + toEject.forEach(inventory.getTransportedItems()::remove); + } + + // Transfer items to new controller + if (part == BeltPart.START && segmentTE != null && inventory != null) { + controllerTE.inventory = null; + segmentTE.inventory = null; + segmentTE.setController(next); + for (TransportedItemStack transportedItemStack : inventory.getTransportedItems()) { + transportedItemStack.beltPosition -= 1; + if (transportedItemStack.beltPosition <= 0) { + ItemEntity entity = new ItemEntity(world, pos.getX() + .5f, pos.getY() + 11 / 16f, + pos.getZ() + .5f, transportedItemStack.stack); + entity.setDeltaMovement(Vector3d.ZERO); + entity.setDefaultPickUpDelay(); + entity.hurtMarked = true; + world.addFreshEntity(entity); + } else + segmentTE.getInventory() + .addItem(transportedItemStack); + } + } + + return ActionResultType.SUCCESS; + } + + BeltTileEntity segmentTE = BeltHelper.getSegmentTE(world, pos); + if (segmentTE == null) + return ActionResultType.PASS; + + // Split in half + int hitSegment = segmentTE.index; + Vector3d centerOf = VecHelper.getCenterOf(hit.getBlockPos()); + Vector3d subtract = hit.getLocation() + .subtract(centerOf); + boolean towardPositive = subtract.dot(Vector3d.atLowerCornerOf(beltVector)) > 0; + BlockPos next = !towardPositive ? pos.subtract(beltVector) : pos.offset(beltVector); + + if (hitSegment == 0 || hitSegment == 1 && !towardPositive) + return ActionResultType.FAIL; + if (hitSegment == controllerTE.beltLength - 1 || hitSegment == controllerTE.beltLength - 2 && towardPositive) + return ActionResultType.FAIL; + + // Look for shafts + if (!creative) { + int requiredShafts = 0; + if (!segmentTE.hasPulley()) + requiredShafts++; + BlockState other = world.getBlockState(next); + if (AllBlocks.BELT.has(other) && other.getValue(BeltBlock.PART) == BeltPart.MIDDLE) + requiredShafts++; + + int amountRetrieved = 0; + Search: while (true) { + for (int i = 0; i < player.inventory.getContainerSize(); ++i) { + if (amountRetrieved == requiredShafts) + break Search; + + ItemStack itemstack = player.inventory.getItem(i); + if (itemstack.isEmpty()) + continue; + int count = itemstack.getCount(); + if (AllBlocks.SHAFT.isIn(itemstack)) { + int taken = Math.min(count, requiredShafts - amountRetrieved); + if (taken == count) + player.inventory.setItem(i, ItemStack.EMPTY); + else + itemstack.shrink(taken); + amountRetrieved += taken; + } + } + + player.inventory.placeItemBackInInventory(world, AllBlocks.SHAFT.asStack(amountRetrieved)); + return ActionResultType.FAIL; + } + } + + if (!world.isClientSide) { + for (BlockPos blockPos : beltChain) { + BeltTileEntity belt = BeltHelper.getSegmentTE(world, blockPos); + if (belt == null) + continue; + belt.detachKinetics(); + belt.invalidateItemHandler(); + belt.beltLength = 0; + } + + BeltInventory inventory = controllerTE.inventory; + KineticTileEntity.switchToBlockState(world, pos, + state.setValue(BeltBlock.PART, towardPositive ? BeltPart.END : BeltPart.START)); + KineticTileEntity.switchToBlockState(world, next, world.getBlockState(next) + .setValue(BeltBlock.PART, towardPositive ? BeltPart.START : BeltPart.END)); + world.playSound(null, pos, SoundEvents.WOOL_HIT, + player == null ? SoundCategory.BLOCKS : SoundCategory.PLAYERS, 0.5F, 2.3F); + + // Transfer items to new controller + BeltTileEntity newController = towardPositive ? BeltHelper.getSegmentTE(world, next) : segmentTE; + if (newController != null && inventory != null) { + newController.inventory = null; + newController.setController(newController.getBlockPos()); + for (Iterator iterator = inventory.getTransportedItems() + .iterator(); iterator.hasNext();) { + TransportedItemStack transportedItemStack = iterator.next(); + float newPosition = transportedItemStack.beltPosition - hitSegment - (towardPositive ? 1 : 0); + if (newPosition <= 0) + continue; + transportedItemStack.beltPosition = newPosition; + iterator.remove(); + newController.getInventory() + .addItem(transportedItemStack); + } + } + } + + return ActionResultType.SUCCESS; + } + + public static ActionResultType useConnector(BlockState state, World world, BlockPos pos, PlayerEntity player, + Hand handIn, BlockRayTraceResult hit, Feedback feedBack) { + BeltTileEntity controllerTE = BeltHelper.getControllerTE(world, pos); + if (controllerTE == null) + return ActionResultType.PASS; + + int beltLength = controllerTE.beltLength; + if (beltLength == BeltConnectorItem.maxLength()) + return ActionResultType.FAIL; + + BlockPos beltVector = new BlockPos(BeltHelper.getBeltVector(state)); + BeltPart part = state.getValue(BeltBlock.PART); + Direction facing = state.getValue(BeltBlock.HORIZONTAL_FACING); + List beltChain = BeltBlock.getBeltChain(world, controllerTE.getBlockPos()); + boolean creative = player.isCreative(); + + if (!hoveringEnd(state, hit)) + return ActionResultType.PASS; + + BlockPos next = part == BeltPart.START ? pos.subtract(beltVector) : pos.offset(beltVector); + BeltTileEntity mergedController = null; + int mergedBeltLength = 0; + + // Merge Belts / Extend at End + BlockState nextState = world.getBlockState(next); + if (!nextState.getMaterial() + .isReplaceable()) { + if (!AllBlocks.BELT.has(nextState)) + return ActionResultType.FAIL; + if (!beltStatesCompatible(state, nextState)) + return ActionResultType.FAIL; + + mergedController = BeltHelper.getControllerTE(world, next); + if (mergedController == null) + return ActionResultType.FAIL; + if (mergedController.beltLength + beltLength > BeltConnectorItem.maxLength()) + return ActionResultType.FAIL; + + mergedBeltLength = mergedController.beltLength; + + if (!world.isClientSide) { + boolean flipBelt = facing != nextState.getValue(BeltBlock.HORIZONTAL_FACING); + Optional color = controllerTE.color; + for (BlockPos blockPos : BeltBlock.getBeltChain(world, mergedController.getBlockPos())) { + BeltTileEntity belt = BeltHelper.getSegmentTE(world, blockPos); + if (belt == null) + continue; + belt.detachKinetics(); + belt.invalidateItemHandler(); + belt.beltLength = 0; + belt.color = color; + if (flipBelt) + world.setBlock(blockPos, flipBelt(world.getBlockState(blockPos)), 3 | BlockFlags.IS_MOVING); + } + + // Reverse items + if (flipBelt && mergedController.inventory != null) { + List transportedItems = mergedController.inventory.getTransportedItems(); + for (TransportedItemStack transportedItemStack : transportedItems) { + transportedItemStack.beltPosition = mergedBeltLength - transportedItemStack.beltPosition; + transportedItemStack.prevBeltPosition = + mergedBeltLength - transportedItemStack.prevBeltPosition; + } + } + } + } + + if (!world.isClientSide) { + for (BlockPos blockPos : beltChain) { + BeltTileEntity belt = BeltHelper.getSegmentTE(world, blockPos); + if (belt == null) + continue; + belt.detachKinetics(); + belt.invalidateItemHandler(); + belt.beltLength = 0; + } + + BeltInventory inventory = controllerTE.inventory; + KineticTileEntity.switchToBlockState(world, pos, state.setValue(BeltBlock.PART, BeltPart.MIDDLE)); + + if (mergedController == null) { + // Attach at end + world.setBlock(next, state.setValue(BeltBlock.CASING, false), 3 | BlockFlags.IS_MOVING); + BeltTileEntity segmentTE = BeltHelper.getSegmentTE(world, next); + if (segmentTE != null) + segmentTE.color = controllerTE.color; + world.playSound(null, pos, SoundEvents.WOOL_PLACE, + player == null ? SoundCategory.BLOCKS : SoundCategory.PLAYERS, 0.5F, 1F); + + // Transfer items to new controller + if (part == BeltPart.START && segmentTE != null && inventory != null) { + segmentTE.setController(next); + for (TransportedItemStack transportedItemStack : inventory.getTransportedItems()) { + transportedItemStack.beltPosition += 1; + segmentTE.getInventory() + .addItem(transportedItemStack); + } + } + + } else { + // Merge with other + BeltInventory mergedInventory = mergedController.inventory; + world.playSound(null, pos, SoundEvents.WOOL_HIT, + player == null ? SoundCategory.BLOCKS : SoundCategory.PLAYERS, 0.5F, 1.3F); + BeltTileEntity segmentTE = BeltHelper.getSegmentTE(world, next); + KineticTileEntity.switchToBlockState(world, next, + state.setValue(BeltBlock.CASING, segmentTE != null && segmentTE.casing != CasingType.NONE) + .setValue(BeltBlock.PART, BeltPart.MIDDLE)); + + if (!creative) + player.inventory.placeItemBackInInventory(world, AllBlocks.SHAFT.asStack(2)); + + // Transfer items to other controller + BlockPos search = controllerTE.getBlockPos(); + for (int i = 0; i < 10000; i++) { + BlockState blockState = world.getBlockState(search); + if (!AllBlocks.BELT.has(blockState)) + break; + if (blockState.getValue(BeltBlock.PART) != BeltPart.START) { + search = search.subtract(beltVector); + continue; + } + + BeltTileEntity newController = BeltHelper.getSegmentTE(world, search); + + if (newController != controllerTE && inventory != null) { + newController.setController(search); + controllerTE.inventory = null; + for (TransportedItemStack transportedItemStack : inventory.getTransportedItems()) { + transportedItemStack.beltPosition += mergedBeltLength; + newController.getInventory() + .addItem(transportedItemStack); + } + } + + if (newController != mergedController && mergedInventory != null) { + newController.setController(search); + mergedController.inventory = null; + for (TransportedItemStack transportedItemStack : mergedInventory.getTransportedItems()) { + if (newController == controllerTE) + transportedItemStack.beltPosition += beltLength; + newController.getInventory() + .addItem(transportedItemStack); + } + } + + break; + } + } + } + return ActionResultType.SUCCESS; + } + + static boolean beltStatesCompatible(BlockState state, BlockState nextState) { + Direction facing1 = state.getValue(BeltBlock.HORIZONTAL_FACING); + BeltSlope slope1 = state.getValue(BeltBlock.SLOPE); + Direction facing2 = nextState.getValue(BeltBlock.HORIZONTAL_FACING); + BeltSlope slope2 = nextState.getValue(BeltBlock.SLOPE); + + switch (slope1) { + case UPWARD: + if (slope2 == BeltSlope.DOWNWARD) + return facing1 == facing2.getOpposite(); + return slope2 == slope1 && facing1 == facing2; + case DOWNWARD: + if (slope2 == BeltSlope.UPWARD) + return facing1 == facing2.getOpposite(); + return slope2 == slope1 && facing1 == facing2; + default: + return slope2 == slope1 && facing2.getAxis() == facing1.getAxis(); + } + } + + static BlockState flipBelt(BlockState state) { + Direction facing = state.getValue(BeltBlock.HORIZONTAL_FACING); + BeltSlope slope = state.getValue(BeltBlock.SLOPE); + BeltPart part = state.getValue(BeltBlock.PART); + + if (slope == BeltSlope.UPWARD) + state = state.setValue(BeltBlock.SLOPE, BeltSlope.DOWNWARD); + else if (slope == BeltSlope.DOWNWARD) + state = state.setValue(BeltBlock.SLOPE, BeltSlope.UPWARD); + + if (part == BeltPart.END) + state = state.setValue(BeltBlock.PART, BeltPart.START); + else if (part == BeltPart.START) + state = state.setValue(BeltBlock.PART, BeltPart.END); + + return state.setValue(BeltBlock.HORIZONTAL_FACING, facing.getOpposite()); + } + + static boolean hoveringEnd(BlockState state, BlockRayTraceResult hit) { + BeltPart part = state.getValue(BeltBlock.PART); + if (part == BeltPart.MIDDLE || part == BeltPart.PULLEY) + return false; + + Vector3d beltVector = BeltHelper.getBeltVector(state); + Vector3d centerOf = VecHelper.getCenterOf(hit.getBlockPos()); + Vector3d subtract = hit.getLocation() + .subtract(centerOf); + + return subtract.dot(beltVector) > 0 == (part == BeltPart.END); + } + + @OnlyIn(Dist.CLIENT) + public static void tickHoveringInformation() { + Minecraft mc = Minecraft.getInstance(); + RayTraceResult target = mc.hitResult; + if (target == null || !(target instanceof BlockRayTraceResult)) + return; + + BlockRayTraceResult result = (BlockRayTraceResult) target; + ClientWorld world = mc.level; + BlockPos pos = result.getBlockPos(); + BlockState state = world.getBlockState(pos); + ItemStack held = mc.player.getItemInHand(Hand.MAIN_HAND); + ItemStack heldOffHand = mc.player.getItemInHand(Hand.OFF_HAND); + + if (mc.player.isShiftKeyDown()) + return; + if (!AllBlocks.BELT.has(state)) + return; + + Feedback feedback = new Feedback(); + + // TODO: Populate feedback in the methods for clientside + if (AllItems.WRENCH.isIn(held) || AllItems.WRENCH.isIn(heldOffHand)) + useWrench(state, world, pos, mc.player, Hand.MAIN_HAND, result, feedback); + else if (AllItems.BELT_CONNECTOR.isIn(held) || AllItems.BELT_CONNECTOR.isIn(heldOffHand)) + useConnector(state, world, pos, mc.player, Hand.MAIN_HAND, result, feedback); + else + return; + + if (feedback.langKey != null) + mc.player.displayClientMessage(Lang.translate(feedback.langKey) + .withStyle(feedback.formatting), true); + else + mc.player.displayClientMessage(new StringTextComponent(""), true); + + if (feedback.bb != null) + CreateClient.OUTLINER.chaseAABB("BeltSlicer", feedback.bb) + .lineWidth(1 / 16f) + .colored(feedback.color); + } + +} 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 30ac4da87..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")) @@ -223,8 +225,10 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis if (!isController()) controller = NBTUtil.readBlockPos(compound.getCompound("Controller")); trackerUpdateTag = compound; - beltLength = compound.getInt("Length"); index = compound.getInt("Index"); + beltLength = compound.getInt("Length"); + if (prevBeltLength != beltLength) + light = null; } if (isController()) @@ -517,6 +521,10 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis return 0; } + public void invalidateItemHandler() { + itemHandler.invalidate(); + } + @Override public boolean shouldRenderNormally() { if (level == null) @@ -527,9 +535,10 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis @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/belt/item/BeltConnectorItem.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java index e9f63918c..45507b9fd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java @@ -15,6 +15,7 @@ import com.simibubi.create.content.contraptions.relays.elementary.AbstractShaftB import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.config.AllConfigs; +import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; @@ -31,6 +32,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -118,6 +121,8 @@ public class BeltConnectorItem extends BlockItem { } public static void createBelts(World world, BlockPos start, BlockPos end) { + world.playSound(null, new BlockPos(VecHelper.getCenterOf(start.offset(end)) + .scale(.5f)), SoundEvents.WOOL_PLACE, SoundCategory.BLOCKS, 0.5F, 1F); BeltSlope slope = getSlopeBetween(start, end); Direction facing = getFacingFromTo(start, end); @@ -152,8 +157,8 @@ public class BeltConnectorItem extends BlockItem { if (diff.getX() == 0 && diff.getZ() == 0) axisDirection = diff.getY() > 0 ? AxisDirection.POSITIVE : AxisDirection.NEGATIVE; else - axisDirection = beltAxis.choose(diff.getX(), 0, diff.getZ()) > 0 ? AxisDirection.POSITIVE - : AxisDirection.NEGATIVE; + axisDirection = + beltAxis.choose(diff.getX(), 0, diff.getZ()) > 0 ? AxisDirection.POSITIVE : AxisDirection.NEGATIVE; return Direction.get(axisDirection, beltAxis); } @@ -169,7 +174,8 @@ public class BeltConnectorItem extends BlockItem { return BeltSlope.HORIZONTAL; } - private static List getBeltChainBetween(BlockPos start, BlockPos end, BeltSlope slope, Direction direction) { + private static List getBeltChainBetween(BlockPos start, BlockPos end, BeltSlope slope, + Direction direction) { List positions = new LinkedList<>(); int limit = 1000; BlockPos current = start; @@ -249,7 +255,7 @@ public class BeltConnectorItem extends BlockItem { } - protected static Integer maxLength() { + public static Integer maxLength() { return AllConfigs.SERVER.kinetics.maxBeltLength.get(); } 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 { + + ItemStack heldStack = ts.stack; + if (!(heldStack.getItem() instanceof BlockItem)) + return TransportedResult.doNothing(); + + BlockItem blockItem = (BlockItem) heldStack.getItem(); + if (blockItem.getBlock() == null) + return TransportedResult.doNothing(); + + BlockState stateToCheck = blockItem.getBlock() + .defaultBlockState(); + + if (!success.getValue() + && checkLight(stack, entity, world, itemData, positionVec, randomOffset, stateToCheck)) { + success.setTrue(); + if (ts.stack.getCount() == 1) + return TransportedResult.removeItem(); + TransportedItemStack left = ts.copy(); + left.stack.shrink(1); + return TransportedResult.convertTo(left); + } + + return TransportedResult.doNothing(); + + }); + return false; + } + + public boolean checkLight(ItemStack stack, ItemEntity entity, World world, CompoundNBT itemData, + Vector3d positionVec, BlockPos randomOffset, BlockState state) { if (state.getLightValue(world, randomOffset) == 0) return false; if (state.getDestroySpeed(world, randomOffset) == -1) @@ -166,14 +217,12 @@ public class ChromaticCompoundItem extends Item { if (state.getBlock() == Blocks.BEACON) return false; - RayTraceContext context = new RayTraceContext(positionVec, VecHelper.getCenterOf(randomOffset), - BlockMode.COLLIDER, FluidMode.NONE, entity); + RayTraceContext context = new RayTraceContext(positionVec.add(new Vector3d(0, 0.5, 0)), + VecHelper.getCenterOf(randomOffset), BlockMode.COLLIDER, FluidMode.NONE, entity); if (!randomOffset.equals(world.clip(context) .getBlockPos())) return false; - world.destroyBlock(randomOffset, false); - ItemStack newStack = stack.split(1); newStack.getOrCreateTag() .putInt("CollectingLight", itemData.getInt("CollectingLight") + 1); @@ -184,8 +233,7 @@ public class ChromaticCompoundItem extends Item { entity.lifespan = 6000; if (stack.isEmpty()) entity.remove(); - - return false; + return true; } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java b/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java index 3cb9584e7..c6aab3c8c 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java @@ -19,7 +19,7 @@ public class RefinedRadianceItem extends NoGravMagicalDohickyItem { protected void onCreated(ItemEntity entity, CompoundNBT persistentData) { super.onCreated(entity, persistentData); entity.setDeltaMovement(entity.getDeltaMovement() - .add(0, .15f, 0)); + .add(0, .25f, 0)); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java index 5aa6098db..d036b562e 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java @@ -7,9 +7,13 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.ArmorItem; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; public class CopperArmorItem extends ArmorItem { + public static final ResourceLocation TEXTURE = Create.asResource("textures/models/armor/copper.png"); + private static final String TEXTURE_STRING = TEXTURE.toString(); + public CopperArmorItem(EquipmentSlotType p_i48534_2_, Properties p_i48534_3_) { super(AllArmorMaterials.COPPER, p_i48534_2_, p_i48534_3_.stacksTo(1)); } @@ -23,7 +27,7 @@ public class CopperArmorItem extends ArmorItem { @Override public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) { - return String.format("%s:textures/models/armor/copper.png", Create.ID); + return TEXTURE_STRING; } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/ConfigureSymmetryWandPacket.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/ConfigureSymmetryWandPacket.java new file mode 100644 index 000000000..9484111cc --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/ConfigureSymmetryWandPacket.java @@ -0,0 +1,50 @@ +package com.simibubi.create.content.curiosities.symmetry; + +import java.util.function.Supplier; + +import com.simibubi.create.content.curiosities.symmetry.mirror.SymmetryMirror; +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 class ConfigureSymmetryWandPacket extends SimplePacketBase { + + protected Hand hand; + protected SymmetryMirror mirror; + + public ConfigureSymmetryWandPacket(Hand hand, SymmetryMirror mirror) { + this.hand = hand; + this.mirror = mirror; + } + + public ConfigureSymmetryWandPacket(PacketBuffer buffer) { + hand = buffer.readEnum(Hand.class); + mirror = SymmetryMirror.fromNBT(buffer.readNbt()); + } + + @Override + public void write(PacketBuffer buffer) { + buffer.writeEnum(hand); + buffer.writeNbt(mirror.writeToNbt()); + } + + @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 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(); } - public static class SandPaperModel extends CustomRenderedItemModel { + @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