Vault Virtual

- Double chests no longer split when moved on a contraption
- Changed the way contraption storage interacts with known multi-block item storage (band-aid solution)
- Changed a few blocks' sound types
- Fixed in-world icons not rendering
- Added Ponder Scenes for the Item Vault
- Added crafting recipe for Item Vaults
- Changed crafting recipe for Fluid Tanks
- Fixed ponder tracking items in inactive inventory screens
- Removed unreachable Advancements
This commit is contained in:
simibubi 2021-12-07 02:35:38 +01:00
parent 5e1479d147
commit 9362374b1e
53 changed files with 779 additions and 585 deletions

View file

@ -531,20 +531,20 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
64a8442735a333c7444cac12cfb22c454ca06b6b assets/create/lang/en_ud.json
d55b3065c12ede60d54b8e306a9bba4f4e834da7 assets/create/lang/en_us.json
e933c3b22a1f7827b7e677b5c35db329322a027f assets/create/lang/unfinished/de_de.json
47b6a70be75560f4b11e51d3e9323418fa470ad6 assets/create/lang/unfinished/es_cl.json
c6379e293e835b0fa563ad3b2aaa10a664cab25e assets/create/lang/unfinished/es_es.json
840b1b5e3654f30b618ba8ce47af0a80a5152454 assets/create/lang/unfinished/fr_fr.json
5e9efb7f3bfa3d5139fbd435a54e6adcea1d9703 assets/create/lang/unfinished/it_it.json
d2e1e80d157228f7fb213d3c2c954794857c5343 assets/create/lang/unfinished/ja_jp.json
dd3f49b0ccd45d2b722e0d317681878b34e4409d assets/create/lang/unfinished/ko_kr.json
0fc3b0582a47c6a1d9525f2e8b11b2a6ff04eb7c assets/create/lang/unfinished/nl_nl.json
51cc98f752fcf0df71762c1dd119e0b30fdf3af6 assets/create/lang/unfinished/pl_pl.json
2bac31d64b08d5a581daae5befc6503fa638d075 assets/create/lang/unfinished/pt_br.json
8925ca5a897dc87b28a3e6c679d5a26b554bf8f8 assets/create/lang/unfinished/ru_ru.json
be1f4cd6c5db0aa8056793930319a7e48bdd549c assets/create/lang/unfinished/zh_cn.json
c65b6367315ee06afc45deda461d15bf0272065b assets/create/lang/unfinished/zh_tw.json
b984531bff326c47aa13a4aee8e230b03d97eb6e assets/create/lang/en_us.json
367a1c79a27c9d0496457a164f1d192eeabd5fa4 assets/create/lang/unfinished/de_de.json
842b0aaf8ad5a404a128fb29f312da8b6b6a61b7 assets/create/lang/unfinished/es_cl.json
7c42d400daae6a49b30de6180dc467cb42afe602 assets/create/lang/unfinished/es_es.json
322d3a2b9303659ffd0633afe067e6f753d58d84 assets/create/lang/unfinished/fr_fr.json
e85c66d2cbbc2db9b2f5504d44f345c5d4be47cb assets/create/lang/unfinished/it_it.json
f1176ef353e193be026d3c3581a9ed5f40576e6f assets/create/lang/unfinished/ja_jp.json
0e042c6fa4e1ed497c3eeee4203e41f4b9d644cf assets/create/lang/unfinished/ko_kr.json
26c92f47ceacbc236bb2ef1a60837a361d39c07c assets/create/lang/unfinished/nl_nl.json
20dc5fd426c579319c1c5f8d8a0b961867dae295 assets/create/lang/unfinished/pl_pl.json
890c8c28f57270f5b8ff871d9b0d5a8c68c71cbd assets/create/lang/unfinished/pt_br.json
dbb9348844951afa663d750b87f333f095007bec assets/create/lang/unfinished/ru_ru.json
60c5ddb490b9293b42647595f95e06ebbcf48c20 assets/create/lang/unfinished/zh_cn.json
d5ebaf58f6356272d311d8e12bf4ecd218d7d29a 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
@ -2125,7 +2125,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
5049f72c327a88f175f6f9425909e098fc711100 assets/create/sounds.json
5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json
613e64b44bed959da899fdd54c1cacb227fb33f2 data/create/advancements/andesite_alloy.json
81885c6bfb85792c88aaa7c9b70f58832945d31f data/create/advancements/andesite_casing.json
83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json
@ -2141,9 +2141,6 @@ b243e73ea26c5c8c8c57570d7d91a50d035653a4 data/create/advancements/arm_many_targe
88adc39840259e79e46c4f33abb8eeaeb41dcdc8 data/create/advancements/chained_item_drain.json
759688aa3c8085841e47f7174b3894607a0e2ad4 data/create/advancements/chocolate.json
0c84fe24f49330a7491016235afd8fad02b560fe data/create/advancements/chocolate_wheel.json
5b6fbcb6595267f5acd658eb9c1d6fb226e76e6f data/create/advancements/chromatic_age.json
e0001634bbcabe55959365ca5efa86b05efb3214 data/create/advancements/chromatic_compound.json
6ef2f15e92f5335efe59a26260c53155c604fc35 data/create/advancements/chromatic_eob.json
f37551a788dfb3ff3d65db97a03c0420edf2c041 data/create/advancements/chute.json
0ffacd497176afdb26670783b65d383ac6236c19 data/create/advancements/clockwork_bearing.json
e754b950e25a5a5a19554a918760521794fc21f8 data/create/advancements/clockwork_component_eob.json
@ -2325,7 +2322,7 @@ cd1a6ea80663ec9251bb13e27d90e6ccdd10ce3e data/create/advancements/recipes/create
3a9aef30af8d9694548da236fe3129c16dba4883 data/create/advancements/recipes/create.base/crafting/kinetics/encased_fan.json
0669da1ba8a761589d14c9b172abd65f8a995bad data/create/advancements/recipes/create.base/crafting/kinetics/filter.json
8d4b4ebfe4b7b70dcb34f1b79eda3aee4f5b7abb data/create/advancements/recipes/create.base/crafting/kinetics/fluid_pipe.json
c227f65c7ef64f7244030354c9a7e87527998531 data/create/advancements/recipes/create.base/crafting/kinetics/fluid_tank.json
450a84018a6df61921e2c7eac507928e42d82b93 data/create/advancements/recipes/create.base/crafting/kinetics/fluid_tank.json
5b68a2e467e01d2255c448691ec5b4be20ac35c2 data/create/advancements/recipes/create.base/crafting/kinetics/fluid_valve.json
4049cbeed4452bf6fe7608e06f4a4c90f58d6da0 data/create/advancements/recipes/create.base/crafting/kinetics/gantry_carriage.json
10529af8626e0d60d041aaebeadd4ac6a22cf061 data/create/advancements/recipes/create.base/crafting/kinetics/gantry_shaft.json
@ -2342,6 +2339,7 @@ c023b9221d7983487d21e5ecc7d92246cfc7e791 data/create/advancements/recipes/create
f2dadb365c75dd2604ee96e0217cd8024d0d137d data/create/advancements/recipes/create.base/crafting/kinetics/hand_crank.json
f4e8fd79cb27e0677460f5c260b106338f2a48cc data/create/advancements/recipes/create.base/crafting/kinetics/hose_pulley.json
a9f2c8a0b0b322741575ef833a461006ef2f0421 data/create/advancements/recipes/create.base/crafting/kinetics/item_drain.json
2ccfaf572456e8642a0070ea6928a082f98c63af data/create/advancements/recipes/create.base/crafting/kinetics/item_vault.json
73433a5cd400ed392796a4e543f15c42dd499fe8 data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel.json
eb007bb079bbe6b6aaad2ca90f5af84261e3f8ea data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat.json
571da50fbf5f2fcd3363b3dab91e7233e0ebffa0 data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat_from_other_seat.json
@ -3258,10 +3256,8 @@ d7b126eef46e9179c10d19d247f58e74f61818bc data/create/advancements/recipes/misc/s
2599cc5ed09e70881aca4bb1550d21b4f65a9608 data/create/advancements/recipes/misc/smelting/iron_ingot_from_crushed.json
a1afb005cc23607cb4d84d42664b4bc28eef9ead data/create/advancements/recipes/transportation/crafting/kinetics/furnace_minecart_from_contraption_cart.json
c1434c26c854d6b723c4f4d0fbb051268043da07 data/create/advancements/recipes/transportation/crafting/kinetics/minecart_from_contraption_cart.json
aca270ea8db5e00ba17c1c8fa46ee2445c2bc961 data/create/advancements/refined_radiance.json
67edd7bd314a85a1fddc2aa9f6b2207879aa5c3e data/create/advancements/reinforced.json
9654f4952c39175825a3deb2d9bb56d525f0539a data/create/advancements/root.json
1ab3abcd219b9efb225588f4c797c775e96e07ff data/create/advancements/shadow_steel.json
6c1a67e193a4c5af356b31a1d5b5e9d3faeca87e data/create/advancements/shifting_gears.json
65132cb27041c848230781cca8020a2e5ae4365e data/create/advancements/speed_controller.json
a203d509a6038f0bad707e232a425388e62e1ae1 data/create/advancements/speedometer.json
@ -3271,7 +3267,7 @@ b69d174d7a5e9eab8ca013b66bc9d02244d7f9a3 data/create/advancements/spout.json
0efdaf483d84791044f085f79197b6bab3e15872 data/create/advancements/stressometer.json
1aceaa6e47709aa03f3d4f606fa5dcaacc899835 data/create/advancements/tunnel.json
4fef92dce84fa1a075db31fb33081f5fb8ec7e9e data/create/advancements/upward_chute.json
36f61712fafb6956c6e2289d61bd7eb8f7c97a29 data/create/advancements/wand_of_symmetry.json
0b65ff92a7a48ba9f4c21f725831206313b37dba data/create/advancements/wand_of_symmetry.json
2c278dc6e6e4c12c0cfce22b5192844586a2d5c1 data/create/advancements/water_wheel.json
d6b94fd499cb4fb0ae587b0e9e7088832f67fe01 data/create/advancements/windmill.json
ef4fa382442aacbda1ca8b762bd51ff80b708a93 data/create/advancements/wrench.json
@ -3935,7 +3931,7 @@ ad1c3ce1e98b8483512bdd754f2e5930c7b3ae85 data/create/recipes/crafting/kinetics/d
b07496e4ba5bc56a2c5a395b612c68ba21328867 data/create/recipes/crafting/kinetics/encased_fan.json
0dd0cc11eaa6789fc612af3231ed247893852178 data/create/recipes/crafting/kinetics/filter.json
371a80e2a93d9fb68b892db5685aaeea55f34a11 data/create/recipes/crafting/kinetics/fluid_pipe.json
86ad4d2820e8e2b01de8d977af7796119dfb7430 data/create/recipes/crafting/kinetics/fluid_tank.json
284e8554d7285989a1684a5e14c72063d152cc9e data/create/recipes/crafting/kinetics/fluid_tank.json
3dad2a849796df268cd3a06ed37376f2cc529957 data/create/recipes/crafting/kinetics/fluid_valve.json
84153bd478c0e63a04c77579d6595043f604b7ab data/create/recipes/crafting/kinetics/furnace_minecart_from_contraption_cart.json
9e75756423b7f9372a2330a7140f80b1b87bd30e data/create/recipes/crafting/kinetics/gantry_carriage.json
@ -3953,6 +3949,7 @@ b5da8c58f6b8aba525ae8a12ad906db37b78a566 data/create/recipes/crafting/kinetics/g
9f08bdaeec88e04a43c2dc103869f9648deee079 data/create/recipes/crafting/kinetics/hand_crank.json
d10639b0c3999481531fe0a9383a1bb4af60225e data/create/recipes/crafting/kinetics/hose_pulley.json
f4fbb11ef55f3431bd387f3f6f258513bfbc8011 data/create/recipes/crafting/kinetics/item_drain.json
8f7110447f039f80a6f5b1d854bc760c3d77da82 data/create/recipes/crafting/kinetics/item_vault.json
237541c1c318b8426734c1c43be31fbd01413d39 data/create/recipes/crafting/kinetics/large_cogwheel.json
0397b107ab380cd23390c96f298971a70e9bceef data/create/recipes/crafting/kinetics/light_blue_seat.json
aa06f0594e1b2d31aa41bace309ed95a16529498 data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json

View file

@ -771,14 +771,6 @@
"advancement.create.crushing_wheel.desc": "Create some Crushing Wheels to break down more materials more effectively.",
"advancement.create.blaze_cake": "Sugar Rush",
"advancement.create.blaze_cake.desc": "Bake your blaze burner a special cake.",
"advancement.create.chromatic_compound": "Mysterious Minerals",
"advancement.create.chromatic_compound.desc": "Create a Bar of Chromatic Compound.",
"advancement.create.shadow_steel": "Void Returner",
"advancement.create.shadow_steel.desc": "Create Shadow Steel, a metal bar of nothingness.",
"advancement.create.refined_radiance": "Bright and Inspiring",
"advancement.create.refined_radiance.desc": "Create Refined Radiance, a powerful chromatic substance.",
"advancement.create.chromatic_age": "The Chromatic Age",
"advancement.create.chromatic_age.desc": "Create casing blocks of the light and dark.",
"advancement.create.wand_of_symmetry": "Radiant Mirrors",
"advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.",
"advancement.create.extendo_grip": "Boioioing!",
@ -2053,6 +2045,17 @@
"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_vault_sizes.header": "Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "...and take contents from this container",
"create.ponder.large_cogwheel.header": "Relaying rotational force using Large Cogwheels",
"create.ponder.large_cogwheel.text_1": "Large cogwheels can connect to each other at right angles",
"create.ponder.large_cogwheel.text_2": "It will help relaying conveyed speed to other axes of rotation",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1318",
"_": "Missing Localizations: 1319",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"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": "Boioioing!",
@ -2054,6 +2046,17 @@
"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.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 321",
"_": "Missing Localizations: 330",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"advancement.create.crushing_wheel.desc": "Crea ruedas trituradoras para descomponer los materiales de manera más efectiva.",
"advancement.create.blaze_cake": "Rush de Azúcar",
"advancement.create.blaze_cake.desc": "Preparale a tu Quemador Blaze un pastel especial.",
"advancement.create.chromatic_compound": "Minerales Misteriosos",
"advancement.create.chromatic_compound.desc": "Crea una barra de Compuesto Cromático.",
"advancement.create.shadow_steel": "Retorno Vacío",
"advancement.create.shadow_steel.desc": "Crea Acero Sombrío, una barra de nada.",
"advancement.create.refined_radiance": "Brillante e Inspirador",
"advancement.create.refined_radiance.desc": "Crea Radiancia Refinada, una poderosa sustancia cromática.",
"advancement.create.chromatic_age": "La Edad Cromática",
"advancement.create.chromatic_age.desc": "Crea bloques de cubierta de la luz y de la oscuridad.",
"advancement.create.wand_of_symmetry": "Espejos Radiantes",
"advancement.create.wand_of_symmetry.desc": "Crea la Vara de Simetría.",
"advancement.create.extendo_grip": "¡Boioioing!",
@ -2054,6 +2046,17 @@
"create.ponder.item_drain.text_4": "...ruedan, vaciando su líquido contenido",
"create.ponder.item_drain.text_5": "Las redes de tuberías ahora pueden extraer el fluido del búfer interno de los Drenajes.",
"create.ponder.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"create.ponder.large_cogwheel.header": "Transmitiendo la fuerza rotacional mediante engranajes grandes",
"create.ponder.large_cogwheel.text_1": "Los engranajes grandes se pueden conectar entre sí en ángulo recto",
"create.ponder.large_cogwheel.text_2": "Te ayudará a transmitir la velocidad transportada a otros ejes de rotación",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 321",
"_": "Missing Localizations: 330",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"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": "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.",
"advancement.create.refined_radiance": "Brillante e inspirador",
"advancement.create.refined_radiance.desc": "Crea un resplandor refinado, una poderosa sustancia cromática.",
"advancement.create.chromatic_age": "La edad cromática",
"advancement.create.chromatic_age.desc": "Crear bloques de revestimiento de la luz y la oscuridad.",
"advancement.create.wand_of_symmetry": "Espejos radiantes",
"advancement.create.wand_of_symmetry.desc": "Crear un bastón de simetría.",
"advancement.create.extendo_grip": "¡Boioioing!",
@ -2054,6 +2046,17 @@
"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.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"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",
"create.ponder.large_cogwheel.text_2": "Ayudarán a transmitir la velocidad transportada a otros ejes de rotación.",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1580",
"_": "Missing Localizations: 1581",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"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!",
@ -2054,6 +2046,17 @@
"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.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1261",
"_": "Missing Localizations: 1270",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"advancement.create.crushing_wheel.desc": "Crea delle ruote di frantumazione per frantumare i materiali.",
"advancement.create.blaze_cake": "Sugar Rush",
"advancement.create.blaze_cake.desc": "Dai una torta di blaze al tuo inceneritore.",
"advancement.create.chromatic_compound": "Minerali bipolari",
"advancement.create.chromatic_compound.desc": "Crea una barra di composto cromatico.",
"advancement.create.shadow_steel": "Il ritorno del Vuoto",
"advancement.create.shadow_steel.desc": "Crea l'acciaio oscuro, una barra di metallo composta dalla non-esistenza.",
"advancement.create.refined_radiance": "Illumina e ispira",
"advancement.create.refined_radiance.desc": "Crea la radiance raffinata, una sostanza cromatica potente.",
"advancement.create.chromatic_age": "L'era cromatica",
"advancement.create.chromatic_age.desc": "Crea involucri di luce e d'ombra.",
"advancement.create.wand_of_symmetry": "Perfettamente simmetrico",
"advancement.create.wand_of_symmetry.desc": "Crea un'asta di simmetria.",
"advancement.create.extendo_grip": "BOIOIOING",
@ -2054,6 +2046,17 @@
"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.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 321",
"_": "Missing Localizations: 330",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"advancement.create.crushing_wheel.desc": "より効率的に粉砕するために、破砕ホイールを作る",
"advancement.create.blaze_cake": "シュガー・ラッシュ",
"advancement.create.blaze_cake.desc": "ブレイズバーナーで特別なケーキを焼く",
"advancement.create.chromatic_compound": "二極性化合物",
"advancement.create.chromatic_compound.desc": "色彩の化合物を作る",
"advancement.create.shadow_steel": "奈落からの帰還",
"advancement.create.shadow_steel.desc": "究極の虚無、「シャドウスチール」を作る",
"advancement.create.refined_radiance": "光輝の吹入",
"advancement.create.refined_radiance.desc": "究極の色彩、「高貴な光輝」を作る",
"advancement.create.chromatic_age": "色彩の時代",
"advancement.create.chromatic_age.desc": "光と闇のケーシングを作る",
"advancement.create.wand_of_symmetry": "輝く鏡",
"advancement.create.wand_of_symmetry.desc": "対象の杖を作る",
"advancement.create.extendo_grip": "ビヨヨーン!",
@ -2054,6 +2046,17 @@
"create.ponder.item_drain.text_4": "...中に詰まった液体を出しながら横に転がっていきます",
"create.ponder.item_drain.text_5": "液体ネットワークで、排液口から液体を取り出せます",
"create.ponder.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"create.ponder.large_cogwheel.header": "大きな歯車による回転力の伝達",
"create.ponder.large_cogwheel.text_1": "大きな歯車は、直角に接続できます",
"create.ponder.large_cogwheel.text_2": "回転力の回転軸を変えてに伝達するのに役立ちます",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 321",
"_": "Missing Localizations: 330",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"advancement.create.crushing_wheel.desc": "더 많은 재료를 더 효율적으로 갈 분쇄 휠을 만드세요.",
"advancement.create.blaze_cake": "폭주",
"advancement.create.blaze_cake.desc": "블레이즈 버너에게 줄 특별한 케이크를 만드세요.",
"advancement.create.chromatic_compound": "양극성 재료",
"advancement.create.chromatic_compound.desc": "색채 혼합물를 만드세요.",
"advancement.create.shadow_steel": "공허에서의 복귀",
"advancement.create.shadow_steel.desc": "무의 금속, 그림자 강철을 생성하세요.",
"advancement.create.refined_radiance": "빛으로부터의 자극",
"advancement.create.refined_radiance.desc": "강력한 색채 물질, 정제된 빛을 생성하세요.",
"advancement.create.chromatic_age": "양극 시대",
"advancement.create.chromatic_age.desc": "빛과 어둠의 케이스를 제작하세요.",
"advancement.create.wand_of_symmetry": "빛나는 건축",
"advancement.create.wand_of_symmetry.desc": "대칭의 지팡이를 만드세요.",
"advancement.create.extendo_grip": "띠요옹!",
@ -2054,6 +2046,17 @@
"create.ponder.item_drain.text_4": "...아이템은 굴라가며 담긴 액체를 비웁니다.",
"create.ponder.item_drain.text_5": "배수구 탱크에 있는 액체는 파이프로 옮길 수 있습니다.",
"create.ponder.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"create.ponder.large_cogwheel.header": "큰 톱니바퀴로 동력 전달하기",
"create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 수직으로 서로 맞물립니다.",
"create.ponder.large_cogwheel.text_2": "이는 다른 축으로 동력을 전달하는데 도움이 됩니다.",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1933",
"_": "Missing Localizations: 1934",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"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!",
@ -2054,6 +2046,17 @@
"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.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 360",
"_": "Missing Localizations: 369",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"advancement.create.crushing_wheel.desc": "Wytwórz parę kół kruszących, aby kruszyły więcej materiałów w krótszym czasie.",
"advancement.create.blaze_cake": "Przypływ energii",
"advancement.create.blaze_cake.desc": "Upiecz dla swojego palnika pyszne ciasto.",
"advancement.create.chromatic_compound": "Minerały dwubiegunowe",
"advancement.create.chromatic_compound.desc": "Wytwórz sztabkę związku chromatycznego.",
"advancement.create.shadow_steel": "Dar otchłani",
"advancement.create.shadow_steel.desc": "Uzyskaj mroczną stal, sztabkę pełną nicości.",
"advancement.create.refined_radiance": "Czysty blask",
"advancement.create.refined_radiance.desc": "Uzyskaj świetlisty materiał, silną substancję chromatyczną.",
"advancement.create.chromatic_age": "Epoka kolorów",
"advancement.create.chromatic_age.desc": "Wytwórz jasną i mroczną obudowę.",
"advancement.create.wand_of_symmetry": "Symetria.",
"advancement.create.wand_of_symmetry.desc": "Zdobądź różdżkę symetrii.",
"advancement.create.extendo_grip": "Dalej dalej ręce Gadżeta!",
@ -2054,6 +2046,17 @@
"create.ponder.item_drain.text_4": "...są opróżniane i przesuwane na drugą stronę",
"create.ponder.item_drain.text_5": "Systemy rur mogą wyciągać zawartą w odpływie ciecz",
"create.ponder.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"create.ponder.large_cogwheel.header": "Przekazywanie siły obrotowej z użyciem dużych kół zębatych",
"create.ponder.large_cogwheel.text_1": "Duże koła zębate mogą się łączyć ze sobą pod kątem prostym",
"create.ponder.large_cogwheel.text_2": "Pomogą one w przekazywaniu siły obrotowej na inne osie obrotu",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1669",
"_": "Missing Localizations: 1670",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"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!",
@ -2054,6 +2046,17 @@
"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.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"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",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 365",
"_": "Missing Localizations: 374",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"advancement.create.crushing_wheel.desc": "Создайте несколько дробящих колес, чтобы более эффективно разрушать больше материалов.",
"advancement.create.blaze_cake": "Сахарная лихорадка",
"advancement.create.blaze_cake.desc": "Испеките особый торт для вашей Горелки Всполоха.",
"advancement.create.chromatic_compound": "Биполярные минералы",
"advancement.create.chromatic_compound.desc": "Создайте хроматический компаунд",
"advancement.create.shadow_steel": "Возвращение пустоты",
"advancement.create.shadow_steel.desc": "Создайте призрачную сталь, металлический слиток небытия.",
"advancement.create.refined_radiance": "Яркий и вдохновляющий",
"advancement.create.refined_radiance.desc": "Создайте изысканное сияние, мощное хроматическое вещество.",
"advancement.create.chromatic_age": "Хроматический век",
"advancement.create.chromatic_age.desc": "Создайте блоки корпуса из света и тьмы.",
"advancement.create.wand_of_symmetry": "Сияющие зеркала",
"advancement.create.wand_of_symmetry.desc": "Создайте жезл симметрии.",
"advancement.create.extendo_grip": "Бойоиоинг!",
@ -2054,6 +2046,17 @@
"create.ponder.item_drain.text_4": "...они переворачиваются, выливая содержащуюся в них жидкость",
"create.ponder.item_drain.text_5": "Сети труб теперь могут вытягивать жидкость из внутреннего хранилища осушителей",
"create.ponder.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"create.ponder.large_cogwheel.header": "Передаче силы вращения при помощи Больших шестерней",
"create.ponder.large_cogwheel.text_1": "Большие шестерни могут соединяться между собой под прямым углом",
"create.ponder.large_cogwheel.text_2": "Это поможет передавать скорость на другие оси вращения",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 321",
"_": "Missing Localizations: 330",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"advancement.create.crushing_wheel.desc": "制作一些能更快粉碎物品的粉碎轮",
"advancement.create.blaze_cake": "糖份超标",
"advancement.create.blaze_cake.desc": "给烈焰人燃烧室烤一份特别蛋糕。",
"advancement.create.chromatic_compound": "两极材料",
"advancement.create.chromatic_compound.desc": "制作一个异彩化合物",
"advancement.create.shadow_steel": "虚空归来者",
"advancement.create.shadow_steel.desc": "制作一些暗影钢",
"advancement.create.refined_radiance": "明亮而启灵",
"advancement.create.refined_radiance.desc": "制作一个光辉石",
"advancement.create.chromatic_age": "异彩时代",
"advancement.create.chromatic_age.desc": "创造出光与影的机壳。",
"advancement.create.wand_of_symmetry": "简单的镜面几何学",
"advancement.create.wand_of_symmetry.desc": "制作一个对称之杖",
"advancement.create.extendo_grip": "biu biu biu!",
@ -2054,6 +2046,17 @@
"create.ponder.item_drain.text_4": "...物品将会经过分液池顶部,并在此过程中将其包含的液体排入分液池内",
"create.ponder.item_drain.text_5": "流体管道可以从分液池中抽取液体",
"create.ponder.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"create.ponder.large_cogwheel.header": "使用大齿轮传递旋转力",
"create.ponder.large_cogwheel.text_1": "大齿轮可以以特定的角度相互连接",
"create.ponder.large_cogwheel.text_2": "可以利用大齿轮变更旋转轴向",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 379",
"_": "Missing Localizations: 388",
"_": "->------------------------] Game Elements [------------------------<-",
@ -772,14 +772,6 @@
"advancement.create.crushing_wheel.desc": "製作一對能更快粉碎物品的粉碎輪",
"advancement.create.blaze_cake": "糖份超標",
"advancement.create.blaze_cake.desc": "幫烈焰使者動力爐烤一份特別的蛋糕。",
"advancement.create.chromatic_compound": "兩極材料",
"advancement.create.chromatic_compound.desc": "製作一個異彩化合物",
"advancement.create.shadow_steel": "自虛空的歸來的寶石",
"advancement.create.shadow_steel.desc": "製作暗影鋼",
"advancement.create.refined_radiance": "閃耀著純白的聖光",
"advancement.create.refined_radiance.desc": "製作光輝石",
"advancement.create.chromatic_age": "繽紛時代",
"advancement.create.chromatic_age.desc": "創造出光與影的機殼。",
"advancement.create.wand_of_symmetry": "簡單的鏡面幾何學",
"advancement.create.wand_of_symmetry.desc": "製作一個對稱杖",
"advancement.create.extendo_grip": "piu piu piu!",
@ -2054,6 +2046,17 @@
"create.ponder.item_drain.text_4": "...... 他會從上方滑過,並清空裡面的液體",
"create.ponder.item_drain.text_5": "現在液體網路可以抽取分液池中的液體了",
"create.ponder.item_vault_sizes.header": "UNLOCALIZED: Dimensions of an Item Vault",
"create.ponder.item_vault_sizes.text_1": "UNLOCALIZED: Item Vaults can be combined to increase the total capacity",
"create.ponder.item_vault_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...",
"create.ponder.item_vault_sizes.text_3": "UNLOCALIZED: ...and grow in length up to 3x their diameter",
"create.ponder.item_vault_storage.header": "UNLOCALIZED: Storing Items in Vaults",
"create.ponder.item_vault_storage.text_1": "UNLOCALIZED: Item Vaults can be used to store large amounts of items",
"create.ponder.item_vault_storage.text_2": "UNLOCALIZED: However, contents cannot be added or taken manually",
"create.ponder.item_vault_storage.text_3": "UNLOCALIZED: Any components for item transfer can both insert...",
"create.ponder.item_vault_storage.text_4": "UNLOCALIZED: ...and take contents from this container",
"create.ponder.large_cogwheel.header": "使用大齒輪傳遞動能",
"create.ponder.large_cogwheel.text_1": "大齒輪可以以特定的角度相互連接",
"create.ponder.large_cogwheel.text_2": "可以利用大齒輪變更旋轉軸向",

View file

@ -1,52 +0,0 @@
{
"parent": "create:chromatic_compound",
"display": {
"icon": {
"item": "create:refined_radiance_casing"
},
"title": {
"translate": "advancement.create.chromatic_age"
},
"description": {
"translate": "advancement.create.chromatic_age.desc"
},
"frame": "goal",
"show_toast": true,
"announce_to_chat": true,
"hidden": false
},
"criteria": {
"0": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"create:shadow_steel_casing"
]
}
]
}
},
"1": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"create:refined_radiance_casing"
]
}
]
}
}
},
"requirements": [
[
"0"
],
[
"1"
]
]
}

View file

@ -1,37 +0,0 @@
{
"parent": "create:blaze_cake",
"display": {
"icon": {
"item": "create:chromatic_compound"
},
"title": {
"translate": "advancement.create.chromatic_compound"
},
"description": {
"translate": "advancement.create.chromatic_compound.desc"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": false,
"hidden": false
},
"criteria": {
"0": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"create:chromatic_compound"
]
}
]
}
}
},
"requirements": [
[
"0"
]
]
}

View file

@ -1,52 +0,0 @@
{
"parent": "create:chromatic_age",
"display": {
"icon": {
"item": "minecraft:oak_sapling"
},
"title": {
"translate": "advancement.create.eob"
},
"description": {
"translate": "advancement.create.eob.desc"
},
"frame": "challenge",
"show_toast": false,
"announce_to_chat": false,
"hidden": false
},
"criteria": {
"0": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"create:shadow_steel_casing"
]
}
]
}
},
"1": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"create:refined_radiance_casing"
]
}
]
}
}
},
"requirements": [
[
"0"
],
[
"1"
]
]
}

View file

@ -11,9 +11,7 @@
"conditions": {
"items": [
{
"items": [
"create:copper_casing"
]
"tag": "forge:barrels/wooden"
}
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:crafting/kinetics/item_vault"
]
},
"criteria": {
"has_item": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"tag": "forge:barrels/wooden"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:crafting/kinetics/item_vault"
}
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
]
}

View file

@ -1,37 +0,0 @@
{
"parent": "create:chromatic_compound",
"display": {
"icon": {
"item": "create:refined_radiance"
},
"title": {
"translate": "advancement.create.refined_radiance"
},
"description": {
"translate": "advancement.create.refined_radiance.desc"
},
"frame": "goal",
"show_toast": true,
"announce_to_chat": true,
"hidden": false
},
"criteria": {
"0": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"create:refined_radiance"
]
}
]
}
}
},
"requirements": [
[
"0"
]
]
}

View file

@ -1,37 +0,0 @@
{
"parent": "create:chromatic_compound",
"display": {
"icon": {
"item": "create:shadow_steel"
},
"title": {
"translate": "advancement.create.shadow_steel"
},
"description": {
"translate": "advancement.create.shadow_steel.desc"
},
"frame": "goal",
"show_toast": true,
"announce_to_chat": true,
"hidden": false
},
"criteria": {
"0": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"create:shadow_steel"
]
}
]
}
}
},
"requirements": [
[
"0"
]
]
}

View file

@ -1,5 +1,5 @@
{
"parent": "create:refined_radiance",
"parent": "create:precision_mechanism",
"display": {
"icon": {
"item": "create:wand_of_symmetry"

View file

@ -1,23 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
" B ",
"SCS",
" B "
"B",
"C",
"B"
],
"key": {
"B": {
"item": "create:copper_casing"
},
"S": {
"tag": "forge:nuggets/copper"
"tag": "forge:plates/copper"
},
"C": {
"tag": "forge:glass"
"tag": "forge:barrels/wooden"
}
},
"result": {
"item": "create:fluid_tank",
"count": 2
"item": "create:fluid_tank"
}
}

View file

@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"B",
"C",
"B"
],
"key": {
"B": {
"tag": "forge:plates/iron"
},
"C": {
"tag": "forge:barrels/wooden"
}
},
"result": {
"item": "create:item_vault"
}
}

View file

@ -157,9 +157,9 @@ import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock
import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkBlock;
import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkGenerator;
import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchBlock;
import com.simibubi.create.content.logistics.block.vault.VaultBlock;
import com.simibubi.create.content.logistics.block.vault.VaultCTBehaviour;
import com.simibubi.create.content.logistics.block.vault.VaultItem;
import com.simibubi.create.content.logistics.block.vault.ItemVaultBlock;
import com.simibubi.create.content.logistics.block.vault.ItemVaultCTBehaviour;
import com.simibubi.create.content.logistics.block.vault.ItemVaultItem;
import com.simibubi.create.content.logistics.item.LecternControllerBlock;
import com.simibubi.create.content.schematics.block.SchematicTableBlock;
import com.simibubi.create.content.schematics.block.SchematicannonBlock;
@ -637,6 +637,7 @@ public class AllBlocks {
public static final BlockEntry<BracketBlock> WOODEN_BRACKET = REGISTRATE.block("wooden_bracket", BracketBlock::new)
.blockstate(new BracketGenerator("wooden")::generate)
.properties(p -> p.sound(SoundType.SCAFFOLDING))
.transform(axeOrPickaxe())
.item(BracketBlockItem::new)
.transform(BracketGenerator.itemModel("wooden"))
@ -644,6 +645,7 @@ public class AllBlocks {
public static final BlockEntry<BracketBlock> METAL_BRACKET = REGISTRATE.block("metal_bracket", BracketBlock::new)
.blockstate(new BracketGenerator("metal")::generate)
.properties(p -> p.sound(SoundType.NETHERITE_BLOCK))
.transform(pickaxeOnly())
.item(BracketBlockItem::new)
.transform(BracketGenerator.itemModel("metal"))
@ -652,7 +654,7 @@ public class AllBlocks {
// Fluids
public static final BlockEntry<FluidPipeBlock> FLUID_PIPE = REGISTRATE.block("fluid_pipe", FluidPipeBlock::new)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.transform(pickaxeOnly())
.blockstate(BlockStateGen.pipe())
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
@ -662,7 +664,7 @@ public class AllBlocks {
public static final BlockEntry<EncasedPipeBlock> ENCASED_FLUID_PIPE =
REGISTRATE.block("encased_fluid_pipe", EncasedPipeBlock::new)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.properties(BlockBehaviour.Properties::noOcclusion)
.transform(axeOrPickaxe())
.blockstate(BlockStateGen.encasedPipe())
@ -675,7 +677,7 @@ public class AllBlocks {
public static final BlockEntry<GlassFluidPipeBlock> GLASS_FLUID_PIPE =
REGISTRATE.block("glass_fluid_pipe", GlassFluidPipeBlock::new)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.addLayer(() -> RenderType::cutoutMipped)
.transform(pickaxeOnly())
.blockstate((c, p) -> BlockStateGen.axisBlock(c, p, s -> p.models()
@ -686,7 +688,7 @@ public class AllBlocks {
.register();
public static final BlockEntry<PumpBlock> MECHANICAL_PUMP = REGISTRATE.block("mechanical_pump", PumpBlock::new)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.transform(pickaxeOnly())
.blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(true))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
@ -697,7 +699,7 @@ public class AllBlocks {
public static final BlockEntry<SmartFluidPipeBlock> SMART_FLUID_PIPE =
REGISTRATE.block("smart_fluid_pipe", SmartFluidPipeBlock::new)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.transform(pickaxeOnly())
.blockstate(new SmartFluidPipeGenerator()::generate)
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
@ -706,7 +708,7 @@ public class AllBlocks {
.register();
public static final BlockEntry<FluidValveBlock> FLUID_VALVE = REGISTRATE.block("fluid_valve", FluidValveBlock::new)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.transform(pickaxeOnly())
.blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p,
(state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal",
@ -736,7 +738,7 @@ public class AllBlocks {
});
public static final BlockEntry<FluidTankBlock> FLUID_TANK = REGISTRATE.block("fluid_tank", FluidTankBlock::regular)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.properties(BlockBehaviour.Properties::noOcclusion)
.transform(pickaxeOnly())
.blockstate(new FluidTankGenerator()::generate)
@ -749,7 +751,7 @@ public class AllBlocks {
public static final BlockEntry<FluidTankBlock> CREATIVE_FLUID_TANK =
REGISTRATE.block("creative_fluid_tank", FluidTankBlock::creative)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.properties(BlockBehaviour.Properties::noOcclusion)
.transform(pickaxeOnly())
.tag(AllBlockTags.SAFE_NBT.tag)
@ -766,7 +768,7 @@ public class AllBlocks {
.register();
public static final BlockEntry<HosePulleyBlock> HOSE_PULLEY = REGISTRATE.block("hose_pulley", HosePulleyBlock::new)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.transform(pickaxeOnly())
.blockstate(BlockStateGen.horizontalBlockProvider(true))
.transform(BlockStressDefaults.setImpact(4.0))
@ -775,7 +777,7 @@ public class AllBlocks {
.register();
public static final BlockEntry<ItemDrainBlock> ITEM_DRAIN = REGISTRATE.block("item_drain", ItemDrainBlock::new)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.transform(pickaxeOnly())
.addLayer(() -> RenderType::cutoutMipped)
.blockstate((c, p) -> p.simpleBlock(c.get(), AssetLookup.standardModel(c, p)))
@ -783,7 +785,7 @@ public class AllBlocks {
.register();
public static final BlockEntry<SpoutBlock> SPOUT = REGISTRATE.block("spout", SpoutBlock::new)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.transform(pickaxeOnly())
.blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.partialBaseModel(ctx, prov)))
.addLayer(() -> RenderType::cutoutMipped)
@ -793,7 +795,7 @@ public class AllBlocks {
public static final BlockEntry<PortableStorageInterfaceBlock> PORTABLE_FLUID_INTERFACE =
REGISTRATE.block("portable_fluid_interface", PortableStorageInterfaceBlock::forFluids)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.transform(axeOrPickaxe())
.blockstate((c, p) -> p.directionalBlock(c.get(), AssetLookup.partialBaseModel(c, p)))
.onRegister(addMovementBehaviour(new PortableStorageInterfaceMovement()))
@ -820,6 +822,7 @@ public class AllBlocks {
public static final BlockEntry<PistonExtensionPoleBlock> PISTON_EXTENSION_POLE =
REGISTRATE.block("piston_extension_pole", PistonExtensionPoleBlock::new)
.initialProperties(() -> Blocks.PISTON_HEAD)
.properties(p -> p.sound(SoundType.SCAFFOLDING))
.transform(axeOrPickaxe())
.blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(false))
.simpleItem()
@ -1104,7 +1107,8 @@ public class AllBlocks {
public static final BlockEntry<SailBlock> SAIL_FRAME = REGISTRATE.block("sail_frame", p -> SailBlock.frame(p))
.initialProperties(SharedProperties::wooden)
.properties(BlockBehaviour.Properties::noOcclusion)
.properties(p -> p.sound(SoundType.SCAFFOLDING)
.noOcclusion())
.transform(axeOnly())
.blockstate(BlockStateGen.directionalBlockProvider(false))
.tag(AllBlockTags.WINDMILL_SAILS.tag)
@ -1115,7 +1119,8 @@ public class AllBlocks {
public static final BlockEntry<SailBlock> SAIL =
REGISTRATE.block("white_sail", p -> SailBlock.withCanvas(p, DyeColor.WHITE))
.initialProperties(SharedProperties::wooden)
.properties(BlockBehaviour.Properties::noOcclusion)
.properties(p -> p.sound(SoundType.SCAFFOLDING)
.noOcclusion())
.transform(axeOnly())
.blockstate(BlockStateGen.directionalBlockProvider(false))
.tag(AllBlockTags.WINDMILL_SAILS.tag)
@ -1150,6 +1155,7 @@ public class AllBlocks {
public static final BlockEntry<CasingBlock> COPPER_CASING = REGISTRATE.block("copper_casing", CasingBlock::new)
.transform(BuilderTransformers.casing(AllSpriteShifts.COPPER_CASING))
.properties(p -> p.sound(SoundType.COPPER))
.register();
public static final BlockEntry<CasingBlock> SHADOW_STEEL_CASING =
@ -1241,7 +1247,7 @@ public class AllBlocks {
.transform(customItemModel())
.register();
public static final BlockEntry<VaultBlock> ITEM_VAULT = REGISTRATE.block("item_vault", VaultBlock::new)
public static final BlockEntry<ItemVaultBlock> ITEM_VAULT = REGISTRATE.block("item_vault", ItemVaultBlock::new)
.initialProperties(SharedProperties::softMetal)
.properties(p -> p.sound(SoundType.NETHERITE_BLOCK)
.explosionResistance(1200))
@ -1249,10 +1255,10 @@ public class AllBlocks {
.blockstate((c, p) -> p.getVariantBuilder(c.get())
.forAllStates(s -> ConfiguredModel.builder()
.modelFile(AssetLookup.standardModel(c, p))
.rotationY(s.getValue(VaultBlock.HORIZONTAL_AXIS) == Axis.X ? 90 : 0)
.rotationY(s.getValue(ItemVaultBlock.HORIZONTAL_AXIS) == Axis.X ? 90 : 0)
.build()))
.onRegister(connectedTextures(new VaultCTBehaviour()))
.item(VaultItem::new)
.onRegister(connectedTextures(new ItemVaultCTBehaviour()))
.item(ItemVaultItem::new)
.build()
.register();
@ -1436,7 +1442,7 @@ public class AllBlocks {
public static final BlockEntry<CopperBacktankBlock> COPPER_BACKTANK =
REGISTRATE.block("copper_backtank", CopperBacktankBlock::new)
.initialProperties(SharedProperties::softMetal)
.initialProperties(SharedProperties::copperMetal)
.blockstate((c, p) -> p.horizontalBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p)))
.transform(pickaxeOnly())
.addLayer(() -> RenderType::cutoutMipped)

View file

@ -163,7 +163,7 @@ import com.simibubi.create.content.logistics.block.redstone.NixieTubeRenderer;
import com.simibubi.create.content.logistics.block.redstone.NixieTubeTileEntity;
import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkTileEntity;
import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchTileEntity;
import com.simibubi.create.content.logistics.block.vault.VaultTileEntity;
import com.simibubi.create.content.logistics.block.vault.ItemVaultTileEntity;
import com.simibubi.create.content.logistics.item.LecternControllerRenderer;
import com.simibubi.create.content.logistics.item.LecternControllerTileEntity;
import com.simibubi.create.content.schematics.block.SchematicTableTileEntity;
@ -408,8 +408,8 @@ public class AllTileEntities {
.renderer(() -> ArmRenderer::new)
.register();
public static final TileEntityEntry<VaultTileEntity> ITEM_VAULT = Create.registrate()
.tileEntity("item_vault", VaultTileEntity::new)
public static final TileEntityEntry<ItemVaultTileEntity> ITEM_VAULT = Create.registrate()
.tileEntity("item_vault", ItemVaultTileEntity::new)
.validBlocks(AllBlocks.ITEM_VAULT)
.register();

View file

@ -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.content.logistics.block.vault.VaultBlock;
import com.simibubi.create.content.logistics.block.vault.VaultConnectivityHandler;
import com.simibubi.create.content.logistics.block.vault.ItemVaultBlock;
import com.simibubi.create.content.logistics.block.vault.ItemVaultConnectivityHandler;
import com.simibubi.create.foundation.config.ContraptionMovementSetting;
import net.minecraft.core.BlockPos;
@ -333,8 +333,8 @@ public class BlockMovementChecks {
.getAxis();
if (state.getBlock() instanceof FluidTankBlock)
return FluidTankConnectivityHandler.isConnected(world, pos, pos.relative(direction));
if (state.getBlock() instanceof VaultBlock)
return VaultConnectivityHandler.isConnected(world, pos, pos.relative(direction));
if (state.getBlock() instanceof ItemVaultBlock)
return ItemVaultConnectivityHandler.isConnected(world, pos, pos.relative(direction));
if (AllBlocks.STICKER.has(state) && state.getValue(StickerBlock.EXTENDED)) {
return direction == state.getValue(StickerBlock.FACING)
&& !isNotSupportive(world.getBlockState(pos.relative(direction)), direction.getOpposite());

View file

@ -57,9 +57,10 @@ import com.simibubi.create.content.contraptions.relays.advanced.GantryShaftBlock
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
import com.simibubi.create.content.logistics.block.inventories.CreativeCrateTileEntity;
import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock;
import com.simibubi.create.content.logistics.block.vault.VaultTileEntity;
import com.simibubi.create.content.logistics.block.vault.ItemVaultTileEntity;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
import com.simibubi.create.foundation.tileEntity.IMultiTileContainer;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
import com.simibubi.create.foundation.utility.BlockFace;
import com.simibubi.create.foundation.utility.ICoordinate;
@ -337,6 +338,15 @@ public abstract class Contraption {
frontier.add(attached);
}
// Double Chest halves stick together
if (state.hasProperty(ChestBlock.TYPE) && state.hasProperty(ChestBlock.FACING)
&& state.getValue(ChestBlock.TYPE) != ChestType.SINGLE) {
Direction offset = ChestBlock.getConnectedDirection(state);
BlockPos attached = pos.relative(offset);
if (!visited.contains(attached))
frontier.add(attached);
}
// Bearings potentially create stabilized sub-contraptions
if (AllBlocks.MECHANICAL_BEARING.has(state))
moveBearing(pos, frontier, visited, state);
@ -593,8 +603,6 @@ public abstract class Contraption {
protected Pair<StructureBlockInfo, BlockEntity> capture(Level world, BlockPos pos) {
BlockState blockstate = world.getBlockState(pos);
if (blockstate.getBlock() instanceof ChestBlock)
blockstate = blockstate.setValue(ChestBlock.TYPE, ChestType.SINGLE);
if (AllBlocks.REDSTONE_CONTACT.has(blockstate))
blockstate = blockstate.setValue(RedstoneContactBlock.POWERED, true);
if (blockstate.getBlock() instanceof ButtonBlock) {
@ -647,7 +655,7 @@ public abstract class Contraption {
nbt.remove("y");
nbt.remove("z");
if ((tileentity instanceof FluidTankTileEntity || tileentity instanceof VaultTileEntity)
if ((tileentity instanceof FluidTankTileEntity || tileentity instanceof ItemVaultTileEntity)
&& nbt.contains("Controller"))
nbt.put("Controller",
NbtUtils.writeBlockPos(toLocalPos(NbtUtils.readBlockPos(nbt.getCompound("Controller")))));
@ -1066,8 +1074,8 @@ public abstract class Contraption {
tag.remove("InitialOffset");
}
if (tileEntity instanceof FluidTankTileEntity && tag.contains("LastKnownPos"))
tag.put("LastKnownPos", NbtUtils.writeBlockPos(BlockPos.ZERO.below()));
if (tileEntity instanceof IMultiTileContainer && tag.contains("LastKnownPos"))
tag.put("LastKnownPos", NbtUtils.writeBlockPos(BlockPos.ZERO.below(Integer.MAX_VALUE - 1)));
tileEntity.load(tag);

View file

@ -4,17 +4,17 @@ import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity;
import com.simibubi.create.content.contraptions.processing.ProcessingInventory;
import com.simibubi.create.content.logistics.block.inventories.BottomlessItemHandler;
import com.simibubi.create.content.logistics.block.vault.ItemVaultTileEntity;
import com.simibubi.create.foundation.utility.NBTHelper;
import net.minecraft.core.NonNullList;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.ContainerHelper;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.ChestBlock;
import net.minecraft.world.level.block.entity.BarrelBlockEntity;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.entity.ChestBlockEntity;
import net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity;
import net.minecraft.world.level.block.state.properties.ChestType;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
@ -32,7 +32,7 @@ public class MountedStorage {
public static boolean canUseAsStorage(BlockEntity te) {
if (te == null)
return false;
if (te instanceof MechanicalCrafterTileEntity)
return false;
@ -44,6 +44,8 @@ public class MountedStorage {
return true;
if (te instanceof BarrelBlockEntity)
return true;
if (te instanceof ItemVaultTileEntity)
return true;
LazyOptional<IItemHandler> capability = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
IItemHandler handler = capability.orElse(null);
@ -60,13 +62,18 @@ public class MountedStorage {
if (te == null)
return;
// Split double chests
if (te.getType() == BlockEntityType.CHEST || te.getType() == BlockEntityType.TRAPPED_CHEST) {
if (te.getBlockState()
.getValue(ChestBlock.TYPE) != ChestType.SINGLE)
te.getLevel()
.setBlockAndUpdate(te.getBlockPos(), te.getBlockState()
.setValue(ChestBlock.TYPE, ChestType.SINGLE));
if (te instanceof ChestBlockEntity) {
CompoundTag tag = te.save(new CompoundTag());
if (tag.contains("LootTable", 8))
return;
handler = new ItemStackHandler(((ChestBlockEntity) te).getContainerSize());
NonNullList<ItemStack> items = NonNullList.withSize(handler.getSlots(), ItemStack.EMPTY);
ContainerHelper.loadAllItems(tag, items);
for (int i = 0; i < items.size(); i++)
handler.setStackInSlot(i, items.get(i));
valid = true;
return;
}
IItemHandler teHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
@ -74,6 +81,13 @@ public class MountedStorage {
if (teHandler == dummyHandler)
return;
// multiblock vaults need to provide individual invs
if (te instanceof ItemVaultTileEntity) {
handler = ((ItemVaultTileEntity) te).getInventoryOfBlock();
valid = true;
return;
}
// te uses ItemStackHandler
if (teHandler instanceof ItemStackHandler) {
handler = (ItemStackHandler) teHandler;
@ -99,7 +113,23 @@ public class MountedStorage {
// FIXME: More dynamic mounted storage in .4
if (handler instanceof BottomlessItemHandler)
return;
if (te instanceof ChestBlockEntity) {
CompoundTag tag = te.save(new CompoundTag());
tag.remove("Items");
NonNullList<ItemStack> items = NonNullList.withSize(handler.getSlots(), ItemStack.EMPTY);
for (int i = 0; i < items.size(); i++)
items.set(i, handler.getStackInSlot(i));
ContainerHelper.saveAllItems(tag, items);
te.load(tag);
return;
}
if (te instanceof ItemVaultTileEntity) {
((ItemVaultTileEntity) te).applyInventoryToBlock(handler);
return;
}
LazyOptional<IItemHandler> capability = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
IItemHandler teHandler = capability.orElse(null);
if (!(teHandler instanceof IItemHandlerModifiable))

View file

@ -7,6 +7,7 @@ import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.BlockItem;
@ -48,7 +49,15 @@ public class BracketBlockItem extends BlockItem {
return InteractionResult.SUCCESS;
BlockState bracket = behaviour.getBracket();
behaviour.applyBracket(suitableBracket.get());
BlockState newBracket = suitableBracket.get();
if (bracket == newBracket)
return InteractionResult.SUCCESS;
world.playSound(null, pos, newBracket
.getSoundType()
.getPlaceSound(), SoundSource.BLOCKS, 0.75f, 1);
behaviour.applyBracket(newBracket);
if (!world.isClientSide && player != null)
behaviour.triggerAdvancements(world, player, state);

View file

@ -11,6 +11,7 @@ import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock.Shape
import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.fluid.SmartFluidTank;
import com.simibubi.create.foundation.tileEntity.IMultiTileContainer;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.utility.animation.InterpolatedChasingValue;
@ -36,7 +37,7 @@ import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction;
import net.minecraftforge.fluids.capability.templates.FluidTank;
public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleInformation {
public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleInformation, IMultiTileContainer {
private static final int MAX_SIZE = 3;
@ -106,10 +107,12 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI
fluidLevel.tick();
}
@Override
public BlockPos getLastKnownPos() {
return lastKnownPos;
}
@Override
public boolean isController() {
return controller == null
|| worldPosition.getX() == controller.getX() && worldPosition.getY() == controller.getY() && worldPosition.getZ() == controller.getZ();
@ -277,6 +280,7 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI
}
}
@Override
public void setController(BlockPos controller) {
if (level.isClientSide && !isVirtual())
return;
@ -295,6 +299,7 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI
oldCap.invalidate();
}
@Override
public BlockPos getController() {
return isController() ? worldPosition : controller;
}

View file

@ -33,12 +33,12 @@ import net.minecraft.world.level.block.state.properties.Property;
import net.minecraftforge.common.util.ForgeSoundType;
import net.minecraftforge.items.CapabilityItemHandler;
public class VaultBlock extends Block implements IWrenchable, ITE<VaultTileEntity> {
public class ItemVaultBlock extends Block implements IWrenchable, ITE<ItemVaultTileEntity> {
public static final Property<Axis> HORIZONTAL_AXIS = BlockStateProperties.HORIZONTAL_AXIS;
public static final BooleanProperty LARGE = BooleanProperty.create("large");
public VaultBlock(Properties p_i48440_1_) {
public ItemVaultBlock(Properties p_i48440_1_) {
super(p_i48440_1_);
registerDefaultState(defaultBlockState().setValue(LARGE, false));
}
@ -73,7 +73,7 @@ public class VaultBlock extends Block implements IWrenchable, ITE<VaultTileEntit
return;
if (pIsMoving)
return;
withTileEntityDo(pLevel, pPos, VaultTileEntity::updateConnectivity);
withTileEntityDo(pLevel, pPos, ItemVaultTileEntity::updateConnectivity);
}
@Override
@ -83,9 +83,9 @@ public class VaultBlock extends Block implements IWrenchable, ITE<VaultTileEntit
.isVertical()) {
BlockEntity te = context.getLevel()
.getBlockEntity(context.getClickedPos());
if (te instanceof VaultTileEntity) {
VaultTileEntity vault = (VaultTileEntity) te;
VaultConnectivityHandler.splitVault(vault);
if (te instanceof ItemVaultTileEntity) {
ItemVaultTileEntity vault = (ItemVaultTileEntity) te;
ItemVaultConnectivityHandler.splitVault(vault);
vault.removeController(true);
}
state = state.setValue(LARGE, false);
@ -98,12 +98,12 @@ public class VaultBlock extends Block implements IWrenchable, ITE<VaultTileEntit
public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean pIsMoving) {
if (state.hasBlockEntity() && (state.getBlock() != newState.getBlock() || !newState.hasBlockEntity())) {
BlockEntity te = world.getBlockEntity(pos);
if (!(te instanceof VaultTileEntity))
if (!(te instanceof ItemVaultTileEntity))
return;
VaultTileEntity tankTE = (VaultTileEntity) te;
ItemVaultTileEntity tankTE = (ItemVaultTileEntity) te;
ItemHelper.dropContents(world, pos, tankTE.inventory);
world.removeBlockEntity(pos);
VaultConnectivityHandler.splitVault(tankTE);
ItemVaultConnectivityHandler.splitVault(tankTE);
}
}
@ -166,12 +166,12 @@ public class VaultBlock extends Block implements IWrenchable, ITE<VaultTileEntit
}
@Override
public BlockEntityType<? extends VaultTileEntity> getTileEntityType() {
public BlockEntityType<? extends ItemVaultTileEntity> getTileEntityType() {
return AllTileEntities.ITEM_VAULT.get();
}
@Override
public Class<VaultTileEntity> getTileEntityClass() {
return VaultTileEntity.class;
public Class<ItemVaultTileEntity> getTileEntityClass() {
return ItemVaultTileEntity.class;
}
}

View file

@ -11,12 +11,12 @@ import net.minecraft.core.Direction.AxisDirection;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
public class VaultCTBehaviour extends ConnectedTextureBehaviour {
public class ItemVaultCTBehaviour extends ConnectedTextureBehaviour {
@Override
public CTSpriteShiftEntry get(BlockState state, Direction direction) {
Axis vaultBlockAxis = VaultBlock.getVaultBlockAxis(state);
boolean small = !VaultBlock.isLarge(state);
Axis vaultBlockAxis = ItemVaultBlock.getVaultBlockAxis(state);
boolean small = !ItemVaultBlock.isLarge(state);
if (vaultBlockAxis == null)
return null;
@ -32,7 +32,7 @@ public class VaultCTBehaviour extends ConnectedTextureBehaviour {
@Override
protected Direction getUpDirection(BlockAndTintGetter reader, BlockPos pos, BlockState state, Direction face) {
Axis vaultBlockAxis = VaultBlock.getVaultBlockAxis(state);
Axis vaultBlockAxis = ItemVaultBlock.getVaultBlockAxis(state);
boolean alongX = vaultBlockAxis == Axis.X;
if (face.getAxis()
.isVertical() && alongX)
@ -45,7 +45,7 @@ public class VaultCTBehaviour extends ConnectedTextureBehaviour {
@Override
protected Direction getRightDirection(BlockAndTintGetter reader, BlockPos pos, BlockState state, Direction face) {
Axis vaultBlockAxis = VaultBlock.getVaultBlockAxis(state);
Axis vaultBlockAxis = ItemVaultBlock.getVaultBlockAxis(state);
if (face.getAxis()
.isVertical() && vaultBlockAxis == Axis.X)
return super.getRightDirection(reader, pos, state, face).getClockWise();
@ -62,7 +62,7 @@ public class VaultCTBehaviour extends ConnectedTextureBehaviour {
@Override
public boolean connectsTo(BlockState state, BlockState other, BlockAndTintGetter reader, BlockPos pos,
BlockPos otherPos, Direction face) {
return state == other && VaultConnectivityHandler.isConnected(reader, pos, otherPos);
return state == other && ItemVaultConnectivityHandler.isConnected(reader, pos, otherPos);
}
}

View file

@ -26,22 +26,22 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
public class VaultConnectivityHandler {
public class ItemVaultConnectivityHandler {
public static void formVaults(VaultTileEntity te) {
public static void formVaults(ItemVaultTileEntity te) {
VaultSearchCache cache = new VaultSearchCache();
List<VaultTileEntity> frontier = new ArrayList<>();
List<ItemVaultTileEntity> frontier = new ArrayList<>();
frontier.add(te);
formVaults(te.getType(), te.getLevel(), cache, frontier);
}
private static void formVaults(BlockEntityType<?> type, BlockGetter world, VaultSearchCache cache,
List<VaultTileEntity> frontier) {
PriorityQueue<Pair<Integer, VaultTileEntity>> creationQueue = makeCreationQueue();
List<ItemVaultTileEntity> frontier) {
PriorityQueue<Pair<Integer, ItemVaultTileEntity>> creationQueue = makeCreationQueue();
Set<BlockPos> visited = new HashSet<>();
int minY = Integer.MAX_VALUE;
for (VaultTileEntity fluidTankTileEntity : frontier) {
for (ItemVaultTileEntity fluidTankTileEntity : frontier) {
BlockPos pos = fluidTankTileEntity.getBlockPos();
minY = Math.min(pos.getY(), minY);
}
@ -49,7 +49,7 @@ public class VaultConnectivityHandler {
minY -= 3;
while (!frontier.isEmpty()) {
VaultTileEntity tank = frontier.remove(0);
ItemVaultTileEntity tank = frontier.remove(0);
BlockPos tankPos = tank.getBlockPos();
if (visited.contains(tankPos))
continue;
@ -68,7 +68,7 @@ public class VaultConnectivityHandler {
continue;
if (visited.contains(next))
continue;
VaultTileEntity nextTank = vaultAt(type, world, next);
ItemVaultTileEntity nextTank = vaultAt(type, world, next);
if (nextTank == null)
continue;
if (nextTank.isRemoved())
@ -80,8 +80,8 @@ public class VaultConnectivityHandler {
visited.clear();
while (!creationQueue.isEmpty()) {
Pair<Integer, VaultTileEntity> next = creationQueue.poll();
VaultTileEntity toCreate = next.getValue();
Pair<Integer, ItemVaultTileEntity> next = creationQueue.poll();
ItemVaultTileEntity toCreate = next.getValue();
if (visited.contains(toCreate.getBlockPos()))
continue;
visited.add(toCreate.getBlockPos());
@ -90,11 +90,11 @@ public class VaultConnectivityHandler {
}
public static void splitVault(VaultTileEntity te) {
public static void splitVault(ItemVaultTileEntity te) {
splitVaultAndInvalidate(te, null, false);
}
private static int tryToFormNewVault(VaultTileEntity te, VaultSearchCache cache, boolean simulate) {
private static int tryToFormNewVault(ItemVaultTileEntity te, VaultSearchCache cache, boolean simulate) {
int bestWidth = 1;
int bestAmount = -1;
@ -120,9 +120,9 @@ public class VaultConnectivityHandler {
te.length = bestAmount / bestWidth / bestWidth;
BlockState state = te.getBlockState();
if (VaultBlock.isVault(state))
if (ItemVaultBlock.isVault(state))
te.getLevel()
.setBlock(te.getBlockPos(), state.setValue(VaultBlock.LARGE, te.radius > 2), 22);
.setBlock(te.getBlockPos(), state.setValue(ItemVaultBlock.LARGE, te.radius > 2), 22);
te.itemCapability.invalidate();
te.setChanged();
@ -131,34 +131,34 @@ public class VaultConnectivityHandler {
return bestAmount;
}
private static int tryToFormNewVaultOfRadius(VaultTileEntity te, int width, VaultSearchCache cache,
private static int tryToFormNewVaultOfRadius(ItemVaultTileEntity te, int width, VaultSearchCache cache,
boolean simulate) {
int amount = 0;
int height = 0;
BlockEntityType<?> type = te.getType();
Level world = te.getLevel();
BlockPos origin = te.getBlockPos();
boolean alongZ = VaultBlock.getVaultBlockAxis(te.getBlockState()) == Axis.Z;
boolean alongZ = ItemVaultBlock.getVaultBlockAxis(te.getBlockState()) == Axis.Z;
Search:
for (int yOffset = 0; yOffset < VaultTileEntity.getMaxLength(width); yOffset++) {
for (int yOffset = 0; yOffset < ItemVaultTileEntity.getMaxLength(width); yOffset++) {
for (int xOffset = 0; xOffset < width; xOffset++) {
for (int zOffset = 0; zOffset < width; zOffset++) {
BlockPos pos =
alongZ ? origin.offset(xOffset, zOffset, yOffset) : origin.offset(yOffset, xOffset, zOffset);
Optional<VaultTileEntity> tank = cache.getOrCache(type, world, pos);
Optional<ItemVaultTileEntity> tank = cache.getOrCache(type, world, pos);
if (!tank.isPresent())
break Search;
VaultTileEntity controller = tank.get();
ItemVaultTileEntity controller = tank.get();
int otherWidth = controller.radius;
if (otherWidth > width)
break Search;
if (otherWidth == width && controller.length == VaultTileEntity.getMaxLength(width))
if (otherWidth == width && controller.length == ItemVaultTileEntity.getMaxLength(width))
break Search;
if ((VaultBlock.getVaultBlockAxis(controller.getBlockState()) == Axis.Z) != alongZ)
if ((ItemVaultBlock.getVaultBlockAxis(controller.getBlockState()) == Axis.Z) != alongZ)
break Search;
BlockPos controllerPos = controller.getBlockPos();
@ -192,7 +192,7 @@ public class VaultConnectivityHandler {
for (int zOffset = 0; zOffset < width; zOffset++) {
BlockPos pos =
alongZ ? origin.offset(xOffset, zOffset, yOffset) : origin.offset(yOffset, xOffset, zOffset);
VaultTileEntity tank = vaultAt(type, world, pos);
ItemVaultTileEntity tank = vaultAt(type, world, pos);
if (tank == te)
continue;
@ -202,9 +202,9 @@ public class VaultConnectivityHandler {
cache.put(pos, te);
BlockState state = world.getBlockState(pos);
if (!VaultBlock.isVault(state))
if (!ItemVaultBlock.isVault(state))
continue;
state = state.setValue(VaultBlock.LARGE, width > 2);
state = state.setValue(ItemVaultBlock.LARGE, width > 2);
world.setBlock(pos, state, 22);
}
}
@ -213,7 +213,7 @@ public class VaultConnectivityHandler {
return amount;
}
private static void splitVaultAndInvalidate(VaultTileEntity te, @Nullable VaultSearchCache cache,
private static void splitVaultAndInvalidate(ItemVaultTileEntity te, @Nullable VaultSearchCache cache,
boolean tryReconnect) {
// tryReconnect helps whenever only few tanks have been removed
@ -224,13 +224,13 @@ public class VaultConnectivityHandler {
int height = te.length;
int width = te.radius;
BlockState state = te.getBlockState();
boolean alongZ = VaultBlock.getVaultBlockAxis(state) == Axis.Z;
boolean alongZ = ItemVaultBlock.getVaultBlockAxis(state) == Axis.Z;
if (width == 1 && height == 1)
return;
Level world = te.getLevel();
BlockPos origin = te.getBlockPos();
List<VaultTileEntity> frontier = new ArrayList<>();
List<ItemVaultTileEntity> frontier = new ArrayList<>();
for (int yOffset = 0; yOffset < height; yOffset++) {
for (int xOffset = 0; xOffset < width; xOffset++) {
@ -238,7 +238,7 @@ public class VaultConnectivityHandler {
BlockPos pos =
alongZ ? origin.offset(xOffset, zOffset, yOffset) : origin.offset(yOffset, xOffset, zOffset);
VaultTileEntity tankAt = vaultAt(te.getType(), world, pos);
ItemVaultTileEntity tankAt = vaultAt(te.getType(), world, pos);
if (tankAt == null)
continue;
if (!tankAt.getController()
@ -262,31 +262,31 @@ public class VaultConnectivityHandler {
formVaults(te.getType(), world, cache == null ? new VaultSearchCache() : cache, frontier);
}
private static PriorityQueue<Pair<Integer, VaultTileEntity>> makeCreationQueue() {
return new PriorityQueue<>(new Comparator<Pair<Integer, VaultTileEntity>>() {
private static PriorityQueue<Pair<Integer, ItemVaultTileEntity>> makeCreationQueue() {
return new PriorityQueue<>(new Comparator<Pair<Integer, ItemVaultTileEntity>>() {
@Override
public int compare(Pair<Integer, VaultTileEntity> o1, Pair<Integer, VaultTileEntity> o2) {
public int compare(Pair<Integer, ItemVaultTileEntity> o1, Pair<Integer, ItemVaultTileEntity> o2) {
return o2.getKey() - o1.getKey();
}
});
}
@Nullable
public static VaultTileEntity vaultAt(BlockEntityType<?> type, BlockGetter world, BlockPos pos) {
public static ItemVaultTileEntity vaultAt(BlockEntityType<?> type, BlockGetter world, BlockPos pos) {
BlockEntity te = world.getBlockEntity(pos);
if (te instanceof VaultTileEntity && te.getType() == type)
return (VaultTileEntity) te;
if (te instanceof ItemVaultTileEntity && te.getType() == type)
return (ItemVaultTileEntity) te;
return null;
}
private static class VaultSearchCache {
Map<BlockPos, Optional<VaultTileEntity>> controllerMap;
Map<BlockPos, Optional<ItemVaultTileEntity>> controllerMap;
public VaultSearchCache() {
controllerMap = new HashMap<>();
}
void put(BlockPos pos, VaultTileEntity target) {
void put(BlockPos pos, ItemVaultTileEntity target) {
controllerMap.put(pos, Optional.of(target));
}
@ -298,15 +298,15 @@ public class VaultConnectivityHandler {
return controllerMap.containsKey(pos);
}
Optional<VaultTileEntity> getOrCache(BlockEntityType<?> type, BlockGetter world, BlockPos pos) {
Optional<ItemVaultTileEntity> getOrCache(BlockEntityType<?> type, BlockGetter world, BlockPos pos) {
if (hasVisited(pos))
return controllerMap.get(pos);
VaultTileEntity tankAt = vaultAt(type, world, pos);
ItemVaultTileEntity tankAt = vaultAt(type, world, pos);
if (tankAt == null) {
putEmpty(pos);
return Optional.empty();
}
VaultTileEntity controller = tankAt.getControllerTE();
ItemVaultTileEntity controller = tankAt.getControllerTE();
if (controller == null) {
putEmpty(pos);
return Optional.empty();
@ -320,10 +320,10 @@ public class VaultConnectivityHandler {
public static boolean isConnected(BlockGetter world, BlockPos tankPos, BlockPos otherTankPos) {
BlockEntity te1 = world.getBlockEntity(tankPos);
BlockEntity te2 = world.getBlockEntity(otherTankPos);
if (!(te1 instanceof VaultTileEntity) || !(te2 instanceof VaultTileEntity))
if (!(te1 instanceof ItemVaultTileEntity) || !(te2 instanceof ItemVaultTileEntity))
return false;
return ((VaultTileEntity) te1).getController()
.equals(((VaultTileEntity) te2).getController());
return ((ItemVaultTileEntity) te1).getController()
.equals(((ItemVaultTileEntity) te2).getController());
}
}

View file

@ -18,9 +18,9 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
public class VaultItem extends BlockItem {
public class ItemVaultItem extends BlockItem {
public VaultItem(Block p_i48527_1_, Properties p_i48527_2_) {
public ItemVaultItem(Block p_i48527_1_, Properties p_i48527_2_) {
super(p_i48527_1_, p_i48527_2_);
}
@ -62,12 +62,12 @@ public class VaultItem extends BlockItem {
BlockPos placedOnPos = pos.relative(face.getOpposite());
BlockState placedOnState = world.getBlockState(placedOnPos);
if (!VaultBlock.isVault(placedOnState))
if (!ItemVaultBlock.isVault(placedOnState))
return;
VaultTileEntity tankAt = VaultConnectivityHandler.vaultAt(AllTileEntities.ITEM_VAULT.get(), world, placedOnPos);
ItemVaultTileEntity tankAt = ItemVaultConnectivityHandler.vaultAt(AllTileEntities.ITEM_VAULT.get(), world, placedOnPos);
if (tankAt == null)
return;
VaultTileEntity controllerTE = tankAt.getControllerTE();
ItemVaultTileEntity controllerTE = tankAt.getControllerTE();
if (controllerTE == null)
return;
@ -76,7 +76,7 @@ public class VaultItem extends BlockItem {
return;
int tanksToPlace = 0;
Axis vaultBlockAxis = VaultBlock.getVaultBlockAxis(placedOnState);
Axis vaultBlockAxis = ItemVaultBlock.getVaultBlockAxis(placedOnState);
if (vaultBlockAxis == null)
return;
if (face.getAxis() != vaultBlockAxis)
@ -96,7 +96,7 @@ public class VaultItem extends BlockItem {
BlockPos offsetPos = vaultBlockAxis == Axis.X ? startPos.offset(0, xOffset, zOffset)
: startPos.offset(xOffset, zOffset, 0);
BlockState blockState = world.getBlockState(offsetPos);
if (VaultBlock.isVault(blockState))
if (ItemVaultBlock.isVault(blockState))
continue;
if (!blockState.getMaterial()
.isReplaceable())
@ -113,7 +113,7 @@ public class VaultItem extends BlockItem {
BlockPos offsetPos = vaultBlockAxis == Axis.X ? startPos.offset(0, xOffset, zOffset)
: startPos.offset(xOffset, zOffset, 0);
BlockState blockState = world.getBlockState(offsetPos);
if (VaultBlock.isVault(blockState))
if (ItemVaultBlock.isVault(blockState))
continue;
BlockPlaceContext context = BlockPlaceContext.at(ctx, offsetPos, face);
player.getPersistentData()

View file

@ -4,6 +4,7 @@ import java.util.List;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.tileEntity.IMultiTileContainer;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
@ -12,6 +13,7 @@ import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
@ -23,7 +25,7 @@ import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
public class VaultTileEntity extends SmartTileEntity {
public class ItemVaultTileEntity extends SmartTileEntity implements IMultiTileContainer {
protected LazyOptional<IItemHandler> itemCapability;
@ -35,7 +37,7 @@ public class VaultTileEntity extends SmartTileEntity {
protected int length;
protected Axis axis;
public VaultTileEntity(BlockEntityType<?> tileEntityTypeIn, BlockPos pos, BlockState state) {
public ItemVaultTileEntity(BlockEntityType<?> tileEntityTypeIn, BlockPos pos, BlockState state) {
super(tileEntityTypeIn, pos, state);
inventory = new ItemStackHandler(AllConfigs.SERVER.logistics.vaultCapacity.get()) {
@ -60,11 +62,11 @@ public class VaultTileEntity extends SmartTileEntity {
return;
if (!isController())
return;
VaultConnectivityHandler.formVaults(this);
ItemVaultConnectivityHandler.formVaults(this);
}
protected void updateComparators() {
VaultTileEntity controllerTE = getControllerTE();
ItemVaultTileEntity controllerTE = getControllerTE();
if (controllerTE == null)
return;
@ -92,23 +94,29 @@ public class VaultTileEntity extends SmartTileEntity {
if (updateConnectivity)
updateConnectivity();
}
@Override
public BlockPos getLastKnownPos() {
return lastKnownPos;
}
@Override
public boolean isController() {
return controller == null || worldPosition.getX() == controller.getX()
&& worldPosition.getY() == controller.getY() && worldPosition.getZ() == controller.getZ();
}
private void onPositionChanged() {
removeController(true);
lastKnownPos = worldPosition;
}
public VaultTileEntity getControllerTE() {
public ItemVaultTileEntity getControllerTE() {
if (isController())
return this;
BlockEntity tileEntity = level.getBlockEntity(controller);
if (tileEntity instanceof VaultTileEntity)
return (VaultTileEntity) tileEntity;
if (tileEntity instanceof ItemVaultTileEntity)
return (ItemVaultTileEntity) tileEntity;
return null;
}
@ -121,8 +129,8 @@ public class VaultTileEntity extends SmartTileEntity {
length = 1;
BlockState state = getBlockState();
if (VaultBlock.isVault(state)) {
state = state.setValue(VaultBlock.LARGE, false);
if (ItemVaultBlock.isVault(state)) {
state = state.setValue(ItemVaultBlock.LARGE, false);
getLevel().setBlock(worldPosition, state, 22);
}
@ -131,8 +139,9 @@ public class VaultTileEntity extends SmartTileEntity {
sendData();
}
@Override
public void setController(BlockPos controller) {
if (level.isClientSide())
if (level.isClientSide && !isVirtual())
return;
if (controller.equals(this.controller))
return;
@ -142,10 +151,11 @@ public class VaultTileEntity extends SmartTileEntity {
sendData();
}
@Override
public BlockPos getController() {
return isController() ? worldPosition : controller;
}
@Override
protected void fromTag(CompoundTag compound, boolean clientPacket) {
super.fromTag(compound, clientPacket);
@ -194,8 +204,19 @@ public class VaultTileEntity extends SmartTileEntity {
super.write(compound, clientPacket);
if (!clientPacket)
if (!clientPacket) {
compound.putString("StorageType", "CombinedInv");
compound.put("Inventory", inventory.serializeNBT());
}
}
public ItemStackHandler getInventoryOfBlock() {
return inventory;
}
public void applyInventoryToBlock(ItemStackHandler handler) {
for (int i = 0; i < inventory.getSlots(); i++)
inventory.setStackInSlot(i, i < handler.getSlots() ? handler.getStackInSlot(i) : ItemStack.EMPTY);
}
@Override
@ -211,7 +232,7 @@ public class VaultTileEntity extends SmartTileEntity {
if (itemCapability.isPresent())
return;
if (!isController()) {
VaultTileEntity controllerTE = getControllerTE();
ItemVaultTileEntity controllerTE = getControllerTE();
if (controllerTE == null)
return;
controllerTE.initCapability();
@ -219,15 +240,15 @@ public class VaultTileEntity extends SmartTileEntity {
return;
}
boolean alongZ = VaultBlock.getVaultBlockAxis(getBlockState()) == Axis.Z;
boolean alongZ = ItemVaultBlock.getVaultBlockAxis(getBlockState()) == Axis.Z;
IItemHandlerModifiable[] invs = new IItemHandlerModifiable[length * radius * radius];
for (int yOffset = 0; yOffset < length; yOffset++) {
for (int xOffset = 0; xOffset < radius; xOffset++) {
for (int zOffset = 0; zOffset < radius; zOffset++) {
BlockPos vaultPos = alongZ ? worldPosition.offset(xOffset, zOffset, yOffset)
: worldPosition.offset(yOffset, xOffset, zOffset);
VaultTileEntity vaultAt =
VaultConnectivityHandler.vaultAt(AllTileEntities.ITEM_VAULT.get(), level, vaultPos);
ItemVaultTileEntity vaultAt =
ItemVaultConnectivityHandler.vaultAt(AllTileEntities.ITEM_VAULT.get(), level, vaultPos);
invs[yOffset * radius * radius + xOffset * radius + zOffset] =
vaultAt != null ? vaultAt.inventory : new ItemStackHandler();
}

View file

@ -405,31 +405,8 @@ public class AllAdvancements implements DataProvider {
itemAdvancement("blaze_cake", AllItems.BLAZE_CAKE, TaskType.NORMAL).parent(crushing_wheel)
.save(t, id + ":blaze_cake");
Advancement chromatic_compound =
itemAdvancement("chromatic_compound", AllItems.CHROMATIC_COMPOUND, TaskType.NORMAL).parent(blaze_cake)
.save(t, id + ":chromatic_compound");
Advancement shadow_steel =
itemAdvancement("shadow_steel", AllItems.SHADOW_STEEL, TaskType.GOAL).parent(chromatic_compound)
.save(t, id + ":shadow_steel");
Advancement refined_radiance =
itemAdvancement("refined_radiance", AllItems.REFINED_RADIANCE, TaskType.GOAL).parent(chromatic_compound)
.save(t, id + ":refined_radiance");
Advancement chromatic_age = advancement("chromatic_age", AllBlocks.REFINED_RADIANCE_CASING.get(), TaskType.GOAL)
.parent(chromatic_compound)
.addCriterion("0", itemGathered(AllBlocks.SHADOW_STEEL_CASING.get()))
.addCriterion("1", itemGathered(AllBlocks.REFINED_RADIANCE_CASING.get()))
.save(t, id + ":chromatic_age");
Advancement chromatic_eob = deadEnd().parent(chromatic_age)
.addCriterion("0", itemGathered(AllBlocks.SHADOW_STEEL_CASING.get()))
.addCriterion("1", itemGathered(AllBlocks.REFINED_RADIANCE_CASING.get()))
.save(t, id + ":chromatic_eob");
Advancement symmetry_wand =
itemAdvancement("wand_of_symmetry", AllItems.WAND_OF_SYMMETRY, TaskType.NORMAL).parent(refined_radiance)
itemAdvancement("wand_of_symmetry", AllItems.WAND_OF_SYMMETRY, TaskType.NORMAL).parent(clockwork_component)
.save(t, id + ":wand_of_symmetry");
}

View file

@ -7,7 +7,7 @@ public class CLogistics extends ConfigBase {
public final ConfigInt psiTimeout = i(20, 1, "psiTimeout", Comments.psiTimeout);
public final ConfigInt mechanicalArmRange = i(5, 1, "mechanicalArmRange", Comments.mechanicalArmRange);
public final ConfigInt linkRange = i(128, 1, "linkRange", Comments.linkRange);
public final ConfigInt vaultCapacity = i(27, 1, "vaultCapacity", Comments.vaultCapacity);
public final ConfigInt vaultCapacity = i(20, 1, "vaultCapacity", Comments.vaultCapacity);
@Override
public String getName() {

View file

@ -123,7 +123,7 @@ public class BuilderTransformers {
public static <B extends ValveHandleBlock> NonNullUnaryOperator<BlockBuilder<B, CreateRegistrate>> valveHandle(
@Nullable DyeColor color) {
return b -> b.initialProperties(SharedProperties::softMetal)
return b -> b.initialProperties(SharedProperties::copperMetal)
.blockstate((c, p) -> {
String variant = color == null ? "copper" : color.getSerializedName();
p.directionalBlock(c.get(), p.models()

View file

@ -19,6 +19,10 @@ public class SharedProperties {
public static Block softMetal() {
return Blocks.GOLD_BLOCK;
}
public static Block copperMetal() {
return Blocks.COPPER_BLOCK;
}
public static Block wooden() {
return Blocks.STRIPPED_SPRUCE_WOOD;

View file

@ -536,14 +536,19 @@ public class StandardRecipeGen extends CreateRecipeProvider {
.pattern("P")
.pattern("S")),
FLUID_TANK = create(AllBlocks.FLUID_TANK).returns(2)
.unlockedBy(I::copperCasing)
.viaShaped(b -> b.define('B', I.copperCasing())
.define('S', I.copperNugget())
.define('C', Tags.Items.GLASS)
.pattern(" B ")
.pattern("SCS")
.pattern(" B ")),
FLUID_TANK = create(AllBlocks.FLUID_TANK).unlockedByTag(() -> Tags.Items.BARRELS_WOODEN)
.viaShaped(b -> b.define('B', I.copperSheet())
.define('C', Tags.Items.BARRELS_WOODEN)
.pattern("B")
.pattern("C")
.pattern("B")),
ITEM_VAULT = create(AllBlocks.ITEM_VAULT).unlockedByTag(() -> Tags.Items.BARRELS_WOODEN)
.viaShaped(b -> b.define('B', I.ironSheet())
.define('C', Tags.Items.BARRELS_WOODEN)
.pattern("B")
.pattern("C")
.pattern("B")),
DEPLOYER = create(AllBlocks.DEPLOYER).unlockedBy(I::electronTube)
.viaShaped(b -> b.define('I', AllItems.BRASS_HAND.get())

View file

@ -196,10 +196,10 @@ public class AllIcons implements ScreenElement {
Vec3 vec3 = new Vec3(1, 1, 0);
Vec3 vec4 = new Vec3(1, 0, 0);
float u1 = iconX / ICON_ATLAS_SIZE;
float u2 = (iconX + 16) / ICON_ATLAS_SIZE;
float v1 = iconY / ICON_ATLAS_SIZE;
float v2 = (iconY + 16) / ICON_ATLAS_SIZE;
float u1 = iconX * 1f / ICON_ATLAS_SIZE;
float u2 = (iconX + 16) * 1f / ICON_ATLAS_SIZE;
float v1 = iconY * 1f / ICON_ATLAS_SIZE;
float v2 = (iconY + 16) * 1f / ICON_ATLAS_SIZE;
vertex(builder, matrix, vec1, rgb, u1, v1, light);
vertex(builder, matrix, vec2, rgb, u1, v2, light);

View file

@ -24,6 +24,8 @@ import net.minecraftforge.client.event.RenderTooltipEvent;
public class PonderTooltipHandler {
public static boolean enable = true;
static LerpedFloat holdWProgress = LerpedFloat.linear()
.startWithValue(0);
static ItemStack hoveredStack = ItemStack.EMPTY;
@ -40,14 +42,15 @@ public class PonderTooltipHandler {
public static void deferredTick() {
deferTick = false;
Minecraft instance = Minecraft.getInstance();
Screen currentScreen = instance.screen;
if (hoveredStack.isEmpty() || trackingStack.isEmpty()) {
trackingStack = ItemStack.EMPTY;
holdWProgress.startWithValue(0);
return;
}
Minecraft instance = Minecraft.getInstance();
Screen currentScreen = instance.screen;
float value = holdWProgress.getValue();
int keyCode = ponderKeybind().getKey()
.getValue();
@ -70,6 +73,9 @@ public class PonderTooltipHandler {
}
public static void addToTooltip(List<Component> toolTip, ItemStack stack) {
if (!enable)
return;
updateHovered(stack);
if (deferTick)
@ -92,11 +98,13 @@ public class PonderTooltipHandler {
protected static void updateHovered(ItemStack stack) {
Minecraft instance = Minecraft.getInstance();
Screen currentScreen = instance.screen;
boolean inPonderUI = currentScreen instanceof PonderUI;
ItemStack prevStack = trackingStack;
hoveredStack = ItemStack.EMPTY;
subject = false;
if (currentScreen instanceof PonderUI) {
if (inPonderUI) {
PonderUI ponderUI = (PonderUI) currentScreen;
if (stack.sameItem(ponderUI.getSubject()))
subject = true;
@ -108,7 +116,7 @@ public class PonderTooltipHandler {
.getRegistryName()))
return;
if (prevStack.isEmpty() || !prevStack.sameItem(stack))
if (prevStack.isEmpty() || !prevStack.sameItem(stack))
holdWProgress.startWithValue(0);
hoveredStack = stack;

View file

@ -9,12 +9,12 @@ import java.util.Map;
import javax.annotation.Nullable;
import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity;
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
import com.simibubi.create.content.schematics.SchematicWorld;
import com.simibubi.create.foundation.ponder.element.WorldSectionElement;
import com.simibubi.create.foundation.render.SuperRenderTypeBuffer;
import com.simibubi.create.foundation.tileEntity.IMultiTileContainer;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.utility.worldWrappers.WrappedClientWorld;
@ -259,6 +259,7 @@ public class PonderWorld extends SchematicWorld {
public void fixControllerTileEntities() {
for (BlockEntity tileEntity : tileEntities.values()) {
if (tileEntity instanceof BeltTileEntity) {
BeltTileEntity beltTileEntity = (BeltTileEntity) tileEntity;
if (!beltTileEntity.isController())
@ -272,20 +273,22 @@ public class PonderWorld extends SchematicWorld {
belt2.setController(controllerPos);
}
}
if (tileEntity instanceof FluidTankTileEntity) {
FluidTankTileEntity fluidTankTileEntity = (FluidTankTileEntity) tileEntity;
BlockPos lastKnown = fluidTankTileEntity.getLastKnownPos();
BlockPos current = fluidTankTileEntity.getBlockPos();
if (tileEntity instanceof IMultiTileContainer) {
IMultiTileContainer multiTile = (IMultiTileContainer) tileEntity;
BlockPos lastKnown = multiTile.getLastKnownPos();
BlockPos current = tileEntity.getBlockPos();
if (lastKnown == null || current == null)
continue;
if (fluidTankTileEntity.isController())
if (multiTile.isController())
continue;
if (!lastKnown.equals(current)) {
BlockPos newControllerPos = fluidTankTileEntity.getController()
BlockPos newControllerPos = multiTile.getController()
.offset(current.subtract(lastKnown));
fluidTankTileEntity.setController(newControllerPos);
multiTile.setController(newControllerPos);
}
}
}
}

View file

@ -0,0 +1,238 @@
package com.simibubi.create.foundation.ponder.content;
import com.simibubi.create.AllItems;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.ponder.ElementLink;
import com.simibubi.create.foundation.ponder.PonderPalette;
import com.simibubi.create.foundation.ponder.SceneBuilder;
import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
import com.simibubi.create.foundation.ponder.Selection;
import com.simibubi.create.foundation.ponder.element.InputWindowElement;
import com.simibubi.create.foundation.ponder.element.WorldSectionElement;
import com.simibubi.create.foundation.utility.Pointing;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.phys.Vec3;
public class ItemVaultScenes {
public static void storage(SceneBuilder scene, SceneBuildingUtil util) {
scene.title("item_vault_storage", "Storing Items in Vaults");
scene.configureBasePlate(0, 0, 5);
scene.showBasePlate();
scene.idle(5);
Selection chests = util.select.fromTo(4, 3, 2, 3, 4, 3);
Selection largeCog = util.select.position(3, 0, 5);
Selection belt1 = util.select.fromTo(0, 2, 3, 2, 1, 5);
Selection gearbox = util.select.position(2, 1, 2);
Selection belt2 = util.select.fromTo(0, 1, 1, 2, 2, 1);
Selection vault = util.select.fromTo(3, 2, 3, 4, 1, 1);
scene.world.showSection(vault, Direction.NORTH);
scene.idle(5);
ElementLink<WorldSectionElement> chestLink = scene.world.showIndependentSection(chests, Direction.NORTH);
scene.world.moveSection(chestLink, util.vector.of(-3, -2, 0), 0);
scene.idle(10);
scene.overlay.showOutline(PonderPalette.GREEN, "chestOutline", util.select.fromTo(1, 1, 2, 0, 2, 3), 40);
scene.idle(10);
scene.overlay.showLine(PonderPalette.GREEN, util.vector.of(2, 1, 2), util.vector.of(3, 1, 1), 30);
scene.overlay.showLine(PonderPalette.GREEN, util.vector.of(2, 3, 2), util.vector.of(3, 3, 1), 30);
scene.overlay.showLine(PonderPalette.GREEN, util.vector.of(2, 3, 4), util.vector.of(3, 3, 4), 30);
scene.overlay.showOutline(PonderPalette.GREEN, "vaultOutline", vault, 40);
scene.idle(10);
BlockPos frontVault = util.grid.at(3, 2, 1);
scene.overlay.showText(60)
.text("Item Vaults can be used to store large amounts of items")
.attachKeyFrame()
.placeNearTarget()
.pointAt(util.vector.blockSurface(frontVault, Direction.NORTH));
scene.idle(70);
scene.world.hideIndependentSection(chestLink, Direction.DOWN);
scene.idle(15);
ItemStack hand = AllItems.BRASS_HAND.asStack();
scene.overlay
.showControls(new InputWindowElement(util.vector.blockSurface(frontVault, Direction.NORTH), Pointing.RIGHT)
.showing(AllIcons.I_MTD_CLOSE)
.withItem(hand), 40);
scene.idle(7);
scene.overlay.showText(60)
.text("However, contents cannot be added or taken manually")
.attachKeyFrame()
.colored(PonderPalette.RED)
.placeNearTarget()
.pointAt(util.vector.blockSurface(frontVault, Direction.WEST));
scene.idle(70);
scene.world.showSection(largeCog, Direction.UP);
scene.idle(5);
scene.world.showSection(belt1, Direction.EAST);
scene.idle(20);
scene.overlay.showText(80)
.text("Any components for item transfer can both insert...")
.attachKeyFrame()
.colored(PonderPalette.GREEN)
.placeNearTarget()
.pointAt(util.vector.topOf(2, 2, 3));
ItemStack[] junk =
{ new ItemStack(Items.APPLE), new ItemStack(Items.GOLD_INGOT, 8), new ItemStack(Items.TUFF, 32) };
for (int i = 0; i < junk.length + 2; i++) {
scene.idle(4);
if (i > 1) {
scene.world.removeItemsFromBelt(util.grid.at(2, 1, 3));
scene.world.flapFunnel(util.grid.at(2, 2, 3), false);
}
scene.idle(5);
if (i < junk.length)
scene.world.createItemOnBeltLike(util.grid.at(0, 1, 3), Direction.SOUTH, junk[i]);
scene.idle(9);
}
scene.world.showSection(gearbox, Direction.SOUTH);
scene.idle(5);
scene.world.showSection(belt2, Direction.EAST);
scene.idle(15);
scene.overlay.showText(80)
.text("...and take contents from this container")
.colored(PonderPalette.GREEN)
.placeNearTarget()
.pointAt(util.vector.topOf(2, 1, 1));
for (int i = 0; i < junk.length; i++) {
scene.world.createItemOnBeltLike(util.grid.at(2, 1, 1), Direction.EAST, junk[i]);
scene.idle(18);
}
}
public static void sizes(SceneBuilder scene, SceneBuildingUtil util) {
scene.title("item_vault_sizes", "Dimensions of an Item Vault");
scene.configureBasePlate(0, 0, 6);
scene.scaleSceneView(0.9f);
scene.showBasePlate();
scene.idle(5);
Selection single = util.select.position(2, 4, 2);
Selection single2 = util.select.fromTo(2, 4, 3, 3, 5, 3);
Selection single3 = util.select.fromTo(2, 4, 4, 4, 6, 4);
ElementLink<WorldSectionElement> s1 = scene.world.showIndependentSection(single, Direction.DOWN);
scene.world.moveSection(s1, util.vector.of(0, -3, 0), 0);
scene.idle(10);
scene.overlay.showText(60)
.text("Item Vaults can be combined to increase the total capacity")
.attachKeyFrame()
.placeNearTarget()
.pointAt(util.vector.topOf(2, 1, 2));
scene.idle(40);
ElementLink<WorldSectionElement> s2 = scene.world.showIndependentSection(single, Direction.DOWN);
scene.world.moveSection(s2, util.vector.of(1, -3, 0), 0);
scene.idle(5);
ElementLink<WorldSectionElement> s3 = scene.world.showIndependentSection(single, Direction.DOWN);
scene.world.moveSection(s3, util.vector.of(1, -2, 0), 0);
scene.idle(5);
ElementLink<WorldSectionElement> s4 = scene.world.showIndependentSection(single, Direction.DOWN);
scene.world.moveSection(s4, util.vector.of(0, -2, 0), 0);
scene.idle(10);
scene.world.moveSection(s1, util.vector.of(0, -100, 0), 0);
scene.world.moveSection(s2, util.vector.of(0, -100, 0), 0);
scene.world.moveSection(s3, util.vector.of(0, -100, 0), 0);
scene.world.moveSection(s4, util.vector.of(0, -100, 0), 0);
ElementLink<WorldSectionElement> d = scene.world.showIndependentSectionImmediately(single2);
scene.world.moveSection(d, util.vector.of(0, -3, -1), 0);
scene.effects.indicateSuccess(util.grid.at(2, 1, 2));
scene.effects.indicateSuccess(util.grid.at(2, 2, 2));
scene.effects.indicateSuccess(util.grid.at(3, 2, 2));
scene.effects.indicateSuccess(util.grid.at(3, 1, 2));
scene.world.hideIndependentSection(s1, Direction.DOWN);
scene.world.hideIndependentSection(s2, Direction.DOWN);
scene.world.hideIndependentSection(s3, Direction.DOWN);
scene.world.hideIndependentSection(s4, Direction.DOWN);
scene.idle(25);
scene.overlay.showText(60)
.text("Their base square can be up to 3 blocks wide...")
.attachKeyFrame()
.placeNearTarget()
.pointAt(util.vector.blockSurface(util.grid.at(2, 2, 2), Direction.NORTH));
scene.idle(40);
s1 = scene.world.showIndependentSection(single, Direction.DOWN);
scene.world.moveSection(s1, util.vector.of(2, -3, 0), 0);
scene.idle(3);
s2 = scene.world.showIndependentSection(single, Direction.DOWN);
scene.world.moveSection(s2, util.vector.of(2, -2, 0), 0);
scene.idle(3);
s3 = scene.world.showIndependentSection(single, Direction.DOWN);
scene.world.moveSection(s3, util.vector.of(2, -1, 0), 0);
scene.idle(3);
s4 = scene.world.showIndependentSection(single, Direction.DOWN);
scene.world.moveSection(s4, util.vector.of(1, -1, 0), 0);
scene.idle(3);
ElementLink<WorldSectionElement> s5 = scene.world.showIndependentSection(single, Direction.DOWN);
scene.world.moveSection(s5, util.vector.of(0, -1, 0), 0);
scene.idle(10);
scene.world.moveSection(d, util.vector.of(0, -100, 0), 0);
scene.world.moveSection(s1, util.vector.of(0, -100, 0), 0);
scene.world.moveSection(s2, util.vector.of(0, -100, 0), 0);
scene.world.moveSection(s3, util.vector.of(0, -100, 0), 0);
scene.world.moveSection(s4, util.vector.of(0, -100, 0), 0);
scene.world.moveSection(s5, util.vector.of(0, -100, 0), 0);
ElementLink<WorldSectionElement> t = scene.world.showIndependentSectionImmediately(single3);
scene.world.moveSection(t, util.vector.of(0, -3, -2), 0);
for (int i = 1; i < 4; i++)
for (int j = 2; j < 5; j++)
scene.effects.indicateSuccess(util.grid.at(j, i, 2));
scene.world.hideIndependentSection(d, Direction.DOWN);
scene.world.hideIndependentSection(s1, Direction.DOWN);
scene.world.hideIndependentSection(s2, Direction.DOWN);
scene.world.hideIndependentSection(s3, Direction.DOWN);
scene.world.hideIndependentSection(s4, Direction.DOWN);
scene.world.hideIndependentSection(s5, Direction.DOWN);
scene.idle(25);
scene.world.hideIndependentSection(t, Direction.DOWN);
scene.idle(15);
Selection full1 = util.select.fromTo(2, 1, 0, 4, 1, 0);
Selection full2 = util.select.fromTo(0, 1, 1, 3, 2, 2);
Selection full3 = util.select.fromTo(1, 1, 5, 5, 3, 3);
scene.world.showSection(full3, Direction.WEST);
scene.idle(5);
scene.world.showSection(full2, Direction.EAST);
scene.idle(5);
scene.world.showSection(full1, Direction.WEST);
scene.idle(10);
Vec3 blockSurface = util.vector.blockSurface(util.grid.at(1, 3, 3), Direction.NORTH);
scene.overlay.showText(60)
.text("...and grow in length up to 3x their diameter")
.attachKeyFrame()
.placeNearTarget()
.pointAt(blockSurface);
scene.idle(40);
}
}

View file

@ -58,8 +58,7 @@ public class PonderIndex {
.addStoryBoard("gearbox", KineticsScenes::gearbox, PonderTag.KINETIC_RELAYS);
HELPER.addStoryBoard(AllBlocks.CLUTCH, "clutch", KineticsScenes::clutch, PonderTag.KINETIC_RELAYS);
HELPER.addStoryBoard(AllBlocks.GEARSHIFT, "gearshift", KineticsScenes::gearshift,
PonderTag.KINETIC_RELAYS);
HELPER.addStoryBoard(AllBlocks.GEARSHIFT, "gearshift", KineticsScenes::gearshift, PonderTag.KINETIC_RELAYS);
HELPER.forComponents(AllBlocks.SEQUENCED_GEARSHIFT)
.addStoryBoard("sequenced_gearshift", KineticsScenes::sequencedGearshift);
@ -70,24 +69,23 @@ public class PonderIndex {
.addStoryBoard("fan/source", FanScenes::source, PonderTag.KINETIC_SOURCES);
HELPER.addStoryBoard(AllBlocks.CREATIVE_MOTOR, "creative_motor", KineticsScenes::creativeMotor,
PonderTag.KINETIC_SOURCES);
PonderTag.KINETIC_SOURCES);
HELPER.addStoryBoard(AllBlocks.WATER_WHEEL, "water_wheel", KineticsScenes::waterWheel,
PonderTag.KINETIC_SOURCES);
HELPER.addStoryBoard(AllBlocks.HAND_CRANK, "hand_crank", KineticsScenes::handCrank,
PonderTag.KINETIC_SOURCES);
PonderTag.KINETIC_SOURCES);
HELPER.addStoryBoard(AllBlocks.HAND_CRANK, "hand_crank", KineticsScenes::handCrank, PonderTag.KINETIC_SOURCES);
HELPER.addStoryBoard(AllBlocks.COPPER_VALVE_HANDLE, "valve_handle", KineticsScenes::valveHandle,
PonderTag.KINETIC_SOURCES);
PonderTag.KINETIC_SOURCES);
HELPER.forComponents(AllBlocks.DYED_VALVE_HANDLES.toArray())
.addStoryBoard("valve_handle", KineticsScenes::valveHandle);
.addStoryBoard("valve_handle", KineticsScenes::valveHandle);
HELPER.addStoryBoard(AllBlocks.ENCASED_CHAIN_DRIVE, "chain_drive/relay",
ChainDriveScenes::chainDriveAsRelay, PonderTag.KINETIC_RELAYS);
HELPER.addStoryBoard(AllBlocks.ENCASED_CHAIN_DRIVE, "chain_drive/relay", ChainDriveScenes::chainDriveAsRelay,
PonderTag.KINETIC_RELAYS);
HELPER.forComponents(AllBlocks.ENCASED_CHAIN_DRIVE, AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT)
.addStoryBoard("chain_drive/gearshift", ChainDriveScenes::adjustableChainGearshift);
.addStoryBoard("chain_drive/gearshift", ChainDriveScenes::adjustableChainGearshift);
HELPER.forComponents(AllBlocks.FURNACE_ENGINE)
.addStoryBoard("furnace_engine", KineticsScenes::furnaceEngine);
.addStoryBoard("furnace_engine", KineticsScenes::furnaceEngine);
HELPER.forComponents(AllBlocks.FLYWHEEL)
.addStoryBoard("furnace_engine", KineticsScenes::flywheel);
HELPER.forComponents(AllBlocks.ROTATION_SPEED_CONTROLLER)
@ -108,8 +106,7 @@ public class PonderIndex {
.addStoryBoard("basin", ProcessingScenes::basin)
.addStoryBoard("mechanical_mixer/mixing", ProcessingScenes::mixing)
.addStoryBoard("mechanical_press/compacting", ProcessingScenes::compacting);
HELPER.addStoryBoard(AllItems.EMPTY_BLAZE_BURNER, "empty_blaze_burner",
ProcessingScenes::emptyBlazeBurner);
HELPER.addStoryBoard(AllItems.EMPTY_BLAZE_BURNER, "empty_blaze_burner", ProcessingScenes::emptyBlazeBurner);
HELPER.addStoryBoard(AllBlocks.BLAZE_BURNER, "blaze_burner", ProcessingScenes::blazeBurner);
HELPER.addStoryBoard(AllBlocks.DEPOT, "depot", BeltScenes::depot);
HELPER.forComponents(AllBlocks.WEIGHTED_EJECTOR)
@ -124,6 +121,11 @@ public class PonderIndex {
HELPER.forComponents(AllBlocks.MECHANICAL_CRAFTER, AllItems.CRAFTER_SLOT_COVER)
.addStoryBoard("mechanical_crafter/covers", CrafterScenes::covers);
// Vaults
HELPER.forComponents(AllBlocks.ITEM_VAULT)
.addStoryBoard("item_vault/storage", ItemVaultScenes::storage, PonderTag.LOGISTICS)
.addStoryBoard("item_vault/sizes", ItemVaultScenes::sizes);
// Chutes
HELPER.forComponents(AllBlocks.CHUTE)
.addStoryBoard("chute/downward", ChuteScenes::downward, PonderTag.LOGISTICS)
@ -265,7 +267,8 @@ public class PonderIndex {
.addStoryBoard("fluid_tank/storage", FluidTankScenes::storage, PonderTag.FLUIDS)
.addStoryBoard("fluid_tank/sizes", FluidTankScenes::sizes);
HELPER.forComponents(AllBlocks.CREATIVE_FLUID_TANK)
.addStoryBoard("fluid_tank/storage_creative", FluidTankScenes::creative, PonderTag.FLUIDS, PonderTag.CREATIVE)
.addStoryBoard("fluid_tank/storage_creative", FluidTankScenes::creative, PonderTag.FLUIDS,
PonderTag.CREATIVE)
.addStoryBoard("fluid_tank/sizes_creative", FluidTankScenes::sizes);
HELPER.forComponents(AllBlocks.HOSE_PULLEY)
.addStoryBoard("hose_pulley/intro", HosePulleyScenes::intro, PonderTag.FLUIDS, PonderTag.KINETIC_APPLIANCES)
@ -300,7 +303,7 @@ public class PonderIndex {
if (REGISTER_DEBUG_SCENES)
DebugScenes.registerAll();
}
public static boolean editingModeActive() {
return AllConfigs.CLIENT.editingMode.get();
}
@ -388,6 +391,7 @@ public class PonderIndex {
.add(AllItems.ATTRIBUTE_FILTER)
.add(AllBlocks.CHUTE)
.add(AllBlocks.SMART_CHUTE)
.add(AllBlocks.ITEM_VAULT)
.add(AllBlocks.DEPOT)
.add(AllBlocks.WEIGHTED_EJECTOR)
.add(AllBlocks.MECHANICAL_ARM)

View file

@ -219,6 +219,7 @@ public class FluidTankScenes {
public static void sizes(SceneBuilder scene, SceneBuildingUtil util) {
scene.title("fluid_tank_sizes", "Dimensions of a Fluid tank");
scene.configureBasePlate(0, 0, 6);
scene.scaleSceneView(0.9f);
scene.showBasePlate();
scene.idle(5);

View file

@ -16,6 +16,7 @@ import com.simibubi.create.foundation.gui.ScreenOpener;
import com.simibubi.create.foundation.gui.Theme;
import com.simibubi.create.foundation.gui.UIRenderHelper;
import com.simibubi.create.foundation.ponder.PonderLocalization;
import com.simibubi.create.foundation.ponder.PonderTooltipHandler;
import com.simibubi.create.foundation.utility.Color;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
@ -141,7 +142,9 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen {
UIRenderHelper.framebuffer.clear(Minecraft.ON_OSX);
ms.translate(0, 0, -1000);
UIRenderHelper.framebuffer.bindWrite(true);
PonderTooltipHandler.enable = false;
lastScreen.render(ms, mouseX, mouseY, partialTicks);
PonderTooltipHandler.enable = true;
ms.popPose();
ms.pushPose();

View file

@ -0,0 +1,12 @@
package com.simibubi.create.foundation.tileEntity;
import net.minecraft.core.BlockPos;
public interface IMultiTileContainer {
public BlockPos getController();
public boolean isController();
public void setController(BlockPos pos);
public BlockPos getLastKnownPos();
}

View file

@ -144,15 +144,6 @@
"advancement.create.blaze_cake": "Sugar Rush",
"advancement.create.blaze_cake.desc": "Bake your blaze burner a special cake.",
"advancement.create.chromatic_compound": "Mysterious Minerals",
"advancement.create.chromatic_compound.desc": "Create a Bar of Chromatic Compound.",
"advancement.create.shadow_steel": "Void Returner",
"advancement.create.shadow_steel.desc": "Create Shadow Steel, a metal bar of nothingness.",
"advancement.create.refined_radiance": "Bright and Inspiring",
"advancement.create.refined_radiance.desc": "Create Refined Radiance, a powerful chromatic substance.",
"advancement.create.chromatic_age": "The Chromatic Age",
"advancement.create.chromatic_age.desc": "Create casing blocks of the light and dark.",
"advancement.create.wand_of_symmetry": "Radiant Mirrors",
"advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.",
"advancement.create.extendo_grip": "Boioioing!",