Magic Potatoes

- Fixed localization of potato cannon ammo tooltip
- Added several enchantment compatibilities to the Potato Cannon
- Added the Potato Recovery Enchantment
This commit is contained in:
simibubi 2021-07-07 17:33:43 +02:00
parent 48ea7d64b4
commit efa2bc745f
23 changed files with 300 additions and 62 deletions

View file

@ -425,21 +425,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
f0d3897a272bda674b3da81ff96c9ff9d50a22d7 assets/create/lang/en_ud.json
fe0d721b6a6cb497ebcd3d52cbdd85dcd0aaa88d assets/create/lang/en_us.json
823a08304aa1d825810f3e289524204b0d459afc assets/create/lang/unfinished/de_de.json
c1584c0fd16dcdfbe6b954cf66853ae54e943e14 assets/create/lang/unfinished/es_es.json
5ce012b625bd43f4722ffd33dba5a1d69e826c63 assets/create/lang/unfinished/es_mx.json
14982459cc823666a9c31c14f128c74fe23d7da7 assets/create/lang/unfinished/fr_fr.json
4e800e837b6604a963c1d8efd9502165306285ec assets/create/lang/unfinished/it_it.json
d6bff62e5c6ff8b9015f69239bd00dfc84752c1e assets/create/lang/unfinished/ja_jp.json
eaee8e2d47ca84cd95b7e5ee5681817a53e198df assets/create/lang/unfinished/ko_kr.json
3b685a11350ab25b26b285d31e96af534ed8b583 assets/create/lang/unfinished/nl_nl.json
dcffd28c035a77d20676b5df28b8bd053b821bda assets/create/lang/unfinished/pl_pl.json
da179be447f93814b5c2892a145ed8696f4cc1d6 assets/create/lang/unfinished/pt_br.json
980321ff0d197abdbc9e9421dc570cc1faeae530 assets/create/lang/unfinished/ru_ru.json
9a442edbadcb825bf0f22ba51d0761e18ae6942d assets/create/lang/unfinished/zh_cn.json
5f16a1de3c3686367d449d9ae6898fe365592e3f assets/create/lang/unfinished/zh_tw.json
1fa99fbea1418694aea41dea81f9cbf5e30066d4 assets/create/lang/en_ud.json
f38e0d6773f0618212e6d036290be02692302b1b assets/create/lang/en_us.json
8456877fca4c1c97a74c25c97e0dbd274e728d25 assets/create/lang/unfinished/de_de.json
4de8456cde05eecedec61c79522cbd6549de01a9 assets/create/lang/unfinished/es_es.json
2c72b40a22f6da68c179e875fecc471dfb63882c assets/create/lang/unfinished/es_mx.json
801a7fc4c0b83f94ee5fc6ff2dcfbc2c794e7fd5 assets/create/lang/unfinished/fr_fr.json
7c23104e6f627e2812391696550f7ac560a8543d assets/create/lang/unfinished/it_it.json
6a488e40ec2bd295e51447889e1643b12d744a1b assets/create/lang/unfinished/ja_jp.json
aea13865e1613a09110c6d3b52c3da68015d6a72 assets/create/lang/unfinished/ko_kr.json
7be41ad5b274297072b1cc17663686287bc3f618 assets/create/lang/unfinished/nl_nl.json
3e1957e45a5cc7586236517a5ee0f57788be9e8e assets/create/lang/unfinished/pl_pl.json
e57e2fbe82324c567d130f008865f34c45e2f9be assets/create/lang/unfinished/pt_br.json
e85f3a6441b932d3ebb4023a34d300ad196c7f41 assets/create/lang/unfinished/ru_ru.json
4186b08ae85862b6b73895507f6849d2f249d006 assets/create/lang/unfinished/zh_cn.json
90e0931966c8e272a2bd03378b25769c5daf64bb 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

View file

@ -426,6 +426,7 @@
"block.create.yellow_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u028Do\u05DF\u05DF\u01DD\u028E",
"block.create.zinc_block": "\u0254u\u0131Z \u025Fo \u029E\u0254o\u05DF\u15FA",
"block.create.zinc_ore": "\u01DD\u0279O \u0254u\u0131Z",
"enchantment.create.potato_recovery": "\u028E\u0279\u01DD\u028Co\u0254\u01DD\u1D1A o\u0287\u0250\u0287o\u0500",
"entity.create.contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186",
"entity.create.crafting_blueprint": "\u0287u\u0131\u0279d\u01DDn\u05DF\u15FA bu\u0131\u0287\u025F\u0250\u0279\u0186",
"entity.create.gantry_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u028E\u0279\u0287u\u0250\u2141",

View file

@ -430,6 +430,8 @@
"block.create.zinc_block": "Block of Zinc",
"block.create.zinc_ore": "Zinc Ore",
"enchantment.create.potato_recovery": "Potato Recovery",
"entity.create.contraption": "Contraption",
"entity.create.crafting_blueprint": "Crafting Blueprint",
"entity.create.gantry_contraption": "Gantry Contraption",
@ -1171,6 +1173,10 @@
"create.crafting_blueprint.secondary_display_slot": "Secondary Display Slot",
"create.crafting_blueprint.optional": "Optional",
"create.potato_cannon.ammo.attack_damage": "%1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "%1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "%1$s Knockback",
"create.hint.hose_pulley.title": "Bottomless Supply",
"create.hint.hose_pulley": "The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "No Targets",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1114",
"_": "Missing Localizations: 1118",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "Zinkblock",
"block.create.zinc_ore": "Zinkerz",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "Vorrichtung",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "Portalkran Vorrichtung",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "Endlose Versorgung",
"create.hint.hose_pulley": "Das angewählte Gewässer wird als unendlich betrachtet.",
"create.hint.mechanical_arm_no_targets.title": "Keine Ziele",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 877",
"_": "Missing Localizations: 881",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "Bloque de zinc",
"block.create.zinc_ore": "Mineral de zinc",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "Artilugio",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "Artilugio de grúa",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "Suministro sin fondo",
"create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita",
"create.hint.mechanical_arm_no_targets.title": "No hay objetivos",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1481",
"_": "Missing Localizations: 1485",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "Bloque de Zinc",
"block.create.zinc_ore": "Mineral de Zinc",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "Artefacto",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1366",
"_": "Missing Localizations: 1370",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "Bloc de zinc",
"block.create.zinc_ore": "Minerai de zinc",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "Engin",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 894",
"_": "Missing Localizations: 898",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "Blocco di zinco",
"block.create.zinc_ore": "Zinco grezzo",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "Contrazione",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "Buco senza fondo",
"create.hint.hose_pulley": "Il corpo fluido selezionato è considerato infinito.",
"create.hint.mechanical_arm_no_targets.title": "Nessun bersaglio",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 26",
"_": "Missing Localizations: 30",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "亜鉛ブロック",
"block.create.zinc_ore": "亜鉛鉱石",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "からくり",
"entity.create.crafting_blueprint": "クラフトブループリント",
"entity.create.gantry_contraption": "ガントリーからくり",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "第2表示スロット",
"create.crafting_blueprint.optional": "オプション",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "底なし搬出",
"create.hint.hose_pulley": "対象となる液体は無限とみなされています。",
"create.hint.mechanical_arm_no_targets.title": "ターゲットが見つかりません",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 272",
"_": "Missing Localizations: 276",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "아연 블록",
"block.create.zinc_ore": "아연 광석",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "장치",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "다리 장치",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "무한한 공급량",
"create.hint.hose_pulley": "액체를 무한하다고 간주합니다.",
"create.hint.mechanical_arm_no_targets.title": "목표가 없음",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1747",
"_": "Missing Localizations: 1751",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "UNLOCALIZED: Block of Zinc",
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "UNLOCALIZED: Contraption",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 236",
"_": "Missing Localizations: 240",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "Blok cynku",
"block.create.zinc_ore": "Ruda cynku",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "Maszyna",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "Maszyna suwnicowa",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "Niewyczerpany zapas",
"create.hint.hose_pulley": "Wybrane zbiornik cieczy jest uznany za nieskończony",
"create.hint.mechanical_arm_no_targets.title": "Brak celi",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1788",
"_": "Missing Localizations: 1792",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "UNLOCALIZED: Block of Zinc",
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "UNLOCALIZED: Contraption",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 267",
"_": "Missing Localizations: 271",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "Цинковый блок",
"block.create.zinc_ore": "Цинковая руда",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "Штуковина",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "Крановая штуковина",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "Безграничное снабжение",
"create.hint.hose_pulley": "Целевой водный резервуар считается бесконечным.",
"create.hint.mechanical_arm_no_targets.title": "Нет целей",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 277",
"_": "Missing Localizations: 281",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "锌块",
"block.create.zinc_ore": "锌矿石",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "装置",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "起重机装置",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "无限供应",
"create.hint.hose_pulley": "目标液体对象被视为无限量的。",
"create.hint.mechanical_arm_no_targets.title": "没有目标",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 272",
"_": "Missing Localizations: 276",
"_": "->------------------------] Game Elements [------------------------<-",
@ -431,6 +431,8 @@
"block.create.zinc_block": "鋅磚",
"block.create.zinc_ore": "鋅礦石",
"enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery",
"entity.create.contraption": "結構",
"entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint",
"entity.create.gantry_contraption": "門式結構",
@ -1172,6 +1174,10 @@
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.hint.hose_pulley.title": "無限供應",
"create.hint.hose_pulley": "目標液體為無限供應",
"create.hint.mechanical_arm_no_targets.title": "沒有目標",

View file

@ -0,0 +1,24 @@
package com.simibubi.create;
import com.simibubi.create.content.curiosities.weapons.PotatoRecoveryEnchantment;
import com.simibubi.create.foundation.data.CreateRegistrate;
import com.tterrag.registrate.util.entry.RegistryEntry;
import net.minecraft.enchantment.Enchantment.Rarity;
import net.minecraft.enchantment.EnchantmentType;
import net.minecraft.inventory.EquipmentSlotType;
public class AllEnchantments {
private static final CreateRegistrate REGISTRATE = Create.registrate();
public static final RegistryEntry<PotatoRecoveryEnchantment> POTATO_RECOVERY = REGISTRATE.object("potato_recovery")
.enchantment(EnchantmentType.BOW, PotatoRecoveryEnchantment::new)
.addSlots(EquipmentSlotType.MAINHAND, EquipmentSlotType.OFFHAND)
.lang("Potato Recovery")
.rarity(Rarity.UNCOMMON)
.register();
public static void register() {}
}

View file

@ -89,6 +89,7 @@ public class Create {
AllMovementBehaviours.register();
AllWorldFeatures.register();
AllConfigs.register();
AllEnchantments.register();
IEventBus modEventBus = FMLJavaModLoadingContext.get()
.getModEventBus();

View file

@ -4,6 +4,7 @@ import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import com.simibubi.create.AllEnchantments;
import com.simibubi.create.AllEntityTypes;
import com.simibubi.create.Create;
import com.simibubi.create.CreateClient;
@ -11,12 +12,16 @@ import com.simibubi.create.content.curiosities.armor.BackTankUtil;
import com.simibubi.create.content.curiosities.zapper.ShootableGadgetItemMethods;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.utility.AnimationTickHolder;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
@ -28,7 +33,9 @@ import net.minecraft.util.ActionResultType;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.text.IFormattableTextComponent;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.TextFormatting;
@ -52,6 +59,21 @@ public class PotatoCannonItem extends ShootableItem {
return false;
}
@Override
public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) {
if (enchantment == Enchantments.POWER)
return true;
if (enchantment == Enchantments.PUNCH)
return true;
if (enchantment == Enchantments.FLAME)
return true;
if (enchantment == Enchantments.LOOTING)
return true;
if (enchantment == AllEnchantments.POTATO_RECOVERY.get())
return true;
return super.canApplyAtEnchantingTable(stack, enchantment);
}
@Override
public ActionResultType onItemUse(ItemUseContext context) {
return onItemRightClick(context.getWorld(), context.getPlayer(), context.getHand()).getType();
@ -118,25 +140,30 @@ public class PotatoCannonItem extends ShootableItem {
PotatoCannonProjectileTypes projectileType = PotatoCannonProjectileTypes.getProjectileTypeOf(itemStack)
.orElse(PotatoCannonProjectileTypes.FALLBACK);
Vector3d lookVec = player.getLookVec();
Vector3d motion = lookVec.add(correction).normalize().scale(projectileType.getVelocityMultiplier());
Vector3d motion = lookVec.add(correction)
.normalize()
.scale(projectileType.getVelocityMultiplier());
float soundPitch = projectileType.getSoundPitch() + (Create.RANDOM.nextFloat() - .5f) / 4f;
boolean spray = projectileType.getSplit() > 1;
Vector3d sprayBase = VecHelper.rotate(new Vector3d(0,0.1,0),
360*Create.RANDOM.nextFloat(), Axis.Z);
Vector3d sprayBase = VecHelper.rotate(new Vector3d(0, 0.1, 0), 360 * Create.RANDOM.nextFloat(), Axis.Z);
float sprayChange = 360f / projectileType.getSplit();
for (int i = 0; i < projectileType.getSplit(); i++) {
PotatoProjectileEntity projectile = AllEntityTypes.POTATO_PROJECTILE.create(world);
projectile.setItem(itemStack);
projectile.setEnchantmentEffectsFromCannon(stack);
Vector3d splitMotion = motion;
if (spray) {
float imperfection = 40*(Create.RANDOM.nextFloat() - 0.5f);
float imperfection = 40 * (Create.RANDOM.nextFloat() - 0.5f);
Vector3d sprayOffset = VecHelper.rotate(sprayBase, i * sprayChange + imperfection, Axis.Z);
splitMotion = splitMotion.add(VecHelper.lookAt(sprayOffset, motion));
}
if (i != 0)
projectile.recoveryChance = 0;
projectile.setPosition(barrelPos.x, barrelPos.y, barrelPos.z);
projectile.setMotion(splitMotion);
@ -197,20 +224,45 @@ public class PotatoCannonItem extends ShootableItem {
@Override
@OnlyIn(Dist.CLIENT)
public void addInformation(ItemStack stack, World world, List<ITextComponent> tooltip, ITooltipFlag flag) {
int power = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, stack);
int punch = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, stack);
final float additionalDamage = power * 2;
final float additionalKnockback = punch * .5f;
getAmmoforPreview(stack).ifPresent(ammo -> {
String _attack = "potato_cannon.ammo.attack_damage";
String _reload = "potato_cannon.ammo.reload_ticks";
String _knockback = "potato_cannon.ammo.knockback";
tooltip.add(new StringTextComponent(""));
tooltip.add(new TranslationTextComponent(ammo.getTranslationKey()).append(new StringTextComponent(":"))
.formatted(TextFormatting.GRAY));
PotatoCannonProjectileTypes type = PotatoCannonProjectileTypes.getProjectileTypeOf(ammo)
.get();
StringTextComponent spacing = new StringTextComponent(" ");
TextFormatting green = TextFormatting.GREEN;
TextFormatting darkGreen = TextFormatting.DARK_GREEN;
float damageF = type.getDamage() + additionalDamage;
IFormattableTextComponent damage = new StringTextComponent(
damageF == MathHelper.floor(damageF) ? "" + MathHelper.floor(damageF) : "" + damageF);
IFormattableTextComponent reloadTicks = new StringTextComponent("" + type.getReloadTicks());
IFormattableTextComponent knockback =
new StringTextComponent("" + (type.getKnockback() + additionalKnockback));
damage = damage.formatted(additionalDamage > 0 ? green : darkGreen);
knockback = knockback.formatted(additionalKnockback > 0 ? green : darkGreen);
reloadTicks = reloadTicks.formatted(darkGreen);
tooltip.add(spacing.copy()
.append(new StringTextComponent(type.getDamage() + " Attack Damage").formatted(darkGreen)));
.append(Lang.translate(_attack, damage)
.formatted(darkGreen)));
tooltip.add(spacing.copy()
.append(new StringTextComponent(type.getReloadTicks() + " Reload Ticks").formatted(darkGreen)));
.append(Lang.translate(_reload, reloadTicks)
.formatted(darkGreen)));
tooltip.add(spacing.copy()
.append(new StringTextComponent(type.getKnockback() + " Knockback").formatted(darkGreen)));
.append(Lang.translate(_knockback, knockback)
.formatted(darkGreen)));
});
super.addInformation(stack, world, tooltip, flag);
}

View file

@ -3,8 +3,9 @@ package com.simibubi.create.content.curiosities.weapons;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Predicate;
import com.mojang.datafixers.util.Pair;
import com.simibubi.create.AllItems;
@ -255,10 +256,8 @@ public class PotatoCannonProjectileTypes {
private float fwoompPitch = 1;
private boolean sticky = false;
private PotatoProjectileRenderMode renderMode = new PotatoProjectileRenderMode.Billboard();
private Consumer<EntityRayTraceResult> onEntityHit = e -> {
};
private BiConsumer<IWorld, BlockRayTraceResult> onBlockHit = (w, ray) -> {
};
private Predicate<EntityRayTraceResult> onEntityHit = e -> false;
private BiPredicate<IWorld, BlockRayTraceResult> onBlockHit = (w, ray) -> false;
public float getGravityMultiplier() {
return gravityMultiplier;
@ -298,12 +297,12 @@ public class PotatoCannonProjectileTypes {
public boolean isSticky() { return sticky; }
public void onEntityHit(EntityRayTraceResult ray) {
onEntityHit.accept(ray);
public boolean onEntityHit(EntityRayTraceResult ray) {
return onEntityHit.test(ray);
}
public void onBlockHit(IWorld world, BlockRayTraceResult ray) {
onBlockHit.accept(world, ray);
public boolean onBlockHit(IWorld world, BlockRayTraceResult ray) {
return onBlockHit.test(world, ray);
}
private static Consumer<EntityRayTraceResult> potion(Effect effect, int level, int ticks) {
@ -326,37 +325,38 @@ public class PotatoCannonProjectileTypes {
};
}
private static BiConsumer<IWorld, BlockRayTraceResult> plantCrop(IRegistryDelegate<? extends Block> cropBlock) {
private static BiPredicate<IWorld, BlockRayTraceResult> plantCrop(IRegistryDelegate<? extends Block> cropBlock) {
return (world, ray) -> {
BlockPos hitPos = ray.getPos();
if (!world.isAreaLoaded(hitPos, 1))
return;
return true;
Direction face = ray.getFace();
BlockPos placePos = hitPos.offset(face);
if (!world.getBlockState(placePos)
.getMaterial()
.isReplaceable())
return;
return false;
if (!(cropBlock.get() instanceof IPlantable))
return;
return false;
BlockState blockState = world.getBlockState(hitPos);
if (!blockState.canSustainPlant(world, hitPos, face, (IPlantable) cropBlock.get()))
return;
return false;
world.setBlockState(placePos, cropBlock.get().getDefaultState(), 3);
return true;
};
}
private static BiConsumer<IWorld, BlockRayTraceResult> placeBlockOnGround(IRegistryDelegate<? extends Block> block) {
private static BiPredicate<IWorld, BlockRayTraceResult> placeBlockOnGround(IRegistryDelegate<? extends Block> block) {
return (world, ray) -> {
BlockPos hitPos = ray.getPos();
if (!world.isAreaLoaded(hitPos, 1))
return;
return true;
Direction face = ray.getFace();
BlockPos placePos = hitPos.offset(face);
if (!world.getBlockState(placePos)
.getMaterial()
.isReplaceable())
return;
return false;
if (face == Direction.UP) {
world.setBlockState(placePos, block.get().getDefaultState(), 3);
@ -372,6 +372,8 @@ public class PotatoCannonProjectileTypes {
falling.fallTime = 1;
world.addEntity(falling);
}
return true;
};
}
@ -481,12 +483,20 @@ public class PotatoCannonProjectileTypes {
return this;
}
public Builder onEntityHit(Consumer<EntityRayTraceResult> callback) {
public Builder onEntityHitRecoveryCancelable(Predicate<EntityRayTraceResult> callback) {
result.onEntityHit = callback;
return this;
}
public Builder onEntityHit(Consumer<EntityRayTraceResult> callback) {
result.onEntityHit = ray -> {
callback.accept(ray);
return false;
};
return this;
}
public Builder onBlockHit(BiConsumer<IWorld, BlockRayTraceResult> callback) {
public Builder onBlockHit(BiPredicate<IWorld, BlockRayTraceResult> callback) {
result.onBlockHit = callback;
return this;
}

View file

@ -2,12 +2,14 @@ package com.simibubi.create.content.curiosities.weapons;
import javax.annotation.Nullable;
import com.simibubi.create.AllEnchantments;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.content.contraptions.particle.AirParticleData;
import com.simibubi.create.foundation.advancement.AllTriggers;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType;
@ -32,9 +34,11 @@ import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData;
import net.minecraftforge.fml.network.NetworkHooks;
import net.minecraftforge.items.ItemHandlerHelper;
public class PotatoProjectileEntity extends DamagingProjectileEntity implements IEntityAdditionalSpawnData {
PotatoCannonProjectileTypes type;
ItemStack stack = ItemStack.EMPTY;
Entity stuckEntity;
@ -42,7 +46,9 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements
PotatoProjectileRenderMode stuckRenderer;
double stuckFallSpeed;
PotatoCannonProjectileTypes type;
float additionalDamage = 0;
float additionalKnockback = 0;
float recoveryChance = .125f;
public PotatoProjectileEntity(EntityType<? extends DamagingProjectileEntity> type, World world) {
super(type, world);
@ -63,15 +69,37 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements
return type;
}
public void setEnchantmentEffectsFromCannon(ItemStack cannon) {
int power = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, cannon);
int punch = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, cannon);
int flame = EnchantmentHelper.getEnchantmentLevel(Enchantments.FLAME, cannon);
int recovery = EnchantmentHelper.getEnchantmentLevel(AllEnchantments.POTATO_RECOVERY.get(), cannon);
if (power > 0)
additionalDamage = power * 2;
if (punch > 0)
additionalKnockback = punch * .5f;
if (flame > 0)
setFire(100);
if (recovery > 0)
recoveryChance = .125f + recovery * .125f;
}
@Override
public void readAdditional(CompoundNBT nbt) {
stack = ItemStack.read(nbt.getCompound("Item"));
additionalDamage = nbt.getFloat("AdditionalDamage");
additionalKnockback = nbt.getFloat("AdditionalKnockback");
recoveryChance = nbt.getFloat("Recovery");
super.readAdditional(nbt);
}
@Override
public void writeAdditional(CompoundNBT nbt) {
nbt.put("Item", stack.serializeNBT());
nbt.putFloat("AdditionalDamage", additionalDamage);
nbt.putFloat("AdditionalKnockback", additionalKnockback);
nbt.putFloat("Recovery", recoveryChance);
super.writeAdditional(nbt);
}
@ -109,7 +137,8 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements
} else {
stuckFallSpeed += 0.007 * projectileType.getGravityMultiplier();
stuckOffset = stuckOffset.add(0, -stuckFallSpeed, 0);
Vector3d pos = stuckEntity.getPositionVec().add(stuckOffset);
Vector3d pos = stuckEntity.getPositionVec()
.add(stuckOffset);
setPosition(pos.x, pos.y, pos.z);
}
} else {
@ -145,8 +174,8 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements
Vector3d hit = ray.getHitVec();
Entity target = ray.getEntity();
PotatoCannonProjectileTypes projectileType = getProjectileType();
int damage = projectileType.getDamage();
float knockback = projectileType.getKnockback();
float damage = projectileType.getDamage() + additionalDamage;
float knockback = projectileType.getKnockback() + additionalKnockback;
Entity owner = this.getOwner();
if (!target.isAlive())
@ -173,7 +202,9 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements
if (targetIsEnderman)
return;
projectileType.onEntityHit(ray);
if (!projectileType.onEntityHit(ray))
if (rand.nextDouble() <= recoveryChance)
recoverItem();
if (!(target instanceof LivingEntity)) {
playHitSound(world, getPositionVec());
@ -200,8 +231,8 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements
EnchantmentHelper.applyArthropodEnchantments((LivingEntity) owner, livingentity);
}
if (livingentity != owner && livingentity instanceof PlayerEntity
&& owner instanceof ServerPlayerEntity && !this.isSilent()) {
if (livingentity != owner && livingentity instanceof PlayerEntity && owner instanceof ServerPlayerEntity
&& !this.isSilent()) {
((ServerPlayerEntity) owner).connection
.sendPacket(new SChangeGameStatePacket(SChangeGameStatePacket.PROJECTILE_HIT_PLAYER, 0.0F));
}
@ -222,6 +253,11 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements
}
private void recoverItem() {
if (!stack.isEmpty())
entityDropItem(ItemHandlerHelper.copyStackWithSize(stack, 1));
}
public static void playHitSound(World world, Vector3d location) {
AllSoundEvents.POTATO_HIT.playOnServer(world, new BlockPos(location));
}
@ -234,7 +270,9 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements
protected void onBlockHit(BlockRayTraceResult ray) {
Vector3d hit = ray.getHitVec();
pop(hit);
getProjectileType().onBlockHit(world, ray);
if (!getProjectileType().onBlockHit(world, ray))
if (rand.nextDouble() <= recoveryChance)
recoverItem();
super.onBlockHit(ray);
remove();
}

View file

@ -0,0 +1,24 @@
package com.simibubi.create.content.curiosities.weapons;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentType;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ItemStack;
public class PotatoRecoveryEnchantment extends Enchantment {
public PotatoRecoveryEnchantment(Rarity p_i46731_1_, EnchantmentType p_i46731_2_, EquipmentSlotType[] p_i46731_3_) {
super(p_i46731_1_, p_i46731_2_, p_i46731_3_);
}
@Override
public int getMaxLevel() {
return 3;
}
@Override
public boolean canApplyAtEnchantingTable(ItemStack stack) {
return stack.getItem() instanceof PotatoCannonItem;
}
}

View file

@ -504,6 +504,10 @@
"create.crafting_blueprint.manually_assigned": "Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "Secondary Display Slot",
"create.crafting_blueprint.optional": "Optional",
"create.potato_cannon.ammo.attack_damage": "%1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "%1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "%1$s Knockback",
"create.hint.hose_pulley.title": "Bottomless Supply",
"create.hint.hose_pulley": "The targeted body of fluid is considered infinite.",