11package com .robertx22 .mine_and_slash .vanilla_mc .items ;
22
3+ import com .robertx22 .library_of_exile .deferred .RegObj ;
34import com .robertx22 .library_of_exile .utils .SoundUtils ;
45import com .robertx22 .mine_and_slash .database .data .profession .ICreativeTabTiered ;
56import com .robertx22 .mine_and_slash .database .data .profession .LeveledItem ;
1415import com .robertx22 .mine_and_slash .gui .texts .textblocks .usableitemblocks .UsageBlock ;
1516import com .robertx22 .mine_and_slash .mmorpg .registers .common .items .RarityItems ;
1617import com .robertx22 .mine_and_slash .saveclasses .unit .ResourceType ;
18+ import com .robertx22 .mine_and_slash .saveclasses .unit .ResourcesData ;
1719import com .robertx22 .mine_and_slash .uncommon .datasaving .Load ;
1820import com .robertx22 .mine_and_slash .uncommon .effectdatas .EventBuilder ;
1921import com .robertx22 .mine_and_slash .uncommon .effectdatas .rework .RestoreType ;
@@ -51,6 +53,10 @@ public SlashPotionItem(String rar, Type type) {
5153 this .type = type ;
5254 }
5355
56+ public Type getType () {
57+ return type ;
58+ }
59+
5460 @ Override
5561 public String locNameForLangFile () {
5662 return StringUTIL .capitalise (rar ) + " " + type .name + " Potion" ;
@@ -69,7 +75,7 @@ public Item getThis() {
6975 @ Override
7076 public void appendHoverText (ItemStack pStack , @ Nullable Level pLevel , List <Component > pTooltipComponents , TooltipFlag pIsAdvanced ) {
7177
72- int num = (int ) this .getHealPercent (pStack );
78+ int num = (int ) this .type . getHealPercent (pStack );
7379 pTooltipComponents .clear ();
7480 pTooltipComponents .addAll (new ExileTooltips ()
7581 .accept (new NameBlock (pStack .getHoverName ()))
@@ -86,62 +92,93 @@ public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List<Compo
8692 public InteractionResultHolder <ItemStack > use (Level pLevel , Player p , InteractionHand pUsedHand ) {
8793 ItemStack stack = p .getItemInHand (pUsedHand );
8894
89-
9095 if (!pLevel .isClientSide ) {
96+ handlePotionRestore (p , stack );
97+ }
9198
92- if (type == Type .HP ) {
93- EventBuilder .ofRestore (p , p , ResourceType .health , RestoreType .potion , HealthUtils .getMaxHealth (p ) * getHealPercent (stack ) / 100F ).build ().Activate ();
94- EventBuilder .ofRestore (p , p , ResourceType .magic_shield , RestoreType .potion , Load .Unit (p ).getUnit ().magicShieldData ().getValue () * getHealPercent (stack ) / 100F ).build ().Activate ();
95- } else {
96- EventBuilder .ofRestore (p , p , ResourceType .mana , RestoreType .potion , Load .Unit (p ).getUnit ().manaData ().getValue () * getHealPercent (stack ) / 100F ).build ().Activate ();
97- EventBuilder .ofRestore (p , p , ResourceType .energy , RestoreType .potion , Load .Unit (p ).getUnit ().energyData ().getValue () * getHealPercent (stack ) / 100F ).build ().Activate ();
98- }
99-
99+ return InteractionResultHolder .pass (p .getItemInHand (pUsedHand ));
100100
101- for (SlashPotionItem c : getCooldownItems ()) {
102- p .getCooldowns ().addCooldown (c , getCooldownTicks ());
103- }
101+ }
104102
103+ public void handlePotionRestore (Player p , ItemStack stack ) {
104+ if (type .restoreResource (p , stack , this )) {
105+ type .getSameTypePotions ().forEach (x -> p .getCooldowns ().addCooldown (x , getCooldownTicks ()));
105106 SoundUtils .playSound (p , SoundEvents .GENERIC_DRINK );
106107 stack .shrink (1 );
107108 }
108-
109-
110- return InteractionResultHolder .pass (p .getItemInHand (pUsedHand ));
111-
112109 }
113110
114111 public int getCooldownTicks () {
115112 return 20 * 30 ;
116113 }
117114
118- public List <SlashPotionItem > getCooldownItems () {
119-
120- if (type == Type .HP ) {
121- return RarityItems .HEALTH_POTIONS .values ().stream ().map (x -> x .get ()).collect (Collectors .toList ());
122- } else {
123- return RarityItems .RESOURCE_POTIONS .values ().stream ().map (x -> x .get ()).collect (Collectors .toList ());
124-
125- }
126- }
127-
128- public float getHealPercent (ItemStack stack ) {
129- var r = getRarity ();
130- SkillItemTier tier = LeveledItem .getTier (stack );
131- return 5 + (0.25F * r .stat_percents .max * tier .statMulti ); // todo maybe make separate value
132- }
133115
134116 public GearRarity getRarity () {
135117 return ExileDB .GearRarities ().get (rar );
136118 }
137119
138120 public enum Type {
139- HP ("Health" , Items .POTATO ),
140- MANA ("Mana" , Items .CARROT );
121+ HP ("Health" , Items .POTATO ) {
122+ @ Override
123+ public boolean restoreResource (Player player , ItemStack itemStack , SlashPotionItem slashPotionItem ) {
124+ float healPercent = this .getHealPercent (itemStack );
125+ ResourcesData resources = Load .Unit (player ).getResources ();
126+ if (HealthUtils .getCurrentHealth (player ) < HealthUtils .getMaxHealth (player ) || resources .getMagicShield () < resources .getMax (player , ResourceType .magic_shield )) {
127+ EventBuilder .ofRestore (player , player , ResourceType .health , RestoreType .potion , HealthUtils .getMaxHealth (player ) * healPercent / 100F ).build ().Activate ();
128+ EventBuilder .ofRestore (player , player , ResourceType .magic_shield , RestoreType .potion , Load .Unit (player ).getUnit ().magicShieldData ().getValue () * healPercent / 100F ).build ().Activate ();
129+ return true ;
130+ }
131+ return false ;
132+
133+ }
134+
135+ @ Override
136+ public List <SlashPotionItem > getSameTypePotions () {
137+ return RarityItems .HEALTH_POTIONS .values ().stream ().map (RegObj ::get ).collect (Collectors .toList ());
138+ }
139+
140+ @ Override
141+ public float getHealPercent (ItemStack stack ) {
142+ var r = ((SlashPotionItem ) stack .getItem ()).getRarity ();
143+ SkillItemTier tier = LeveledItem .getTier (stack );
144+ return 5 + (0.25F * r .stat_percents .max * tier .statMulti );
145+ }
146+ },
147+ MANA ("Mana" , Items .CARROT ) {
148+ @ Override
149+ public boolean restoreResource (Player player , ItemStack itemStack , SlashPotionItem slashPotionItem ) {
150+ float healPercent = this .getHealPercent (itemStack );
151+ ResourcesData resources = Load .Unit (player ).getResources ();
152+ if (resources .getMana () < resources .getMax (player , ResourceType .mana ) || resources .getEnergy () < resources .getMax (player , ResourceType .energy )) {
153+ EventBuilder .ofRestore (player , player , ResourceType .mana , RestoreType .potion , Load .Unit (player ).getUnit ().manaData ().getValue () * healPercent / 100F ).build ().Activate ();
154+ EventBuilder .ofRestore (player , player , ResourceType .energy , RestoreType .potion , Load .Unit (player ).getUnit ().energyData ().getValue () * healPercent / 100F ).build ().Activate ();
155+
156+ return true ;
157+ }
158+ return false ;
159+ }
160+
161+ @ Override
162+ public List <SlashPotionItem > getSameTypePotions () {
163+ return RarityItems .RESOURCE_POTIONS .values ().stream ().map (RegObj ::get ).collect (Collectors .toList ());
164+ }
165+
166+ @ Override
167+ public float getHealPercent (ItemStack stack ) {
168+ var r = ((SlashPotionItem ) stack .getItem ()).getRarity ();
169+ SkillItemTier tier = LeveledItem .getTier (stack );
170+ return 5 + (0.25F * r .stat_percents .max * tier .statMulti );
171+ }
172+ };
141173 String name ;
142174
143175 Item craftItem ;
144176
177+
178+ public abstract boolean restoreResource (Player player , ItemStack itemStack , SlashPotionItem slashPotionItem );
179+ public abstract List <SlashPotionItem > getSameTypePotions ();
180+ public abstract float getHealPercent (ItemStack stack );
181+
145182 Type (String name , Item craftItem ) {
146183 this .name = name ;
147184 this .craftItem = craftItem ;
0 commit comments