mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-03-05 10:00:00 +01:00
Merge branch 'mc1.16/dev' into mc1.16/toolbox
This commit is contained in:
commit
b0143d604d
108 changed files with 1862 additions and 1207 deletions
|
@ -427,19 +427,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
|
|||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
337227971382d97fbaa69170e0b6bcc621bdc494 assets/create/lang/en_ud.json
|
||||
4da832d10fb5bacf10c564bc4f828cdc6592d56c assets/create/lang/en_us.json
|
||||
31064dd15c813975de6dbe771a94b2fff87d7c84 assets/create/lang/unfinished/de_de.json
|
||||
785119499208f5a35c4f77a1d189ac78394a133a assets/create/lang/unfinished/es_es.json
|
||||
7fb3d9f560b08e7d7e4b0e51f7f789ac2eeb3af8 assets/create/lang/unfinished/fr_fr.json
|
||||
e418df14fbcd15e4b87024dbe4bda97ef1544f47 assets/create/lang/unfinished/it_it.json
|
||||
95d0baec2d79b914b3aecbfdc6dde970722c552c assets/create/lang/unfinished/ja_jp.json
|
||||
4fa09f736a742db2d843b0880edc5d607f28d80e assets/create/lang/unfinished/ko_kr.json
|
||||
757ac709807bdb1322da17f27e0853de552638d1 assets/create/lang/unfinished/nl_nl.json
|
||||
9b5bc245e4795d86eb27fa35670cd4f261c07576 assets/create/lang/unfinished/pl_pl.json
|
||||
aaa1e873003b446858fc8bae839db4d0b293472e assets/create/lang/unfinished/pt_br.json
|
||||
9745c2d6a2e8fc50648399785eb10cc8b125bd1d assets/create/lang/unfinished/ru_ru.json
|
||||
b04454180b5b4af323009e33c3ba5b163b4e63c1 assets/create/lang/unfinished/zh_cn.json
|
||||
ce4759ba4aa4ec9e0c24242796ac04b43f4b9a04 assets/create/lang/unfinished/zh_tw.json
|
||||
6fbddf85df18d5d543c61e75ca0df197020717c3 assets/create/lang/en_us.json
|
||||
f595a194a0cf13b78a54dd2992fb9800c03c6069 assets/create/lang/unfinished/de_de.json
|
||||
49ef2d0d2367adbbecb84e43c966fdee1601a8a9 assets/create/lang/unfinished/es_es.json
|
||||
20671957a67f5161d8036a04017d1eca5af12c90 assets/create/lang/unfinished/fr_fr.json
|
||||
59750f2614d4f4cb7c8a3948c7ca4b92eac6edf8 assets/create/lang/unfinished/it_it.json
|
||||
bb413333dbb4a7a9c6246c919c33acd16682deb9 assets/create/lang/unfinished/ja_jp.json
|
||||
01b3861f93f426d896a9a840d8e39077c3bf5911 assets/create/lang/unfinished/ko_kr.json
|
||||
cebabb4ac874fb1f3030d0146c840bcd3837851d assets/create/lang/unfinished/nl_nl.json
|
||||
5da7bb73717a274e1a5a232f9f9f31263f6b1e35 assets/create/lang/unfinished/pl_pl.json
|
||||
bd556bc413d98056b4cf13b324b929ad1f204232 assets/create/lang/unfinished/pt_br.json
|
||||
80e7c074afb6aed7ff23d67d6d15f2e277008660 assets/create/lang/unfinished/ru_ru.json
|
||||
e60e773410c1c736fac37e0ae5a8ad14290621cc assets/create/lang/unfinished/zh_cn.json
|
||||
ca8139f0563e2910b6a74d8af39cea6cc5045a74 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
|
||||
|
@ -1701,7 +1701,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
|
||||
|
@ -3760,19 +3760,23 @@ bce28787b0271382842823d04a977912a88b01c2 data/create/tags/items/sandpaper.json
|
|||
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/items/seats.json
|
||||
2f4044c2989b9a8aa394c88617d67a6a310e6b1b data/create/tags/items/upright_on_belt.json
|
||||
50936b211d94167a35ec78c89954082a336b6269 data/create/tags/items/valve_handles.json
|
||||
05ca51cdc60a5e109b5a0e3b782de13d34ebcb24 data/forge/tags/blocks/cobblestone.json
|
||||
16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/blocks/glass/colorless.json
|
||||
81d3eb40b048160fcc2d6bb7ff12b49276297efd data/forge/tags/blocks/glass_panes.json
|
||||
4b700ee8aa748c2ec70c29ef1589844879c0deae data/forge/tags/blocks/ores.json
|
||||
4a0b13a9835106de9a1dd0a71a02372abb48e7b6 data/forge/tags/blocks/ores/copper.json
|
||||
d5ea262a0f5fb210612d22521818e26cf08e591a data/forge/tags/blocks/ores/zinc.json
|
||||
55196ee770ad20602211e26864dd62a58b2e985c data/forge/tags/blocks/stone.json
|
||||
508730d3822c54d355329bf6a33d58071653afad data/forge/tags/blocks/storage_blocks.json
|
||||
ff1900963bc4cd8ceffa78d58ef1952ceacb2fb7 data/forge/tags/blocks/storage_blocks/brass.json
|
||||
f6c8f34ceb475546dba5cc6ff288863ea795d20b data/forge/tags/blocks/storage_blocks/copper.json
|
||||
7f71a774800111e50b42de0e6159ed2d2a807d32 data/forge/tags/blocks/storage_blocks/zinc.json
|
||||
2072c51afc5bbc6c9d64fd086803193d8a3c40de data/forge/tags/blocks/wg_stone.json
|
||||
6b73c57912934d09233ad2966110968a6109f2c9 data/forge/tags/fluids/chocolate.json
|
||||
391c9b2be5740aea943a8a5fe27eb327e2d973b0 data/forge/tags/fluids/honey.json
|
||||
d6a4e4fe1204b718010543a28a9b9ec4e0977bd7 data/forge/tags/fluids/tea.json
|
||||
d9ffc62a496946fc4848934e7c0a6e917337f8be data/forge/tags/items/beacon_payment.json
|
||||
5af3164b14c92d2d6e235b5d4eebd93cbee37c0a data/forge/tags/items/buckets/honey.json
|
||||
05ca51cdc60a5e109b5a0e3b782de13d34ebcb24 data/forge/tags/items/cobblestone.json
|
||||
16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/items/glass/colorless.json
|
||||
81d3eb40b048160fcc2d6bb7ff12b49276297efd data/forge/tags/items/glass_panes.json
|
||||
|
@ -3792,6 +3796,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
|
||||
|
|
|
@ -753,6 +753,7 @@
|
|||
"create.recipe.assembly.repeat": "Repeat Sequence %1$s Times",
|
||||
"create.recipe.assembly.junk": "Random salvage",
|
||||
"create.recipe.processing.chance": "%1$s%% Chance",
|
||||
"create.recipe.deploying.not_consumed": "Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "No Heating Required",
|
||||
"create.recipe.heat_requirement.heated": "Heated",
|
||||
"create.recipe.heat_requirement.superheated": "Super-Heated",
|
||||
|
@ -1044,18 +1045,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",
|
||||
|
@ -1066,23 +1063,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",
|
||||
|
@ -1097,14 +1102,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:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1140",
|
||||
"_": "Missing Localizations: 1145",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
|
||||
"create.recipe.assembly.junk": "UNLOCALIZED: Random salvage",
|
||||
"create.recipe.processing.chance": "Chance: %1$s%%",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "Keine Hitze benötigt",
|
||||
"create.recipe.heat_requirement.heated": "Wenig Hitze benötigt",
|
||||
"create.recipe.heat_requirement.superheated": "Viel Hitze benötigt",
|
||||
|
@ -1045,18 +1046,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",
|
||||
|
@ -1067,23 +1064,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",
|
||||
|
@ -1098,14 +1103,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:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 6",
|
||||
"_": "Missing Localizations: 11",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "Repetir la secuencia %1$s veces",
|
||||
"create.recipe.assembly.junk": "Basura aleatoria",
|
||||
"create.recipe.processing.chance": "%1$s%% Chance",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "No es necesario calentar",
|
||||
"create.recipe.heat_requirement.heated": "Calentado",
|
||||
"create.recipe.heat_requirement.superheated": "Súper-Calentado",
|
||||
|
@ -1045,18 +1046,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",
|
||||
|
@ -1067,23 +1064,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",
|
||||
|
@ -1098,14 +1103,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:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1392",
|
||||
"_": "Missing Localizations: 1397",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
|
||||
"create.recipe.assembly.junk": "UNLOCALIZED: Random salvage",
|
||||
"create.recipe.processing.chance": "%1$s%% de chance",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "Pas de chauffage requis",
|
||||
"create.recipe.heat_requirement.heated": "Chauffé",
|
||||
"create.recipe.heat_requirement.superheated": "Surchauffé",
|
||||
|
@ -1045,18 +1046,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",
|
||||
|
@ -1067,23 +1064,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",
|
||||
|
@ -1098,14 +1103,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:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 920",
|
||||
"_": "Missing Localizations: 925",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
|
||||
"create.recipe.assembly.junk": "UNLOCALIZED: Random salvage",
|
||||
"create.recipe.processing.chance": "%1$s%% di probabilità",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "Nessun riscaldamento",
|
||||
"create.recipe.heat_requirement.heated": "Riscaldamento",
|
||||
"create.recipe.heat_requirement.superheated": "Super riscaldamento",
|
||||
|
@ -1045,18 +1046,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",
|
||||
|
@ -1067,23 +1064,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",
|
||||
|
@ -1098,14 +1103,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:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 15",
|
||||
"_": "Missing Localizations: 20",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "%1$s回繰り返す",
|
||||
"create.recipe.assembly.junk": "ランダムな仕損品",
|
||||
"create.recipe.processing.chance": "%1$s%%チャンス",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "加熱不要",
|
||||
"create.recipe.heat_requirement.heated": "加熱が必要",
|
||||
"create.recipe.heat_requirement.superheated": "極度の加熱が必要",
|
||||
|
@ -1045,18 +1046,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": "ひどく損傷してるか",
|
||||
|
@ -1067,23 +1064,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の名前が付けられているか",
|
||||
|
@ -1098,14 +1103,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": "選択された属性:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 30",
|
||||
"_": "Missing Localizations: 35",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "%1$s번 반복하기",
|
||||
"create.recipe.assembly.junk": "조립 실패한 조각들",
|
||||
"create.recipe.processing.chance": "%1$s%% 확률",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "열이 필요하지 않음",
|
||||
"create.recipe.heat_requirement.heated": "가열됨",
|
||||
"create.recipe.heat_requirement.superheated": "초고온 가열됨",
|
||||
|
@ -1045,18 +1046,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": "심각하게 내구도가 닮",
|
||||
|
@ -1067,23 +1064,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이라는 이름을 갖고 있음",
|
||||
|
@ -1098,14 +1103,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": "선택된 속성:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1772",
|
||||
"_": "Missing Localizations: 1777",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
|
||||
"create.recipe.assembly.junk": "UNLOCALIZED: Random salvage",
|
||||
"create.recipe.processing.chance": "%1$s%% Kans",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
|
||||
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
|
||||
"create.recipe.heat_requirement.superheated": "UNLOCALIZED: Super-Heated",
|
||||
|
@ -1045,18 +1046,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",
|
||||
|
@ -1067,23 +1064,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",
|
||||
|
@ -1098,14 +1103,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:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 262",
|
||||
"_": "Missing Localizations: 267",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
|
||||
"create.recipe.assembly.junk": "UNLOCALIZED: Random salvage",
|
||||
"create.recipe.processing.chance": "%1$s%% szans",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "Nie wymaga podgrzewania",
|
||||
"create.recipe.heat_requirement.heated": "Podrzewane",
|
||||
"create.recipe.heat_requirement.superheated": "Silnie podgrzewane",
|
||||
|
@ -1045,18 +1046,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",
|
||||
|
@ -1067,23 +1064,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",
|
||||
|
@ -1098,14 +1103,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:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1813",
|
||||
"_": "Missing Localizations: 1818",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times",
|
||||
"create.recipe.assembly.junk": "UNLOCALIZED: Random salvage",
|
||||
"create.recipe.processing.chance": "%1$s%% de chance",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
|
||||
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
|
||||
"create.recipe.heat_requirement.superheated": "UNLOCALIZED: Super-Heated",
|
||||
|
@ -1045,18 +1046,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",
|
||||
|
@ -1067,23 +1064,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",
|
||||
|
@ -1098,14 +1103,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:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 11",
|
||||
"_": "Missing Localizations: 16",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "Повторите последовательность %1$s раз",
|
||||
"create.recipe.assembly.junk": "Случайный мусор",
|
||||
"create.recipe.processing.chance": "%1$s%% шанса",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "Не требует нагрева",
|
||||
"create.recipe.heat_requirement.heated": "Нагрето",
|
||||
"create.recipe.heat_requirement.superheated": "Перегрето",
|
||||
|
@ -1045,18 +1046,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": "сильно повреждён",
|
||||
|
@ -1067,23 +1064,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",
|
||||
|
@ -1098,14 +1103,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": "Выбранные атрибуты:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 10",
|
||||
"_": "Missing Localizations: 15",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "该序列需要重复 %1$s 次",
|
||||
"create.recipe.assembly.junk": "随机废料",
|
||||
"create.recipe.processing.chance": "%1$s%%概率",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "无需加热",
|
||||
"create.recipe.heat_requirement.heated": "加热",
|
||||
"create.recipe.heat_requirement.superheated": "超级加热",
|
||||
|
@ -1045,18 +1046,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": "严重受损",
|
||||
|
@ -1067,23 +1064,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",
|
||||
|
@ -1098,14 +1103,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": "已选择的属性:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 25",
|
||||
"_": "Missing Localizations: 30",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -754,6 +754,7 @@
|
|||
"create.recipe.assembly.repeat": "重複 %1$s 次",
|
||||
"create.recipe.assembly.junk": "有機率得到垃圾",
|
||||
"create.recipe.processing.chance": "%1$s%%概率",
|
||||
"create.recipe.deploying.not_consumed": "UNLOCALIZED: Not Consumed",
|
||||
"create.recipe.heat_requirement.none": "不需要加熱",
|
||||
"create.recipe.heat_requirement.heated": "普通加熱",
|
||||
"create.recipe.heat_requirement.superheated": "超級加熱",
|
||||
|
@ -1045,18 +1046,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": "嚴重受損",
|
||||
|
@ -1067,23 +1064,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",
|
||||
|
@ -1098,14 +1103,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": "已選擇的屬性:",
|
||||
|
|
|
@ -28,8 +28,8 @@
|
|||
"trigger": "create:bracket_apply",
|
||||
"conditions": {
|
||||
"accepted_entries": [
|
||||
"create:cogwheel",
|
||||
"create:large_cogwheel"
|
||||
"create:large_cogwheel",
|
||||
"create:cogwheel"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"create:granite_cobblestone",
|
||||
"create:diorite_cobblestone",
|
||||
"create:andesite_cobblestone",
|
||||
"create:limestone_cobblestone",
|
||||
"create:weathered_limestone_cobblestone",
|
||||
"create:dolomite_cobblestone",
|
||||
"create:gabbro_cobblestone",
|
||||
"create:scoria_cobblestone",
|
||||
"create:dark_scoria_cobblestone"
|
||||
]
|
||||
}
|
|
@ -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",
|
|
@ -3,8 +3,8 @@
|
|||
"values": [
|
||||
"create:limestone",
|
||||
"create:weathered_limestone",
|
||||
"create:gabbro",
|
||||
"create:dolomite",
|
||||
"create:gabbro",
|
||||
"create:natural_scoria"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"create:honey_bucket"
|
||||
]
|
||||
}
|
|
@ -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",
|
|
@ -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 =
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.simibubi.create;
|
|||
import static com.simibubi.create.AllTags.forgeItemTag;
|
||||
import static com.simibubi.create.AllTags.AllItemTags.CREATE_INGOTS;
|
||||
import static com.simibubi.create.AllTags.AllItemTags.CRUSHED_ORES;
|
||||
import static com.simibubi.create.AllTags.AllItemTags.NUGGETS;
|
||||
import static com.simibubi.create.AllTags.AllItemTags.PLATES;
|
||||
import static com.simibubi.create.content.AllSections.CURIOSITIES;
|
||||
import static com.simibubi.create.content.AllSections.KINETICS;
|
||||
|
@ -64,6 +63,7 @@ import net.minecraft.item.Rarity;
|
|||
import net.minecraft.tags.ITag;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.common.Tags;
|
||||
|
||||
public class AllItems {
|
||||
|
||||
|
@ -167,9 +167,9 @@ public class AllItems {
|
|||
.register();
|
||||
|
||||
public static final ItemEntry<Item> COPPER_NUGGET =
|
||||
taggedIngredient("copper_nugget", forgeItemTag("nuggets/copper"), NUGGETS.tag),
|
||||
ZINC_NUGGET = taggedIngredient("zinc_nugget", forgeItemTag("nuggets/zinc"), NUGGETS.tag),
|
||||
BRASS_NUGGET = taggedIngredient("brass_nugget", forgeItemTag("nuggets/brass"), NUGGETS.tag),
|
||||
taggedIngredient("copper_nugget", forgeItemTag("nuggets/copper"), Tags.Items.NUGGETS),
|
||||
ZINC_NUGGET = taggedIngredient("zinc_nugget", forgeItemTag("nuggets/zinc"), Tags.Items.NUGGETS),
|
||||
BRASS_NUGGET = taggedIngredient("brass_nugget", forgeItemTag("nuggets/brass"), Tags.Items.NUGGETS),
|
||||
|
||||
COPPER_SHEET = taggedIngredient("copper_sheet", forgeItemTag("plates/copper"), PLATES.tag),
|
||||
BRASS_SHEET = taggedIngredient("brass_sheet", forgeItemTag("plates/brass"), PLATES.tag),
|
||||
|
|
|
@ -18,7 +18,7 @@ public enum AllSpecialTextures {
|
|||
private ResourceLocation location;
|
||||
|
||||
private AllSpecialTextures(String filename) {
|
||||
location = new ResourceLocation(Create.ID, ASSET_PATH + filename);
|
||||
location = Create.asResource(ASSET_PATH + filename);
|
||||
}
|
||||
|
||||
public void bind() {
|
||||
|
|
|
@ -78,7 +78,7 @@ public class AllSpriteShifts {
|
|||
//
|
||||
|
||||
private static void populateMaps() {
|
||||
WoodType[] supportedWoodTypes = new WoodType[]{
|
||||
WoodType[] supportedWoodTypes = new WoodType[] {
|
||||
WoodType.OAK, WoodType.SPRUCE, WoodType.BIRCH, WoodType.ACACIA, WoodType.JUNGLE, WoodType.DARK_OAK,
|
||||
WoodType.CRIMSON, WoodType.WARPED
|
||||
};
|
||||
|
|
|
@ -7,7 +7,6 @@ import static com.simibubi.create.AllTags.NameSpace.TIC;
|
|||
import java.util.function.Function;
|
||||
|
||||
import com.simibubi.create.foundation.data.CreateRegistrate;
|
||||
import com.simibubi.create.foundation.utility.EmptyNamedTag;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.tterrag.registrate.builders.BlockBuilder;
|
||||
import com.tterrag.registrate.builders.ItemBuilder;
|
||||
|
@ -27,78 +26,185 @@ import net.minecraft.tags.FluidTags;
|
|||
import net.minecraft.tags.ITag;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.fml.ModList;
|
||||
import net.minecraftforge.common.Tags;
|
||||
|
||||
public class AllTags {
|
||||
|
||||
private static final CreateRegistrate REGISTRATE = Create.registrate()
|
||||
.itemGroup(() -> Create.BASE_CREATIVE_TAB);
|
||||
.itemGroup(() -> Create.BASE_CREATIVE_TAB);
|
||||
|
||||
public static <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));
|
||||
.tag(forgeItemTag(path));
|
||||
}
|
||||
|
||||
public static ITag.INamedTag<Block> forgeBlockTag(String name) {
|
||||
return forgeTag(BlockTags::bind, name);
|
||||
}
|
||||
public enum NameSpace {
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
public static enum NameSpace {
|
||||
|
||||
MOD(Create.ID), FORGE("forge"), MC("minecraft"), TIC("tconstruct")
|
||||
MOD(Create.ID, false, true),
|
||||
FORGE("forge"),
|
||||
TIC("tconstruct")
|
||||
|
||||
;
|
||||
|
||||
String id;
|
||||
public final String id;
|
||||
public final boolean optionalDefault;
|
||||
public final boolean alwaysDatagenDefault;
|
||||
|
||||
private NameSpace(String id) {
|
||||
NameSpace(String id) {
|
||||
this(id, true, false);
|
||||
}
|
||||
|
||||
NameSpace(String id, boolean optionalDefault, boolean alwaysDatagenDefault) {
|
||||
this.id = id;
|
||||
this.optionalDefault = optionalDefault;
|
||||
this.alwaysDatagenDefault = alwaysDatagenDefault;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static enum AllItemTags {
|
||||
CRUSHED_ORES(MOD),
|
||||
SEATS(MOD),
|
||||
VALVE_HANDLES(MOD),
|
||||
UPRIGHT_ON_BELT(MOD),
|
||||
SANDPAPER(MOD),
|
||||
CREATE_INGOTS(MOD),
|
||||
BEACON_PAYMENT(FORGE),
|
||||
INGOTS(FORGE),
|
||||
NUGGETS(FORGE),
|
||||
PLATES(FORGE),
|
||||
COBBLESTONE(FORGE)
|
||||
public enum AllBlockTags {
|
||||
|
||||
BRITTLE,
|
||||
FAN_HEATERS,
|
||||
FAN_TRANSPARENT,
|
||||
SAFE_NBT,
|
||||
SAILS,
|
||||
SEATS,
|
||||
VALVE_HANDLES,
|
||||
WINDMILL_SAILS,
|
||||
WINDOWABLE,
|
||||
WRENCH_PICKUP,
|
||||
|
||||
WG_STONE(FORGE),
|
||||
|
||||
SLIMY_LOGS(TIC),
|
||||
|
||||
;
|
||||
|
||||
public ITag.INamedTag<Item> tag;
|
||||
public final ITag.INamedTag<Block> tag;
|
||||
|
||||
private AllItemTags(NameSpace namespace) {
|
||||
this(namespace, "");
|
||||
AllBlockTags() {
|
||||
this(MOD);
|
||||
}
|
||||
|
||||
private AllItemTags(NameSpace namespace, String path) {
|
||||
tag = ItemTags.bind(
|
||||
new ResourceLocation(namespace.id, (path.isEmpty() ? "" : path + "/") + Lang.asId(name())).toString());
|
||||
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag));
|
||||
AllBlockTags(NameSpace namespace) {
|
||||
this(namespace, namespace.optionalDefault, namespace.alwaysDatagenDefault);
|
||||
}
|
||||
|
||||
AllBlockTags(NameSpace namespace, String path) {
|
||||
this(namespace, path, namespace.optionalDefault, namespace.alwaysDatagenDefault);
|
||||
}
|
||||
|
||||
AllBlockTags(NameSpace namespace, boolean optional, boolean alwaysDatagen) {
|
||||
this(namespace, null, optional, alwaysDatagen);
|
||||
}
|
||||
|
||||
AllBlockTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) {
|
||||
ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path);
|
||||
if (optional) {
|
||||
tag = BlockTags.createOptional(id);
|
||||
} else {
|
||||
tag = BlockTags.bind(id.toString());
|
||||
}
|
||||
if (alwaysDatagen) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag));
|
||||
}
|
||||
}
|
||||
|
||||
public boolean matches(Block block) {
|
||||
return tag.contains(block.getBlock());
|
||||
}
|
||||
|
||||
public boolean matches(BlockState state) {
|
||||
return matches(state.getBlock());
|
||||
}
|
||||
|
||||
public void add(Block... values) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)
|
||||
.add(values));
|
||||
}
|
||||
|
||||
public void includeIn(ITag.INamedTag<Block> parent) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(parent)
|
||||
.addTag(tag));
|
||||
}
|
||||
|
||||
public void includeIn(AllBlockTags parent) {
|
||||
includeIn(parent.tag);
|
||||
}
|
||||
|
||||
public void includeAll(ITag.INamedTag<Block> child) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)
|
||||
.addTag(child));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public enum AllItemTags {
|
||||
|
||||
CREATE_INGOTS,
|
||||
CRUSHED_ORES,
|
||||
SANDPAPER,
|
||||
SEATS,
|
||||
UPRIGHT_ON_BELT,
|
||||
VALVE_HANDLES,
|
||||
|
||||
BEACON_PAYMENT(FORGE),
|
||||
PLATES(FORGE)
|
||||
|
||||
;
|
||||
|
||||
public final ITag.INamedTag<Item> tag;
|
||||
|
||||
AllItemTags() {
|
||||
this(MOD);
|
||||
}
|
||||
|
||||
AllItemTags(NameSpace namespace) {
|
||||
this(namespace, namespace.optionalDefault, namespace.alwaysDatagenDefault);
|
||||
}
|
||||
|
||||
AllItemTags(NameSpace namespace, String path) {
|
||||
this(namespace, path, namespace.optionalDefault, namespace.alwaysDatagenDefault);
|
||||
}
|
||||
|
||||
AllItemTags(NameSpace namespace, boolean optional, boolean alwaysDatagen) {
|
||||
this(namespace, null, optional, alwaysDatagen);
|
||||
}
|
||||
|
||||
AllItemTags(NameSpace namespace, String path, boolean optional, boolean alwaysDatagen) {
|
||||
ResourceLocation id = new ResourceLocation(namespace.id, path == null ? Lang.asId(name()) : path);
|
||||
if (optional) {
|
||||
tag = ItemTags.createOptional(id);
|
||||
} else {
|
||||
tag = ItemTags.bind(id.toString());
|
||||
}
|
||||
if (alwaysDatagen) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag));
|
||||
}
|
||||
}
|
||||
|
||||
public boolean matches(ItemStack stack) {
|
||||
|
@ -110,101 +216,92 @@ public class AllTags {
|
|||
.add(values));
|
||||
}
|
||||
|
||||
public void includeIn(AllItemTags parent) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(parent.tag)
|
||||
public void includeIn(ITag.INamedTag<Item> parent) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(parent)
|
||||
.addTag(tag));
|
||||
}
|
||||
|
||||
public void includeIn(AllItemTags parent) {
|
||||
includeIn(parent.tag);
|
||||
}
|
||||
|
||||
public void includeAll(ITag.INamedTag<Item> child) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag)
|
||||
.addTag(child));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static enum AllFluidTags {
|
||||
NO_INFINITE_DRAINING,
|
||||
public enum AllFluidTags {
|
||||
|
||||
NO_INFINITE_DRAINING(MOD, true, false),
|
||||
|
||||
HONEY(FORGE)
|
||||
|
||||
;
|
||||
|
||||
public ITag.INamedTag<Fluid> tag;
|
||||
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);
|
||||
}
|
||||
|
||||
static void loadClass() {}
|
||||
}
|
||||
|
||||
public static enum AllBlockTags {
|
||||
WINDMILL_SAILS,
|
||||
FAN_HEATERS,
|
||||
WINDOWABLE,
|
||||
BRITTLE,
|
||||
SEATS,
|
||||
SAILS,
|
||||
VALVE_HANDLES,
|
||||
FAN_TRANSPARENT,
|
||||
SAFE_NBT,
|
||||
SLIMY_LOGS(TIC),
|
||||
WRENCH_PICKUP,
|
||||
|
||||
;
|
||||
|
||||
public ITag.INamedTag<Block> tag;
|
||||
|
||||
private AllBlockTags() {
|
||||
this(MOD, "");
|
||||
public void add(Fluid... values) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(tag)
|
||||
.add(values));
|
||||
}
|
||||
|
||||
private AllBlockTags(NameSpace namespace) {
|
||||
this(namespace, "");
|
||||
}
|
||||
|
||||
private AllBlockTags(NameSpace namespace, String path) {
|
||||
ResourceLocation id =
|
||||
new ResourceLocation(namespace.id, (path.isEmpty() ? "" : path + "/") + Lang.asId(name()));
|
||||
if (ModList.get()
|
||||
.isLoaded(namespace.id)) {
|
||||
tag = BlockTags.bind(id.toString());
|
||||
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag));
|
||||
} else {
|
||||
tag = new EmptyNamedTag<>(id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean matches(BlockState block) {
|
||||
return tag.contains(block.getBlock());
|
||||
}
|
||||
|
||||
public void includeIn(AllBlockTags parent) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(parent.tag)
|
||||
public void includeIn(ITag.INamedTag<Fluid> parent) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.FLUID_TAGS, prov -> prov.tag(parent)
|
||||
.addTag(tag));
|
||||
}
|
||||
|
||||
public void includeAll(ITag.INamedTag<Block> child) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(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));
|
||||
}
|
||||
|
||||
public void add(Block... values) {
|
||||
REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)
|
||||
.add(values));
|
||||
}
|
||||
private static void loadClass() {}
|
||||
|
||||
}
|
||||
|
||||
public static void register() {
|
||||
AllFluidTags.loadClass();
|
||||
|
||||
AllItemTags.CREATE_INGOTS.includeIn(AllItemTags.BEACON_PAYMENT);
|
||||
AllItemTags.CREATE_INGOTS.includeIn(AllItemTags.INGOTS);
|
||||
AllItemTags.CREATE_INGOTS.includeIn(Tags.Items.INGOTS);
|
||||
|
||||
AllItemTags.UPRIGHT_ON_BELT.add(Items.GLASS_BOTTLE, Items.POTION, Items.SPLASH_POTION, Items.LINGERING_POTION,
|
||||
Items.HONEY_BOTTLE, Items.CAKE);
|
||||
|
@ -228,7 +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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour;
|
|||
import com.simibubi.create.content.CreateItemGroup;
|
||||
import com.simibubi.create.content.contraptions.TorquePropagator;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.CapabilityMinecartController;
|
||||
import com.simibubi.create.content.curiosities.weapons.PotatoCannonProjectileTypes;
|
||||
import com.simibubi.create.content.curiosities.weapons.BuiltinPotatoProjectileTypes;
|
||||
import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler;
|
||||
import com.simibubi.create.content.palettes.AllPaletteBlocks;
|
||||
import com.simibubi.create.content.palettes.PalettesItemGroup;
|
||||
|
@ -121,7 +121,7 @@ public class Create {
|
|||
CapabilityMinecartController.register();
|
||||
AllPackets.registerPackets();
|
||||
SchematicInstances.register();
|
||||
PotatoCannonProjectileTypes.register();
|
||||
BuiltinPotatoProjectileTypes.register();
|
||||
|
||||
CHUNK_UTIL.init();
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ import net.minecraftforge.fml.ModList;
|
|||
@SuppressWarnings("unused")
|
||||
public class CreateJEI implements IModPlugin {
|
||||
|
||||
private static final ResourceLocation ID = new ResourceLocation(Create.ID, "jei_plugin");
|
||||
private static final ResourceLocation ID = Create.asResource("jei_plugin");
|
||||
|
||||
public IIngredientManager ingredientManager;
|
||||
private final List<CreateRecipeCategory<?>> allCategories = new ArrayList<>();
|
||||
|
|
|
@ -45,7 +45,7 @@ public abstract class CreateRecipeCategory<T extends IRecipe<?>> implements IRec
|
|||
}
|
||||
|
||||
public void setCategoryId(String name) {
|
||||
this.uid = new ResourceLocation(Create.ID, name);
|
||||
this.uid = Create.asResource(name);
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,11 +9,13 @@ import com.simibubi.create.compat.jei.category.animations.AnimatedDeployer;
|
|||
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
|
||||
import com.simibubi.create.foundation.fluid.FluidIngredient;
|
||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
||||
import mezz.jei.api.constants.VanillaTypes;
|
||||
import mezz.jei.api.gui.IRecipeLayout;
|
||||
import mezz.jei.api.gui.ingredient.IGuiItemStackGroup;
|
||||
import mezz.jei.api.ingredients.IIngredients;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
|
||||
public class DeployingCategory extends CreateRecipeCategory<DeployerApplicationRecipe> {
|
||||
|
||||
|
@ -53,7 +55,18 @@ public class DeployingCategory extends CreateRecipeCategory<DeployerApplicationR
|
|||
.getItems()));
|
||||
itemStacks.init(2, false, 131, 50);
|
||||
itemStacks.set(2, recipe.getResultItem());
|
||||
|
||||
|
||||
if (recipe.shouldKeepHeldItem()) {
|
||||
itemStacks.addTooltipCallback((slotIndex, input, ingredient, tooltip) -> {
|
||||
if (!input)
|
||||
return;
|
||||
if (slotIndex != 1)
|
||||
return;
|
||||
tooltip.add(1, Lang.translate("recipe.deploying.not_consumed")
|
||||
.withStyle(TextFormatting.GOLD));
|
||||
});
|
||||
}
|
||||
|
||||
addStochasticTooltip(itemStacks, recipe.getRollableResults(), 2);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,12 +10,16 @@ import com.simibubi.create.compat.jei.category.animations.AnimatedDeployer;
|
|||
import com.simibubi.create.compat.jei.category.animations.AnimatedPress;
|
||||
import com.simibubi.create.compat.jei.category.animations.AnimatedSaw;
|
||||
import com.simibubi.create.compat.jei.category.animations.AnimatedSpout;
|
||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
|
||||
import com.simibubi.create.content.contraptions.itemAssembly.IAssemblyRecipe;
|
||||
import com.simibubi.create.content.contraptions.itemAssembly.SequencedRecipe;
|
||||
import com.simibubi.create.foundation.fluid.FluidIngredient;
|
||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
||||
import mezz.jei.api.gui.ingredient.IGuiFluidStackGroup;
|
||||
import mezz.jei.api.gui.ingredient.IGuiItemStackGroup;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
|
||||
public abstract class SequencedAssemblySubCategory {
|
||||
|
||||
|
@ -115,6 +119,19 @@ public abstract class SequencedAssemblySubCategory {
|
|||
.getIngredients()
|
||||
.get(1)
|
||||
.getItems()));
|
||||
|
||||
IAssemblyRecipe contained = recipe.getAsAssemblyRecipe();
|
||||
if (contained instanceof DeployerApplicationRecipe && ((DeployerApplicationRecipe) contained).shouldKeepHeldItem()) {
|
||||
itemStacks.addTooltipCallback((slotIndex, input, ingredient, tooltip) -> {
|
||||
if (!input)
|
||||
return;
|
||||
if (slotIndex != index)
|
||||
return;
|
||||
tooltip.add(1, Lang.translate("recipe.deploying.not_consumed")
|
||||
.withStyle(TextFormatting.GOLD));
|
||||
});
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.simibubi.create.content.contraptions.base;
|
||||
|
||||
import com.jozufozu.flywheel.backend.instancing.Instancer;
|
||||
import com.jozufozu.flywheel.backend.material.InstanceMaterial;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.simibubi.create.foundation.render.AllMaterialSpecs;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package com.simibubi.create.content.contraptions.base;
|
||||
|
||||
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance;
|
||||
import com.jozufozu.flywheel.backend.material.InstanceMaterial;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel;
|
||||
import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock;
|
||||
|
|
|
@ -45,6 +45,11 @@ public class BeltDeployerCallbacks {
|
|||
if (deployerTileEntity.redstoneLocked)
|
||||
return ProcessingResult.PASS;
|
||||
|
||||
DeployerFakePlayer player = deployerTileEntity.getPlayer();
|
||||
ItemStack held = player == null ? ItemStack.EMPTY : player.getMainHandItem();
|
||||
|
||||
if (held.isEmpty())
|
||||
return ProcessingResult.HOLD;
|
||||
if (deployerTileEntity.getRecipe(s.stack) == null)
|
||||
return ProcessingResult.PASS;
|
||||
|
||||
|
@ -60,6 +65,12 @@ public class BeltDeployerCallbacks {
|
|||
BlockState blockState = deployerTileEntity.getBlockState();
|
||||
if (!blockState.hasProperty(FACING) || blockState.getValue(FACING) != Direction.DOWN)
|
||||
return ProcessingResult.PASS;
|
||||
|
||||
DeployerFakePlayer player = deployerTileEntity.getPlayer();
|
||||
ItemStack held = player == null ? ItemStack.EMPTY : player.getMainHandItem();
|
||||
if (held.isEmpty())
|
||||
return ProcessingResult.HOLD;
|
||||
|
||||
IRecipe<?> recipe = deployerTileEntity.getRecipe(s.stack);
|
||||
if (recipe == null)
|
||||
return ProcessingResult.PASS;
|
||||
|
@ -68,10 +79,10 @@ public class BeltDeployerCallbacks {
|
|||
activate(s, i, deployerTileEntity, recipe);
|
||||
return ProcessingResult.HOLD;
|
||||
}
|
||||
|
||||
|
||||
if (deployerTileEntity.state == State.WAITING) {
|
||||
if (deployerTileEntity.redstoneLocked)
|
||||
return ProcessingResult.PASS;
|
||||
return ProcessingResult.PASS;
|
||||
deployerTileEntity.start();
|
||||
}
|
||||
|
||||
|
@ -92,6 +103,10 @@ public class BeltDeployerCallbacks {
|
|||
copy.angle = centered ? 180 : Create.RANDOM.nextInt(360);
|
||||
return copy;
|
||||
})
|
||||
.map(t -> {
|
||||
t.locked = false;
|
||||
return t;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
TransportedItemStack left = transported.copy();
|
||||
|
@ -104,10 +119,13 @@ public class BeltDeployerCallbacks {
|
|||
handler.handleProcessingOnItem(transported, TransportedResult.convertToAndLeaveHeld(collect, left));
|
||||
|
||||
ItemStack heldItem = deployerTileEntity.player.getMainHandItem();
|
||||
if (heldItem.isDamageableItem())
|
||||
heldItem.hurtAndBreak(1, deployerTileEntity.player, s -> s.broadcastBreakEvent(Hand.MAIN_HAND));
|
||||
else
|
||||
heldItem.shrink(1);
|
||||
if (!(recipe instanceof DeployerApplicationRecipe)
|
||||
|| !((DeployerApplicationRecipe) recipe).shouldKeepHeldItem()) {
|
||||
if (heldItem.isDamageableItem())
|
||||
heldItem.hurtAndBreak(1, deployerTileEntity.player, s -> s.broadcastBreakEvent(Hand.MAIN_HAND));
|
||||
else
|
||||
heldItem.shrink(1);
|
||||
}
|
||||
|
||||
BlockPos pos = deployerTileEntity.getBlockPos();
|
||||
World world = deployerTileEntity.getLevel();
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.util.Set;
|
|||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllRecipeTypes;
|
||||
import com.simibubi.create.AllTags.AllItemTags;
|
||||
|
@ -18,7 +19,9 @@ import com.simibubi.create.foundation.utility.Lang;
|
|||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.item.crafting.Ingredient;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.util.IItemProvider;
|
||||
import net.minecraft.util.JSONUtils;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.StringTextComponent;
|
||||
|
@ -30,8 +33,11 @@ import net.minecraftforge.items.wrapper.RecipeWrapper;
|
|||
|
||||
public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> implements IAssemblyRecipe {
|
||||
|
||||
private boolean keepHeldItem;
|
||||
|
||||
public DeployerApplicationRecipe(ProcessingRecipeParams params) {
|
||||
super(AllRecipeTypes.DEPLOYING, params);
|
||||
keepHeldItem = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -52,6 +58,10 @@ public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> i
|
|||
return 2;
|
||||
}
|
||||
|
||||
public boolean shouldKeepHeldItem() {
|
||||
return keepHeldItem;
|
||||
}
|
||||
|
||||
public Ingredient getRequiredHeldItem() {
|
||||
if (ingredients.isEmpty())
|
||||
throw new IllegalStateException("Deploying Recipe: " + id.toString() + " has no tool!");
|
||||
|
@ -66,12 +76,14 @@ public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> i
|
|||
|
||||
public static List<DeployerApplicationRecipe> convert(List<IRecipe<?>> sandpaperRecipes) {
|
||||
return sandpaperRecipes.stream()
|
||||
.map(r -> new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new, new ResourceLocation(r.getId().getNamespace(), r.getId()
|
||||
.getPath() + "_using_deployer")).require(r.getIngredients()
|
||||
.get(0))
|
||||
.require(AllItemTags.SANDPAPER.tag)
|
||||
.output(r.getResultItem())
|
||||
.build())
|
||||
.map(r -> new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new, new ResourceLocation(r.getId()
|
||||
.getNamespace(),
|
||||
r.getId()
|
||||
.getPath() + "_using_deployer")).require(r.getIngredients()
|
||||
.get(0))
|
||||
.require(AllItemTags.SANDPAPER.tag)
|
||||
.output(r.getResultItem())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
@ -80,6 +92,31 @@ public class DeployerApplicationRecipe extends ProcessingRecipe<RecipeWrapper> i
|
|||
list.add(ingredients.get(1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readAdditional(JsonObject json) {
|
||||
super.readAdditional(json);
|
||||
keepHeldItem = JSONUtils.getAsBoolean(json, "keepHeldItem", false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeAdditional(JsonObject json) {
|
||||
super.writeAdditional(json);
|
||||
if (keepHeldItem)
|
||||
json.addProperty("keepHeldItem", keepHeldItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readAdditional(PacketBuffer buffer) {
|
||||
super.readAdditional(buffer);
|
||||
keepHeldItem = buffer.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeAdditional(PacketBuffer buffer) {
|
||||
super.writeAdditional(buffer);
|
||||
buffer.writeBoolean(keepHeldItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public ITextComponent getDescriptionForAssembly() {
|
||||
|
|
|
@ -8,8 +8,8 @@ import java.util.List;
|
|||
import com.google.common.collect.Lists;
|
||||
import com.jozufozu.flywheel.backend.instancing.IDynamicInstance;
|
||||
import com.jozufozu.flywheel.backend.instancing.InstanceData;
|
||||
import com.jozufozu.flywheel.backend.material.InstanceMaterial;
|
||||
import com.jozufozu.flywheel.backend.instancing.Instancer;
|
||||
import com.jozufozu.flywheel.backend.material.InstanceMaterial;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.core.materials.ModelData;
|
||||
import com.jozufozu.flywheel.util.transform.MatrixTransformStack;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.simibubi.create.content.contraptions.components.flywheel.engine;
|
||||
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.core.PartialModel;
|
||||
import com.jozufozu.flywheel.core.materials.ModelData;
|
||||
import com.jozufozu.flywheel.util.transform.MatrixTransformStack;
|
||||
|
|
|
@ -74,7 +74,7 @@ public class BlockMovementChecks {
|
|||
private static final List<BrittleCheck> BRITTLE_CHECKS = new ArrayList<>();
|
||||
private static final List<AttachedCheck> ATTACHED_CHECKS = new ArrayList<>();
|
||||
private static final List<NotSupportiveCheck> NOT_SUPPORTIVE_CHECKS = new ArrayList<>();
|
||||
public static final ResourceLocation NON_MOVABLE = new ResourceLocation(Create.ID, "non_movable");
|
||||
public static final ResourceLocation NON_MOVABLE = Create.asResource("non_movable");
|
||||
|
||||
// Registration
|
||||
// Add new checks to the front instead of the end
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package com.simibubi.create.content.contraptions.components.structureMovement.chassis;
|
||||
|
||||
import com.jozufozu.flywheel.backend.instancing.IDynamicInstance;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.core.materials.ModelData;
|
||||
import com.jozufozu.flywheel.util.transform.MatrixTransformStack;
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
|
|
|
@ -4,16 +4,12 @@ import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat;
|
|||
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
|
||||
import com.jozufozu.flywheel.backend.instancing.ITickableInstance;
|
||||
import com.jozufozu.flywheel.backend.instancing.Instancer;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.backend.instancing.entity.EntityInstance;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialGroup;
|
||||
import com.jozufozu.flywheel.backend.model.BufferedModel;
|
||||
import com.jozufozu.flywheel.backend.model.ElementBuffer;
|
||||
import com.jozufozu.flywheel.backend.model.IndexedModel;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.backend.state.TextureRenderState;
|
||||
import com.jozufozu.flywheel.core.Formats;
|
||||
import com.jozufozu.flywheel.core.Materials;
|
||||
import com.jozufozu.flywheel.core.QuadConverter;
|
||||
import com.jozufozu.flywheel.core.instancing.ConditionalInstance;
|
||||
import com.jozufozu.flywheel.core.materials.OrientedData;
|
||||
import com.jozufozu.flywheel.core.model.IModel;
|
||||
|
@ -36,7 +32,7 @@ import net.minecraft.world.LightType;
|
|||
public class GlueInstance extends EntityInstance<SuperGlueEntity> implements ITickableInstance {
|
||||
|
||||
private static final boolean USE_ATLAS = false;
|
||||
private static final ResourceLocation TEXTURE = new ResourceLocation(Create.ID, "textures/entity/super_glue/slime.png");
|
||||
private static final ResourceLocation TEXTURE = Create.asResource("textures/entity/super_glue/slime.png");
|
||||
|
||||
private final Quaternion rotation;
|
||||
protected ConditionalInstance<OrientedData> model;
|
||||
|
|
|
@ -30,7 +30,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
|
|||
@OnlyIn(Dist.CLIENT)
|
||||
public class SuperGlueRenderer extends EntityRenderer<SuperGlueEntity> {
|
||||
|
||||
private ResourceLocation regular = new ResourceLocation(Create.ID, "textures/entity/super_glue/slime.png");
|
||||
private ResourceLocation regular = Create.asResource("textures/entity/super_glue/slime.png");
|
||||
|
||||
private float[] insideQuad;
|
||||
private float[] outsideQuad;
|
||||
|
|
|
@ -7,8 +7,8 @@ import javax.annotation.Nullable;
|
|||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.backend.instancing.tile.TileInstanceManager;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.simibubi.create.AllMovementBehaviours;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
|
|
|
@ -18,7 +18,6 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Abs
|
|||
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.foundation.render.Compartment;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
import com.simibubi.create.foundation.render.TileEntityRenderHelper;
|
||||
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
|
||||
|
|
|
@ -1,13 +1,7 @@
|
|||
package com.simibubi.create.content.contraptions.components.structureMovement.render;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.jozufozu.flywheel.light.GridAlignedBB;
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.Pair;
|
||||
import com.simibubi.create.foundation.utility.outliner.AABBOutline;
|
||||
|
||||
public class LightVolumeDebugger {
|
||||
public static void render(MatrixStack ms, SuperRenderTypeBuffer buffer) {
|
||||
|
|
|
@ -80,6 +80,7 @@ public class WaterWheelBlock extends DirectionalKineticBlock implements ITE<Wate
|
|||
|
||||
@Override
|
||||
public void onPlace(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||
super.onPlace(state, worldIn, pos, oldState, isMoving);
|
||||
updateAllSides(state, worldIn, pos);
|
||||
}
|
||||
|
||||
|
|
|
@ -148,6 +148,7 @@ public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable
|
|||
|
||||
@Override
|
||||
public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||
super.onPlace(state, world, pos, oldState, isMoving);
|
||||
if (world.isClientSide)
|
||||
return;
|
||||
if (state != oldState)
|
||||
|
|
|
@ -102,6 +102,7 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi
|
|||
|
||||
@Override
|
||||
public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||
super.onPlace(state, world, pos, oldState, isMoving);
|
||||
if (world.isClientSide)
|
||||
return;
|
||||
if (state != oldState)
|
||||
|
|
|
@ -90,7 +90,9 @@ public class ProcessingRecipeSerializer<T extends ProcessingRecipe<?>> extends F
|
|||
if (JSONUtils.isValidNode(json, "heatRequirement"))
|
||||
builder.requiresHeat(HeatCondition.deserialize(JSONUtils.getAsString(json, "heatRequirement")));
|
||||
|
||||
return builder.build();
|
||||
T recipe = builder.build();
|
||||
recipe.readAdditional(json);
|
||||
return recipe;
|
||||
}
|
||||
|
||||
protected void writeToBuffer(PacketBuffer buffer, T recipe) {
|
||||
|
@ -112,6 +114,8 @@ public class ProcessingRecipeSerializer<T extends ProcessingRecipe<?>> extends F
|
|||
buffer.writeVarInt(recipe.getProcessingDuration());
|
||||
buffer.writeVarInt(recipe.getRequiredHeat()
|
||||
.ordinal());
|
||||
|
||||
recipe.writeAdditional(buffer);
|
||||
}
|
||||
|
||||
protected T readFromBuffer(ResourceLocation recipeId, PacketBuffer buffer) {
|
||||
|
@ -123,26 +127,28 @@ public class ProcessingRecipeSerializer<T extends ProcessingRecipe<?>> extends F
|
|||
int size = buffer.readVarInt();
|
||||
for (int i = 0; i < size; i++)
|
||||
ingredients.add(Ingredient.fromNetwork(buffer));
|
||||
|
||||
|
||||
size = buffer.readVarInt();
|
||||
for (int i = 0; i < size; i++)
|
||||
fluidIngredients.add(FluidIngredient.read(buffer));
|
||||
|
||||
|
||||
size = buffer.readVarInt();
|
||||
for (int i = 0; i < size; i++)
|
||||
results.add(ProcessingOutput.read(buffer));
|
||||
|
||||
|
||||
size = buffer.readVarInt();
|
||||
for (int i = 0; i < size; i++)
|
||||
fluidResults.add(FluidStack.readFromPacket(buffer));
|
||||
|
||||
return new ProcessingRecipeBuilder<>(factory, recipeId).withItemIngredients(ingredients)
|
||||
T recipe = new ProcessingRecipeBuilder<>(factory, recipeId).withItemIngredients(ingredients)
|
||||
.withItemOutputs(results)
|
||||
.withFluidIngredients(fluidIngredients)
|
||||
.withFluidOutputs(fluidResults)
|
||||
.duration(buffer.readVarInt())
|
||||
.requiresHeat(HeatCondition.values()[buffer.readVarInt()])
|
||||
.build();
|
||||
recipe.readAdditional(buffer);
|
||||
return recipe;
|
||||
}
|
||||
|
||||
public final void write(JsonObject json, T recipe) {
|
||||
|
|
|
@ -101,11 +101,12 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis
|
|||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
// Init belt
|
||||
if (beltLength == 0)
|
||||
BeltBlock.initBelt(level, worldPosition);
|
||||
|
||||
super.tick();
|
||||
|
||||
if (!AllBlocks.BELT.has(level.getBlockState(worldPosition)))
|
||||
return;
|
||||
|
||||
|
@ -211,6 +212,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis
|
|||
|
||||
@Override
|
||||
protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) {
|
||||
int prevBeltLength = beltLength;
|
||||
super.fromTag(state, compound, clientPacket);
|
||||
|
||||
if (compound.getBoolean("IsController"))
|
||||
|
@ -224,14 +226,9 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis
|
|||
controller = NBTUtil.readBlockPos(compound.getCompound("Controller"));
|
||||
trackerUpdateTag = compound;
|
||||
index = compound.getInt("Index");
|
||||
int length = compound.getInt("Length");
|
||||
if (beltLength != length) {
|
||||
beltLength = length;
|
||||
if (level != null)
|
||||
initializeLight();
|
||||
else
|
||||
light = null;
|
||||
}
|
||||
beltLength = compound.getInt("Length");
|
||||
if (prevBeltLength != beltLength)
|
||||
light = null;
|
||||
}
|
||||
|
||||
if (isController())
|
||||
|
@ -523,7 +520,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis
|
|||
return getController().equals(((BeltTileEntity) target).getController()) ? 1 : 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
public void invalidateItemHandler() {
|
||||
itemHandler.invalidate();
|
||||
}
|
||||
|
@ -535,12 +532,13 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis
|
|||
BlockState state = getBlockState();
|
||||
return state != null && state.hasProperty(BeltBlock.PART) && state.getValue(BeltBlock.PART) == BeltPart.START;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onLightUpdate(IBlockDisplayReader world, LightType type, GridAlignedBB changed) {
|
||||
if (this.remove) {
|
||||
if (this.remove)
|
||||
return true;
|
||||
}
|
||||
if (this.level == null || this.light == null)
|
||||
return false;
|
||||
|
||||
GridAlignedBB beltVolume = getBeltVolume();
|
||||
|
||||
|
|
|
@ -3,8 +3,8 @@ package com.simibubi.create.content.contraptions.relays.encased;
|
|||
import java.util.ArrayList;
|
||||
|
||||
import com.jozufozu.flywheel.backend.instancing.InstanceData;
|
||||
import com.jozufozu.flywheel.backend.material.InstanceMaterial;
|
||||
import com.jozufozu.flywheel.backend.instancing.Instancer;
|
||||
import com.jozufozu.flywheel.backend.material.InstanceMaterial;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.base.IRotate;
|
||||
|
|
|
@ -4,8 +4,8 @@ import java.util.EnumMap;
|
|||
import java.util.Map;
|
||||
|
||||
import com.jozufozu.flywheel.backend.instancing.InstanceData;
|
||||
import com.jozufozu.flywheel.backend.material.InstanceMaterial;
|
||||
import com.jozufozu.flywheel.backend.instancing.Instancer;
|
||||
import com.jozufozu.flywheel.backend.material.InstanceMaterial;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
||||
|
|
|
@ -7,9 +7,13 @@ import net.minecraft.entity.LivingEntity;
|
|||
import net.minecraft.inventory.EquipmentSlotType;
|
||||
import net.minecraft.item.ArmorItem;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class CopperArmorItem extends ArmorItem {
|
||||
|
||||
public static final ResourceLocation TEXTURE = Create.asResource("textures/models/armor/copper.png");
|
||||
private static final String TEXTURE_STRING = TEXTURE.toString();
|
||||
|
||||
public CopperArmorItem(EquipmentSlotType p_i48534_2_, Properties p_i48534_3_) {
|
||||
super(AllArmorMaterials.COPPER, p_i48534_2_, p_i48534_3_.stacksTo(1));
|
||||
}
|
||||
|
@ -23,7 +27,7 @@ public class CopperArmorItem extends ArmorItem {
|
|||
|
||||
@Override
|
||||
public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlotType slot, String type) {
|
||||
return String.format("%s:textures/models/armor/copper.png", Create.ID);
|
||||
return TEXTURE_STRING;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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))
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
package com.simibubi.create.content.curiosities.weapons;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiPredicate;
|
||||
import java.util.function.Predicate;
|
||||
|
@ -23,7 +20,6 @@ import net.minecraft.entity.monster.ZombieVillagerEntity;
|
|||
import net.minecraft.entity.passive.FoxEntity;
|
||||
import net.minecraft.item.Food;
|
||||
import net.minecraft.item.Foods;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.potion.Effect;
|
||||
|
@ -31,8 +27,6 @@ import net.minecraft.potion.EffectInstance;
|
|||
import net.minecraft.potion.Effects;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.IItemProvider;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
|
@ -50,16 +44,14 @@ import net.minecraftforge.event.ForgeEventFactory;
|
|||
import net.minecraftforge.event.entity.living.EntityTeleportEvent;
|
||||
import net.minecraftforge.registries.IRegistryDelegate;
|
||||
|
||||
public class PotatoCannonProjectileTypes {
|
||||
public class BuiltinPotatoProjectileTypes {
|
||||
|
||||
private static final GameProfile ZOMBIE_CONVERTER_NAME =
|
||||
new GameProfile(UUID.fromString("be12d3dc-27d3-4992-8c97-66be53fd49c5"), "Converter");
|
||||
private static final WorldAttached<FakePlayer> ZOMBIE_CONVERTERS =
|
||||
new WorldAttached<>(w -> new FakePlayer((ServerWorld) w, ZOMBIE_CONVERTER_NAME));
|
||||
|
||||
public static final Map<ResourceLocation, PotatoCannonProjectileTypes> ALL = new HashMap<>();
|
||||
public static final Map<IRegistryDelegate<Item>, PotatoCannonProjectileTypes> ITEM_MAP = new HashMap<>();
|
||||
public static final PotatoCannonProjectileTypes
|
||||
public static final PotatoCannonProjectileType
|
||||
|
||||
FALLBACK = create("fallback").damage(0)
|
||||
.register(),
|
||||
|
@ -250,94 +242,11 @@ public class PotatoCannonProjectileTypes {
|
|||
.preEntityHit(setFire(12))
|
||||
.soundPitch(1.0f)
|
||||
.registerAndAssign(AllItems.BLAZE_CAKE.get())
|
||||
|
||||
;
|
||||
|
||||
public static void registerType(ResourceLocation resLoc, PotatoCannonProjectileTypes type) {
|
||||
synchronized (ALL) {
|
||||
ALL.put(resLoc, type);
|
||||
}
|
||||
}
|
||||
|
||||
public static void assignType(IRegistryDelegate<Item> item, PotatoCannonProjectileTypes type) {
|
||||
synchronized (ITEM_MAP) {
|
||||
ITEM_MAP.put(item, type);
|
||||
}
|
||||
}
|
||||
|
||||
public static Optional<PotatoCannonProjectileTypes> getProjectileTypeOf(ItemStack item) {
|
||||
if (item.isEmpty())
|
||||
return Optional.empty();
|
||||
return Optional.ofNullable(ITEM_MAP.get(item.getItem().delegate));
|
||||
}
|
||||
|
||||
public static void register() {}
|
||||
|
||||
private static PotatoCannonProjectileTypes.Builder create(String name) {
|
||||
return new PotatoCannonProjectileTypes.Builder(Create.asResource(name));
|
||||
}
|
||||
|
||||
private float gravityMultiplier = 1;
|
||||
private float velocityMultiplier = 1;
|
||||
private float drag = 0.99f;
|
||||
private float knockback = 1;
|
||||
private int reloadTicks = 10;
|
||||
private int damage = 1;
|
||||
private int split = 1;
|
||||
private float fwoompPitch = 1;
|
||||
private boolean sticky = false;
|
||||
private PotatoProjectileRenderMode renderMode = new PotatoProjectileRenderMode.Billboard();
|
||||
private Predicate<EntityRayTraceResult> preEntityHit = e -> false; // True if hit should be canceled
|
||||
private Predicate<EntityRayTraceResult> onEntityHit = e -> false; // True if shouldn't recover projectile
|
||||
private BiPredicate<IWorld, BlockRayTraceResult> onBlockHit = (w, ray) -> false;
|
||||
|
||||
public float getGravityMultiplier() {
|
||||
return gravityMultiplier;
|
||||
}
|
||||
|
||||
public float getDrag() {
|
||||
return drag;
|
||||
}
|
||||
|
||||
public int getSplit() {
|
||||
return split;
|
||||
}
|
||||
|
||||
public float getVelocityMultiplier() {
|
||||
return velocityMultiplier;
|
||||
}
|
||||
|
||||
public float getKnockback() {
|
||||
return knockback;
|
||||
}
|
||||
|
||||
public int getReloadTicks() {
|
||||
return reloadTicks;
|
||||
}
|
||||
|
||||
public float getSoundPitch() {
|
||||
return fwoompPitch;
|
||||
}
|
||||
|
||||
public PotatoProjectileRenderMode getRenderMode() {
|
||||
return renderMode;
|
||||
}
|
||||
|
||||
public int getDamage() {
|
||||
return damage;
|
||||
}
|
||||
|
||||
public boolean isSticky() { return sticky; }
|
||||
|
||||
public boolean preEntityHit(EntityRayTraceResult ray) {
|
||||
return preEntityHit.test(ray);
|
||||
}
|
||||
|
||||
public boolean onEntityHit(EntityRayTraceResult ray) {
|
||||
return onEntityHit.test(ray);
|
||||
}
|
||||
|
||||
public boolean onBlockHit(IWorld world, BlockRayTraceResult ray) {
|
||||
return onBlockHit.test(world, ray);
|
||||
private static PotatoCannonProjectileType.Builder create(String name) {
|
||||
return new PotatoCannonProjectileType.Builder(Create.asResource(name));
|
||||
}
|
||||
|
||||
private static Predicate<EntityRayTraceResult> setFire(int seconds) {
|
||||
|
@ -477,103 +386,6 @@ public class PotatoCannonProjectileTypes {
|
|||
};
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
|
||||
protected ResourceLocation loc;
|
||||
protected PotatoCannonProjectileTypes result;
|
||||
|
||||
public Builder(ResourceLocation loc) {
|
||||
this.result = new PotatoCannonProjectileTypes();
|
||||
this.loc = loc;
|
||||
}
|
||||
|
||||
public Builder damage(int damage) {
|
||||
result.damage = damage;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder gravity(float modifier) {
|
||||
result.gravityMultiplier = modifier;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder knockback(float knockback) {
|
||||
result.knockback = knockback;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder drag(float drag) {
|
||||
result.drag = drag;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder reloadTicks(int reload) {
|
||||
result.reloadTicks = reload;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder splitInto(int split) {
|
||||
result.split = split;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder soundPitch(float pitch) {
|
||||
result.fwoompPitch = pitch;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder velocity(float velocity) {
|
||||
result.velocityMultiplier = velocity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder renderTumbling() {
|
||||
result.renderMode = new PotatoProjectileRenderMode.Tumble();
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder renderBillboard() {
|
||||
result.renderMode = new PotatoProjectileRenderMode.Billboard();
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder renderTowardMotion(int spriteAngle, float spin) {
|
||||
result.renderMode = new PotatoProjectileRenderMode.TowardMotion(spriteAngle, spin);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder sticky() {
|
||||
result.sticky = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder preEntityHit(Predicate<EntityRayTraceResult> callback) {
|
||||
result.preEntityHit = callback;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder onEntityHit(Predicate<EntityRayTraceResult> callback) {
|
||||
result.onEntityHit = callback;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder onBlockHit(BiPredicate<IWorld, BlockRayTraceResult> callback) {
|
||||
result.onBlockHit = callback;
|
||||
return this;
|
||||
}
|
||||
|
||||
public PotatoCannonProjectileTypes register() {
|
||||
registerType(loc, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public PotatoCannonProjectileTypes registerAndAssign(IItemProvider... items) {
|
||||
registerType(loc, result);
|
||||
for (IItemProvider provider : items)
|
||||
assignType(provider.asItem().delegate, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
public static void register() {}
|
||||
|
||||
}
|
|
@ -49,13 +49,12 @@ public class PotatoCannonItem extends ShootableItem {
|
|||
public static ItemStack CLIENT_CURRENT_AMMO = ItemStack.EMPTY;
|
||||
public static final int MAX_DAMAGE = 100;
|
||||
|
||||
public PotatoCannonItem(Properties p_i48487_1_) {
|
||||
super(p_i48487_1_);
|
||||
public PotatoCannonItem(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canAttackBlock(BlockState p_195938_1_, World p_195938_2_, BlockPos p_195938_3_,
|
||||
PlayerEntity p_195938_4_) {
|
||||
public boolean canAttackBlock(BlockState state, World world, BlockPos pos, PlayerEntity player) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -137,8 +136,8 @@ public class PotatoCannonItem extends ShootableItem {
|
|||
.subtract(player.position()
|
||||
.add(0, player.getEyeHeight(), 0));
|
||||
|
||||
PotatoCannonProjectileTypes projectileType = PotatoCannonProjectileTypes.getProjectileTypeOf(itemStack)
|
||||
.orElse(PotatoCannonProjectileTypes.FALLBACK);
|
||||
PotatoCannonProjectileType projectileType = PotatoProjectileTypeManager.getTypeForStack(itemStack)
|
||||
.orElse(BuiltinPotatoProjectileTypes.FALLBACK);
|
||||
Vector3d lookVec = player.getLookAngle();
|
||||
Vector3d motion = lookVec.add(correction)
|
||||
.normalize()
|
||||
|
@ -181,8 +180,8 @@ public class PotatoCannonItem extends ShootableItem {
|
|||
stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(hand));
|
||||
|
||||
Integer cooldown =
|
||||
findAmmoInInventory(world, player, stack).flatMap(PotatoCannonProjectileTypes::getProjectileTypeOf)
|
||||
.map(PotatoCannonProjectileTypes::getReloadTicks)
|
||||
findAmmoInInventory(world, player, stack).flatMap(PotatoProjectileTypeManager::getTypeForStack)
|
||||
.map(PotatoCannonProjectileType::getReloadTicks)
|
||||
.orElse(10);
|
||||
|
||||
ShootableGadgetItemMethods.applyCooldown(player, stack, hand, this::isCannon, cooldown);
|
||||
|
@ -200,7 +199,7 @@ public class PotatoCannonItem extends ShootableItem {
|
|||
|
||||
private Optional<ItemStack> findAmmoInInventory(World world, PlayerEntity player, ItemStack held) {
|
||||
ItemStack findAmmo = player.getProjectile(held);
|
||||
return PotatoCannonProjectileTypes.getProjectileTypeOf(findAmmo)
|
||||
return PotatoProjectileTypeManager.getTypeForStack(findAmmo)
|
||||
.map($ -> findAmmo);
|
||||
}
|
||||
|
||||
|
@ -215,7 +214,7 @@ public class PotatoCannonItem extends ShootableItem {
|
|||
if (player == null)
|
||||
return Optional.empty();
|
||||
ItemStack findAmmo = player.getProjectile(cannon);
|
||||
Optional<ItemStack> found = PotatoCannonProjectileTypes.getProjectileTypeOf(findAmmo)
|
||||
Optional<ItemStack> found = PotatoProjectileTypeManager.getTypeForStack(findAmmo)
|
||||
.map($ -> findAmmo);
|
||||
found.ifPresent(stack -> CLIENT_CURRENT_AMMO = stack);
|
||||
return found;
|
||||
|
@ -237,7 +236,7 @@ public class PotatoCannonItem extends ShootableItem {
|
|||
tooltip.add(new StringTextComponent(""));
|
||||
tooltip.add(new TranslationTextComponent(ammo.getDescriptionId()).append(new StringTextComponent(":"))
|
||||
.withStyle(TextFormatting.GRAY));
|
||||
PotatoCannonProjectileTypes type = PotatoCannonProjectileTypes.getProjectileTypeOf(ammo)
|
||||
PotatoCannonProjectileType type = PotatoProjectileTypeManager.getTypeForStack(ammo)
|
||||
.get();
|
||||
StringTextComponent spacing = new StringTextComponent(" ");
|
||||
TextFormatting green = TextFormatting.GREEN;
|
||||
|
@ -269,7 +268,7 @@ public class PotatoCannonItem extends ShootableItem {
|
|||
|
||||
@Override
|
||||
public Predicate<ItemStack> getAllSupportedProjectiles() {
|
||||
return stack -> PotatoCannonProjectileTypes.getProjectileTypeOf(stack)
|
||||
return stack -> PotatoProjectileTypeManager.getTypeForStack(stack)
|
||||
.isPresent();
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,295 @@
|
|||
package com.simibubi.create.content.curiosities.weapons;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.function.BiPredicate;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.util.IItemProvider;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.ResourceLocationException;
|
||||
import net.minecraft.util.math.BlockRayTraceResult;
|
||||
import net.minecraft.util.math.EntityRayTraceResult;
|
||||
import net.minecraft.world.IWorld;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.IRegistryDelegate;
|
||||
|
||||
public class PotatoCannonProjectileType {
|
||||
|
||||
private Set<IRegistryDelegate<Item>> items = new HashSet<>();
|
||||
|
||||
private int reloadTicks = 10;
|
||||
private int damage = 1;
|
||||
private int split = 1;
|
||||
private float knockback = 1;
|
||||
private float drag = 0.99f;
|
||||
private float velocityMultiplier = 1;
|
||||
private float gravityMultiplier = 1;
|
||||
private float soundPitch = 1;
|
||||
private boolean sticky = false;
|
||||
private PotatoProjectileRenderMode renderMode = PotatoProjectileRenderMode.Billboard.INSTANCE;
|
||||
|
||||
private Predicate<EntityRayTraceResult> preEntityHit = e -> false; // True if hit should be canceled
|
||||
private Predicate<EntityRayTraceResult> onEntityHit = e -> false; // True if shouldn't recover projectile
|
||||
private BiPredicate<IWorld, BlockRayTraceResult> onBlockHit = (w, ray) -> false;
|
||||
|
||||
protected PotatoCannonProjectileType() {
|
||||
}
|
||||
|
||||
public Set<IRegistryDelegate<Item>> getItems() {
|
||||
return items;
|
||||
}
|
||||
|
||||
public int getReloadTicks() {
|
||||
return reloadTicks;
|
||||
}
|
||||
|
||||
public int getDamage() {
|
||||
return damage;
|
||||
}
|
||||
|
||||
public int getSplit() {
|
||||
return split;
|
||||
}
|
||||
|
||||
public float getKnockback() {
|
||||
return knockback;
|
||||
}
|
||||
|
||||
public float getDrag() {
|
||||
return drag;
|
||||
}
|
||||
|
||||
public float getVelocityMultiplier() {
|
||||
return velocityMultiplier;
|
||||
}
|
||||
|
||||
public float getGravityMultiplier() {
|
||||
return gravityMultiplier;
|
||||
}
|
||||
|
||||
public float getSoundPitch() {
|
||||
return soundPitch;
|
||||
}
|
||||
|
||||
public boolean isSticky() {
|
||||
return sticky;
|
||||
}
|
||||
|
||||
public PotatoProjectileRenderMode getRenderMode() {
|
||||
return renderMode;
|
||||
}
|
||||
|
||||
public boolean preEntityHit(EntityRayTraceResult ray) {
|
||||
return preEntityHit.test(ray);
|
||||
}
|
||||
|
||||
public boolean onEntityHit(EntityRayTraceResult ray) {
|
||||
return onEntityHit.test(ray);
|
||||
}
|
||||
|
||||
public boolean onBlockHit(IWorld world, BlockRayTraceResult ray) {
|
||||
return onBlockHit.test(world, ray);
|
||||
}
|
||||
|
||||
public static PotatoCannonProjectileType fromJson(JsonObject object) {
|
||||
PotatoCannonProjectileType type = new PotatoCannonProjectileType();
|
||||
try {
|
||||
JsonElement itemsElement = object.get("items");
|
||||
if (itemsElement != null && itemsElement.isJsonArray()) {
|
||||
for (JsonElement element : itemsElement.getAsJsonArray()) {
|
||||
if (element.isJsonPrimitive()) {
|
||||
JsonPrimitive primitive = element.getAsJsonPrimitive();
|
||||
if (primitive.isString()) {
|
||||
try {
|
||||
Item item = ForgeRegistries.ITEMS.getValue(new ResourceLocation(primitive.getAsString()));
|
||||
if (item != null) {
|
||||
type.items.add(item.delegate);
|
||||
}
|
||||
} catch (ResourceLocationException e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
parseJsonPrimitive(object, "reload_ticks", JsonPrimitive::isNumber, primitive -> type.reloadTicks = primitive.getAsInt());
|
||||
parseJsonPrimitive(object, "damage", JsonPrimitive::isNumber, primitive -> type.damage = primitive.getAsInt());
|
||||
parseJsonPrimitive(object, "split", JsonPrimitive::isNumber, primitive -> type.split = primitive.getAsInt());
|
||||
parseJsonPrimitive(object, "knockback", JsonPrimitive::isNumber, primitive -> type.knockback = primitive.getAsFloat());
|
||||
parseJsonPrimitive(object, "drag", JsonPrimitive::isNumber, primitive -> type.drag = primitive.getAsFloat());
|
||||
parseJsonPrimitive(object, "velocity_multiplier", JsonPrimitive::isNumber, primitive -> type.velocityMultiplier = primitive.getAsFloat());
|
||||
parseJsonPrimitive(object, "gravity_multiplier", JsonPrimitive::isNumber, primitive -> type.gravityMultiplier = primitive.getAsFloat());
|
||||
parseJsonPrimitive(object, "sound_pitch", JsonPrimitive::isNumber, primitive -> type.soundPitch = primitive.getAsFloat());
|
||||
parseJsonPrimitive(object, "sticky", JsonPrimitive::isBoolean, primitive -> type.sticky = primitive.getAsBoolean());
|
||||
} catch (Exception e) {
|
||||
//
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
private static void parseJsonPrimitive(JsonObject object, String key, Predicate<JsonPrimitive> predicate, Consumer<JsonPrimitive> consumer) {
|
||||
JsonElement element = object.get(key);
|
||||
if (element != null && element.isJsonPrimitive()) {
|
||||
JsonPrimitive primitive = element.getAsJsonPrimitive();
|
||||
if (predicate.test(primitive)) {
|
||||
consumer.accept(primitive);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void toBuffer(PotatoCannonProjectileType type, PacketBuffer buffer) {
|
||||
buffer.writeVarInt(type.items.size());
|
||||
for (IRegistryDelegate<Item> delegate : type.items) {
|
||||
buffer.writeResourceLocation(delegate.name());
|
||||
}
|
||||
buffer.writeInt(type.reloadTicks);
|
||||
buffer.writeInt(type.damage);
|
||||
buffer.writeInt(type.split);
|
||||
buffer.writeFloat(type.knockback);
|
||||
buffer.writeFloat(type.drag);
|
||||
buffer.writeFloat(type.velocityMultiplier);
|
||||
buffer.writeFloat(type.gravityMultiplier);
|
||||
buffer.writeFloat(type.soundPitch);
|
||||
buffer.writeBoolean(type.sticky);
|
||||
}
|
||||
|
||||
public static PotatoCannonProjectileType fromBuffer(PacketBuffer buffer) {
|
||||
PotatoCannonProjectileType type = new PotatoCannonProjectileType();
|
||||
int size = buffer.readVarInt();
|
||||
for (int i = 0; i < size; i++) {
|
||||
Item item = ForgeRegistries.ITEMS.getValue(buffer.readResourceLocation());
|
||||
if (item != null) {
|
||||
type.items.add(item.delegate);
|
||||
}
|
||||
}
|
||||
type.reloadTicks = buffer.readInt();
|
||||
type.damage = buffer.readInt();
|
||||
type.split = buffer.readInt();
|
||||
type.knockback = buffer.readFloat();
|
||||
type.drag = buffer.readFloat();
|
||||
type.velocityMultiplier = buffer.readFloat();
|
||||
type.gravityMultiplier = buffer.readFloat();
|
||||
type.soundPitch = buffer.readFloat();
|
||||
type.sticky = buffer.readBoolean();
|
||||
return type;
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
|
||||
protected ResourceLocation id;
|
||||
protected PotatoCannonProjectileType result;
|
||||
|
||||
public Builder(ResourceLocation id) {
|
||||
this.id = id;
|
||||
this.result = new PotatoCannonProjectileType();
|
||||
}
|
||||
|
||||
public Builder reloadTicks(int reload) {
|
||||
result.reloadTicks = reload;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder damage(int damage) {
|
||||
result.damage = damage;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder splitInto(int split) {
|
||||
result.split = split;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder knockback(float knockback) {
|
||||
result.knockback = knockback;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder drag(float drag) {
|
||||
result.drag = drag;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder velocity(float velocity) {
|
||||
result.velocityMultiplier = velocity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder gravity(float modifier) {
|
||||
result.gravityMultiplier = modifier;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder soundPitch(float pitch) {
|
||||
result.soundPitch = pitch;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder sticky() {
|
||||
result.sticky = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder renderMode(PotatoProjectileRenderMode renderMode) {
|
||||
result.renderMode = renderMode;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder renderBillboard() {
|
||||
renderMode(PotatoProjectileRenderMode.Billboard.INSTANCE);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder renderTumbling() {
|
||||
renderMode(PotatoProjectileRenderMode.Tumble.INSTANCE);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder renderTowardMotion(int spriteAngle, float spin) {
|
||||
renderMode(new PotatoProjectileRenderMode.TowardMotion(spriteAngle, spin));
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder preEntityHit(Predicate<EntityRayTraceResult> callback) {
|
||||
result.preEntityHit = callback;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder onEntityHit(Predicate<EntityRayTraceResult> callback) {
|
||||
result.onEntityHit = callback;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder onBlockHit(BiPredicate<IWorld, BlockRayTraceResult> callback) {
|
||||
result.onBlockHit = callback;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder addItems(IItemProvider... items) {
|
||||
for (IItemProvider provider : items)
|
||||
result.items.add(provider.asItem().delegate);
|
||||
return this;
|
||||
}
|
||||
|
||||
public PotatoCannonProjectileType register() {
|
||||
PotatoProjectileTypeManager.registerBuiltinType(id, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public PotatoCannonProjectileType registerAndAssign(IItemProvider... items) {
|
||||
addItems(items);
|
||||
register();
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -39,17 +39,17 @@ import net.minecraftforge.items.ItemHandlerHelper;
|
|||
|
||||
public class PotatoProjectileEntity extends DamagingProjectileEntity implements IEntityAdditionalSpawnData {
|
||||
|
||||
PotatoCannonProjectileTypes type;
|
||||
ItemStack stack = ItemStack.EMPTY;
|
||||
protected PotatoCannonProjectileType type;
|
||||
protected ItemStack stack = ItemStack.EMPTY;
|
||||
|
||||
Entity stuckEntity;
|
||||
Vector3d stuckOffset;
|
||||
PotatoProjectileRenderMode stuckRenderer;
|
||||
double stuckFallSpeed;
|
||||
protected Entity stuckEntity;
|
||||
protected Vector3d stuckOffset;
|
||||
protected PotatoProjectileRenderMode stuckRenderer;
|
||||
protected double stuckFallSpeed;
|
||||
|
||||
float additionalDamageMult = 1;
|
||||
float additionalKnockback = 0;
|
||||
float recoveryChance = 0;
|
||||
protected float additionalDamageMult = 1;
|
||||
protected float additionalKnockback = 0;
|
||||
protected float recoveryChance = 0;
|
||||
|
||||
public PotatoProjectileEntity(EntityType<? extends DamagingProjectileEntity> type, World world) {
|
||||
super(type, world);
|
||||
|
@ -63,10 +63,10 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements
|
|||
this.stack = stack;
|
||||
}
|
||||
|
||||
public PotatoCannonProjectileTypes getProjectileType() {
|
||||
public PotatoCannonProjectileType getProjectileType() {
|
||||
if (type == null)
|
||||
type = PotatoCannonProjectileTypes.getProjectileTypeOf(stack)
|
||||
.orElse(PotatoCannonProjectileTypes.FALLBACK);
|
||||
type = PotatoProjectileTypeManager.getTypeForStack(stack)
|
||||
.orElse(BuiltinPotatoProjectileTypes.FALLBACK);
|
||||
return type;
|
||||
}
|
||||
|
||||
|
@ -128,7 +128,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements
|
|||
}
|
||||
|
||||
public void tick() {
|
||||
PotatoCannonProjectileTypes projectileType = getProjectileType();
|
||||
PotatoCannonProjectileType projectileType = getProjectileType();
|
||||
|
||||
Entity stuckEntity = getStuckEntity();
|
||||
if (stuckEntity != null) {
|
||||
|
@ -174,7 +174,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements
|
|||
|
||||
Vector3d hit = ray.getLocation();
|
||||
Entity target = ray.getEntity();
|
||||
PotatoCannonProjectileTypes projectileType = getProjectileType();
|
||||
PotatoCannonProjectileType projectileType = getProjectileType();
|
||||
float damage = projectileType.getDamage() * additionalDamageMult;
|
||||
float knockback = projectileType.getKnockback() + additionalKnockback;
|
||||
Entity owner = this.getOwner();
|
||||
|
|
|
@ -20,6 +20,8 @@ public interface PotatoProjectileRenderMode {
|
|||
|
||||
public static class Billboard implements PotatoProjectileRenderMode {
|
||||
|
||||
public static final Billboard INSTANCE = new Billboard();
|
||||
|
||||
@Override
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public void transform(MatrixStack ms, PotatoProjectileEntity entity, float pt) {
|
||||
|
@ -35,10 +37,13 @@ public interface PotatoProjectileRenderMode {
|
|||
.rotateX(180
|
||||
+ AngleHelper.deg(MathHelper.atan2(diff.y, -MathHelper.sqrt(diff.x * diff.x + diff.z * diff.z))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class Tumble extends Billboard {
|
||||
|
||||
public static final Tumble INSTANCE = new Tumble();
|
||||
|
||||
@Override
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public void transform(MatrixStack ms, PotatoProjectileEntity entity, float pt) {
|
||||
|
@ -47,6 +52,7 @@ public interface PotatoProjectileRenderMode {
|
|||
.rotateZ((entity.tickCount + pt) * 2 * entityRandom(entity, 16))
|
||||
.rotateX((entity.tickCount + pt) * entityRandom(entity, 32));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class TowardMotion implements PotatoProjectileRenderMode {
|
||||
|
|
|
@ -0,0 +1,160 @@
|
|||
package com.simibubi.create.content.curiosities.weapons;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.foundation.networking.AllPackets;
|
||||
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||
|
||||
import net.minecraft.client.resources.JsonReloadListener;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.profiler.IProfiler;
|
||||
import net.minecraft.resources.IResourceManager;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
||||
import net.minecraftforge.fml.network.PacketDistributor;
|
||||
import net.minecraftforge.registries.IRegistryDelegate;
|
||||
|
||||
public class PotatoProjectileTypeManager {
|
||||
|
||||
private static final Map<ResourceLocation, PotatoCannonProjectileType> BUILTIN_TYPE_MAP = new HashMap<>();
|
||||
private static final Map<ResourceLocation, PotatoCannonProjectileType> CUSTOM_TYPE_MAP = new HashMap<>();
|
||||
private static final Map<IRegistryDelegate<Item>, PotatoCannonProjectileType> ITEM_TO_TYPE_MAP = new HashMap<>();
|
||||
|
||||
public static void registerBuiltinType(ResourceLocation id, PotatoCannonProjectileType type) {
|
||||
synchronized (BUILTIN_TYPE_MAP) {
|
||||
BUILTIN_TYPE_MAP.put(id, type);
|
||||
}
|
||||
}
|
||||
|
||||
public static PotatoCannonProjectileType getBuiltinType(ResourceLocation id) {
|
||||
return BUILTIN_TYPE_MAP.get(id);
|
||||
}
|
||||
|
||||
public static PotatoCannonProjectileType getCustomType(ResourceLocation id) {
|
||||
return CUSTOM_TYPE_MAP.get(id);
|
||||
}
|
||||
|
||||
public static PotatoCannonProjectileType getTypeForItem(IRegistryDelegate<Item> item) {
|
||||
return ITEM_TO_TYPE_MAP.get(item);
|
||||
}
|
||||
|
||||
public static Optional<PotatoCannonProjectileType> getTypeForStack(ItemStack item) {
|
||||
if (item.isEmpty())
|
||||
return Optional.empty();
|
||||
return Optional.ofNullable(getTypeForItem(item.getItem().delegate));
|
||||
}
|
||||
|
||||
public static void clear() {
|
||||
CUSTOM_TYPE_MAP.clear();
|
||||
ITEM_TO_TYPE_MAP.clear();
|
||||
}
|
||||
|
||||
public static void fillItemMap() {
|
||||
for (Map.Entry<ResourceLocation, PotatoCannonProjectileType> entry : BUILTIN_TYPE_MAP.entrySet()) {
|
||||
PotatoCannonProjectileType type = entry.getValue();
|
||||
for (IRegistryDelegate<Item> delegate : type.getItems()) {
|
||||
ITEM_TO_TYPE_MAP.put(delegate, type);
|
||||
}
|
||||
}
|
||||
for (Map.Entry<ResourceLocation, PotatoCannonProjectileType> entry : CUSTOM_TYPE_MAP.entrySet()) {
|
||||
PotatoCannonProjectileType type = entry.getValue();
|
||||
for (IRegistryDelegate<Item> delegate : type.getItems()) {
|
||||
ITEM_TO_TYPE_MAP.put(delegate, type);
|
||||
}
|
||||
}
|
||||
ITEM_TO_TYPE_MAP.remove(AllItems.POTATO_CANNON.get().delegate);
|
||||
}
|
||||
|
||||
public static void toBuffer(PacketBuffer buffer) {
|
||||
buffer.writeVarInt(CUSTOM_TYPE_MAP.size());
|
||||
for (Map.Entry<ResourceLocation, PotatoCannonProjectileType> entry : CUSTOM_TYPE_MAP.entrySet()) {
|
||||
buffer.writeResourceLocation(entry.getKey());
|
||||
PotatoCannonProjectileType.toBuffer(entry.getValue(), buffer);
|
||||
}
|
||||
}
|
||||
|
||||
public static void fromBuffer(PacketBuffer buffer) {
|
||||
clear();
|
||||
|
||||
int size = buffer.readVarInt();
|
||||
for (int i = 0; i < size; i++) {
|
||||
CUSTOM_TYPE_MAP.put(buffer.readResourceLocation(), PotatoCannonProjectileType.fromBuffer(buffer));
|
||||
}
|
||||
|
||||
fillItemMap();
|
||||
}
|
||||
|
||||
public static void syncTo(ServerPlayerEntity player) {
|
||||
AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> player), new SyncPacket());
|
||||
}
|
||||
|
||||
public static void syncToAll() {
|
||||
AllPackets.channel.send(PacketDistributor.ALL.noArg(), new SyncPacket());
|
||||
}
|
||||
|
||||
public static class ReloadListener extends JsonReloadListener {
|
||||
|
||||
private static final Gson GSON = new Gson();
|
||||
|
||||
public static final ReloadListener INSTANCE = new ReloadListener();
|
||||
|
||||
protected ReloadListener() {
|
||||
super(GSON, "potato_cannon_projectile_types");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void apply(Map<ResourceLocation, JsonElement> map, IResourceManager resourceManager, IProfiler profiler) {
|
||||
clear();
|
||||
|
||||
for (Map.Entry<ResourceLocation, JsonElement> entry : map.entrySet()) {
|
||||
JsonElement element = entry.getValue();
|
||||
if (element.isJsonObject()) {
|
||||
ResourceLocation id = entry.getKey();
|
||||
JsonObject object = element.getAsJsonObject();
|
||||
PotatoCannonProjectileType type = PotatoCannonProjectileType.fromJson(object);
|
||||
CUSTOM_TYPE_MAP.put(id, type);
|
||||
}
|
||||
}
|
||||
|
||||
fillItemMap();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class SyncPacket extends SimplePacketBase {
|
||||
|
||||
private PacketBuffer buffer;
|
||||
|
||||
public SyncPacket() {
|
||||
}
|
||||
|
||||
public SyncPacket(PacketBuffer buffer) {
|
||||
this.buffer = buffer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(PacketBuffer buffer) {
|
||||
toBuffer(buffer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(Supplier<Context> context) {
|
||||
context.get().enqueueWork(() -> {
|
||||
fromBuffer(buffer);
|
||||
});
|
||||
context.get().setPacketHandled(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
package com.simibubi.create.content.curiosities.weapons;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.network.IPacket;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public abstract class ProperProjectileEntity extends Entity {
|
||||
|
||||
public ProperProjectileEntity(EntityType<?> p_i48580_1_, World p_i48580_2_) {
|
||||
super(p_i48580_1_, p_i48580_2_);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void defineSynchedData() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void readAdditionalSaveData(CompoundNBT p_70037_1_) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addAdditionalSaveData(CompoundNBT p_213281_1_) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPacket<?> getAddEntityPacket() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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());
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ import com.jozufozu.flywheel.core.materials.IFlatLight;
|
|||
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.vector.Vector3f;
|
||||
import net.minecraft.util.math.vector.Vector3i;
|
||||
|
||||
public class FlapData extends InstanceData implements IFlatLight<FlapData> {
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@ import java.util.Map;
|
|||
import com.jozufozu.flywheel.backend.instancing.IDynamicInstance;
|
||||
import com.jozufozu.flywheel.backend.instancing.InstanceData;
|
||||
import com.jozufozu.flywheel.backend.instancing.Instancer;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.logistics.block.FlapData;
|
||||
import com.simibubi.create.foundation.gui.widgets.InterpolatedValue;
|
||||
|
|
|
@ -5,8 +5,8 @@ import java.util.ArrayList;
|
|||
import com.jozufozu.flywheel.backend.instancing.IDynamicInstance;
|
||||
import com.jozufozu.flywheel.backend.instancing.InstanceData;
|
||||
import com.jozufozu.flywheel.backend.instancing.Instancer;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.core.PartialModel;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.logistics.block.FlapData;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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;
|
||||
|
@ -96,13 +97,13 @@ public class AllPaletteBlocks {
|
|||
// Vanilla stone variant patterns
|
||||
|
||||
public static final PalettesVariantEntry GRANITE_VARIANTS =
|
||||
new PalettesVariantEntry(PaletteStoneVariants.GRANITE, PaletteBlockPattern.VANILLA_RANGE, () -> Blocks.GRANITE);
|
||||
new PalettesVariantEntry(PaletteStoneVariants.GRANITE, PaletteBlockPattern.VANILLA_RANGE);
|
||||
|
||||
public static final PalettesVariantEntry DIORITE_VARIANTS =
|
||||
new PalettesVariantEntry(PaletteStoneVariants.DIORITE, PaletteBlockPattern.VANILLA_RANGE, () -> Blocks.DIORITE);
|
||||
new PalettesVariantEntry(PaletteStoneVariants.DIORITE, PaletteBlockPattern.VANILLA_RANGE);
|
||||
|
||||
public static final PalettesVariantEntry ANDESITE_VARIANTS = new PalettesVariantEntry(PaletteStoneVariants.ANDESITE,
|
||||
PaletteBlockPattern.VANILLA_RANGE, () -> Blocks.ANDESITE);
|
||||
PaletteBlockPattern.VANILLA_RANGE);
|
||||
|
||||
// Create stone variants
|
||||
|
||||
|
@ -113,65 +114,61 @@ 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();
|
||||
|
||||
public static final PalettesVariantEntry LIMESTONE_VARIANTS =
|
||||
new PalettesVariantEntry(PaletteStoneVariants.LIMESTONE, PaletteBlockPattern.STANDARD_RANGE, LIMESTONE);
|
||||
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();
|
||||
|
||||
public static final PalettesVariantEntry WEATHERED_LIMESTONE_VARIANTS = new PalettesVariantEntry(
|
||||
PaletteStoneVariants.WEATHERED_LIMESTONE, PaletteBlockPattern.STANDARD_RANGE, WEATHERED_LIMESTONE);
|
||||
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();
|
||||
|
||||
public static final PalettesVariantEntry DOLOMITE_VARIANTS =
|
||||
new PalettesVariantEntry(PaletteStoneVariants.DOLOMITE, PaletteBlockPattern.STANDARD_RANGE, DOLOMITE);
|
||||
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();
|
||||
|
||||
public static final PalettesVariantEntry GABBRO_VARIANTS =
|
||||
new PalettesVariantEntry(PaletteStoneVariants.GABBRO, PaletteBlockPattern.STANDARD_RANGE, GABBRO);
|
||||
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()
|
||||
.register();
|
||||
|
||||
public static final PalettesVariantEntry SCORIA_VARIANTS =
|
||||
new PalettesVariantEntry(PaletteStoneVariants.SCORIA, PaletteBlockPattern.STANDARD_RANGE, SCORIA);
|
||||
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();
|
||||
|
||||
public static final PalettesVariantEntry DARK_SCORIA_VARIANTS =
|
||||
new PalettesVariantEntry(PaletteStoneVariants.DARK_SCORIA, PaletteBlockPattern.STANDARD_RANGE, DARK_SCORIA);
|
||||
new PalettesVariantEntry(PaletteStoneVariants.DARK_SCORIA, PaletteBlockPattern.STANDARD_RANGE);
|
||||
|
||||
private static <T extends Block> NonNullBiConsumer<RegistrateBlockLootTables, T> cobblestoneLoot(PaletteStoneVariants variant) {
|
||||
return (loot, block) -> loot.add(block, RegistrateBlockLootTables.droppingWithSilkTouch(block,
|
||||
|
|
|
@ -30,16 +30,21 @@ import net.minecraft.block.RotatedPillarBlock;
|
|||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.data.CookingRecipeBuilder;
|
||||
import net.minecraft.data.ShapedRecipeBuilder;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.tags.ITag;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.client.model.generators.ModelFile;
|
||||
import net.minecraftforge.common.Tags;
|
||||
|
||||
public class PaletteBlockPattern {
|
||||
|
||||
public static final PaletteBlockPattern
|
||||
|
||||
COBBLESTONE = create("cobblestone", SUFFIX, ALL_PARTIALS)
|
||||
.blockTags(Tags.Blocks.COBBLESTONE)
|
||||
.itemTags(Tags.Items.COBBLESTONE)
|
||||
.addRecipes(v -> (c, p) -> {
|
||||
DataIngredient ingredient = DataIngredient.items(c.get());
|
||||
Block result = v.getBaseBlock().get();
|
||||
|
@ -49,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)
|
||||
|
@ -111,6 +118,8 @@ public class PaletteBlockPattern {
|
|||
private String id;
|
||||
private boolean isTranslucent;
|
||||
private boolean hasFoliage;
|
||||
private ITag.INamedTag<Block>[] blockTags;
|
||||
private ITag.INamedTag<Item>[] itemTags;
|
||||
private Optional<Function<PaletteStoneVariants, ConnectedTextureBehaviour>> ctBehaviour;
|
||||
|
||||
private IPatternBlockStateGenerator blockStateGenerator;
|
||||
|
@ -149,6 +158,14 @@ public class PaletteBlockPattern {
|
|||
return hasFoliage;
|
||||
}
|
||||
|
||||
public ITag.INamedTag<Block>[] getBlockTags() {
|
||||
return blockTags;
|
||||
}
|
||||
|
||||
public ITag.INamedTag<Item>[] getItemTags() {
|
||||
return itemTags;
|
||||
}
|
||||
|
||||
public NonNullFunction<Properties, ? extends Block> getBlockFactory() {
|
||||
return blockFactory;
|
||||
}
|
||||
|
@ -198,6 +215,18 @@ public class PaletteBlockPattern {
|
|||
return this;
|
||||
}
|
||||
|
||||
@SafeVarargs
|
||||
private final PaletteBlockPattern blockTags(ITag.INamedTag<Block>... tags) {
|
||||
blockTags = tags;
|
||||
return this;
|
||||
}
|
||||
|
||||
@SafeVarargs
|
||||
private final PaletteBlockPattern itemTags(ITag.INamedTag<Item>... tags) {
|
||||
itemTags = tags;
|
||||
return this;
|
||||
}
|
||||
|
||||
private PaletteBlockPattern connectedTextures(Function<PaletteStoneVariants, ConnectedTextureBehaviour> factory) {
|
||||
this.ctBehaviour = Optional.of(factory);
|
||||
return this;
|
||||
|
@ -300,7 +329,7 @@ public class PaletteBlockPattern {
|
|||
|
||||
// Textures with connectability, used by Spriteshifter
|
||||
|
||||
public static enum CTs {
|
||||
public enum CTs {
|
||||
|
||||
POLISHED(CTType.OMNIDIRECTIONAL), LAYERED(CTType.HORIZONTAL)
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@ package com.simibubi.create.content.palettes;
|
|||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.tterrag.registrate.util.nullness.NonNullSupplier;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.Blocks;
|
||||
|
||||
|
@ -19,15 +21,15 @@ public enum PaletteStoneVariants {
|
|||
|
||||
;
|
||||
|
||||
private Supplier<Supplier<Block>> baseBlock;
|
||||
private NonNullSupplier<NonNullSupplier<Block>> baseBlock;
|
||||
private Supplier<PalettesVariantEntry> variants;
|
||||
|
||||
private PaletteStoneVariants(Supplier<Supplier<Block>> baseBlock, Supplier<PalettesVariantEntry> variants) {
|
||||
private PaletteStoneVariants(NonNullSupplier<NonNullSupplier<Block>> baseBlock, Supplier<PalettesVariantEntry> variants) {
|
||||
this.baseBlock = baseBlock;
|
||||
this.variants = variants;
|
||||
}
|
||||
|
||||
public Supplier<Block> getBaseBlock() {
|
||||
public NonNullSupplier<Block> getBaseBlock() {
|
||||
return baseBlock.get();
|
||||
}
|
||||
|
||||
|
|
|
@ -3,32 +3,35 @@ package com.simibubi.create.content.palettes;
|
|||
import static com.simibubi.create.foundation.data.CreateRegistrate.connectedTextures;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.simibubi.create.AllTags;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.foundation.data.CreateRegistrate;
|
||||
import com.simibubi.create.foundation.utility.ColorHandlers;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.tterrag.registrate.builders.BlockBuilder;
|
||||
import com.tterrag.registrate.builders.ItemBuilder;
|
||||
import com.tterrag.registrate.util.DataIngredient;
|
||||
import com.tterrag.registrate.util.entry.BlockEntry;
|
||||
import com.tterrag.registrate.util.nullness.NonNullSupplier;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.tags.ITag;
|
||||
|
||||
public class PalettesVariantEntry {
|
||||
|
||||
public ImmutableList<BlockEntry<? extends Block>> registeredBlocks;
|
||||
public ImmutableList<BlockEntry<? extends Block>> registeredPartials;
|
||||
public final ImmutableList<BlockEntry<? extends Block>> registeredBlocks;
|
||||
public final ImmutableList<BlockEntry<? extends Block>> registeredPartials;
|
||||
|
||||
public PalettesVariantEntry(PaletteStoneVariants variant, PaletteBlockPattern[] patterns,
|
||||
NonNullSupplier<? extends Block> initialProperties) {
|
||||
public PalettesVariantEntry(PaletteStoneVariants variant, PaletteBlockPattern[] patterns) {
|
||||
String name = Lang.asId(variant.name());
|
||||
NonNullSupplier<Block> initialProperties = variant.getBaseBlock();
|
||||
ImmutableList.Builder<BlockEntry<? extends Block>> registeredBlocks = ImmutableList.builder();
|
||||
ImmutableList.Builder<BlockEntry<? extends Block>> registeredPartials = ImmutableList.builder();
|
||||
CreateRegistrate registrate = Create.registrate();
|
||||
|
||||
for (PaletteBlockPattern pattern : patterns) {
|
||||
CreateRegistrate registrate = Create.registrate();
|
||||
BlockBuilder<? extends Block, CreateRegistrate> builder =
|
||||
registrate.block(pattern.createName(name), pattern.getBlockFactory())
|
||||
.initialProperties(initialProperties)
|
||||
|
@ -36,12 +39,24 @@ public class PalettesVariantEntry {
|
|||
.apply(pattern)
|
||||
.apply(name)::accept);
|
||||
|
||||
ItemBuilder<BlockItem, ? extends BlockBuilder<? extends Block, CreateRegistrate>> itemBuilder =
|
||||
builder.item();
|
||||
|
||||
ITag.INamedTag<Block>[] blockTags = pattern.getBlockTags();
|
||||
if (blockTags != null) {
|
||||
builder.tag(blockTags);
|
||||
}
|
||||
ITag.INamedTag<Item>[] itemTags = pattern.getItemTags();
|
||||
if (itemTags != null) {
|
||||
itemBuilder.tag(itemTags);
|
||||
}
|
||||
|
||||
if (pattern.isTranslucent())
|
||||
builder.addLayer(() -> RenderType::translucent);
|
||||
if (pattern == PaletteBlockPattern.COBBLESTONE)
|
||||
builder.item().tag(AllTags.AllItemTags.COBBLESTONE.tag);
|
||||
if (pattern.hasFoliage())
|
||||
if (pattern.hasFoliage()) {
|
||||
builder.color(() -> ColorHandlers::getGrassyBlock);
|
||||
itemBuilder.color(() -> ColorHandlers::getGrassyItem);
|
||||
}
|
||||
pattern.createCTBehaviour(variant)
|
||||
.ifPresent(b -> builder.onRegister(connectedTextures(b)));
|
||||
|
||||
|
@ -51,13 +66,7 @@ public class PalettesVariantEntry {
|
|||
pattern.addRecipes(variant, c, p);
|
||||
});
|
||||
|
||||
if (pattern.hasFoliage())
|
||||
builder.item()
|
||||
.color(() -> ColorHandlers::getGrassyItem)
|
||||
.build();
|
||||
else
|
||||
builder.simpleItem();
|
||||
|
||||
itemBuilder.register();
|
||||
BlockEntry<? extends Block> block = builder.register();
|
||||
registeredBlocks.add(block);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -17,6 +17,7 @@ import com.simibubi.create.AllBlocks;
|
|||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.schematics.block.SchematicTableTileEntity;
|
||||
import com.simibubi.create.content.schematics.item.SchematicAndQuillItem;
|
||||
import com.simibubi.create.content.schematics.item.SchematicItem;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.config.CSchematics;
|
||||
|
@ -319,6 +320,7 @@ public class ServerSchematicLoader {
|
|||
|
||||
try (OutputStream outputStream = Files.newOutputStream(path)) {
|
||||
CompoundNBT nbttagcompound = t.save(new CompoundNBT());
|
||||
SchematicAndQuillItem.replaceStructureVoidWithAir(nbttagcompound);
|
||||
CompressedStreamTools.writeCompressed(nbttagcompound, outputStream);
|
||||
player.setItemInHand(Hand.MAIN_HAND, SchematicItem.create(schematic, player.getGameProfile().getName()));
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package com.simibubi.create.content.schematics.block;
|
||||
|
||||
import com.jozufozu.flywheel.backend.instancing.IDynamicInstance;
|
||||
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance;
|
||||
import com.jozufozu.flywheel.backend.material.InstanceMaterial;
|
||||
import com.jozufozu.flywheel.backend.material.MaterialManager;
|
||||
import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance;
|
||||
import com.jozufozu.flywheel.core.materials.ModelData;
|
||||
import com.jozufozu.flywheel.util.transform.MatrixTransformStack;
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
|
|
|
@ -15,6 +15,7 @@ import com.simibubi.create.AllSpecialTextures;
|
|||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.content.schematics.ClientSchematicLoader;
|
||||
import com.simibubi.create.content.schematics.item.SchematicAndQuillItem;
|
||||
import com.simibubi.create.content.schematics.packet.InstantSchematicPacket;
|
||||
import com.simibubi.create.foundation.gui.ScreenOpener;
|
||||
import com.simibubi.create.foundation.networking.AllPackets;
|
||||
|
@ -126,7 +127,7 @@ public class SchematicAndQuillHandler {
|
|||
firstPos = selectedPos;
|
||||
Lang.sendStatus(player, "schematicAndQuill.firstPos");
|
||||
}
|
||||
|
||||
|
||||
public void discard() {
|
||||
ClientPlayerEntity player = Minecraft.getInstance().player;
|
||||
firstPos = null;
|
||||
|
@ -213,7 +214,8 @@ public class SchematicAndQuillHandler {
|
|||
t.fillFromWorld(Minecraft.getInstance().level, origin, bounds, true, Blocks.AIR);
|
||||
|
||||
if (string.isEmpty())
|
||||
string = Lang.translate("schematicAndQuill.fallbackName").getString();
|
||||
string = Lang.translate("schematicAndQuill.fallbackName")
|
||||
.getString();
|
||||
|
||||
String folderPath = "schematics";
|
||||
FilesHelper.createFolderIfMissing(folderPath);
|
||||
|
@ -225,6 +227,7 @@ public class SchematicAndQuillHandler {
|
|||
try {
|
||||
outputStream = Files.newOutputStream(path, StandardOpenOption.CREATE);
|
||||
CompoundNBT nbttagcompound = t.save(new CompoundNBT());
|
||||
SchematicAndQuillItem.replaceStructureVoidWithAir(nbttagcompound);
|
||||
CompressedStreamTools.writeCompressed(nbttagcompound, outputStream);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
package com.simibubi.create.content.schematics.item;
|
||||
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
|
||||
public class SchematicAndQuillItem extends Item {
|
||||
|
||||
|
@ -8,4 +12,18 @@ public class SchematicAndQuillItem extends Item {
|
|||
super(properties);
|
||||
}
|
||||
|
||||
public static void replaceStructureVoidWithAir(CompoundNBT nbt) {
|
||||
String air = Blocks.AIR.getRegistryName()
|
||||
.toString();
|
||||
String structureVoid = Blocks.STRUCTURE_VOID.getRegistryName()
|
||||
.toString();
|
||||
|
||||
NBTHelper.iterateCompoundList(nbt.getList("palette", 10), c -> {
|
||||
if (c.contains("Name") && c.getString("Name")
|
||||
.equals(structureVoid)) {
|
||||
c.putString("Name", air);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -93,8 +93,8 @@ import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
|
|||
@EventBusSubscriber(value = Dist.CLIENT)
|
||||
public class ClientEvents {
|
||||
|
||||
private static final String itemPrefix = "item." + Create.ID;
|
||||
private static final String blockPrefix = "block." + Create.ID;
|
||||
private static final String ITEM_PREFIX = "item." + Create.ID;
|
||||
private static final String BLOCK_PREFIX = "block." + Create.ID;
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onTick(ClientTickEvent event) {
|
||||
|
@ -246,7 +246,7 @@ public class ClientEvents {
|
|||
String translationKey = stack.getItem()
|
||||
.getDescriptionId(stack);
|
||||
|
||||
if (translationKey.startsWith(itemPrefix) || translationKey.startsWith(blockPrefix))
|
||||
if (translationKey.startsWith(ITEM_PREFIX) || translationKey.startsWith(BLOCK_PREFIX))
|
||||
if (TooltipHelper.hasTooltip(stack, event.getPlayer())) {
|
||||
List<ITextComponent> itemTooltip = event.getToolTip();
|
||||
List<ITextComponent> toolTip = new ArrayList<>();
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.simibubi.create.content.contraptions.fluids.recipe.FluidTransferRecip
|
|||
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
|
||||
import com.simibubi.create.content.contraptions.wrench.WrenchItem;
|
||||
import com.simibubi.create.content.curiosities.toolbox.ToolboxHandler;
|
||||
import com.simibubi.create.content.curiosities.weapons.PotatoProjectileTypeManager;
|
||||
import com.simibubi.create.content.curiosities.zapper.ZapperInteractionHandler;
|
||||
import com.simibubi.create.content.curiosities.zapper.ZapperItem;
|
||||
import com.simibubi.create.content.logistics.item.LinkedControllerServerHandler;
|
||||
|
@ -45,7 +46,6 @@ import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
|||
import net.minecraftforge.event.world.BlockEvent.FluidPlaceBlockEvent;
|
||||
import net.minecraftforge.event.world.ChunkEvent;
|
||||
import net.minecraftforge.event.world.WorldEvent;
|
||||
import net.minecraftforge.eventbus.api.EventPriority;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||
import net.minecraftforge.fml.event.server.FMLServerStoppingEvent;
|
||||
|
@ -129,7 +129,7 @@ public class CommonEvents {
|
|||
WrenchItem.wrenchInstaKillsMinecarts(event);
|
||||
}
|
||||
|
||||
@SubscribeEvent(priority = EventPriority.NORMAL)
|
||||
@SubscribeEvent
|
||||
public static void registerCommands(RegisterCommandsEvent event) {
|
||||
AllCommands.register(event.getDispatcher());
|
||||
}
|
||||
|
@ -139,6 +139,7 @@ public class CommonEvents {
|
|||
event.addListener(RecipeFinder.LISTENER);
|
||||
event.addListener(PotionMixingRecipeManager.LISTENER);
|
||||
event.addListener(FluidTransferRecipes.LISTENER);
|
||||
event.addListener(PotatoProjectileTypeManager.ReloadListener.INSTANCE);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
|
|
|
@ -26,10 +26,10 @@ import net.minecraft.util.ResourceLocation;
|
|||
public abstract class CriterionTriggerBase<T extends CriterionTriggerBase.Instance> implements ICriterionTrigger<T> {
|
||||
|
||||
public CriterionTriggerBase(String id) {
|
||||
this.ID = new ResourceLocation(Create.ID, id);
|
||||
this.id = Create.asResource(id);
|
||||
}
|
||||
|
||||
private final ResourceLocation ID;
|
||||
private final ResourceLocation id;
|
||||
protected final Map<PlayerAdvancements, Set<Listener<T>>> listeners = Maps.newHashMap();
|
||||
|
||||
@Override
|
||||
|
@ -57,7 +57,7 @@ public abstract class CriterionTriggerBase<T extends CriterionTriggerBase.Instan
|
|||
|
||||
@Override
|
||||
public ResourceLocation getId() {
|
||||
return ID;
|
||||
return id;
|
||||
}
|
||||
|
||||
protected void trigger(ServerPlayerEntity player, @Nullable List<Supplier<Object>> suppliers) {
|
||||
|
|
|
@ -7,7 +7,7 @@ import com.simibubi.create.foundation.render.SuperByteBuffer;
|
|||
|
||||
public abstract class CTSpriteShiftEntry extends SpriteShiftEntry {
|
||||
|
||||
int textureSheetSize;
|
||||
protected int textureSheetSize;
|
||||
|
||||
public CTSpriteShiftEntry(int sheetSize) {
|
||||
this.textureSheetSize = sheetSize;
|
||||
|
|
|
@ -7,33 +7,25 @@ import net.minecraft.util.ResourceLocation;
|
|||
|
||||
public class CTSpriteShifter extends SpriteShifter {
|
||||
|
||||
public enum CTType {
|
||||
OMNIDIRECTIONAL, HORIZONTAL, VERTICAL, CROSS;
|
||||
public static CTSpriteShiftEntry getCT(CTType type, ResourceLocation blockTexture, ResourceLocation connectedTexture) {
|
||||
String key = type.name() + ":" + blockTexture + "->" + connectedTexture;
|
||||
if (ENTRY_CACHE.containsKey(key))
|
||||
return (CTSpriteShiftEntry) ENTRY_CACHE.get(key);
|
||||
|
||||
CTSpriteShiftEntry entry = create(type);
|
||||
entry.set(blockTexture, connectedTexture);
|
||||
ENTRY_CACHE.put(key, entry);
|
||||
return entry;
|
||||
}
|
||||
|
||||
public static CTSpriteShiftEntry getCT(CTType type, String blockTextureName, String connectedTextureName) {
|
||||
return getCT(type, Create.asResource("block/" + blockTextureName), Create.asResource("block/" + connectedTextureName + "_connected"));
|
||||
}
|
||||
|
||||
public static CTSpriteShiftEntry getCT(CTType type, String blockTextureName) {
|
||||
return getCT(type, blockTextureName, blockTextureName);
|
||||
}
|
||||
|
||||
public static CTSpriteShiftEntry getCT(CTType type, String blockTextureName, String connectedTextureName) {
|
||||
return getCT(type, new ResourceLocation(Create.ID, "block/" + blockTextureName), connectedTextureName);
|
||||
}
|
||||
|
||||
public static CTSpriteShiftEntry getCT(CTType type, ResourceLocation blockTexture, String connectedTextureName) {
|
||||
String targetLocation = "block/" + connectedTextureName + "_connected";
|
||||
String key =
|
||||
type.name() + ":" + blockTexture.getNamespace() + ":" + blockTexture.getPath() + "->" + targetLocation;
|
||||
if (textures.containsKey(key))
|
||||
return (CTSpriteShiftEntry) textures.get(key);
|
||||
|
||||
CTSpriteShiftEntry entry = create(type);
|
||||
ResourceLocation targetTextureLocation = new ResourceLocation(Create.ID, targetLocation);
|
||||
entry.set(blockTexture, targetTextureLocation);
|
||||
|
||||
textures.put(key, entry);
|
||||
return entry;
|
||||
}
|
||||
|
||||
private static CTSpriteShiftEntry create(CTType type) {
|
||||
switch (type) {
|
||||
case HORIZONTAL:
|
||||
|
@ -49,4 +41,8 @@ public class CTSpriteShifter extends SpriteShifter {
|
|||
}
|
||||
}
|
||||
|
||||
public enum CTType {
|
||||
OMNIDIRECTIONAL, HORIZONTAL, VERTICAL, CROSS;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -11,26 +11,29 @@ import net.minecraft.util.ResourceLocation;
|
|||
|
||||
public class SpriteShifter {
|
||||
|
||||
protected static Map<String, SpriteShiftEntry> textures = new HashMap<>();
|
||||
protected static final Map<String, SpriteShiftEntry> ENTRY_CACHE = new HashMap<>();
|
||||
|
||||
public static SpriteShiftEntry get(String originalLocation, String targetLocation) {
|
||||
public static SpriteShiftEntry get(ResourceLocation originalLocation, ResourceLocation targetLocation) {
|
||||
String key = originalLocation + "->" + targetLocation;
|
||||
if (textures.containsKey(key))
|
||||
return textures.get(key);
|
||||
if (ENTRY_CACHE.containsKey(key))
|
||||
return ENTRY_CACHE.get(key);
|
||||
|
||||
SpriteShiftEntry entry = new SpriteShiftEntry();
|
||||
entry.originalTextureLocation = new ResourceLocation(Create.ID, originalLocation);
|
||||
entry.targetTextureLocation = new ResourceLocation(Create.ID, targetLocation);
|
||||
textures.put(key, entry);
|
||||
entry.set(originalLocation, targetLocation);
|
||||
ENTRY_CACHE.put(key, entry);
|
||||
return entry;
|
||||
}
|
||||
|
||||
public static SpriteShiftEntry get(String originalLocation, String targetLocation) {
|
||||
return get(Create.asResource(originalLocation), Create.asResource(targetLocation));
|
||||
}
|
||||
|
||||
public static void reloadUVs() {
|
||||
textures.values().forEach(SpriteShiftEntry::loadTextures);
|
||||
ENTRY_CACHE.values().forEach(SpriteShiftEntry::loadTextures);
|
||||
}
|
||||
|
||||
public static List<ResourceLocation> getAllTargetSprites() {
|
||||
return textures.values().stream().map(SpriteShiftEntry::getTargetResourceLocation).collect(Collectors.toList());
|
||||
return ENTRY_CACHE.values().stream().map(SpriteShiftEntry::getTargetResourceLocation).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -22,8 +22,8 @@ import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock;
|
|||
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock.Shape;
|
||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelItem;
|
||||
import com.simibubi.create.content.logistics.block.inventories.CrateBlock;
|
||||
import com.simibubi.create.foundation.block.ItemUseOverrides;
|
||||
import com.simibubi.create.foundation.block.BlockStressDefaults;
|
||||
import com.simibubi.create.foundation.block.ItemUseOverrides;
|
||||
import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry;
|
||||
import com.tterrag.registrate.builders.BlockBuilder;
|
||||
import com.tterrag.registrate.util.nullness.NonNullUnaryOperator;
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -21,7 +21,7 @@ public class ModelGen {
|
|||
public static ModelFile createOvergrown(DataGenContext<Block, ? extends Block> ctx, BlockStateProvider prov,
|
||||
ResourceLocation side, ResourceLocation top, ResourceLocation bottom, ResourceLocation overlay) {
|
||||
return prov.models()
|
||||
.withExistingParent(ctx.getName(), new ResourceLocation(Create.ID, "block/overgrown"))
|
||||
.withExistingParent(ctx.getName(), Create.asResource("block/overgrown"))
|
||||
.texture("particle", side)
|
||||
.texture("side", side)
|
||||
.texture("top", top)
|
||||
|
|
|
@ -213,7 +213,7 @@ public class WindowGen {
|
|||
.loot((t, g) -> t.dropWhenSilkTouch(g))
|
||||
.item()
|
||||
.tag(Tags.Items.GLASS_PANES)
|
||||
.model((c, p) -> p.withExistingParent(c.getName(), new ResourceLocation(Create.ID, "item/pane"))
|
||||
.model((c, p) -> p.withExistingParent(c.getName(), Create.asResource("item/pane"))
|
||||
.texture("pane", sideTexture)
|
||||
.texture("edge", topTexture))
|
||||
.build()
|
||||
|
|
|
@ -21,7 +21,6 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.content.contraptions.base.IRotate;
|
||||
import com.simibubi.create.content.contraptions.base.IRotate.SpeedLevel;
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package com.simibubi.create.foundation.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import com.simibubi.create.content.curiosities.weapons.PotatoProjectileTypeManager;
|
||||
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.server.management.PlayerList;
|
||||
|
||||
@Mixin(PlayerList.class)
|
||||
public class PlayerListMixin {
|
||||
@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/item/crafting/ServerRecipeBook;sendInitialRecipeBook(Lnet/minecraft/entity/player/ServerPlayerEntity;)V", shift = At.Shift.AFTER), method = "placeNewPlayer(Lnet/minecraft/network/NetworkManager;Lnet/minecraft/entity/player/ServerPlayerEntity;)V")
|
||||
private void afterSendRecipeBookOnPlaceNewPlayer(NetworkManager networkManager, ServerPlayerEntity player, CallbackInfo ci) {
|
||||
PotatoProjectileTypeManager.syncTo(player);
|
||||
}
|
||||
|
||||
@Inject(at = @At("TAIL"), method = "reloadResources()V")
|
||||
private void onReloadResources(CallbackInfo ci) {
|
||||
PotatoProjectileTypeManager.syncToAll();
|
||||
}
|
||||
}
|
|
@ -22,13 +22,16 @@ 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.toolbox.ToolboxDisposeAllPacket;
|
||||
import com.simibubi.create.content.curiosities.toolbox.ToolboxEquipPacket;
|
||||
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;
|
||||
|
@ -69,7 +72,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),
|
||||
|
@ -98,6 +100,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),
|
||||
TOOLBOX_EQUIP(ToolboxEquipPacket.class, ToolboxEquipPacket::new, PLAY_TO_SERVER),
|
||||
TOOLBOX_DISPOSE_ALL(ToolboxDisposeAllPacket.class, ToolboxDisposeAllPacket::new, PLAY_TO_SERVER),
|
||||
|
||||
|
@ -121,11 +125,12 @@ public enum AllPackets {
|
|||
POTATO_CANNON(PotatoCannonPacket.class, PotatoCannonPacket::new, PLAY_TO_CLIENT),
|
||||
SOUL_PULSE(SoulPulseEffectPacket.class, SoulPulseEffectPacket::new, PLAY_TO_CLIENT),
|
||||
PERSISTENT_DATA(ISyncPersistentData.Packet.class, ISyncPersistentData.Packet::new, PLAY_TO_CLIENT),
|
||||
SYNC_POTATO_PROJECTILE_TYPES(PotatoProjectileTypeManager.SyncPacket.class, PotatoProjectileTypeManager.SyncPacket::new, PLAY_TO_CLIENT),
|
||||
|
||||
;
|
||||
|
||||
public static final ResourceLocation CHANNEL_NAME = new ResourceLocation(Create.ID, "network");
|
||||
public static final String NETWORK_VERSION = new ResourceLocation(Create.ID, "1").toString();
|
||||
public static final ResourceLocation CHANNEL_NAME = Create.asResource("network");
|
||||
public static final String NETWORK_VERSION = Create.asResource("1").toString();
|
||||
public static SimpleChannel channel;
|
||||
|
||||
private LoadedPacket<?> packet;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -34,6 +34,10 @@ public class PonderLocalization {
|
|||
TAG.put(key, Couple.create(enUS, description));
|
||||
}
|
||||
|
||||
public static void registerChapter(ResourceLocation key, String enUS) {
|
||||
CHAPTER.put(key, enUS);
|
||||
}
|
||||
|
||||
public static void registerSpecific(ResourceLocation sceneId, String key, String enUS) {
|
||||
SPECIFIC.computeIfAbsent(sceneId, $ -> new HashMap<>())
|
||||
.put(key, enUS);
|
||||
|
|
|
@ -13,6 +13,8 @@ import java.util.function.Consumer;
|
|||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import org.apache.commons.lang3.mutable.MutableDouble;
|
||||
import org.apache.commons.lang3.mutable.MutableObject;
|
||||
|
||||
|
@ -52,8 +54,6 @@ import net.minecraft.util.math.vector.Vector3d;
|
|||
import net.minecraft.util.math.vector.Vector3i;
|
||||
import net.minecraft.util.math.vector.Vector4f;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class PonderScene {
|
||||
|
||||
public static final String TITLE_KEY = "header";
|
||||
|
|
|
@ -32,9 +32,9 @@ public class AllMaterialSpecs {
|
|||
}
|
||||
|
||||
public static class Locations {
|
||||
public static final ResourceLocation ROTATING = new ResourceLocation(Create.ID, "rotating");
|
||||
public static final ResourceLocation BELTS = new ResourceLocation(Create.ID, "belts");
|
||||
public static final ResourceLocation ACTORS = new ResourceLocation(Create.ID, "actors");
|
||||
public static final ResourceLocation FLAPS = new ResourceLocation(Create.ID, "flaps");
|
||||
public static final ResourceLocation ROTATING = Create.asResource("rotating");
|
||||
public static final ResourceLocation BELTS = Create.asResource("belts");
|
||||
public static final ResourceLocation ACTORS = Create.asResource("actors");
|
||||
public static final ResourceLocation FLAPS = Create.asResource("flaps");
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue