Skip to content

Commit 63f37b8

Browse files
Merge pull request #634 from ArikSquad/feat/passive-abilities
Passive Abilities
2 parents 5c2c4f6 + 997417f commit 63f37b8

File tree

13 files changed

+193
-17
lines changed

13 files changed

+193
-17
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package net.swofty.commons.skyblock.item.attribute.attributes;
2+
3+
import net.swofty.commons.skyblock.item.attribute.ItemAttribute;
4+
import net.swofty.commons.skyblock.statistics.ItemStatistics;
5+
import org.jetbrains.annotations.Nullable;
6+
7+
public class ItemAttributeStoredPotential extends ItemAttribute<Integer> {
8+
@Override
9+
public String getKey() {
10+
return "stored_potential";
11+
}
12+
13+
@Override
14+
public Integer getDefaultValue(@Nullable ItemStatistics defaultStatistics) {
15+
return 0;
16+
}
17+
18+
@Override
19+
public Integer loadFromString(String string) {
20+
try {
21+
return Integer.parseInt(string);
22+
} catch (NumberFormatException e) {
23+
return 0;
24+
}
25+
}
26+
27+
@Override
28+
public String saveIntoString() {
29+
return String.valueOf(getValue());
30+
}
31+
32+
}

configuration/skyblock/items/mining/pickaxe.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ items:
22
- id: PROMISING_PICKAXE
33
rarity: UNCOMMON
44
default_statistics:
5-
damage: 30.0
6-
mining_speed: 1500.0
5+
damage: 20.0
6+
mining_speed: 50.0
77
breaking_power: 3.0
88
components:
9+
- id: ABILITY
10+
abilities:
11+
- STORED_POTENTIAL
912
- id: PICKAXE
1013
- id: SELLABLE
1114
value: 10.0

type.crimsonisle/src/main/java/net/swofty/type/crimsonisle/events/ActionPlayerJoin.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ public void run(AsyncPlayerConfigurationEvent event) {
2323
.apply(player.getOriginServer())
2424
);
2525
}
26+
2627
}

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/SkyBlockGenericLoader.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import net.minestom.server.MinecraftServer;
1212
import net.minestom.server.coordinate.CoordConversion;
1313
import net.minestom.server.coordinate.Pos;
14+
import net.minestom.server.event.Event;
1415
import net.minestom.server.event.server.ServerTickMonitorEvent;
1516
import net.minestom.server.instance.Chunk;
1617
import net.minestom.server.monitoring.BenchmarkManager;
@@ -28,7 +29,7 @@
2829
import net.swofty.type.generic.HypixelGenericLoader;
2930
import net.swofty.type.generic.HypixelTypeLoader;
3031
import net.swofty.type.generic.data.mongodb.*;
31-
import net.swofty.type.generic.entity.npc.HypixelNPC;
32+
import net.swofty.type.generic.event.HypixelEvent;
3233
import net.swofty.type.generic.packet.HypixelPacketClientListener;
3334
import net.swofty.type.generic.packet.HypixelPacketServerListener;
3435
import net.swofty.type.skyblockgeneric.abiphone.AbiphoneNPC;
@@ -57,6 +58,8 @@
5758
import net.swofty.type.skyblockgeneric.item.components.MuseumComponent;
5859
import net.swofty.type.skyblockgeneric.item.components.ServerOrbComponent;
5960
import net.swofty.type.skyblockgeneric.item.crafting.SkyBlockRecipe;
61+
import net.swofty.type.skyblockgeneric.item.handlers.ability.AbilityRegistry;
62+
import net.swofty.type.skyblockgeneric.item.handlers.ability.RegisteredPassiveAbility;
6063
import net.swofty.type.skyblockgeneric.item.set.impl.SetRepeatable;
6164
import net.swofty.type.skyblockgeneric.item.updater.PlayerItemUpdater;
6265
import net.swofty.type.skyblockgeneric.levels.CustomLevelAward;
@@ -93,6 +96,7 @@
9396
import java.io.File;
9497
import java.io.IOException;
9598
import java.lang.reflect.InvocationTargetException;
99+
import java.lang.reflect.Method;
96100
import java.time.Duration;
97101
import java.util.*;
98102
import java.util.concurrent.CompletableFuture;
@@ -408,6 +412,12 @@ public void initialize(MinecraftServer server) {
408412
CustomEventCaller.start(); // Value events are SkyBlock-specific
409413
HypixelEventHandler.register(HypixelConst.getEventHandler());
410414

415+
AbilityRegistry.getRegisteredAbilities().forEach(((_, registeredAbility) -> {
416+
if (registeredAbility instanceof RegisteredPassiveAbility passiveAbility) {
417+
passiveAbility.getPassiveAction().forEach(RegisteredPassiveAbility.Action::register);
418+
}
419+
}));
420+
411421
/**
412422
* Cache SkyBlock levels
413423
*/

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/item/ActionItemAbilityLeftUse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public void run(PlayerHandAnimationEvent event) {
2929
ability = abilityComponent.getAbility(RegisteredAbility.AbilityActivation.SNEAK_LEFT_CLICK);
3030
}
3131
if (ability == null) {
32-
abilityComponent.getAbility(RegisteredAbility.AbilityActivation.LEFT_CLICK);
32+
ability = abilityComponent.getAbility(RegisteredAbility.AbilityActivation.LEFT_CLICK);
3333
}
3434

3535
if (ability != null) {

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/item/ActionItemAbilityRightUse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ public void run(PlayerUseItemEvent event) {
3030
AbilityComponent abilityComponent = item.getComponent(AbilityComponent.class);
3131

3232
RegisteredAbility ability = null;
33-
if(player.isSneaking()) {
33+
if (player.isSneaking()) {
3434
ability = abilityComponent.getAbility(RegisteredAbility.AbilityActivation.SNEAK_RIGHT_CLICK);
3535
}
3636
if (ability == null) {
37-
abilityComponent.getAbility(RegisteredAbility.AbilityActivation.RIGHT_CLICK);
37+
ability = abilityComponent.getAbility(RegisteredAbility.AbilityActivation.RIGHT_CLICK);
3838
}
3939

4040
if (ability != null) {

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/ItemAttributeHandler.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,14 @@ public boolean hasAbiphoneNPC(AbiphoneNPC npc) {
422422
return ids.contains(npc.getId());
423423
}
424424

425+
public void setStoredPotential(int storedPotential) {
426+
((ItemAttributeStoredPotential) item.getAttribute("stored_potential")).setValue(storedPotential);
427+
}
428+
429+
public int getStoredPotential() {
430+
return ((ItemAttributeStoredPotential) item.getAttribute("stored_potential")).getValue();
431+
}
432+
425433
public SkyBlockItem asSkyBlockItem() {
426434
return item;
427435
}

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/ItemLore.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ public void updateLore(@Nullable SkyBlockPlayer player) {
293293
abilityComponent.getAbilities().forEach(ability -> {
294294
addLoreLine("§6Ability: " + ability.getName() + " §e§l" +
295295
ability.getActivation().getDisplay());
296-
for (String line : StringUtility.splitByWordAndLength(ability.getDescription(), 34))
296+
for (String line : StringUtility.splitByWordAndLength(ability.getDescription().apply(player, item), 40))
297297
addLoreLine("§7" + line);
298298

299299
String costDisplay = ability.getCost().getLoreDisplay();

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/components/AbilityComponent.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.swofty.type.skyblockgeneric.item.components;
22

3+
import lombok.Getter;
34
import net.swofty.type.skyblockgeneric.item.SkyBlockItemComponent;
45
import net.swofty.type.skyblockgeneric.item.handlers.ability.AbilityRegistry;
56
import net.swofty.type.skyblockgeneric.item.handlers.ability.RegisteredAbility;
@@ -8,6 +9,7 @@
89
import java.util.Objects;
910

1011
public class AbilityComponent extends SkyBlockItemComponent {
12+
@Getter
1113
private final List<String> abilityIds;
1214

1315
public AbilityComponent(List<String> abilityIds) {

type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/handlers/ability/AbilityRegistry.java

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@
77
import net.minestom.server.coordinate.Pos;
88
import net.swofty.commons.skyblock.statistics.ItemStatistic;
99
import net.swofty.commons.skyblock.statistics.ItemStatistics;
10+
import net.swofty.type.generic.event.EventNodes;
11+
import net.swofty.type.skyblockgeneric.event.custom.CustomBlockBreakEvent;
1012
import net.swofty.type.skyblockgeneric.item.handlers.ability.abilities.BuildersWandAbility;
13+
import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer;
1114
import net.swofty.type.skyblockgeneric.user.statistics.TemporaryStatistic;
1215

1316
import java.util.HashMap;
17+
import java.util.List;
1418
import java.util.Map;
1519

1620
public class AbilityRegistry {
@@ -20,7 +24,7 @@ public class AbilityRegistry {
2024
register(new RegisteredAbility(
2125
"WITHER_IMPACT",
2226
"Wither Impact",
23-
"§7Teleports §a10 Blocks §7ahead of you. Then implode dealing §c10000 §7damage to nearby enemies. Also applies the wither shield scroll ability reducing mobdamage taken and granting an absorption shield for §e5 §7seconds.",
27+
(player, item) -> "§7Teleports §a10 Blocks §7ahead of you. Then implode dealing §c10000 §7damage to nearby enemies. Also applies the wither shield scroll ability reducing mobdamage taken and granting an absorption shield for §e5 §7seconds.",
2428
RegisteredAbility.AbilityActivation.RIGHT_CLICK,
2529
50,
2630
new RegisteredAbility.AbilityManaCost(25),
@@ -33,7 +37,7 @@ public class AbilityRegistry {
3337
register(new RegisteredAbility(
3438
"INSTANT_TRANSMISSION",
3539
"Instant Transmission",
36-
"§7Teleports §a8 Blocks §7ahead of you and gain §a+50 §fSpeed for §a3 seconds§7.",
40+
(player, item) -> "§7Teleports §a8 Blocks §7ahead of you and gain §a+50 §fSpeed for §a3 seconds§7.",
3741
RegisteredAbility.AbilityActivation.RIGHT_CLICK,
3842
5,
3943
new RegisteredAbility.AbilityManaCost(50),
@@ -48,7 +52,7 @@ public class AbilityRegistry {
4852
register(new RegisteredAbility(
4953
"ETHER_TRANSMISSION",
5054
"Ether Transmission",
51-
"§7Teleport to your targeted block up to §a57 §7blocks away.",
55+
(player, item) -> "§7Teleport to your targeted block up to §a57 §7blocks away.",
5256
RegisteredAbility.AbilityActivation.SNEAK_RIGHT_CLICK,
5357
5,
5458
new RegisteredAbility.AbilityManaSoulflowCost(180, 1),
@@ -64,7 +68,7 @@ public class AbilityRegistry {
6468
register(new RegisteredAbility(
6569
"TRUE_DWARTH",
6670
"True Dwarth",
67-
"§7Shows the way towards the nearest §6Emissary §7while in the §2Dwarven Mines§7.",
71+
(player, item) -> "§7Shows the way towards the nearest §6Emissary §7while in the §2Dwarven Mines§7.",
6872
RegisteredAbility.AbilityActivation.RIGHT_CLICK,
6973
20 * 3,
7074
new RegisteredAbility.NoAbilityCost(),
@@ -77,7 +81,7 @@ public class AbilityRegistry {
7781
register(new RegisteredAbility(
7882
"SPEED_BOOST",
7983
"Speed Boost",
80-
"§7Grants §7+100 Speed",
84+
(player, item) -> "§7Grants §7+100 Speed",
8185
RegisteredAbility.AbilityActivation.RIGHT_CLICK,
8286
20 * 5,
8387
new RegisteredAbility.AbilityManaCost(50),
@@ -88,7 +92,36 @@ public class AbilityRegistry {
8892
}
8993
));
9094

91-
// register(new RegisteredAbility( // TODO: Figure out how to implement passive abiltiies
95+
register(new RegisteredPassiveAbility(
96+
"STORED_POTENTIAL",
97+
"Stored Potential",
98+
(player, item) -> {
99+
StringBuilder description = new StringBuilder();
100+
description.append("§7Grants §6+10⸕ Mining Speed §7for every\n100 blocks mined.\n§8(Max +250⸕ Mining Speed)\n\n");
101+
description.append("§7Blocks Mined: §a").append(item.getAttributeHandler().getStoredPotential()).append("\n");
102+
int miningSpeed = Math.min((item.getAttributeHandler().getStoredPotential() / 100) * 10, 250);
103+
description.append("§7Current Bonus: §a").append(miningSpeed);
104+
return description.toString();
105+
},
106+
List.of(new RegisteredPassiveAbility.Action<>(
107+
CustomBlockBreakEvent.class,
108+
EventNodes.CUSTOM,
109+
event -> {
110+
SkyBlockPlayer player = event.getPlayer();
111+
player.updateItemInSlot(player.getHeldSlot(), (item) -> {
112+
item.getAttributeHandler().setStoredPotential(item.getAttributeHandler().getStoredPotential() + 1);
113+
item.getAttributeHandler().setExtraDynamicStatistics(
114+
ItemStatistics.builder().withAdditive(
115+
ItemStatistic.MINING_SPEED, (double) Math.min((item.getAttributeHandler().getStoredPotential() / 100) * 10, 250)
116+
).build()
117+
);
118+
});
119+
},
120+
RegisteredPassiveAbility.Action.createDefaultCondition("STORED_POTENTIAL")
121+
))
122+
));
123+
124+
// register(new RegisteredAbility( // TODO: Figure out how to implement passive abilities
92125
// "BEJEWELED_BLADE",
93126
// "Bejeweled Blade",
94127
// "§7Deals §a+150% §7damage to mobs on §bMining Islands.",
@@ -105,4 +138,9 @@ public static void register(RegisteredAbility ability) {
105138
public static RegisteredAbility getAbility(String id) {
106139
return REGISTERED_ABILITIES.get(id);
107140
}
141+
142+
public static Map<String, RegisteredAbility> getRegisteredAbilities() {
143+
return REGISTERED_ABILITIES;
144+
}
145+
108146
}

0 commit comments

Comments
 (0)