Safe networking and more tag datagen

- Remove NbtPacket and add safe packets for configuring symmetry wand
and worldshaper separately
- Expand internal functionality of AllTags and use optional tags in most
cases
- Datagen tags forge:stone, forge:wg_stone, and forge:buckets/honey
- Fix attribute filter screen being shifted by one pixel
- Add translations for "fluid_container" and "renamed" item attributes
This commit is contained in:
PepperBell 2021-10-07 00:05:35 -07:00
parent aee058e14e
commit 1abc3a8bf9
43 changed files with 928 additions and 732 deletions

View file

@ -426,19 +426,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
fb760b12b4bc8114744d3acc6a597b2fad88d988 assets/create/lang/en_ud.json
fcd58b47e3fbe4039ea684dadd08d36bd0beaa7d assets/create/lang/en_us.json
2047ce757fe7b7d279b72c5d4d8d6f111e478b2f assets/create/lang/unfinished/de_de.json
3cb5a941527ad3981a094cb2599a28aa654c15b3 assets/create/lang/unfinished/es_es.json
008a67a90fc7d6d59d98c3ac4f4cd45cb47fbcc2 assets/create/lang/unfinished/fr_fr.json
80091dc7ed4ed81a18bce6e9fa0b5fc870a70c89 assets/create/lang/unfinished/it_it.json
a12b0fabb18a0bc7e50ad4e6760aa0a3f222edaf assets/create/lang/unfinished/ja_jp.json
e49e3d4cfcd43194e3904c94a167bc98179b40ff assets/create/lang/unfinished/ko_kr.json
47fa6e25a19d0f8c86178954da4b50aaec247ef4 assets/create/lang/unfinished/nl_nl.json
64581657991641f49c5888e379157939cb5bdc3c assets/create/lang/unfinished/pl_pl.json
d3f22a7ee26461f1369f100001098b9f165b7cb5 assets/create/lang/unfinished/pt_br.json
c2b821bd4c0b09ba0f255c40bcd379b9ad864f10 assets/create/lang/unfinished/ru_ru.json
c43f76c83bbd9c7ac9cd8ac7f82fa1b98347771b assets/create/lang/unfinished/zh_cn.json
e797c8d5e89b9ecc6bf82858a1c905f8b905da16 assets/create/lang/unfinished/zh_tw.json
c34c047c7d8f62efe3f9d92cdbd0b0c385ac77b8 assets/create/lang/en_us.json
26247b4e7fed5a2ec981bf5b1a42e6b338b9471c assets/create/lang/unfinished/de_de.json
57e52ca3bc790adc4e9137c3af355fe8c94cf597 assets/create/lang/unfinished/es_es.json
327f1b4f91eb83cad038c80f6dbedaba27bd9135 assets/create/lang/unfinished/fr_fr.json
ffd5ddcc1be89e5bb1ee2314791bd537a5940ef0 assets/create/lang/unfinished/it_it.json
9a7add1a53719d02edf1a2287047e88c336ece9b assets/create/lang/unfinished/ja_jp.json
a0791d3c782354a6cd8efce2e89fe0cc0fa9ffba assets/create/lang/unfinished/ko_kr.json
2d541c648e723b0749cc54d987ed6606343ce90d assets/create/lang/unfinished/nl_nl.json
d9a9dca70e96099fb3fdb2a68b9e75a63b7adb7c assets/create/lang/unfinished/pl_pl.json
1e1e951a23dbc3fab963b84b25a35b2dd1f3f1eb assets/create/lang/unfinished/pt_br.json
3ed90c03bd5e2c7f38e1939ab53a935901378431 assets/create/lang/unfinished/ru_ru.json
111ded42981e258ddc6462404eda1338c67c3aa4 assets/create/lang/unfinished/zh_cn.json
75b898e606bc74d7801b300b7e4c25a2c351be27 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
@ -1699,7 +1699,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json
0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json
5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json
@ -3763,14 +3763,17 @@ bce28787b0271382842823d04a977912a88b01c2 data/create/tags/items/sandpaper.json
4b700ee8aa748c2ec70c29ef1589844879c0deae data/forge/tags/blocks/ores.json
4a0b13a9835106de9a1dd0a71a02372abb48e7b6 data/forge/tags/blocks/ores/copper.json
d5ea262a0f5fb210612d22521818e26cf08e591a data/forge/tags/blocks/ores/zinc.json
55196ee770ad20602211e26864dd62a58b2e985c data/forge/tags/blocks/stone.json
508730d3822c54d355329bf6a33d58071653afad data/forge/tags/blocks/storage_blocks.json
ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/blocks/storage_blocks/brass.json
f6c8f34ceb475546dba5cc6ff288863ea795d20b data/forge/tags/blocks/storage_blocks/copper.json
7f71a774800111e50b42de0e6159ed2d2a807d32 data/forge/tags/blocks/storage_blocks/zinc.json
2072c51afc5bbc6c9d64fd086803193d8a3c40de data/forge/tags/blocks/wg_stone.json
6b73c57912934d09233ad2966110968a6109f2c9 data/forge/tags/fluids/chocolate.json
391c9b2be5740aea943a8a5fe27eb327e2d973b0 data/forge/tags/fluids/honey.json
d6a4e4fe1204b718010543a28a9b9ec4e0977bd7 data/forge/tags/fluids/tea.json
d9ffc62a496946fc4848934e7c0a6e917337f8be data/forge/tags/items/beacon_payment.json
5af3164b14c92d2d6e235b5d4eebd93cbee37c0a data/forge/tags/items/buckets/honey.json
05ca51cdc60a5e109b5a0e3b782de13d34ebcb24 data/forge/tags/items/cobblestone.json
16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/items/glass/colorless.json
81d3eb40b048160fcc2d6bb7ff12b49276297efd data/forge/tags/items/glass_panes.json
@ -3790,6 +3793,7 @@ d5ea262a0f5fb210612d22521818e26cf08e591a data/forge/tags/items/ores/zinc.json
c3dab5fe379bc1b7b10d4a0ba7009eee1b75a27c data/forge/tags/items/plates/copper.json
fb9bfb4c84ed9cf2da8c4b2fbc4cd4d9f37d3016 data/forge/tags/items/plates/gold.json
04d947ed7a5066f3cfe75a8dc564fe2dca8a9c93 data/forge/tags/items/plates/iron.json
55196ee770ad20602211e26864dd62a58b2e985c data/forge/tags/items/stone.json
508730d3822c54d355329bf6a33d58071653afad data/forge/tags/items/storage_blocks.json
ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/items/storage_blocks/brass.json
f6c8f34ceb475546dba5cc6ff288863ea795d20b data/forge/tags/items/storage_blocks/copper.json

View file

@ -1037,18 +1037,14 @@
"create.item_attributes.placeable.inverted": "is not placeable",
"create.item_attributes.consumable": "can be eaten",
"create.item_attributes.consumable.inverted": "cannot be eaten",
"create.item_attributes.smeltable": "can be Smelted",
"create.item_attributes.smeltable.inverted": "cannot be Smelted",
"create.item_attributes.washable": "can be Washed",
"create.item_attributes.washable.inverted": "cannot be Washed",
"create.item_attributes.smokable": "can be Smoked",
"create.item_attributes.smokable.inverted": "cannot be Smoked",
"create.item_attributes.crushable": "can be Crushed",
"create.item_attributes.crushable.inverted": "cannot be Crushed",
"create.item_attributes.blastable": "is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "is not smeltable in Blast Furnace",
"create.item_attributes.fluid_container": "can store fluids",
"create.item_attributes.fluid_container.inverted": "cannot store fluids",
"create.item_attributes.enchanted": "is enchanted",
"create.item_attributes.enchanted.inverted": "is unenchanted",
"create.item_attributes.max_enchanted": "is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "is not enchanted at max level",
"create.item_attributes.renamed": "has a custom name",
"create.item_attributes.renamed.inverted": "does not have a custom name",
"create.item_attributes.damaged": "is damaged",
"create.item_attributes.damaged.inverted": "is not damaged",
"create.item_attributes.badly_damaged": "is heavily damaged",
@ -1059,23 +1055,31 @@
"create.item_attributes.equipable.inverted": "cannot be equipped",
"create.item_attributes.furnace_fuel": "is furnace fuel",
"create.item_attributes.furnace_fuel.inverted": "is not furnace fuel",
"create.item_attributes.washable": "can be Washed",
"create.item_attributes.washable.inverted": "cannot be Washed",
"create.item_attributes.crushable": "can be Crushed",
"create.item_attributes.crushable.inverted": "cannot be Crushed",
"create.item_attributes.smeltable": "can be Smelted",
"create.item_attributes.smeltable.inverted": "cannot be Smelted",
"create.item_attributes.smokable": "can be Smoked",
"create.item_attributes.smokable.inverted": "cannot be Smoked",
"create.item_attributes.blastable": "is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "is not smeltable in Blast Furnace",
"create.item_attributes.shulker_level": "is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "is shulker not %1$s",
"create.item_attributes.shulker_level.full": "full",
"create.item_attributes.shulker_level.empty": "empty",
"create.item_attributes.shulker_level.partial": "partially filled",
"create.item_attributes.in_tag": "is tagged %1$s",
"create.item_attributes.in_tag.inverted": "is not tagged %1$s",
"create.item_attributes.in_item_group": "is in group '%1$s'",
"create.item_attributes.in_item_group.inverted": "is not in group '%1$s'",
"create.item_attributes.added_by": "was added by %1$s",
"create.item_attributes.added_by.inverted": "was not added by %1$s",
"create.item_attributes.shulker_level": "is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "is shulker not %1$s",
"create.item_attributes.shulker_level.full": "full",
"create.item_attributes.shulker_level.empty": "empty",
"create.item_attributes.shulker_level.partial": "partially filled",
"create.item_attributes.has_enchant": "is enchanted with %1$s",
"create.item_attributes.has_enchant.inverted": "is not enchanted with %1$s",
"create.item_attributes.color": "is dyed %1$s",
"create.item_attributes.color.inverted": "is not dyed %1$s",
"create.item_attributes.max_enchanted": "is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "is not enchanted at max level",
"create.item_attributes.has_fluid": "contains %1$s",
"create.item_attributes.has_fluid.inverted": "does not contain %1$s",
"create.item_attributes.has_name": "has the custom name %1$s",
@ -1090,14 +1094,14 @@
"create.item_attributes.book_copy_second.inverted": "is not a second-generation copy",
"create.item_attributes.book_copy_tattered": "is a tattered mess",
"create.item_attributes.book_copy_tattered.inverted": "is not a tattered mess",
"create.item_attributes.astralsorcery_crystal": "has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_constellation": "is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "is not attuned to %1$s",
"create.item_attributes.astralsorcery_perk_gem": "has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "does not have perk attribute %1$s",
"create.item_attributes.astralsorcery_amulet": "improves %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "does not improve %1$s",
"create.item_attributes.astralsorcery_constellation": "is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "is not attuned to %1$s",
"create.item_attributes.astralsorcery_crystal": "has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem": "has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "does not have perk attribute %1$s",
"create.gui.attribute_filter.no_selected_attributes": "No attributes selected",
"create.gui.attribute_filter.selected_attributes": "Selected attributes:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1135",
"_": "Missing Localizations: 1139",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable",
"create.item_attributes.consumable": "UNLOCALIZED: can be eaten",
"create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten",
"create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted",
"create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted",
"create.item_attributes.washable": "UNLOCALIZED: can be Washed",
"create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed",
"create.item_attributes.smokable": "UNLOCALIZED: can be Smoked",
"create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked",
"create.item_attributes.crushable": "UNLOCALIZED: can be Crushed",
"create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed",
"create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "UNLOCALIZED: is enchanted",
"create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted",
"create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "UNLOCALIZED: is damaged",
"create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged",
"create.item_attributes.badly_damaged": "UNLOCALIZED: is heavily damaged",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped",
"create.item_attributes.furnace_fuel": "UNLOCALIZED: is furnace fuel",
"create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel",
"create.item_attributes.washable": "UNLOCALIZED: can be Washed",
"create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed",
"create.item_attributes.crushable": "UNLOCALIZED: can be Crushed",
"create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed",
"create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted",
"create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted",
"create.item_attributes.smokable": "UNLOCALIZED: can be Smoked",
"create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked",
"create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.in_tag": "UNLOCALIZED: is tagged %1$s",
"create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s",
"create.item_attributes.in_item_group": "UNLOCALIZED: is in group '%1$s'",
"create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'",
"create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s",
"create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s",
"create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s",
"create.item_attributes.color": "UNLOCALIZED: is dyed %1$s",
"create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s",
"create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level",
"create.item_attributes.has_fluid": "UNLOCALIZED: contains %1$s",
"create.item_attributes.has_fluid.inverted": "UNLOCALIZED: does not contain %1$s",
"create.item_attributes.has_name": "UNLOCALIZED: has the custom name %1$s",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "UNLOCALIZED: is not a second-generation copy",
"create.item_attributes.book_copy_tattered": "UNLOCALIZED: is a tattered mess",
"create.item_attributes.book_copy_tattered.inverted": "UNLOCALIZED: is not a tattered mess",
"create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s",
"create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s",
"create.item_attributes.astralsorcery_amulet": "UNLOCALIZED: improves %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "UNLOCALIZED: does not improve %1$s",
"create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s",
"create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s",
"create.gui.attribute_filter.no_selected_attributes": "Keine Attribute ausgewählt",
"create.gui.attribute_filter.selected_attributes": "Ausgewählte Attribute:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1",
"_": "Missing Localizations: 5",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "no se puede colocar",
"create.item_attributes.consumable": "se puede comer",
"create.item_attributes.consumable.inverted": "no se puede comer",
"create.item_attributes.smeltable": "se puede fundir",
"create.item_attributes.smeltable.inverted": "no se puede fundir",
"create.item_attributes.washable": "se puede lavar",
"create.item_attributes.washable.inverted": "no se puede lavar",
"create.item_attributes.smokable": "puede ser ahumado",
"create.item_attributes.smokable.inverted": "no puede ser ahumado",
"create.item_attributes.crushable": "puede ser molido",
"create.item_attributes.crushable.inverted": "no puede ser molido",
"create.item_attributes.blastable": "es fundible en el alto horno",
"create.item_attributes.blastable.inverted": "no es fundible en el alto horno",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "está encantado",
"create.item_attributes.enchanted.inverted": "no está encantado",
"create.item_attributes.max_enchanted": "está encantado en el nivel máximo",
"create.item_attributes.max_enchanted.inverted": "no está encantado en el nivel máximo",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "está dañado",
"create.item_attributes.damaged.inverted": "no está dañado",
"create.item_attributes.badly_damaged": "está muy dañado",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "no se puede equipar",
"create.item_attributes.furnace_fuel": "es combustible para hornos",
"create.item_attributes.furnace_fuel.inverted": "no es combustible para hornos",
"create.item_attributes.washable": "se puede lavar",
"create.item_attributes.washable.inverted": "no se puede lavar",
"create.item_attributes.crushable": "puede ser molido",
"create.item_attributes.crushable.inverted": "no puede ser molido",
"create.item_attributes.smeltable": "se puede fundir",
"create.item_attributes.smeltable.inverted": "no se puede fundir",
"create.item_attributes.smokable": "puede ser ahumado",
"create.item_attributes.smokable.inverted": "no puede ser ahumado",
"create.item_attributes.blastable": "es fundible en el alto horno",
"create.item_attributes.blastable.inverted": "no es fundible en el alto horno",
"create.item_attributes.shulker_level": "es shulker %1$s",
"create.item_attributes.shulker_level.inverted": "no es shulker %1$s",
"create.item_attributes.shulker_level.full": "lleno",
"create.item_attributes.shulker_level.empty": "vacío",
"create.item_attributes.shulker_level.partial": "parcialmente lleno",
"create.item_attributes.in_tag": "está etiquetado %1$s",
"create.item_attributes.in_tag.inverted": "no está etiquetado %1$s",
"create.item_attributes.in_item_group": "está en el grupo '%1$s'",
"create.item_attributes.in_item_group.inverted": "no está en el grupo '%1$s'",
"create.item_attributes.added_by": "fue añadido por %1$s",
"create.item_attributes.added_by.inverted": "no fue añadida por %1$s",
"create.item_attributes.shulker_level": "es shulker %1$s",
"create.item_attributes.shulker_level.inverted": "no es shulker %1$s",
"create.item_attributes.shulker_level.full": "lleno",
"create.item_attributes.shulker_level.empty": "vacío",
"create.item_attributes.shulker_level.partial": "parcialmente lleno",
"create.item_attributes.has_enchant": "está encantado con %1$s",
"create.item_attributes.has_enchant.inverted": "no está encantado con %1$s",
"create.item_attributes.color": "Está teñido %1$s",
"create.item_attributes.color.inverted": "No está teñido %1$s",
"create.item_attributes.max_enchanted": "está encantado en el nivel máximo",
"create.item_attributes.max_enchanted.inverted": "no está encantado en el nivel máximo",
"create.item_attributes.has_fluid": "contiene %1$s",
"create.item_attributes.has_fluid.inverted": "no contiene %1$s",
"create.item_attributes.has_name": "tiene el nombre personalizado %1$s",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "no es una copia de segunda generación",
"create.item_attributes.book_copy_tattered": "es un desordenado desastre",
"create.item_attributes.book_copy_tattered.inverted": "no es un desordenado desastre",
"create.item_attributes.astralsorcery_crystal": "tiene el atributo de cristal %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "no tiene atributo de cristal %1$s",
"create.item_attributes.astralsorcery_constellation": "está en sintonía con %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "no está en sintonía con %1$s",
"create.item_attributes.astralsorcery_perk_gem": "tiene el atributo ventaja %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "no tiene el atributo ventaja %1$s",
"create.item_attributes.astralsorcery_amulet": "mejora %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "no mejora %1$s",
"create.item_attributes.astralsorcery_constellation": "está en sintonía con %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "no está en sintonía con %1$s",
"create.item_attributes.astralsorcery_crystal": "tiene el atributo de cristal %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "no tiene atributo de cristal %1$s",
"create.item_attributes.astralsorcery_perk_gem": "tiene el atributo ventaja %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "no tiene el atributo ventaja %1$s",
"create.gui.attribute_filter.no_selected_attributes": "No hay atributos seleccionados",
"create.gui.attribute_filter.selected_attributes": "Atributos seleccionados:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1387",
"_": "Missing Localizations: 1391",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "n'est pas plaçable",
"create.item_attributes.consumable": "peut être mangé",
"create.item_attributes.consumable.inverted": "ne peut pas être mangé",
"create.item_attributes.smeltable": "peut être fondu",
"create.item_attributes.smeltable.inverted": "ne peut pas être fondu",
"create.item_attributes.washable": "peut être lavé",
"create.item_attributes.washable.inverted": "ne peut pas être lavé",
"create.item_attributes.smokable": "peut être fumé",
"create.item_attributes.smokable.inverted": "ne peut pas être fumé",
"create.item_attributes.crushable": "peut être concassé",
"create.item_attributes.crushable.inverted": "ne peut pas être concassé",
"create.item_attributes.blastable": "est fondable dans un Haut fourneau",
"create.item_attributes.blastable.inverted": "n'est pas fondable dans un Haut fourneau",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "est enchanté",
"create.item_attributes.enchanted.inverted": "n'est pas enchanté",
"create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "est endommagé",
"create.item_attributes.damaged.inverted": "n'est pas endomagé",
"create.item_attributes.badly_damaged": "est fortement damaged",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "ne peut pas être équipé",
"create.item_attributes.furnace_fuel": "est du combustible",
"create.item_attributes.furnace_fuel.inverted": "n'est pas un combustible",
"create.item_attributes.washable": "peut être lavé",
"create.item_attributes.washable.inverted": "ne peut pas être lavé",
"create.item_attributes.crushable": "peut être concassé",
"create.item_attributes.crushable.inverted": "ne peut pas être concassé",
"create.item_attributes.smeltable": "peut être fondu",
"create.item_attributes.smeltable.inverted": "ne peut pas être fondu",
"create.item_attributes.smokable": "peut être fumé",
"create.item_attributes.smokable.inverted": "ne peut pas être fumé",
"create.item_attributes.blastable": "est fondable dans un Haut fourneau",
"create.item_attributes.blastable.inverted": "n'est pas fondable dans un Haut fourneau",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.in_tag": "est étiqueté %1$s",
"create.item_attributes.in_tag.inverted": "n'est pas étiqueté",
"create.item_attributes.in_item_group": "appartient à %1$s",
"create.item_attributes.in_item_group.inverted": "n'appartient pas à %1$s'",
"create.item_attributes.added_by": "a été ajouté par %1$s",
"create.item_attributes.added_by.inverted": "n'a pas été ajouté par %1$s",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.has_enchant": "est enchanté %1$s",
"create.item_attributes.has_enchant.inverted": "n'est pas enchenté %1$s",
"create.item_attributes.color": "UNLOCALIZED: is dyed %1$s",
"create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s",
"create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level",
"create.item_attributes.has_fluid": "contient %1$s",
"create.item_attributes.has_fluid.inverted": "ne contient pas %1$s",
"create.item_attributes.has_name": "est renommé %1$s",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "UNLOCALIZED: is not a second-generation copy",
"create.item_attributes.book_copy_tattered": "UNLOCALIZED: is a tattered mess",
"create.item_attributes.book_copy_tattered.inverted": "UNLOCALIZED: is not a tattered mess",
"create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s",
"create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s",
"create.item_attributes.astralsorcery_amulet": "UNLOCALIZED: improves %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "UNLOCALIZED: does not improve %1$s",
"create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s",
"create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s",
"create.gui.attribute_filter.no_selected_attributes": "Aucun attribut sélectionné",
"create.gui.attribute_filter.selected_attributes": "Attributs sélectionnés:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 915",
"_": "Missing Localizations: 919",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "non è posizionabile",
"create.item_attributes.consumable": "è commestibile",
"create.item_attributes.consumable.inverted": "non è commestibile",
"create.item_attributes.smeltable": "può essere fuso",
"create.item_attributes.smeltable.inverted": "non può essere fuso",
"create.item_attributes.washable": "può essere lavato",
"create.item_attributes.washable.inverted": "non può essere lavato",
"create.item_attributes.smokable": "può essere affumicato",
"create.item_attributes.smokable.inverted": "non può essere affumicato",
"create.item_attributes.crushable": "può essere frantumato",
"create.item_attributes.crushable.inverted": "non può essere frantumato",
"create.item_attributes.blastable": "è fondibile in un forno fusorio",
"create.item_attributes.blastable.inverted": "non è fondibile in un forno fusorio",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "è incantato",
"create.item_attributes.enchanted.inverted": "non è incantato",
"create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "è danneggiato",
"create.item_attributes.damaged.inverted": "non è danneggiato",
"create.item_attributes.badly_damaged": "è gravemente danneggiato",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "non può essere equipaggiato",
"create.item_attributes.furnace_fuel": "è un combustibile per fornace",
"create.item_attributes.furnace_fuel.inverted": "non è un combustibile per fornace",
"create.item_attributes.washable": "può essere lavato",
"create.item_attributes.washable.inverted": "non può essere lavato",
"create.item_attributes.crushable": "può essere frantumato",
"create.item_attributes.crushable.inverted": "non può essere frantumato",
"create.item_attributes.smeltable": "può essere fuso",
"create.item_attributes.smeltable.inverted": "non può essere fuso",
"create.item_attributes.smokable": "può essere affumicato",
"create.item_attributes.smokable.inverted": "non può essere affumicato",
"create.item_attributes.blastable": "è fondibile in un forno fusorio",
"create.item_attributes.blastable.inverted": "non è fondibile in un forno fusorio",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.in_tag": "è etichettato %1$s",
"create.item_attributes.in_tag.inverted": "non è etichettato %1$s",
"create.item_attributes.in_item_group": "appartiene a %1$s",
"create.item_attributes.in_item_group.inverted": "non appartiene a '%1$s'",
"create.item_attributes.added_by": "è stato aggiunto da %1$s",
"create.item_attributes.added_by.inverted": "non è stato aggiunto da %1$s",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.has_enchant": "è stato incantato con %1$s",
"create.item_attributes.has_enchant.inverted": "non è stato incantato con %1$s",
"create.item_attributes.color": "UNLOCALIZED: is dyed %1$s",
"create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s",
"create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level",
"create.item_attributes.has_fluid": "contiene %1$s",
"create.item_attributes.has_fluid.inverted": "non contiene %1$s",
"create.item_attributes.has_name": "è stato rinominato in %1$s",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "non è una copia di seconda generazione",
"create.item_attributes.book_copy_tattered": "è in condizioni precarie",
"create.item_attributes.book_copy_tattered.inverted": "non è in condizioni precarie",
"create.item_attributes.astralsorcery_crystal": "ha l'attributo del cristallo %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "non ha l'attributo del cristallo %1$s",
"create.item_attributes.astralsorcery_constellation": "è in sintonia con %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "non è in sintonia con %1$s",
"create.item_attributes.astralsorcery_perk_gem": "ha l'attributo benefico %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "non ha l'attributo benefico %1$s",
"create.item_attributes.astralsorcery_amulet": "migliora %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "non migliora %1$s",
"create.item_attributes.astralsorcery_constellation": "è in sintonia con %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "non è in sintonia con %1$s",
"create.item_attributes.astralsorcery_crystal": "ha l'attributo del cristallo %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "non ha l'attributo del cristallo %1$s",
"create.item_attributes.astralsorcery_perk_gem": "ha l'attributo benefico %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "non ha l'attributo benefico %1$s",
"create.gui.attribute_filter.no_selected_attributes": "Nessun attributo selezionato",
"create.gui.attribute_filter.selected_attributes": "Attributi selezionati:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 10",
"_": "Missing Localizations: 14",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "設置不可能か",
"create.item_attributes.consumable": "食べられるか",
"create.item_attributes.consumable.inverted": "食べられないか",
"create.item_attributes.smeltable": "精錬可能か",
"create.item_attributes.smeltable.inverted": "精錬不可能か",
"create.item_attributes.washable": "洗浄可能か",
"create.item_attributes.washable.inverted": "洗浄不可能か",
"create.item_attributes.smokable": "燻製器で調理可能か",
"create.item_attributes.smokable.inverted": "燻製器で調理不可能か",
"create.item_attributes.crushable": "粉砕可能か",
"create.item_attributes.crushable.inverted": "粉砕不可能か",
"create.item_attributes.blastable": "溶鉱炉で精錬可能か",
"create.item_attributes.blastable.inverted": "溶鉱炉で精錬不可能か",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "エンチャント済みか",
"create.item_attributes.enchanted.inverted": "エンチャントなしか",
"create.item_attributes.max_enchanted": "最大レベルのエンチャントがされているか",
"create.item_attributes.max_enchanted.inverted": "最大レベルのエンチャントがされていないか",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "破損してるか",
"create.item_attributes.damaged.inverted": "破損していないか",
"create.item_attributes.badly_damaged": "ひどく損傷してるか",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "装備不可能か",
"create.item_attributes.furnace_fuel": "かまどの燃料か",
"create.item_attributes.furnace_fuel.inverted": "かまどの燃料でないか",
"create.item_attributes.washable": "洗浄可能か",
"create.item_attributes.washable.inverted": "洗浄不可能か",
"create.item_attributes.crushable": "粉砕可能か",
"create.item_attributes.crushable.inverted": "粉砕不可能か",
"create.item_attributes.smeltable": "精錬可能か",
"create.item_attributes.smeltable.inverted": "精錬不可能か",
"create.item_attributes.smokable": "燻製器で調理可能か",
"create.item_attributes.smokable.inverted": "燻製器で調理不可能か",
"create.item_attributes.blastable": "溶鉱炉で精錬可能か",
"create.item_attributes.blastable.inverted": "溶鉱炉で精錬不可能か",
"create.item_attributes.shulker_level": "%1$sシュルカーか",
"create.item_attributes.shulker_level.inverted": "%1$sシュルカーでないか",
"create.item_attributes.shulker_level.full": "満杯の",
"create.item_attributes.shulker_level.empty": "空の",
"create.item_attributes.shulker_level.partial": "一部埋まっている",
"create.item_attributes.in_tag": "%1$sのタグが付けられてるか",
"create.item_attributes.in_tag.inverted": "%1$sのタグがついていないか",
"create.item_attributes.in_item_group": "%1$sに属してるか",
"create.item_attributes.in_item_group.inverted": "%1$sに属していないか",
"create.item_attributes.added_by": "%1$sによって追加されたか",
"create.item_attributes.added_by.inverted": "%1$sによって追加されていないか",
"create.item_attributes.shulker_level": "%1$sシュルカーか",
"create.item_attributes.shulker_level.inverted": "%1$sシュルカーでないか",
"create.item_attributes.shulker_level.full": "満杯の",
"create.item_attributes.shulker_level.empty": "空の",
"create.item_attributes.shulker_level.partial": "一部埋まっている",
"create.item_attributes.has_enchant": "エンチャントされているか%1$s",
"create.item_attributes.has_enchant.inverted": "エンチャントがされていないか",
"create.item_attributes.color": "%1$sで染められているか",
"create.item_attributes.color.inverted": "%1$sで染められていないか",
"create.item_attributes.max_enchanted": "最大レベルのエンチャントがされているか",
"create.item_attributes.max_enchanted.inverted": "最大レベルのエンチャントがされていないか",
"create.item_attributes.has_fluid": "%1$sを含んでいるか",
"create.item_attributes.has_fluid.inverted": "%1$sを含んでいないか",
"create.item_attributes.has_name": "%1$sの名前が付けられているか",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "コピーのコピーでないか",
"create.item_attributes.book_copy_tattered": "ボロボロか",
"create.item_attributes.book_copy_tattered.inverted": "ボロボロでないか",
"create.item_attributes.astralsorcery_crystal": "%1$s クリスタル属性を持つ",
"create.item_attributes.astralsorcery_crystal.inverted": "%1$s クリスタル属性を持たない",
"create.item_attributes.astralsorcery_constellation": "%1$s に同調している",
"create.item_attributes.astralsorcery_constellation.inverted": "%1$s に同調していない",
"create.item_attributes.astralsorcery_perk_gem": "%1$s 特典属性がある",
"create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 特典属性がない",
"create.item_attributes.astralsorcery_amulet": "%1$s 改善",
"create.item_attributes.astralsorcery_amulet.inverted": "%1$s 改善されない",
"create.item_attributes.astralsorcery_constellation": "%1$s に同調している",
"create.item_attributes.astralsorcery_constellation.inverted": "%1$s に同調していない",
"create.item_attributes.astralsorcery_crystal": "%1$s クリスタル属性を持つ",
"create.item_attributes.astralsorcery_crystal.inverted": "%1$s クリスタル属性を持たない",
"create.item_attributes.astralsorcery_perk_gem": "%1$s 特典属性がある",
"create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 特典属性がない",
"create.gui.attribute_filter.no_selected_attributes": "属性が選択されていません",
"create.gui.attribute_filter.selected_attributes": "選択された属性:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 25",
"_": "Missing Localizations: 29",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "설치할 수 없음",
"create.item_attributes.consumable": "먹을 수 있음",
"create.item_attributes.consumable.inverted": "먹을 수 없음",
"create.item_attributes.smeltable": "구워질 수 있음",
"create.item_attributes.smeltable.inverted": "구워질 수 없음",
"create.item_attributes.washable": "세척될 수 있음",
"create.item_attributes.washable.inverted": "세척될 수 없음",
"create.item_attributes.smokable": "훈연될 수 있음",
"create.item_attributes.smokable.inverted": "훈연될 수 없음",
"create.item_attributes.crushable": "분쇄될 수 있음",
"create.item_attributes.crushable.inverted": "분쇄될 수 없음",
"create.item_attributes.blastable": "용광로에 녹일 수 있음",
"create.item_attributes.blastable.inverted": "용광로에 녹일 수 없음",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "마법부여됨",
"create.item_attributes.enchanted.inverted": "마법부여되지 않음",
"create.item_attributes.max_enchanted": "마법부여가 최고 레벨임",
"create.item_attributes.max_enchanted.inverted": "마법부여가 최고 레벨이 아님",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "내구도가 닮",
"create.item_attributes.damaged.inverted": "내구도가 닳지 않음",
"create.item_attributes.badly_damaged": "심각하게 내구도가 닮",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "장착할 수 없음",
"create.item_attributes.furnace_fuel": "화로 연료로 쓸 수 있음",
"create.item_attributes.furnace_fuel.inverted": "화로 연료로 쓸 수 없음",
"create.item_attributes.washable": "세척될 수 있음",
"create.item_attributes.washable.inverted": "세척될 수 없음",
"create.item_attributes.crushable": "분쇄될 수 있음",
"create.item_attributes.crushable.inverted": "분쇄될 수 없음",
"create.item_attributes.smeltable": "구워질 수 있음",
"create.item_attributes.smeltable.inverted": "구워질 수 없음",
"create.item_attributes.smokable": "훈연될 수 있음",
"create.item_attributes.smokable.inverted": "훈연될 수 없음",
"create.item_attributes.blastable": "용광로에 녹일 수 있음",
"create.item_attributes.blastable.inverted": "용광로에 녹일 수 없음",
"create.item_attributes.shulker_level": "셜커가 %1$s있음",
"create.item_attributes.shulker_level.inverted": "셜커가 %1$s있지 않음",
"create.item_attributes.shulker_level.full": "가득 차",
"create.item_attributes.shulker_level.empty": "비어",
"create.item_attributes.shulker_level.partial": "조금 차",
"create.item_attributes.in_tag": "%1$s로 등록됨",
"create.item_attributes.in_tag.inverted": "%1$s로 등록되지 않음",
"create.item_attributes.in_item_group": "%1$s탭에 속함",
"create.item_attributes.in_item_group.inverted": "%1$s탭에 속함",
"create.item_attributes.added_by": "%1$s모드가 추가함",
"create.item_attributes.added_by.inverted": "%1$s모드가 추가하지 않음",
"create.item_attributes.shulker_level": "셜커가 %1$s있음",
"create.item_attributes.shulker_level.inverted": "셜커가 %1$s있지 않음",
"create.item_attributes.shulker_level.full": "가득 차",
"create.item_attributes.shulker_level.empty": "비어",
"create.item_attributes.shulker_level.partial": "조금 차",
"create.item_attributes.has_enchant": "%1$s 마법부여를 가지고 있음",
"create.item_attributes.has_enchant.inverted": "%1$s 마법부여를 가지고 있지 않음",
"create.item_attributes.color": "염색됨",
"create.item_attributes.color.inverted": "염색되지 않음",
"create.item_attributes.max_enchanted": "마법부여가 최고 레벨임",
"create.item_attributes.max_enchanted.inverted": "마법부여가 최고 레벨이 아님",
"create.item_attributes.has_fluid": "%1$s을(를) 담고 있음",
"create.item_attributes.has_fluid.inverted": "%1$s을(를) 담고 있지 않음",
"create.item_attributes.has_name": "%1$s이라는 이름을 갖고 있음",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "복사본의 복사본이 아님",
"create.item_attributes.book_copy_tattered": "낡고 헐었음",
"create.item_attributes.book_copy_tattered.inverted": "낡고 헐지 않음",
"create.item_attributes.astralsorcery_crystal": "%1$s 수정 속성을 가짐",
"create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않음",
"create.item_attributes.astralsorcery_constellation": "%1$s에 조율됨",
"create.item_attributes.astralsorcery_constellation.inverted": "%1$s에 조율되지 않음",
"create.item_attributes.astralsorcery_perk_gem": "%1$s 퍽 속성을 가짐",
"create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 퍽 속성을 가지고 있지 않음",
"create.item_attributes.astralsorcery_amulet": "%1$s이(가) 향상됨",
"create.item_attributes.astralsorcery_amulet.inverted": "%1$s이(가) 향상되지 않음",
"create.item_attributes.astralsorcery_constellation": "%1$s에 조율됨",
"create.item_attributes.astralsorcery_constellation.inverted": "%1$s에 조율되지 않음",
"create.item_attributes.astralsorcery_crystal": "%1$s 수정 속성을 가짐",
"create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않음",
"create.item_attributes.astralsorcery_perk_gem": "%1$s 퍽 속성을 가짐",
"create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 퍽 속성을 가지고 있지 않음",
"create.gui.attribute_filter.no_selected_attributes": "속성이 선택되지 않음",
"create.gui.attribute_filter.selected_attributes": "선택된 속성:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1767",
"_": "Missing Localizations: 1771",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable",
"create.item_attributes.consumable": "UNLOCALIZED: can be eaten",
"create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten",
"create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted",
"create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted",
"create.item_attributes.washable": "UNLOCALIZED: can be Washed",
"create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed",
"create.item_attributes.smokable": "UNLOCALIZED: can be Smoked",
"create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked",
"create.item_attributes.crushable": "UNLOCALIZED: can be Crushed",
"create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed",
"create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "UNLOCALIZED: is enchanted",
"create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted",
"create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "UNLOCALIZED: is damaged",
"create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged",
"create.item_attributes.badly_damaged": "UNLOCALIZED: is heavily damaged",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped",
"create.item_attributes.furnace_fuel": "UNLOCALIZED: is furnace fuel",
"create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel",
"create.item_attributes.washable": "UNLOCALIZED: can be Washed",
"create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed",
"create.item_attributes.crushable": "UNLOCALIZED: can be Crushed",
"create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed",
"create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted",
"create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted",
"create.item_attributes.smokable": "UNLOCALIZED: can be Smoked",
"create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked",
"create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.in_tag": "UNLOCALIZED: is tagged %1$s",
"create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s",
"create.item_attributes.in_item_group": "UNLOCALIZED: is in group '%1$s'",
"create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'",
"create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s",
"create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s",
"create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s",
"create.item_attributes.color": "UNLOCALIZED: is dyed %1$s",
"create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s",
"create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level",
"create.item_attributes.has_fluid": "UNLOCALIZED: contains %1$s",
"create.item_attributes.has_fluid.inverted": "UNLOCALIZED: does not contain %1$s",
"create.item_attributes.has_name": "UNLOCALIZED: has the custom name %1$s",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "UNLOCALIZED: is not a second-generation copy",
"create.item_attributes.book_copy_tattered": "UNLOCALIZED: is a tattered mess",
"create.item_attributes.book_copy_tattered.inverted": "UNLOCALIZED: is not a tattered mess",
"create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s",
"create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s",
"create.item_attributes.astralsorcery_amulet": "UNLOCALIZED: improves %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "UNLOCALIZED: does not improve %1$s",
"create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s",
"create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s",
"create.gui.attribute_filter.no_selected_attributes": "UNLOCALIZED: No attributes selected",
"create.gui.attribute_filter.selected_attributes": "UNLOCALIZED: Selected attributes:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 257",
"_": "Missing Localizations: 261",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "nie jest stawialny",
"create.item_attributes.consumable": "jadalny",
"create.item_attributes.consumable.inverted": "niejadalny",
"create.item_attributes.smeltable": "może zostać przepalony",
"create.item_attributes.smeltable.inverted": "nie może zostać przepalony",
"create.item_attributes.washable": "może zostać opłukany",
"create.item_attributes.washable.inverted": "nie może zostać opłukany",
"create.item_attributes.smokable": "może być wędzony",
"create.item_attributes.smokable.inverted": "nie może być wędzony",
"create.item_attributes.crushable": "może być rozkruszony",
"create.item_attributes.crushable.inverted": "nie może być rozkruszony",
"create.item_attributes.blastable": "może być stopiony w piecu hutniczym",
"create.item_attributes.blastable.inverted": "nie może być stopiony w piecu hutniczym",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "jest zaklęty",
"create.item_attributes.enchanted.inverted": "nie jest zaklęty",
"create.item_attributes.max_enchanted": "jest zaklęte na maksymalny poziom",
"create.item_attributes.max_enchanted.inverted": "nie jest zaklęte na maksymalny poziom",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "jest uszkodzony",
"create.item_attributes.damaged.inverted": "nie jest uszkodzony",
"create.item_attributes.badly_damaged": "jest silnie uszkodzony",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "nie może zostać założony",
"create.item_attributes.furnace_fuel": "jest paliwem dla pieca",
"create.item_attributes.furnace_fuel.inverted": "nie jest paliwem dla pieca",
"create.item_attributes.washable": "może zostać opłukany",
"create.item_attributes.washable.inverted": "nie może zostać opłukany",
"create.item_attributes.crushable": "może być rozkruszony",
"create.item_attributes.crushable.inverted": "nie może być rozkruszony",
"create.item_attributes.smeltable": "może zostać przepalony",
"create.item_attributes.smeltable.inverted": "nie może zostać przepalony",
"create.item_attributes.smokable": "może być wędzony",
"create.item_attributes.smokable.inverted": "nie może być wędzony",
"create.item_attributes.blastable": "może być stopiony w piecu hutniczym",
"create.item_attributes.blastable.inverted": "nie może być stopiony w piecu hutniczym",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.in_tag": "posiada znacznik %1$s",
"create.item_attributes.in_tag.inverted": "nie posiada znacznika %1$s",
"create.item_attributes.in_item_group": "jest w grupie \"%1$s\"",
"create.item_attributes.in_item_group.inverted": "nie jest w grupie \"%1$s\"",
"create.item_attributes.added_by": "dodany przez %1$s",
"create.item_attributes.added_by.inverted": "niedodany przez %1$s",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.has_enchant": "posiada zaklęcie %1$s",
"create.item_attributes.has_enchant.inverted": "nie posiada zaklęcia %1$s",
"create.item_attributes.color": "jest zafarbowane, kolor %1$s",
"create.item_attributes.color.inverted": "nie jest zafarbowane, kolor %1$s",
"create.item_attributes.max_enchanted": "jest zaklęte na maksymalny poziom",
"create.item_attributes.max_enchanted.inverted": "nie jest zaklęte na maksymalny poziom",
"create.item_attributes.has_fluid": "zawiera %1$s",
"create.item_attributes.has_fluid.inverted": "nie zawiera %1$s",
"create.item_attributes.has_name": "posiada nazwę %1$s",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "nie jest kopią kopii",
"create.item_attributes.book_copy_tattered": "jest postrzępiona",
"create.item_attributes.book_copy_tattered.inverted": "nie jest postrzępiona",
"create.item_attributes.astralsorcery_crystal": "posiada właściwości kryształu %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "nie posiada właściwości kryształu %1$s",
"create.item_attributes.astralsorcery_constellation": "jest dopasowany do %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "nie jest dopasowany do %1$s",
"create.item_attributes.astralsorcery_perk_gem": "posiada dodatkową właściwość %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "nie posiada dodatkowej właściwości %1$s",
"create.item_attributes.astralsorcery_amulet": "ulepsza %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "nie ulepsza %1$s",
"create.item_attributes.astralsorcery_constellation": "jest dopasowany do %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "nie jest dopasowany do %1$s",
"create.item_attributes.astralsorcery_crystal": "posiada właściwości kryształu %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "nie posiada właściwości kryształu %1$s",
"create.item_attributes.astralsorcery_perk_gem": "posiada dodatkową właściwość %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "nie posiada dodatkowej właściwości %1$s",
"create.gui.attribute_filter.no_selected_attributes": "Brak wybranych właściwości",
"create.gui.attribute_filter.selected_attributes": "Wybrane właściwości:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1808",
"_": "Missing Localizations: 1812",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable",
"create.item_attributes.consumable": "UNLOCALIZED: can be eaten",
"create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten",
"create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted",
"create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted",
"create.item_attributes.washable": "UNLOCALIZED: can be Washed",
"create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed",
"create.item_attributes.smokable": "UNLOCALIZED: can be Smoked",
"create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked",
"create.item_attributes.crushable": "UNLOCALIZED: can be Crushed",
"create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed",
"create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "UNLOCALIZED: is enchanted",
"create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted",
"create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "UNLOCALIZED: is damaged",
"create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged",
"create.item_attributes.badly_damaged": "UNLOCALIZED: is heavily damaged",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped",
"create.item_attributes.furnace_fuel": "UNLOCALIZED: is furnace fuel",
"create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel",
"create.item_attributes.washable": "UNLOCALIZED: can be Washed",
"create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed",
"create.item_attributes.crushable": "UNLOCALIZED: can be Crushed",
"create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed",
"create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted",
"create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted",
"create.item_attributes.smokable": "UNLOCALIZED: can be Smoked",
"create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked",
"create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.in_tag": "UNLOCALIZED: is tagged %1$s",
"create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s",
"create.item_attributes.in_item_group": "UNLOCALIZED: is in group '%1$s'",
"create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'",
"create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s",
"create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s",
"create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s",
"create.item_attributes.color": "UNLOCALIZED: is dyed %1$s",
"create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s",
"create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level",
"create.item_attributes.has_fluid": "UNLOCALIZED: contains %1$s",
"create.item_attributes.has_fluid.inverted": "UNLOCALIZED: does not contain %1$s",
"create.item_attributes.has_name": "UNLOCALIZED: has the custom name %1$s",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "UNLOCALIZED: is not a second-generation copy",
"create.item_attributes.book_copy_tattered": "UNLOCALIZED: is a tattered mess",
"create.item_attributes.book_copy_tattered.inverted": "UNLOCALIZED: is not a tattered mess",
"create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s",
"create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s",
"create.item_attributes.astralsorcery_amulet": "UNLOCALIZED: improves %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "UNLOCALIZED: does not improve %1$s",
"create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s",
"create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s",
"create.gui.attribute_filter.no_selected_attributes": "UNLOCALIZED: No attributes selected",
"create.gui.attribute_filter.selected_attributes": "UNLOCALIZED: Selected attributes:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 6",
"_": "Missing Localizations: 10",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "нельзя разместить",
"create.item_attributes.consumable": "можно съесть",
"create.item_attributes.consumable.inverted": "нельзя съесть",
"create.item_attributes.smeltable": "можно расплавить",
"create.item_attributes.smeltable.inverted": "нельзя расплавить",
"create.item_attributes.washable": "можно промыть",
"create.item_attributes.washable.inverted": "нельзя промыть",
"create.item_attributes.smokable": "можно прокоптить",
"create.item_attributes.smokable.inverted": "нельзя прокоптить",
"create.item_attributes.crushable": "можно измельчить",
"create.item_attributes.crushable.inverted": "нельзя разместить",
"create.item_attributes.blastable": "плавится в доменной печи",
"create.item_attributes.blastable.inverted": "не плавится в доменной печи",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "зачарован",
"create.item_attributes.enchanted.inverted": "не зачарован",
"create.item_attributes.max_enchanted": "Зачаровано за максимальный уровень",
"create.item_attributes.max_enchanted.inverted": "Не зачаровано за максимальный уровень",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "повреждён",
"create.item_attributes.damaged.inverted": "не повреждён",
"create.item_attributes.badly_damaged": "сильно повреждён",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "не может быть надет",
"create.item_attributes.furnace_fuel": "является топливом",
"create.item_attributes.furnace_fuel.inverted": "не является топливом",
"create.item_attributes.washable": "можно промыть",
"create.item_attributes.washable.inverted": "нельзя промыть",
"create.item_attributes.crushable": "можно измельчить",
"create.item_attributes.crushable.inverted": "нельзя разместить",
"create.item_attributes.smeltable": "можно расплавить",
"create.item_attributes.smeltable.inverted": "нельзя расплавить",
"create.item_attributes.smokable": "можно прокоптить",
"create.item_attributes.smokable.inverted": "нельзя прокоптить",
"create.item_attributes.blastable": "плавится в доменной печи",
"create.item_attributes.blastable.inverted": "не плавится в доменной печи",
"create.item_attributes.shulker_level": "шалкер %1$s",
"create.item_attributes.shulker_level.inverted": "шалкер не %1$s",
"create.item_attributes.shulker_level.full": "полный",
"create.item_attributes.shulker_level.empty": "пустой",
"create.item_attributes.shulker_level.partial": "частично заполнен",
"create.item_attributes.in_tag": "помечен %1$s",
"create.item_attributes.in_tag.inverted": "не помечен %1$s",
"create.item_attributes.in_item_group": "принадлежит %1$s",
"create.item_attributes.in_item_group.inverted": "не принадлежит '%1$s'",
"create.item_attributes.added_by": "был добавлен %1$s",
"create.item_attributes.added_by.inverted": "не был добавлен %1$s",
"create.item_attributes.shulker_level": "шалкер %1$s",
"create.item_attributes.shulker_level.inverted": "шалкер не %1$s",
"create.item_attributes.shulker_level.full": "полный",
"create.item_attributes.shulker_level.empty": "пустой",
"create.item_attributes.shulker_level.partial": "частично заполнен",
"create.item_attributes.has_enchant": "зачарован на %1$s",
"create.item_attributes.has_enchant.inverted": "не зачарован на %1$s",
"create.item_attributes.color": "Покрашено в %1$s",
"create.item_attributes.color.inverted": "Не покрашено в %1$s",
"create.item_attributes.max_enchanted": "Зачаровано за максимальный уровень",
"create.item_attributes.max_enchanted.inverted": "Не зачаровано за максимальный уровень",
"create.item_attributes.has_fluid": "содержит %1$s",
"create.item_attributes.has_fluid.inverted": "не содержит %1$s",
"create.item_attributes.has_name": "имеет нестандартное имя %1$s",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "не копия второго порядка",
"create.item_attributes.book_copy_tattered": "полный беспорядок",
"create.item_attributes.book_copy_tattered.inverted": "не полный беспорядок",
"create.item_attributes.astralsorcery_crystal": "имеет характеристики кристалла %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "не имеет характеристики кристалла %1$s",
"create.item_attributes.astralsorcery_constellation": "настроено на %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "не настроено на %1$s",
"create.item_attributes.astralsorcery_perk_gem": "имеет характеристики перка %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "не имеет характеристики перка %1$s",
"create.item_attributes.astralsorcery_amulet": "исправляет %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "не исправляет %1$s",
"create.item_attributes.astralsorcery_constellation": "настроено на %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "не настроено на %1$s",
"create.item_attributes.astralsorcery_crystal": "имеет характеристики кристалла %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "не имеет характеристики кристалла %1$s",
"create.item_attributes.astralsorcery_perk_gem": "имеет характеристики перка %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "не имеет характеристики перка %1$s",
"create.gui.attribute_filter.no_selected_attributes": "Атрибуты не выбраны",
"create.gui.attribute_filter.selected_attributes": "Выбранные атрибуты:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 5",
"_": "Missing Localizations: 9",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "不可放置",
"create.item_attributes.consumable": "可食用",
"create.item_attributes.consumable.inverted": "不可食用",
"create.item_attributes.smeltable": "可被熔炉烧制",
"create.item_attributes.smeltable.inverted": "不可被熔炉烧制",
"create.item_attributes.washable": "可被洗涤",
"create.item_attributes.washable.inverted": "不可被洗涤",
"create.item_attributes.smokable": "可被烟熏",
"create.item_attributes.smokable.inverted": "不可被烟熏",
"create.item_attributes.crushable": "可被粉碎",
"create.item_attributes.crushable.inverted": "不可被粉碎",
"create.item_attributes.blastable": "可被高炉冶炼",
"create.item_attributes.blastable.inverted": "不可被高炉冶炼",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "已被附魔",
"create.item_attributes.enchanted.inverted": "未被附魔",
"create.item_attributes.max_enchanted": "已达到最高附魔等级",
"create.item_attributes.max_enchanted.inverted": "并未达到最高附魔等级",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "已损坏",
"create.item_attributes.damaged.inverted": "未损坏",
"create.item_attributes.badly_damaged": "严重受损",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "不可装备",
"create.item_attributes.furnace_fuel": "可作为燃料",
"create.item_attributes.furnace_fuel.inverted": "不可作为燃料",
"create.item_attributes.washable": "可被洗涤",
"create.item_attributes.washable.inverted": "不可被洗涤",
"create.item_attributes.crushable": "可被粉碎",
"create.item_attributes.crushable.inverted": "不可被粉碎",
"create.item_attributes.smeltable": "可被熔炉烧制",
"create.item_attributes.smeltable.inverted": "不可被熔炉烧制",
"create.item_attributes.smokable": "可被烟熏",
"create.item_attributes.smokable.inverted": "不可被烟熏",
"create.item_attributes.blastable": "可被高炉冶炼",
"create.item_attributes.blastable.inverted": "不可被高炉冶炼",
"create.item_attributes.shulker_level": "潜影盒是%1$s的",
"create.item_attributes.shulker_level.inverted": "潜影盒不是%1$s的",
"create.item_attributes.shulker_level.full": "满",
"create.item_attributes.shulker_level.empty": "空",
"create.item_attributes.shulker_level.partial": "部分填充",
"create.item_attributes.in_tag": "标签是%1$s",
"create.item_attributes.in_tag.inverted": "标签不是%1$s",
"create.item_attributes.in_item_group": "属于%1$s",
"create.item_attributes.in_item_group.inverted": "不属于%1$s",
"create.item_attributes.added_by": "由%1$s添加",
"create.item_attributes.added_by.inverted": "不由%1$s添加",
"create.item_attributes.shulker_level": "潜影盒是%1$s的",
"create.item_attributes.shulker_level.inverted": "潜影盒不是%1$s的",
"create.item_attributes.shulker_level.full": "满",
"create.item_attributes.shulker_level.empty": "空",
"create.item_attributes.shulker_level.partial": "部分填充",
"create.item_attributes.has_enchant": "有附魔效果%1$s",
"create.item_attributes.has_enchant.inverted": "没有附魔效果%1$s",
"create.item_attributes.color": "染色为%1$s",
"create.item_attributes.color.inverted": "未被染成%1$s",
"create.item_attributes.max_enchanted": "已达到最高附魔等级",
"create.item_attributes.max_enchanted.inverted": "并未达到最高附魔等级",
"create.item_attributes.has_fluid": "含有%1$s",
"create.item_attributes.has_fluid.inverted": "不含有%1$s",
"create.item_attributes.has_name": "有自定义名称%1$s",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "不是第二代拷贝",
"create.item_attributes.book_copy_tattered": "拷贝次数已不可查",
"create.item_attributes.book_copy_tattered.inverted": "不是拷贝次数已不可查",
"create.item_attributes.astralsorcery_crystal": "有水晶石属性%1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "没有水晶石属性%1$s",
"create.item_attributes.astralsorcery_constellation": "与%1$s共鸣",
"create.item_attributes.astralsorcery_constellation.inverted": "不与%1$s共鸣",
"create.item_attributes.astralsorcery_perk_gem": "带有有星能力属性%1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "不带有星能力属性%1$s",
"create.item_attributes.astralsorcery_amulet": "璀璨棱镜增强%1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "璀璨棱镜未增强%1$s",
"create.item_attributes.astralsorcery_constellation": "与%1$s共鸣",
"create.item_attributes.astralsorcery_constellation.inverted": "不与%1$s共鸣",
"create.item_attributes.astralsorcery_crystal": "有水晶石属性%1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "没有水晶石属性%1$s",
"create.item_attributes.astralsorcery_perk_gem": "带有有星能力属性%1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "不带有星能力属性%1$s",
"create.gui.attribute_filter.no_selected_attributes": "未选择任何属性",
"create.gui.attribute_filter.selected_attributes": "已选择的属性:",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 20",
"_": "Missing Localizations: 24",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1038,18 +1038,14 @@
"create.item_attributes.placeable.inverted": "不可放置",
"create.item_attributes.consumable": "可食用",
"create.item_attributes.consumable.inverted": "不可食用",
"create.item_attributes.smeltable": "可被熔爐融煉",
"create.item_attributes.smeltable.inverted": "不可被熔爐融煉",
"create.item_attributes.washable": "可被篩洗",
"create.item_attributes.washable.inverted": "不可被篩洗",
"create.item_attributes.smokable": "可被煙熏",
"create.item_attributes.smokable.inverted": "不可被煙熏",
"create.item_attributes.crushable": "可被粉碎",
"create.item_attributes.crushable.inverted": "不可被粉碎",
"create.item_attributes.blastable": "可被高爐融煉",
"create.item_attributes.blastable.inverted": "不可被高爐融煉",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "已被附魔",
"create.item_attributes.enchanted.inverted": "未被附魔",
"create.item_attributes.max_enchanted": "已達到最高附魔等級",
"create.item_attributes.max_enchanted.inverted": "未達到最高附魔等級",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "已損壞",
"create.item_attributes.damaged.inverted": "未損壞",
"create.item_attributes.badly_damaged": "嚴重受損",
@ -1060,23 +1056,31 @@
"create.item_attributes.equipable.inverted": "不可裝備",
"create.item_attributes.furnace_fuel": "是燃料",
"create.item_attributes.furnace_fuel.inverted": "不是燃料",
"create.item_attributes.washable": "可被篩洗",
"create.item_attributes.washable.inverted": "不可被篩洗",
"create.item_attributes.crushable": "可被粉碎",
"create.item_attributes.crushable.inverted": "不可被粉碎",
"create.item_attributes.smeltable": "可被熔爐融煉",
"create.item_attributes.smeltable.inverted": "不可被熔爐融煉",
"create.item_attributes.smokable": "可被煙熏",
"create.item_attributes.smokable.inverted": "不可被煙熏",
"create.item_attributes.blastable": "可被高爐融煉",
"create.item_attributes.blastable.inverted": "不可被高爐融煉",
"create.item_attributes.shulker_level": "界伏盒是 %1$s",
"create.item_attributes.shulker_level.inverted": "界伏盒不是 %1$s",
"create.item_attributes.shulker_level.full": "滿的",
"create.item_attributes.shulker_level.empty": "空的",
"create.item_attributes.shulker_level.partial": "有裝東西但沒滿",
"create.item_attributes.in_tag": "標籤是%1$s",
"create.item_attributes.in_tag.inverted": "標籤不是%1$s",
"create.item_attributes.in_item_group": "屬於%1$s",
"create.item_attributes.in_item_group.inverted": "不屬於%1$s",
"create.item_attributes.added_by": "由%1$s添加",
"create.item_attributes.added_by.inverted": "不是由%1$s添加",
"create.item_attributes.shulker_level": "界伏盒是 %1$s",
"create.item_attributes.shulker_level.inverted": "界伏盒不是 %1$s",
"create.item_attributes.shulker_level.full": "滿的",
"create.item_attributes.shulker_level.empty": "空的",
"create.item_attributes.shulker_level.partial": "有裝東西但沒滿",
"create.item_attributes.has_enchant": "有附魔效果%1$s",
"create.item_attributes.has_enchant.inverted": "沒有附魔效果%1$s",
"create.item_attributes.color": "已被染色成 %1$s",
"create.item_attributes.color.inverted": "未被染色成 %1$s",
"create.item_attributes.max_enchanted": "已達到最高附魔等級",
"create.item_attributes.max_enchanted.inverted": "未達到最高附魔等級",
"create.item_attributes.has_fluid": "包含%1$s",
"create.item_attributes.has_fluid.inverted": "不包含%1$s",
"create.item_attributes.has_name": "有自定義名稱%1$s",
@ -1091,14 +1095,14 @@
"create.item_attributes.book_copy_second.inverted": "不是第二份複製",
"create.item_attributes.book_copy_tattered": "是第三份複製",
"create.item_attributes.book_copy_tattered.inverted": "不是第三份複製",
"create.item_attributes.astralsorcery_crystal": "具有晶體屬性%1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "不具有晶體屬性%1$s",
"create.item_attributes.astralsorcery_constellation": "與%1$s調諧",
"create.item_attributes.astralsorcery_constellation.inverted": "未與%1$s調諧",
"create.item_attributes.astralsorcery_perk_gem": "具有特殊屬性%1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "不具有特殊屬性%1$s",
"create.item_attributes.astralsorcery_amulet": "提升%1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "不提升%1$s",
"create.item_attributes.astralsorcery_constellation": "與%1$s調諧",
"create.item_attributes.astralsorcery_constellation.inverted": "未與%1$s調諧",
"create.item_attributes.astralsorcery_crystal": "具有晶體屬性%1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "不具有晶體屬性%1$s",
"create.item_attributes.astralsorcery_perk_gem": "具有特殊屬性%1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "不具有特殊屬性%1$s",
"create.gui.attribute_filter.no_selected_attributes": "沒有標記任何屬性",
"create.gui.attribute_filter.selected_attributes": "已選擇的屬性:",

View file

@ -28,8 +28,8 @@
"trigger": "create:bracket_apply",
"conditions": {
"accepted_entries": [
"create:cogwheel",
"create:large_cogwheel"
"create:large_cogwheel",
"create:cogwheel"
]
}
},

View file

@ -5,10 +5,10 @@
"create:polished_limestone",
"create:weathered_limestone",
"create:polished_weathered_limestone",
"create:gabbro",
"create:polished_gabbro",
"create:dolomite",
"create:polished_dolomite",
"create:gabbro",
"create:polished_gabbro",
"create:scoria",
"create:polished_scoria",
"create:dark_scoria",

View file

@ -3,8 +3,8 @@
"values": [
"create:limestone",
"create:weathered_limestone",
"create:gabbro",
"create:dolomite",
"create:gabbro",
"create:natural_scoria"
]
}

View file

@ -5,10 +5,10 @@
"create:polished_limestone",
"create:weathered_limestone",
"create:polished_weathered_limestone",
"create:gabbro",
"create:polished_gabbro",
"create:dolomite",
"create:polished_dolomite",
"create:gabbro",
"create:polished_gabbro",
"create:scoria",
"create:polished_scoria",
"create:dark_scoria",

View file

@ -46,6 +46,9 @@ public class AllFluids {
.slopeFindDistance(3)
.explosionResistance(100f))
.tag(AllFluidTags.HONEY.tag)
.bucket()
.tag(AllTags.forgeItemTag("buckets/honey"))
.build()
.register();
public static final FluidEntry<ForgeFlowingFluid.Flowing> CHOCOLATE =

View file

@ -7,7 +7,6 @@ import static com.simibubi.create.AllTags.NameSpace.TIC;
import java.util.function.Function;
import com.simibubi.create.foundation.data.CreateRegistrate;
import com.simibubi.create.foundation.utility.EmptyNamedTag;
import com.simibubi.create.foundation.utility.Lang;
import com.tterrag.registrate.builders.BlockBuilder;
import com.tterrag.registrate.builders.ItemBuilder;
@ -28,51 +27,60 @@ import net.minecraft.tags.ITag;
import net.minecraft.tags.ItemTags;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.Tags;
import net.minecraftforge.fml.ModList;
public class AllTags {
private static final CreateRegistrate REGISTRATE = Create.registrate()
.itemGroup(() -> Create.BASE_CREATIVE_TAB);
.itemGroup(() -> Create.BASE_CREATIVE_TAB);
public static <T> ITag.INamedTag<T> tag(Function<ResourceLocation, ITag.INamedTag<T>> wrapperFactory, String namespace,
String path) {
return wrapperFactory.apply(new ResourceLocation(namespace, path));
}
public static <T> ITag.INamedTag<T> forgeTag(Function<ResourceLocation, ITag.INamedTag<T>> wrapperFactory, String path) {
return tag(wrapperFactory, "forge", path);
}
public static ITag.INamedTag<Block> forgeBlockTag(String path) {
return forgeTag(BlockTags::createOptional, path);
}
public static ITag.INamedTag<Item> forgeItemTag(String path) {
return forgeTag(ItemTags::createOptional, path);
}
public static ITag.INamedTag<Fluid> forgeFluidTag(String path) {
return forgeTag(FluidTags::createOptional, path);
}
public static <T extends Block, P> NonNullFunction<BlockBuilder<T, P>, ItemBuilder<BlockItem, BlockBuilder<T, P>>> tagBlockAndItem(
String tagName) {
return b -> b.tag(forgeBlockTag(tagName))
String path) {
return b -> b.tag(forgeBlockTag(path))
.item()
.tag(forgeItemTag(tagName));
}
public static ITag.INamedTag<Block> forgeBlockTag(String name) {
return forgeTag(BlockTags::bind, name);
}
public static ITag.INamedTag<Item> forgeItemTag(String name) {
return forgeTag(ItemTags::bind, name);
}
public static ITag.INamedTag<Fluid> forgeFluidTag(String name) {
return forgeTag(FluidTags::bind, name);
}
public static <T> ITag.INamedTag<T> forgeTag(Function<String, ITag.INamedTag<T>> wrapperFactory, String name) {
return tag(wrapperFactory, "forge", name);
}
public static <T> ITag.INamedTag<T> tag(Function<String, ITag.INamedTag<T>> wrapperFactory, String domain,
String name) {
return wrapperFactory.apply(new ResourceLocation(domain, name).toString());
.tag(forgeItemTag(path));
}
public enum NameSpace {
MOD(Create.ID), FORGE("forge"), TIC("tconstruct")
MOD(Create.ID, false, true),
FORGE("forge"),
TIC("tconstruct")
;
public final String id;
public final boolean optionalDefault;
public final boolean alwaysDatagenDefault;
private NameSpace(String id) {
NameSpace(String id) {
this(id, true, false);
}
NameSpace(String id, boolean optionalDefault, boolean alwaysDatagenDefault) {
this.id = id;
this.optionalDefault = optionalDefault;
this.alwaysDatagenDefault = alwaysDatagenDefault;
}
}
@ -90,37 +98,50 @@ public class AllTags {
WINDOWABLE,
WRENCH_PICKUP,
WG_STONE(FORGE),
SLIMY_LOGS(TIC),
;
public final ITag.INamedTag<Block> tag;
private AllBlockTags() {
this(MOD, "");
AllBlockTags() {
this(MOD);
}
private AllBlockTags(NameSpace namespace) {
this(namespace, "");
AllBlockTags(NameSpace namespace) {
this(namespace, namespace.optionalDefault, namespace.alwaysDatagenDefault);
}
private AllBlockTags(NameSpace namespace, String path) {
ResourceLocation id =
new ResourceLocation(namespace.id, (path.isEmpty() ? "" : path + "/") + Lang.asId(name()));
if (ModList.get()
.isLoaded(namespace.id)) {
tag = BlockTags.bind(id.toString());
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag));
AllBlockTags(NameSpace namespace, String path) {
this(namespace, path, namespace.optionalDefault, namespace.alwaysDatagenDefault);
}
AllBlockTags(NameSpace namespace, boolean optional, boolean alwaysDatagen) {
this(namespace, null, optional, alwaysDatagen);
}
AllBlockTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) {
ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path);
if (optional) {
tag = BlockTags.createOptional(id);
} else {
tag = new EmptyNamedTag<>(id);
tag = BlockTags.bind(id.toString());
}
if (alwaysDatagen) {
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag));
}
}
public boolean matches(BlockState block) {
public boolean matches(Block block) {
return tag.contains(block.getBlock());
}
public boolean matches(BlockState state) {
return matches(state.getBlock());
}
public void add(Block... values) {
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)
.add(values));
@ -144,12 +165,12 @@ public class AllTags {
public enum AllItemTags {
CREATE_INGOTS(),
CRUSHED_ORES(),
SANDPAPER(),
SEATS(),
UPRIGHT_ON_BELT(),
VALVE_HANDLES(),
CREATE_INGOTS,
CRUSHED_ORES,
SANDPAPER,
SEATS,
UPRIGHT_ON_BELT,
VALVE_HANDLES,
BEACON_PAYMENT(FORGE),
PLATES(FORGE)
@ -158,18 +179,32 @@ public class AllTags {
public final ITag.INamedTag<Item> tag;
private AllItemTags() {
this(MOD, "");
AllItemTags() {
this(MOD);
}
private AllItemTags(NameSpace namespace) {
this(namespace, "");
AllItemTags(NameSpace namespace) {
this(namespace, namespace.optionalDefault, namespace.alwaysDatagenDefault);
}
private AllItemTags(NameSpace namespace, String path) {
tag = ItemTags.bind(
new ResourceLocation(namespace.id, (path.isEmpty() ? "" : path + "/") + Lang.asId(name())).toString());
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag));
AllItemTags(NameSpace namespace, String path) {
this(namespace, path, namespace.optionalDefault, namespace.alwaysDatagenDefault);
}
AllItemTags(NameSpace namespace, boolean optional, boolean alwaysDatagen) {
this(namespace, null, optional, alwaysDatagen);
}
AllItemTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) {
ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path);
if (optional) {
tag = ItemTags.createOptional(id);
} else {
tag = ItemTags.bind(id.toString());
}
if (alwaysDatagen) {
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag));
}
}
public boolean matches(ItemStack stack) {
@ -190,11 +225,16 @@ public class AllTags {
includeIn(parent.tag);
}
public void includeAll(ITag.INamedTag<Item> child) {
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag)
.addTag(child));
}
}
public enum AllFluidTags {
NO_INFINITE_DRAINING,
NO_INFINITE_DRAINING(MOD, true, false),
HONEY(FORGE)
@ -202,28 +242,64 @@ public class AllTags {
public final ITag.INamedTag<Fluid> tag;
private AllFluidTags() {
this(MOD, "");
AllFluidTags() {
this(MOD);
}
private AllFluidTags(NameSpace namespace) {
this(namespace, "");
AllFluidTags(NameSpace namespace) {
this(namespace, namespace.optionalDefault, namespace.alwaysDatagenDefault);
}
private AllFluidTags(NameSpace namespace, String path) {
tag = FluidTags.createOptional(
new ResourceLocation(namespace.id, (path.isEmpty() ? "" : path + "/") + Lang.asId(name())));
AllFluidTags(NameSpace namespace, String path) {
this(namespace, path, namespace.optionalDefault, namespace.alwaysDatagenDefault);
}
AllFluidTags(NameSpace namespace, boolean optional, boolean alwaysDatagen) {
this(namespace, null, optional, alwaysDatagen);
}
AllFluidTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) {
ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path);
if (optional) {
tag = FluidTags.createOptional(id);
} else {
tag = FluidTags.bind(id.toString());
}
if (alwaysDatagen) {
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag));
}
}
public boolean matches(Fluid fluid) {
return fluid != null && fluid.is(tag);
}
public void add(Fluid... values) {
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag)
.add(values));
}
public void includeIn(ITag.INamedTag<Fluid> parent) {
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(parent)
.addTag(tag));
}
public void includeIn(AllFluidTags parent) {
includeIn(parent.tag);
}
public void includeAll(ITag.INamedTag<Fluid> child) {
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag)
.addTag(child));
}
private static void loadClass() {}
}
public static void register() {
AllFluidTags.loadClass();
AllItemTags.CREATE_INGOTS.includeIn(AllItemTags.BEACON_PAYMENT);
AllItemTags.CREATE_INGOTS.includeIn(Tags.Items.INGOTS);
@ -249,8 +325,6 @@ public class AllTags {
AllBlockTags.WRENCH_PICKUP.add(Blocks.REDSTONE_WIRE, Blocks.REDSTONE_TORCH, Blocks.REPEATER, Blocks.LEVER,
Blocks.COMPARATOR, Blocks.OBSERVER, Blocks.REDSTONE_WALL_TORCH, Blocks.PISTON, Blocks.STICKY_PISTON,
Blocks.TRIPWIRE, Blocks.TRIPWIRE_HOOK, Blocks.DAYLIGHT_DETECTOR, Blocks.TARGET);
AllFluidTags.loadClass();
}
}

View file

@ -0,0 +1,50 @@
package com.simibubi.create.content.curiosities.symmetry;
import java.util.function.Supplier;
import com.simibubi.create.content.curiosities.symmetry.mirror.SymmetryMirror;
import com.simibubi.create.foundation.networking.SimplePacketBase;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.Hand;
import net.minecraftforge.fml.network.NetworkEvent.Context;
public class ConfigureSymmetryWandPacket extends SimplePacketBase {
protected Hand hand;
protected SymmetryMirror mirror;
public ConfigureSymmetryWandPacket(Hand hand, SymmetryMirror mirror) {
this.hand = hand;
this.mirror = mirror;
}
public ConfigureSymmetryWandPacket(PacketBuffer buffer) {
hand = buffer.readEnum(Hand.class);
mirror = SymmetryMirror.fromNBT(buffer.readNbt());
}
@Override
public void write(PacketBuffer buffer) {
buffer.writeEnum(hand);
buffer.writeNbt(mirror.writeToNbt());
}
@Override
public void handle(Supplier<Context> context) {
context.get().enqueueWork(() -> {
ServerPlayerEntity player = context.get().getSender();
if (player == null) {
return;
}
ItemStack stack = player.getItemInHand(hand);
if (stack.getItem() instanceof SymmetryWandItem) {
SymmetryWandItem.configureSettings(stack, mirror);
}
});
context.get().setPacketHandled(true);
}
}

View file

@ -181,10 +181,15 @@ public class SymmetryWandItem extends Item {
public static SymmetryMirror getMirror(ItemStack stack) {
checkNBT(stack);
return SymmetryMirror.fromNBT((CompoundNBT) stack.getTag()
return SymmetryMirror.fromNBT(stack.getTag()
.getCompound(SYMMETRY));
}
public static void configureSettings(ItemStack stack, SymmetryMirror mirror) {
checkNBT(stack);
stack.getTag().put(SYMMETRY, mirror.writeToNbt());
}
public static void apply(World world, ItemStack wand, PlayerEntity player, BlockPos pos, BlockState block) {
checkNBT(wand);
if (!isEnabled(wand))

View file

@ -15,17 +15,14 @@ import com.simibubi.create.foundation.gui.widgets.Label;
import com.simibubi.create.foundation.gui.widgets.ScrollInput;
import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.networking.NbtPacket;
import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.Hand;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.fml.network.PacketDistributor;
public class SymmetryWandScreen extends AbstractSimiScreen {
@ -45,8 +42,6 @@ public class SymmetryWandScreen extends AbstractSimiScreen {
private Hand hand;
public SymmetryWandScreen(ItemStack wand, Hand hand) {
super();
background = AllGuiTextures.WAND_OF_SYMMETRY;
currentElement = SymmetryWandItem.getMirror(wand);
@ -150,19 +145,14 @@ public class SymmetryWandScreen extends AbstractSimiScreen {
@Override
public void removed() {
ItemStack heldItem = minecraft.player.getItemInHand(hand);
CompoundNBT compound = heldItem.getTag();
compound.put(SymmetryWandItem.SYMMETRY, currentElement.writeToNbt());
heldItem.setTag(compound);
AllPackets.channel.send(PacketDistributor.SERVER.noArg(), new NbtPacket(heldItem, hand));
minecraft.player.setItemInHand(hand, heldItem);
super.removed();
SymmetryWandItem.configureSettings(wand, currentElement);
AllPackets.channel.sendToServer(new ConfigureSymmetryWandPacket(hand, currentElement));
}
@Override
public boolean mouseClicked(double x, double y, int button) {
if (confirmButton.isHovered()) {
minecraft.player.closeContainer();
onClose();
return true;
}

View file

@ -0,0 +1,51 @@
package com.simibubi.create.content.curiosities.zapper;
import java.util.function.Supplier;
import com.simibubi.create.foundation.networking.SimplePacketBase;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.Hand;
import net.minecraftforge.fml.network.NetworkEvent.Context;
public abstract class ConfigureZapperPacket extends SimplePacketBase {
protected Hand hand;
protected PlacementPatterns pattern;
public ConfigureZapperPacket(Hand hand, PlacementPatterns pattern) {
this.hand = hand;
this.pattern = pattern;
}
public ConfigureZapperPacket(PacketBuffer buffer) {
hand = buffer.readEnum(Hand.class);
pattern = buffer.readEnum(PlacementPatterns.class);
}
@Override
public void write(PacketBuffer buffer) {
buffer.writeEnum(hand);
buffer.writeEnum(pattern);
}
@Override
public void handle(Supplier<Context> context) {
context.get().enqueueWork(() -> {
ServerPlayerEntity player = context.get().getSender();
if (player == null) {
return;
}
ItemStack stack = player.getItemInHand(hand);
if (stack.getItem() instanceof ZapperItem) {
configureZapper(stack);
}
});
context.get().setPacketHandled(true);
}
public abstract void configureZapper(ItemStack stack);
}

View file

@ -21,8 +21,8 @@ public enum PlacementPatterns {
Chance50(AllIcons.I_PATTERN_CHANCE_50),
Chance75(AllIcons.I_PATTERN_CHANCE_75);
public String translationKey;
public AllIcons icon;
public final String translationKey;
public final AllIcons icon;
private PlacementPatterns(AllIcons icon) {
this.translationKey = Lang.asId(name());

View file

@ -10,6 +10,7 @@ import com.simibubi.create.CreateClient;
import com.simibubi.create.foundation.item.ItemDescription;
import com.simibubi.create.foundation.utility.BlockHelper;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.NBTHelper;
import com.simibubi.create.foundation.utility.NBTProcessors;
import net.minecraft.block.BlockState;
@ -90,7 +91,7 @@ public abstract class ZapperItem extends Item {
.isShiftKeyDown()) {
if (context.getLevel().isClientSide) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {
openHandgunGUI(context.getItemInHand(), context.getHand() == Hand.OFF_HAND);
openHandgunGUI(context.getItemInHand(), context.getHand());
});
context.getPlayer()
.getCooldowns()
@ -112,7 +113,7 @@ public abstract class ZapperItem extends Item {
if (player.isShiftKeyDown()) {
if (world.isClientSide) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {
openHandgunGUI(item, hand == Hand.OFF_HAND);
openHandgunGUI(item, hand);
});
player.getCooldowns()
.addCooldown(item.getItem(), 10);
@ -187,7 +188,7 @@ public abstract class ZapperItem extends Item {
BlockRayTraceResult raytrace, CompoundNBT data);
@OnlyIn(Dist.CLIENT)
protected abstract void openHandgunGUI(ItemStack item, boolean b);
protected abstract void openHandgunGUI(ItemStack item, Hand hand);
protected abstract int getCooldownDelay(ItemStack item);
@ -212,6 +213,11 @@ public abstract class ZapperItem extends Item {
return UseAction.NONE;
}
public static void configureSettings(ItemStack stack, PlacementPatterns pattern) {
CompoundNBT nbt = stack.getOrCreateTag();
NBTHelper.writeEnum(nbt, "Pattern", pattern);
}
public static void setTileData(World world, BlockPos pos, BlockState state, CompoundNBT data, PlayerEntity player) {
if (data != null && AllBlockTags.SAFE_NBT.matches(state)) {
TileEntity tile = world.getBlockEntity(pos);

View file

@ -9,8 +9,8 @@ import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.gui.GuiGameElement;
import com.simibubi.create.foundation.gui.widgets.IconButton;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.networking.NbtPacket;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.NBTHelper;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
@ -22,29 +22,34 @@ import net.minecraft.util.math.vector.Vector3f;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
public class ZapperScreen extends AbstractSimiScreen {
protected ItemStack zapper;
protected boolean offhand;
protected float animationProgress;
protected AllGuiTextures background;
private IconButton confirmButton;
public abstract class ZapperScreen extends AbstractSimiScreen {
protected final ITextComponent patternSection = Lang.translate("gui.terrainzapper.patternSection");
protected AllGuiTextures background;
protected ItemStack zapper;
protected Hand hand;
protected float animationProgress;
protected ITextComponent title;
protected Vector<IconButton> patternButtons;
protected Vector<IconButton> patternButtons = new Vector<>(6);
private IconButton confirmButton;
protected int brightColor;
protected int fontColor;
public ZapperScreen(AllGuiTextures background, ItemStack zapper, boolean offhand) {
super();
protected PlacementPatterns currentPattern;
public ZapperScreen(AllGuiTextures background, ItemStack zapper, Hand hand) {
this.background = background;
this.zapper = zapper;
this.offhand = offhand;
this.hand = hand;
title = StringTextComponent.EMPTY;
brightColor = 0xFEFEFE;
fontColor = AllGuiTextures.FONT_COLOR;
CompoundNBT nbt = zapper.getOrCreateTag();
currentPattern = NBTHelper.readEnum(nbt, "Pattern", PlacementPatterns.class);
}
@Override
@ -63,9 +68,7 @@ public class ZapperScreen extends AbstractSimiScreen {
new IconButton(x + background.width - 33, y + background.height - 24, AllIcons.I_CONFIRM);
widgets.add(confirmButton);
CompoundNBT nbt = zapper.getOrCreateTag();
patternButtons = new Vector<>(6);
patternButtons.clear();
for (int row = 0; row <= 1; row++) {
for (int col = 0; col <= 2; col++) {
int id = patternButtons.size();
@ -77,9 +80,7 @@ public class ZapperScreen extends AbstractSimiScreen {
}
}
if (nbt.contains("Pattern"))
patternButtons.get(PlacementPatterns.valueOf(nbt.getString("Pattern"))
.ordinal()).active = false;
patternButtons.get(currentPattern.ordinal()).active = false;
widgets.addAll(patternButtons);
}
@ -108,21 +109,19 @@ public class ZapperScreen extends AbstractSimiScreen {
@Override
public void removed() {
CompoundNBT nbt = zapper.getTag();
writeAdditionalOptions(nbt);
AllPackets.channel.sendToServer(new NbtPacket(zapper, offhand ? Hand.OFF_HAND : Hand.MAIN_HAND));
ConfigureZapperPacket packet = getConfigurationPacket();
packet.configureZapper(zapper);
AllPackets.channel.sendToServer(packet);
}
@Override
public boolean mouseClicked(double x, double y, int button) {
CompoundNBT nbt = zapper.getTag();
for (IconButton patternButton : patternButtons) {
if (patternButton.isHovered()) {
patternButtons.forEach(b -> b.active = true);
patternButton.active = false;
patternButton.playDownSound(minecraft.getSoundManager());
nbt.putString("Pattern", PlacementPatterns.values()[patternButtons.indexOf(patternButton)].name());
currentPattern = PlacementPatterns.values()[patternButtons.indexOf(patternButton)];
}
}
@ -159,6 +158,6 @@ public class ZapperScreen extends AbstractSimiScreen {
ms.popPose();
}
protected void writeAdditionalOptions(CompoundNBT nbt) {}
protected abstract ConfigureZapperPacket getConfigurationPacket();
}

View file

@ -0,0 +1,55 @@
package com.simibubi.create.content.curiosities.zapper.terrainzapper;
import com.simibubi.create.content.curiosities.zapper.ConfigureZapperPacket;
import com.simibubi.create.content.curiosities.zapper.PlacementPatterns;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.Hand;
public class ConfigureWorldshaperPacket extends ConfigureZapperPacket {
protected TerrainBrushes brush;
protected int brushParamX;
protected int brushParamY;
protected int brushParamZ;
protected TerrainTools tool;
protected PlacementOptions placement;
public ConfigureWorldshaperPacket(Hand hand, PlacementPatterns pattern, TerrainBrushes brush, int brushParamX, int brushParamY, int brushParamZ, TerrainTools tool, PlacementOptions placement) {
super(hand, pattern);
this.brush = brush;
this.brushParamX = brushParamX;
this.brushParamY = brushParamY;
this.brushParamZ = brushParamZ;
this.tool = tool;
this.placement = placement;
}
public ConfigureWorldshaperPacket(PacketBuffer buffer) {
super(buffer);
brush = buffer.readEnum(TerrainBrushes.class);
brushParamX = buffer.readVarInt();
brushParamY = buffer.readVarInt();
brushParamZ = buffer.readVarInt();
tool = buffer.readEnum(TerrainTools.class);
placement = buffer.readEnum(PlacementOptions.class);
}
@Override
public void write(PacketBuffer buffer) {
super.write(buffer);
buffer.writeEnum(brush);
buffer.writeVarInt(brushParamX);
buffer.writeVarInt(brushParamY);
buffer.writeVarInt(brushParamZ);
buffer.writeEnum(tool);
buffer.writeEnum(placement);
}
@Override
public void configureZapper(ItemStack stack) {
WorldshaperItem.configureSettings(stack, pattern, brush, brushParamX, brushParamY, brushParamZ, tool, placement);
}
}

View file

@ -14,6 +14,7 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.text.ITextComponent;
@ -29,8 +30,8 @@ public class WorldshaperItem extends ZapperItem {
@Override
@OnlyIn(value = Dist.CLIENT)
protected void openHandgunGUI(ItemStack item, boolean b) {
ScreenOpener.open(new WorldshaperScreen(item, b));
protected void openHandgunGUI(ItemStack item, Hand hand) {
ScreenOpener.open(new WorldshaperScreen(item, hand));
}
@Override
@ -82,4 +83,13 @@ public class WorldshaperItem extends ZapperItem {
return true;
}
public static void configureSettings(ItemStack stack, PlacementPatterns pattern, TerrainBrushes brush, int brushParamX, int brushParamY, int brushParamZ, TerrainTools tool, PlacementOptions placement) {
ZapperItem.configureSettings(stack, pattern);
CompoundNBT nbt = stack.getOrCreateTag();
NBTHelper.writeEnum(nbt, "Brush", brush);
nbt.put("BrushParams", NBTUtil.writeBlockPos(new BlockPos(brushParamX, brushParamY, brushParamZ)));
nbt.putString("Tool", tool.name());
nbt.putString("Placement", placement.name());
}
}

View file

@ -4,6 +4,7 @@ import java.util.List;
import java.util.Vector;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.content.curiosities.zapper.ConfigureZapperPacket;
import com.simibubi.create.content.curiosities.zapper.ZapperScreen;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import com.simibubi.create.foundation.gui.AllIcons;
@ -16,13 +17,14 @@ import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.NBTHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.common.util.Constants;
public class WorldshaperScreen extends ZapperScreen {
@ -36,20 +38,41 @@ public class WorldshaperScreen extends ZapperScreen {
protected ScrollInput brushInput;
protected Label brushLabel;
protected Vector<ScrollInput> brushParams;
protected Vector<Label> brushParamLabels;
protected Vector<ScrollInput> brushParams = new Vector<>(3);
protected Vector<Label> brushParamLabels = new Vector<>(3);
protected IconButton followDiagonals;
protected IconButton acrossMaterials;
protected Indicator followDiagonalsIndicator;
protected Indicator acrossMaterialsIndicator;
private CompoundNBT nbt;
protected TerrainBrushes currentBrush;
protected int[] currentBrushParams = new int[] { 1, 1, 1 };
protected boolean currentFollowDiagonals;
protected boolean currentAcrossMaterials;
protected TerrainTools currentTool;
protected PlacementOptions currentPlacement;
public WorldshaperScreen(ItemStack zapper, boolean offhand) {
super(AllGuiTextures.TERRAINZAPPER, zapper, offhand);
public WorldshaperScreen(ItemStack zapper, Hand hand) {
super(AllGuiTextures.TERRAINZAPPER, zapper, hand);
fontColor = 0x767676;
title = zapper.getHoverName();
nbt = zapper.getOrCreateTag();
CompoundNBT nbt = zapper.getOrCreateTag();
currentBrush = NBTHelper.readEnum(nbt, "Brush", TerrainBrushes.class);
if (nbt.contains("BrushParams", Constants.NBT.TAG_COMPOUND)) {
BlockPos paramsData = NBTUtil.readBlockPos(nbt.getCompound("BrushParams"));
currentBrushParams[0] = paramsData.getX();
currentBrushParams[1] = paramsData.getY();
currentBrushParams[2] = paramsData.getZ();
if (currentBrushParams[1] == 0) {
currentFollowDiagonals = true;
}
if (currentBrushParams[2] == 0) {
currentAcrossMaterials = true;
}
}
currentTool = NBTHelper.readEnum(nbt, "Tool", TerrainTools.class);
currentPlacement = NBTHelper.readEnum(nbt, "Placement", PlacementOptions.class);
}
@Override
@ -63,61 +86,61 @@ public class WorldshaperScreen extends ZapperScreen {
brushInput = new SelectionScrollInput(x + 56, y + 20, 77, 18).forOptions(brushOptions)
.titled(Lang.translate("gui.terrainzapper.brush"))
.writingTo(brushLabel)
.calling(brushIndex -> initBrushParams(x, y));
if (nbt.contains("Brush"))
brushInput.setState(NBTHelper.readEnum(nbt, "Brush", TerrainBrushes.class)
.ordinal());
.calling(brushIndex -> {
currentBrush = TerrainBrushes.values()[brushIndex];
initBrushParams(x, y);
});
brushInput.setState(currentBrush.ordinal());
widgets.add(brushLabel);
widgets.add(brushInput);
initBrushParams(x, y);
}
public void initBrushParams(int x, int y) {
if (brushParams != null) {
nbt.put("BrushParams", NBTUtil.writeBlockPos(new BlockPos(brushParams.get(0)
.getState(),
brushParams.get(1)
.getState(),
brushParams.get(2)
.getState())));
protected void initBrushParams(int x, int y) {
Brush currentBrush = this.currentBrush.get();
widgets.removeAll(brushParamLabels);
widgets.removeAll(brushParams);
}
// Brush Params
widgets.removeAll(brushParamLabels);
widgets.removeAll(brushParams);
brushParamLabels.clear();
brushParams.clear();
brushParamLabels = new Vector<>(3);
brushParams = new Vector<>(3);
BlockPos data = NBTUtil.readBlockPos(nbt.getCompound("BrushParams"));
int[] params = new int[] { data.getX(), data.getY(), data.getZ() };
Brush currentBrush = TerrainBrushes.values()[brushInput.getState()].get();
for (int index = 0; index < 3; index++) {
Label label = new Label(x + 65 + 20 * index, y + 45, StringTextComponent.EMPTY).withShadow();
brushParamLabels.add(label);
int indexFinal = index;
final int finalIndex = index;
ScrollInput input = new ScrollInput(x + 56 + 20 * index, y + 40, 18, 18)
.withRange(currentBrush.getMin(index), currentBrush.getMax(index) + 1)
.writingTo(label)
.titled(currentBrush.getParamLabel(index)
.plainCopy())
.calling(state -> {
label.x = x + 65 + 20 * indexFinal - font.width(label.text) / 2;
currentBrushParams[finalIndex] = state;
label.x = x + 65 + 20 * finalIndex - font.width(label.text) / 2;
});
input.setState(params[index]);
input.setState(currentBrushParams[index]);
input.onChanged();
if (index >= currentBrush.amtParams) {
input.visible = false;
label.visible = false;
input.active = false;
}
brushParamLabels.add(label);
brushParams.add(input);
}
widgets.addAll(brushParamLabels);
widgets.addAll(brushParams);
// Connectivity Options
if (followDiagonals != null) {
widgets.remove(followDiagonals);
widgets.remove(followDiagonalsIndicator);
@ -144,13 +167,13 @@ public class WorldshaperScreen extends ZapperScreen {
widgets.add(followDiagonalsIndicator);
widgets.add(acrossMaterials);
widgets.add(acrossMaterialsIndicator);
if (params[1] == 0)
if (currentFollowDiagonals)
followDiagonalsIndicator.state = State.ON;
if (params[2] == 0)
if (currentAcrossMaterials)
acrossMaterialsIndicator.state = State.ON;
}
// TOOLS
// Tools
if (toolButtons != null)
widgets.removeAll(toolButtons);
@ -164,81 +187,71 @@ public class WorldshaperScreen extends ZapperScreen {
.setToolTip(Lang.translate("gui.terrainzapper.tool." + tool.translationKey));
}
if (!nbt.contains("Tool"))
NBTHelper.writeEnum(nbt, "Tool", toolValues[0]);
int index = -1;
TerrainTools tool = NBTHelper.readEnum(nbt, "Tool", TerrainTools.class);
int toolIndex = -1;
for (int i = 0; i < toolValues.length; i++)
if (tool == toolValues[i])
index = i;
if (index == -1) {
NBTHelper.writeEnum(nbt, "Tool", toolValues[0]);
index = 0;
if (currentTool == toolValues[i])
toolIndex = i;
if (toolIndex == -1) {
currentTool = toolValues[0];
toolIndex = 0;
}
toolButtons.get(toolIndex).active = false;
toolButtons.get(index).active = false;
widgets.addAll(toolButtons);
// Placement Options
if (placementButtons != null)
widgets.removeAll(placementButtons);
if (!currentBrush.hasPlacementOptions())
return;
PlacementOptions[] placementValues = PlacementOptions.values();
placementButtons = new Vector<>(placementValues.length);
for (int id = 0; id < placementValues.length; id++) {
PlacementOptions option = placementValues[id];
placementButtons.add(new IconButton(x + 136 + id * 18, y + 79, option.icon));
placementButtons.get(id)
.setToolTip(Lang.translate("gui.terrainzapper.placement." + option.translationKey));
}
if (currentBrush.hasPlacementOptions()) {
PlacementOptions[] placementValues = PlacementOptions.values();
placementButtons = new Vector<>(placementValues.length);
for (int id = 0; id < placementValues.length; id++) {
PlacementOptions option = placementValues[id];
placementButtons.add(new IconButton(x + 136 + id * 18, y + 79, option.icon));
placementButtons.get(id)
.setToolTip(Lang.translate("gui.terrainzapper.placement." + option.translationKey));
}
if (!nbt.contains("Placement"))
NBTHelper.writeEnum(nbt, "Placement", placementValues[0]);
int optionIndex = NBTHelper.readEnum(nbt, "Placement", PlacementOptions.class)
.ordinal();
if (optionIndex >= placementValues.length) {
NBTHelper.writeEnum(nbt, "Placement", placementValues[0]);
optionIndex = 0;
placementButtons.get(currentPlacement.ordinal()).active = false;
widgets.addAll(placementButtons);
}
placementButtons.get(optionIndex).active = false;
widgets.addAll(placementButtons);
}
@Override
public boolean mouseClicked(double x, double y, int button) {
CompoundNBT nbt = zapper.getTag();
TerrainBrushes brush = TerrainBrushes.values()[brushInput.getState()];
TerrainTools[] supportedTools = brush.get()
TerrainTools[] supportedTools = currentBrush.get()
.getSupportedTools();
for (IconButton toolButton : toolButtons) {
if (toolButton.isHovered()) {
toolButtons.forEach(b -> b.active = true);
toolButton.active = false;
toolButton.playDownSound(minecraft.getSoundManager());
currentTool = supportedTools[toolButtons.indexOf(toolButton)];
}
}
if (placementButtons != null) {
for (IconButton placementButton : placementButtons) {
if (placementButton.isHovered()) {
placementButtons.forEach(b -> b.active = true);
placementButton.active = false;
placementButton.playDownSound(Minecraft.getInstance()
.getSoundManager());
nbt.putString("Placement",
PlacementOptions.values()[placementButtons.indexOf(placementButton)].name());
placementButton.playDownSound(minecraft.getSoundManager());
currentPlacement = PlacementOptions.values()[placementButtons.indexOf(placementButton)];
}
}
}
for (IconButton toolButton : toolButtons) {
if (toolButton.isHovered()) {
toolButtons.forEach(b -> b.active = true);
toolButton.active = false;
toolButton.playDownSound(Minecraft.getInstance()
.getSoundManager());
nbt.putString("Tool", supportedTools[toolButtons.indexOf(toolButton)].name());
}
}
if (followDiagonals != null && followDiagonals.isHovered())
if (followDiagonals != null && followDiagonals.isHovered()) {
followDiagonalsIndicator.state = followDiagonalsIndicator.state == State.OFF ? State.ON : State.OFF;
if (acrossMaterials != null && acrossMaterials.isHovered())
currentFollowDiagonals = !currentFollowDiagonals;
}
if (acrossMaterials != null && acrossMaterials.isHovered()) {
acrossMaterialsIndicator.state = acrossMaterialsIndicator.state == State.OFF ? State.ON : State.OFF;
currentAcrossMaterials = !currentAcrossMaterials;
}
return super.mouseClicked(x, y, button);
}
@ -247,7 +260,7 @@ public class WorldshaperScreen extends ZapperScreen {
protected void drawOnBackground(MatrixStack matrixStack, int x, int y) {
super.drawOnBackground(matrixStack, x, y);
Brush currentBrush = TerrainBrushes.values()[brushInput.getState()].get();
Brush currentBrush = this.currentBrush.get();
for (int index = 2; index >= currentBrush.amtParams; index--)
AllGuiTextures.TERRAINZAPPER_INACTIVE_PARAM.draw(matrixStack, x + 56 + 20 * index, y + 40);
@ -257,20 +270,13 @@ public class WorldshaperScreen extends ZapperScreen {
}
@Override
protected void writeAdditionalOptions(CompoundNBT nbt) {
super.writeAdditionalOptions(nbt);
TerrainBrushes brush = TerrainBrushes.values()[brushInput.getState()];
int param1 = brushParams.get(0)
.getState();
int param2 = followDiagonalsIndicator != null ? followDiagonalsIndicator.state == State.ON ? 0 : 1
: brushParams.get(1)
.getState();
int param3 = acrossMaterialsIndicator != null ? acrossMaterialsIndicator.state == State.ON ? 0 : 1
: brushParams.get(2)
.getState();
NBTHelper.writeEnum(nbt, "Brush", brush);
nbt.put("BrushParams", NBTUtil.writeBlockPos(new BlockPos(param1, param2, param3)));
protected ConfigureZapperPacket getConfigurationPacket() {
int brushParamX = currentBrushParams[0];
int brushParamY = followDiagonalsIndicator != null ? followDiagonalsIndicator.state == State.ON ? 0 : 1
: currentBrushParams[1];
int brushParamZ = acrossMaterialsIndicator != null ? acrossMaterialsIndicator.state == State.ON ? 0 : 1
: currentBrushParams[2];
return new ConfigureWorldshaperPacket(hand, currentPattern, currentBrush, brushParamX, brushParamY, brushParamZ, currentTool, currentPlacement);
}
}

View file

@ -61,7 +61,7 @@ public class AttributeFilterScreen extends AbstractFilterScreen<AttributeFilterC
@Override
protected void init() {
setWindowOffset(-11, 7);
setWindowOffset(-11 + (width % 2 == 0 ? 1 : 0), 7);
super.init();
int x = leftPos;

View file

@ -61,12 +61,12 @@ public interface ItemAttribute {
static ItemAttribute hasColor = register(ColorAttribute.EMPTY);
static ItemAttribute hasFluid = register(FluidContentsAttribute.EMPTY);
static ItemAttribute hasName = register(new ItemNameAttribute("dummy"));
static ItemAttribute bookAuthor = register(new BookAuthorAttribute("dummy"));
static ItemAttribute bookCopy = register(new BookCopyAttribute(-1));
static ItemAttribute astralAmulet = register(new AstralSorceryAmuletAttribute("dummy", -1));
static ItemAttribute astralAttunement = register(new AstralSorceryAttunementAttribute("dummy"));
static ItemAttribute astralCrystal = register(new AstralSorceryCrystalAttribute("dummy"));
static ItemAttribute astralPerkGem = register(new AstralSorceryPerkGemAttribute("dummy"));
static ItemAttribute bookAuthor = register(new BookAuthorAttribute("dummy"));
static ItemAttribute bookCopy = register(new BookCopyAttribute(-1));
static ItemAttribute register(ItemAttribute attributeType) {
types.add(attributeType);
@ -131,12 +131,12 @@ public interface ItemAttribute {
CONSUMABLE(ItemStack::isEdible),
FLUID_CONTAINER(s -> s.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY).isPresent()),
ENCHANTED(ItemStack::isEnchanted),
MAX_ENCHANTED(StandardTraits::maxEnchanted),
RENAMED(ItemStack::hasCustomHoverName),
DAMAGED(ItemStack::isDamaged),
BADLY_DAMAGED(s -> s.isDamaged() && s.getDamageValue() / s.getMaxDamage() > 3 / 4f),
NOT_STACKABLE(((Predicate<ItemStack>) ItemStack::isStackable).negate()),
EQUIPABLE(s -> s.getEquipmentSlot() != null),
MAX_ENCHANTED(StandardTraits::maxEnchanted),
FURNACE_FUEL(AbstractFurnaceTileEntity::isFuel),
WASHABLE(InWorldProcessing::isWashable),
CRUSHABLE((s, w) -> testRecipe(s, w, AllRecipeTypes.CRUSHING.getType())

View file

@ -9,6 +9,7 @@ import static com.simibubi.create.foundation.data.WindowGen.woodenWindowPane;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllSpriteShifts;
import com.simibubi.create.AllTags;
import com.simibubi.create.Create;
import com.simibubi.create.content.AllSections;
import com.simibubi.create.foundation.block.connected.HorizontalCTBehaviour;
@ -113,8 +114,7 @@ public class AllPaletteBlocks {
.register();
public static final BlockEntry<Block> LIMESTONE =
REGISTRATE.baseBlock("limestone", Block::new, () -> Blocks.SANDSTONE, true)
.tag(BlockTags.BASE_STONE_OVERWORLD)
REGISTRATE.paletteStoneBlock("limestone", () -> Blocks.SANDSTONE, true)
.loot(cobblestoneLoot(PaletteStoneVariants.LIMESTONE))
.register();
@ -122,8 +122,7 @@ public class AllPaletteBlocks {
new PalettesVariantEntry(PaletteStoneVariants.LIMESTONE, PaletteBlockPattern.STANDARD_RANGE);
public static final BlockEntry<Block> WEATHERED_LIMESTONE =
REGISTRATE.baseBlock("weathered_limestone", Block::new, () -> Blocks.SANDSTONE, true)
.tag(BlockTags.BASE_STONE_OVERWORLD)
REGISTRATE.paletteStoneBlock("weathered_limestone", () -> Blocks.SANDSTONE, true)
.loot(cobblestoneLoot(PaletteStoneVariants.WEATHERED_LIMESTONE))
.register();
@ -131,8 +130,7 @@ public class AllPaletteBlocks {
PaletteStoneVariants.WEATHERED_LIMESTONE, PaletteBlockPattern.STANDARD_RANGE);
public static final BlockEntry<Block> DOLOMITE =
REGISTRATE.baseBlock("dolomite", Block::new, () -> Blocks.QUARTZ_BLOCK, true)
.tag(BlockTags.BASE_STONE_OVERWORLD)
REGISTRATE.paletteStoneBlock("dolomite", () -> Blocks.QUARTZ_BLOCK, true)
.loot(cobblestoneLoot(PaletteStoneVariants.DOLOMITE))
.register();
@ -140,8 +138,7 @@ public class AllPaletteBlocks {
new PalettesVariantEntry(PaletteStoneVariants.DOLOMITE, PaletteBlockPattern.STANDARD_RANGE);
public static final BlockEntry<Block> GABBRO =
REGISTRATE.baseBlock("gabbro", Block::new, () -> Blocks.ANDESITE, true)
.tag(BlockTags.BASE_STONE_OVERWORLD)
REGISTRATE.paletteStoneBlock("gabbro", () -> Blocks.ANDESITE, true)
.loot(cobblestoneLoot(PaletteStoneVariants.GABBRO))
.register();
@ -149,14 +146,14 @@ public class AllPaletteBlocks {
new PalettesVariantEntry(PaletteStoneVariants.GABBRO, PaletteBlockPattern.STANDARD_RANGE);
public static final BlockEntry<Block> SCORIA =
REGISTRATE.baseBlock("scoria", Block::new, () -> Blocks.ANDESITE, true)
REGISTRATE.paletteStoneBlock("scoria", () -> Blocks.ANDESITE, false)
.loot(cobblestoneLoot(PaletteStoneVariants.SCORIA))
.register();
public static final BlockEntry<Block> NATURAL_SCORIA = REGISTRATE.block("natural_scoria", Block::new)
.initialProperties(() -> Blocks.ANDESITE)
.tag(BlockTags.BASE_STONE_OVERWORLD)
.onRegister(CreateRegistrate.blockVertexColors(new ScoriaVertexColor()))
.tag(BlockTags.BASE_STONE_OVERWORLD, AllTags.AllBlockTags.WG_STONE.tag)
.onRegister(CreateRegistrate.blockVertexColors(ScoriaVertexColor.INSTANCE))
.loot((p, g) -> p.add(g, RegistrateBlockLootTables.droppingWithSilkTouch(g, SCORIA.get())))
.blockstate(palettesCubeAll())
.simpleItem()
@ -166,7 +163,7 @@ public class AllPaletteBlocks {
new PalettesVariantEntry(PaletteStoneVariants.SCORIA, PaletteBlockPattern.STANDARD_RANGE);
public static final BlockEntry<Block> DARK_SCORIA =
REGISTRATE.baseBlock("dark_scoria", Block::new, () -> Blocks.ANDESITE, false)
REGISTRATE.paletteStoneBlock("dark_scoria", () -> Blocks.ANDESITE, false)
.loot(cobblestoneLoot(PaletteStoneVariants.DARK_SCORIA))
.register();

View file

@ -54,6 +54,8 @@ public class PaletteBlockPattern {
}),
POLISHED = create("polished", PREFIX, FOR_POLISHED)
.blockTags(Tags.Blocks.STONE)
.itemTags(Tags.Items.STONE)
.addRecipes(v -> (c, p) -> {
DataIngredient ingredient = DataIngredient.items(v.getBaseBlock().get());
ShapedRecipeBuilder.shaped(c.get(), 4)

View file

@ -5,6 +5,8 @@ import com.simibubi.create.foundation.utility.Color;
public class ScoriaVertexColor implements IBlockVertexColor {
public static final ScoriaVertexColor INSTANCE = new ScoriaVertexColor();
@Override
public int getColor(float x, float y, float z) {
float x2 = (float) Math.floor(z + x - y * .5);

View file

@ -1,20 +0,0 @@
package com.simibubi.create.content.palettes;
import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.color.IBlockColor;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.GrassColors;
import net.minecraft.world.IBlockDisplayReader;
import net.minecraft.world.biome.BiomeColors;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public class StandardFoliageColorHandler implements IBlockColor {
@Override
public int getColor(BlockState state, IBlockDisplayReader light, BlockPos pos, int layer) {
return pos != null && light != null ? BiomeColors.getAverageGrassColor(light, pos) : GrassColors.get(0.5D, 1.0D);
}
}

View file

@ -9,6 +9,7 @@ import java.util.function.BiFunction;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import com.simibubi.create.AllTags;
import com.simibubi.create.Create;
import com.simibubi.create.CreateClient;
import com.simibubi.create.content.AllSections;
@ -40,10 +41,12 @@ import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType;
import net.minecraft.fluid.Fluid;
import net.minecraft.item.Item;
import net.minecraft.tags.BlockTags;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.Tags;
import net.minecraftforge.fluids.FluidAttributes;
import net.minecraftforge.fluids.ForgeFlowingFluid;
import net.minecraftforge.fml.DistExecutor;
@ -138,17 +141,27 @@ public class CreateRegistrate extends AbstractRegistrate<CreateRegistrate> {
/* Palettes */
public <T extends Block> BlockBuilder<T, CreateRegistrate> baseBlock(String name,
NonNullFunction<Properties, T> factory, NonNullSupplier<Block> propertiesFrom, boolean TFworldGen) {
return super.block(name, factory).initialProperties(propertiesFrom)
public <T extends Block> BlockBuilder<T, CreateRegistrate> paletteStoneBlock(String name,
NonNullFunction<Properties, T> factory, NonNullSupplier<Block> propertiesFrom, boolean worldGenStone) {
BlockBuilder<T, CreateRegistrate> builder = super.block(name, factory).initialProperties(propertiesFrom)
.blockstate((c, p) -> {
final String location = "block/palettes/" + c.getName() + "/plain";
p.simpleBlock(c.get(), p.models()
.cubeAll(c.getName(), p.modLoc(location)));
// TODO tag with forge:stone; if TFWorldGen == true tag with forge:wg_stone
// aswell
})
.simpleItem();
.tag(Tags.Blocks.STONE)
.item()
.tag(Tags.Items.STONE)
.build();
if (worldGenStone) {
builder.tag(BlockTags.BASE_STONE_OVERWORLD, AllTags.AllBlockTags.WG_STONE.tag);
}
return builder;
}
public BlockBuilder<Block, CreateRegistrate> paletteStoneBlock(String name,
NonNullSupplier<Block> propertiesFrom, boolean worldGenStone) {
return paletteStoneBlock(name, Block::new, propertiesFrom, worldGenStone);
}
/* Fluids */

View file

@ -22,12 +22,14 @@ import com.simibubi.create.content.contraptions.components.structureMovement.tra
import com.simibubi.create.content.contraptions.fluids.actors.FluidSplashPacket;
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.ConfigureSequencedGearshiftPacket;
import com.simibubi.create.content.curiosities.bell.SoulPulseEffectPacket;
import com.simibubi.create.content.curiosities.symmetry.ConfigureSymmetryWandPacket;
import com.simibubi.create.content.curiosities.symmetry.SymmetryEffectPacket;
import com.simibubi.create.content.curiosities.tools.BlueprintAssignCompleteRecipePacket;
import com.simibubi.create.content.curiosities.tools.ExtendoGripInteractionPacket;
import com.simibubi.create.content.curiosities.weapons.PotatoCannonPacket;
import com.simibubi.create.content.curiosities.weapons.PotatoProjectileTypeManager;
import com.simibubi.create.content.curiosities.zapper.ZapperBeamPacket;
import com.simibubi.create.content.curiosities.zapper.terrainzapper.ConfigureWorldshaperPacket;
import com.simibubi.create.content.logistics.block.depot.EjectorElytraPacket;
import com.simibubi.create.content.logistics.block.depot.EjectorPlacementPacket;
import com.simibubi.create.content.logistics.block.depot.EjectorTriggerPacket;
@ -68,7 +70,6 @@ import net.minecraftforge.fml.network.simple.SimpleChannel;
public enum AllPackets {
// Client to Server
NBT(NbtPacket.class, NbtPacket::new, PLAY_TO_SERVER),
CONFIGURE_SCHEMATICANNON(ConfigureSchematicannonPacket.class, ConfigureSchematicannonPacket::new, PLAY_TO_SERVER),
CONFIGURE_FLEXCRATE(ConfigureFlexcratePacket.class, ConfigureFlexcratePacket::new, PLAY_TO_SERVER),
CONFIGURE_STOCKSWITCH(ConfigureStockswitchPacket.class, ConfigureStockswitchPacket::new, PLAY_TO_SERVER),
@ -97,6 +98,8 @@ public enum AllPackets {
C_CONFIGURE_CONFIG(CConfigureConfigPacket.class, CConfigureConfigPacket::new, PLAY_TO_SERVER),
SUBMIT_GHOST_ITEM(GhostItemSubmitPacket.class, GhostItemSubmitPacket::new, PLAY_TO_SERVER),
BLUEPRINT_COMPLETE_RECIPE(BlueprintAssignCompleteRecipePacket.class, BlueprintAssignCompleteRecipePacket::new, PLAY_TO_SERVER),
CONFIGURE_SYMMETRY_WAND(ConfigureSymmetryWandPacket.class, ConfigureSymmetryWandPacket::new, PLAY_TO_SERVER),
CONFIGURE_WORLDSHAPER(ConfigureWorldshaperPacket.class, ConfigureWorldshaperPacket::new, PLAY_TO_SERVER),
// Server to Client
SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new, PLAY_TO_CLIENT),

View file

@ -1,73 +0,0 @@
package com.simibubi.create.foundation.networking;
import java.util.function.Supplier;
import com.simibubi.create.content.curiosities.symmetry.SymmetryWandItem;
import com.simibubi.create.content.curiosities.zapper.ZapperItem;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.Hand;
import net.minecraftforge.fml.network.NetworkEvent.Context;
@Deprecated
public class NbtPacket extends SimplePacketBase {
public ItemStack stack;
public int slot;
public Hand hand;
public NbtPacket(ItemStack stack, Hand hand) {
this(stack, -1);
this.hand = hand;
}
public NbtPacket(ItemStack stack, int slot) {
this.stack = stack;
this.slot = slot;
this.hand = Hand.MAIN_HAND;
}
public NbtPacket(PacketBuffer buffer) {
stack = buffer.readItem();
slot = buffer.readInt();
hand = Hand.values()[buffer.readInt()];
}
public void write(PacketBuffer buffer) {
buffer.writeItem(stack);
buffer.writeInt(slot);
buffer.writeInt(hand.ordinal());
}
public void handle(Supplier<Context> context) {
context.get()
.enqueueWork(() -> {
ServerPlayerEntity player = context.get()
.getSender();
if (player == null)
return;
if (!(stack.getItem() instanceof SymmetryWandItem || stack.getItem() instanceof ZapperItem)) {
return;
}
stack.removeTagKey("AttributeModifiers");
if (slot == -1) {
ItemStack heldItem = player.getItemInHand(hand);
if (heldItem.getItem() == stack.getItem()) {
heldItem.setTag(stack.getTag());
}
return;
}
ItemStack heldInSlot = player.inventory.getItem(slot);
if (heldInSlot.getItem() == stack.getItem()) {
heldInSlot.setTag(stack.getTag());
}
});
context.get()
.setPacketHandled(true);
}
}

View file

@ -1,40 +0,0 @@
package com.simibubi.create.foundation.utility;
import java.util.Collections;
import java.util.List;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.Tags;
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class EmptyNamedTag<T> implements Tags.IOptionalNamedTag<T> {
private final ResourceLocation id;
public EmptyNamedTag(ResourceLocation id) {
this.id = id;
}
@Override
public boolean isDefaulted() {
return false;
}
@Override
public ResourceLocation getName() {
return id;
}
@Override
public boolean contains(Object p_230235_1_) {
return false;
}
@Override
public List<T> getValues() {
return Collections.emptyList();
}
}

View file

@ -13,6 +13,7 @@ import net.minecraft.nbt.FloatNBT;
import net.minecraft.nbt.INBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraftforge.common.util.Constants.NBT;
public class NBTHelper {
@ -22,13 +23,15 @@ public class NBTHelper {
public static <T extends Enum<?>> T readEnum(CompoundNBT nbt, String key, Class<T> enumClass) {
T[] enumConstants = enumClass.getEnumConstants();
String name = nbt.getString(key);
if (enumConstants == null)
throw new IllegalArgumentException("Non-Enum class passed to readEnum(): " + enumClass.getName());
for (T t : enumConstants) {
if (t.name()
.equals(name))
return t;
throw new IllegalArgumentException("Non-Enum class passed to readEnum: " + enumClass.getName());
if (nbt.contains(key, NBT.TAG_STRING)) {
String name = nbt.getString(key);
for (T t : enumConstants) {
if (t.name()
.equals(name))
return t;
}
}
return enumConstants[0];
}

View file

@ -363,18 +363,14 @@
"create.item_attributes.placeable.inverted": "is not placeable",
"create.item_attributes.consumable": "can be eaten",
"create.item_attributes.consumable.inverted": "cannot be eaten",
"create.item_attributes.smeltable": "can be Smelted",
"create.item_attributes.smeltable.inverted": "cannot be Smelted",
"create.item_attributes.washable": "can be Washed",
"create.item_attributes.washable.inverted": "cannot be Washed",
"create.item_attributes.smokable": "can be Smoked",
"create.item_attributes.smokable.inverted": "cannot be Smoked",
"create.item_attributes.crushable": "can be Crushed",
"create.item_attributes.crushable.inverted": "cannot be Crushed",
"create.item_attributes.blastable": "is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "is not smeltable in Blast Furnace",
"create.item_attributes.fluid_container": "can store fluids",
"create.item_attributes.fluid_container.inverted": "cannot store fluids",
"create.item_attributes.enchanted": "is enchanted",
"create.item_attributes.enchanted.inverted": "is unenchanted",
"create.item_attributes.max_enchanted": "is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "is not enchanted at max level",
"create.item_attributes.renamed": "has a custom name",
"create.item_attributes.renamed.inverted": "does not have a custom name",
"create.item_attributes.damaged": "is damaged",
"create.item_attributes.damaged.inverted": "is not damaged",
"create.item_attributes.badly_damaged": "is heavily damaged",
@ -385,25 +381,33 @@
"create.item_attributes.equipable.inverted": "cannot be equipped",
"create.item_attributes.furnace_fuel": "is furnace fuel",
"create.item_attributes.furnace_fuel.inverted": "is not furnace fuel",
"create.item_attributes.washable": "can be Washed",
"create.item_attributes.washable.inverted": "cannot be Washed",
"create.item_attributes.crushable": "can be Crushed",
"create.item_attributes.crushable.inverted": "cannot be Crushed",
"create.item_attributes.smeltable": "can be Smelted",
"create.item_attributes.smeltable.inverted": "cannot be Smelted",
"create.item_attributes.smokable": "can be Smoked",
"create.item_attributes.smokable.inverted": "cannot be Smoked",
"create.item_attributes.blastable": "is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "is not smeltable in Blast Furnace",
"create.item_attributes.shulker_level": "is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "is shulker not %1$s",
"create.item_attributes.shulker_level.full": "full",
"create.item_attributes.shulker_level.empty": "empty",
"create.item_attributes.shulker_level.partial": "partially filled",
"create.item_attributes.in_tag": "is tagged %1$s",
"create.item_attributes.in_tag.inverted": "is not tagged %1$s",
"create.item_attributes.in_item_group": "is in group '%1$s'",
"create.item_attributes.in_item_group.inverted": "is not in group '%1$s'",
"create.item_attributes.added_by": "was added by %1$s",
"create.item_attributes.added_by.inverted": "was not added by %1$s",
"create.item_attributes.shulker_level": "is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "is shulker not %1$s",
"create.item_attributes.shulker_level.full": "full",
"create.item_attributes.shulker_level.empty": "empty",
"create.item_attributes.shulker_level.partial": "partially filled",
"create.item_attributes.has_enchant": "is enchanted with %1$s",
"create.item_attributes.has_enchant.inverted": "is not enchanted with %1$s",
"create.item_attributes.color": "is dyed %1$s",
"create.item_attributes.color.inverted": "is not dyed %1$s",
"create.item_attributes.max_enchanted": "is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "is not enchanted at max level",
"create.item_attributes.has_fluid": "contains %1$s",
"create.item_attributes.has_fluid.inverted": "does not contain %1$s",
"create.item_attributes.has_name": "has the custom name %1$s",
@ -418,14 +422,14 @@
"create.item_attributes.book_copy_second.inverted": "is not a second-generation copy",
"create.item_attributes.book_copy_tattered": "is a tattered mess",
"create.item_attributes.book_copy_tattered.inverted": "is not a tattered mess",
"create.item_attributes.astralsorcery_crystal": "has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_constellation": "is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "is not attuned to %1$s",
"create.item_attributes.astralsorcery_perk_gem": "has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "does not have perk attribute %1$s",
"create.item_attributes.astralsorcery_amulet": "improves %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "does not improve %1$s",
"create.item_attributes.astralsorcery_constellation": "is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "is not attuned to %1$s",
"create.item_attributes.astralsorcery_crystal": "has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem": "has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "does not have perk attribute %1$s",
"create.gui.attribute_filter.no_selected_attributes": "No attributes selected",
"create.gui.attribute_filter.selected_attributes": "Selected attributes:",
@ -547,6 +551,6 @@
"create.command.killTPSCommand.argument.tickTime": "tickTime",
"create.contraption.minecart_contraption_too_big": "This Cart Contraption seems too big to pick up",
"create.contraption.minecart_contraption_illegal_pickup": "A mystical force is binding this Cart Contraption to the world"
"create.contraption.minecart_contraption_illegal_pickup": "A mystical force is binding this Cart Contraption to the world"
}