diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talismans.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talismans.java index 278944c..298bbbd 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talismans.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talismans.java @@ -19,6 +19,7 @@ import com.willfp.talismans.talismans.talismans.relic.PoseidonRelic; import com.willfp.talismans.talismans.talismans.relic.RaidRelic; import com.willfp.talismans.talismans.talismans.relic.ResistanceRelic; import com.willfp.talismans.talismans.talismans.relic.SharpnessRelic; +import com.willfp.talismans.talismans.talismans.relic.SpeedRelic; import com.willfp.talismans.talismans.talismans.relic.StrengthRelic; import com.willfp.talismans.talismans.talismans.ring.AlchemyRing; import com.willfp.talismans.talismans.talismans.ring.ArcheryRing; @@ -34,6 +35,7 @@ import com.willfp.talismans.talismans.talismans.ring.PoseidonRing; import com.willfp.talismans.talismans.talismans.ring.RaidRing; import com.willfp.talismans.talismans.talismans.ring.ResistanceRing; import com.willfp.talismans.talismans.talismans.ring.SharpnessRing; +import com.willfp.talismans.talismans.talismans.ring.SpeedRing; import com.willfp.talismans.talismans.talismans.ring.StrengthRing; import com.willfp.talismans.talismans.talismans.talisman.AlchemyTalisman; import com.willfp.talismans.talismans.talismans.talisman.ArcheryTalisman; @@ -129,6 +131,8 @@ public class Talismans { public static final Talisman HEALING_RING = new HealingRing(); public static final Talisman HEALING_RELIC = new HealingRelic(); public static final Talisman SPEED_TALISMAN = new SpeedTalisman(); + public static final Talisman SPEED_RING = new SpeedRing(); + public static final Talisman SPEED_RELIC = new SpeedRelic(); /** diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/relic/SpeedRelic.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/relic/SpeedRelic.java new file mode 100644 index 0000000..e285a9d --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/relic/SpeedRelic.java @@ -0,0 +1,53 @@ +package com.willfp.talismans.talismans.talismans.relic; + +import com.willfp.talismans.talismans.Talisman; +import com.willfp.talismans.talismans.Talismans; +import com.willfp.talismans.talismans.meta.TalismanStrength; +import com.willfp.talismans.talismans.util.equipevent.EquipType; +import com.willfp.talismans.talismans.util.equipevent.TalismanEquipEvent; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public class SpeedRelic extends Talisman { + private static final UUID MODIFIER_UUID = UUID.randomUUID(); + private static AttributeModifier MODIFIER = new AttributeModifier(MODIFIER_UUID, "speed_relic", 0.05, AttributeModifier.Operation.MULTIPLY_SCALAR_1); + + public SpeedRelic() { + super("speed_relic", TalismanStrength.RELIC); + } + + @Override + protected void postUpdate() { + MODIFIER = new AttributeModifier(MODIFIER_UUID, "speed_relic", this.getConfig().getDouble(Talismans.CONFIG_LOCATION + "percentage-bonus") / 100, AttributeModifier.Operation.MULTIPLY_SCALAR_1); + } + + @EventHandler + public void onExpChange(@NotNull final TalismanEquipEvent event) { + Player player = event.getPlayer(); + + if (!event.getTalisman().equals(this)) { + return; + } + + AttributeInstance movementSpeed = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED); + assert movementSpeed != null; + + if (event.getType() == EquipType.EQUIP) { + if (this.getDisabledWorlds().contains(player.getWorld())) { + movementSpeed.removeModifier(MODIFIER); + } else { + if (!movementSpeed.getModifiers().contains(MODIFIER)) { + movementSpeed.addModifier(MODIFIER); + } + } + } else { + movementSpeed.removeModifier(MODIFIER); + } + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/ring/SpeedRing.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/ring/SpeedRing.java new file mode 100644 index 0000000..f2afe3d --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/ring/SpeedRing.java @@ -0,0 +1,53 @@ +package com.willfp.talismans.talismans.talismans.ring; + +import com.willfp.talismans.talismans.Talisman; +import com.willfp.talismans.talismans.Talismans; +import com.willfp.talismans.talismans.meta.TalismanStrength; +import com.willfp.talismans.talismans.util.equipevent.EquipType; +import com.willfp.talismans.talismans.util.equipevent.TalismanEquipEvent; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public class SpeedRing extends Talisman { + private static final UUID MODIFIER_UUID = UUID.randomUUID(); + private static AttributeModifier MODIFIER = new AttributeModifier(MODIFIER_UUID, "speed_ring", 0.05, AttributeModifier.Operation.MULTIPLY_SCALAR_1); + + public SpeedRing() { + super("speed_ring", TalismanStrength.RING); + } + + @Override + protected void postUpdate() { + MODIFIER = new AttributeModifier(MODIFIER_UUID, "speed_ring", this.getConfig().getDouble(Talismans.CONFIG_LOCATION + "percentage-bonus") / 100, AttributeModifier.Operation.MULTIPLY_SCALAR_1); + } + + @EventHandler + public void onExpChange(@NotNull final TalismanEquipEvent event) { + Player player = event.getPlayer(); + + if (!event.getTalisman().equals(this)) { + return; + } + + AttributeInstance movementSpeed = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED); + assert movementSpeed != null; + + if (event.getType() == EquipType.EQUIP) { + if (this.getDisabledWorlds().contains(player.getWorld())) { + movementSpeed.removeModifier(MODIFIER); + } else { + if (!movementSpeed.getModifiers().contains(MODIFIER)) { + movementSpeed.addModifier(MODIFIER); + } + } + } else { + movementSpeed.removeModifier(MODIFIER); + } + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/talisman/SpeedTalisman.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/talisman/SpeedTalisman.java index f808e8c..49f8ec9 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/talisman/SpeedTalisman.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/talisman/SpeedTalisman.java @@ -1,23 +1,32 @@ package com.willfp.talismans.talismans.talismans.talisman; import com.willfp.talismans.talismans.Talisman; +import com.willfp.talismans.talismans.Talismans; import com.willfp.talismans.talismans.meta.TalismanStrength; import com.willfp.talismans.talismans.util.equipevent.EquipType; import com.willfp.talismans.talismans.util.equipevent.TalismanEquipEvent; -import org.bukkit.Bukkit; import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; import org.bukkit.attribute.AttributeModifier; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.jetbrains.annotations.NotNull; +import java.util.UUID; + public class SpeedTalisman extends Talisman { - private static final AttributeModifier MODIFIER = new AttributeModifier("speed_talisman", 0.2, AttributeModifier.Operation.ADD_NUMBER); + private static final UUID MODIFIER_UUID = UUID.randomUUID(); + private static AttributeModifier MODIFIER = new AttributeModifier(MODIFIER_UUID, "speed_talisman", 0.05, AttributeModifier.Operation.MULTIPLY_SCALAR_1); public SpeedTalisman() { super("speed_talisman", TalismanStrength.TALISMAN); } + @Override + protected void postUpdate() { + MODIFIER = new AttributeModifier(MODIFIER_UUID, "speed_talisman", this.getConfig().getDouble(Talismans.CONFIG_LOCATION + "percentage-bonus") / 100, AttributeModifier.Operation.MULTIPLY_SCALAR_1); + } + @EventHandler public void onExpChange(@NotNull final TalismanEquipEvent event) { Player player = event.getPlayer(); @@ -26,15 +35,19 @@ public class SpeedTalisman extends Talisman { return; } + AttributeInstance movementSpeed = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED); + assert movementSpeed != null; + if (event.getType() == EquipType.EQUIP) { if (this.getDisabledWorlds().contains(player.getWorld())) { - player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).removeModifier(MODIFIER); + movementSpeed.removeModifier(MODIFIER); } else { - player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).addModifier(MODIFIER); + if (!movementSpeed.getModifiers().contains(MODIFIER)) { + movementSpeed.addModifier(MODIFIER); + } } } else { - Bukkit.getLogger().info("bruh"); - player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).removeModifier(MODIFIER); + movementSpeed.removeModifier(MODIFIER); } } } diff --git a/eco-core/core-plugin/src/main/resources/talismans/relic/speedrelic.yml b/eco-core/core-plugin/src/main/resources/talismans/relic/speedrelic.yml new file mode 100644 index 0000000..47706fd --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/talismans/relic/speedrelic.yml @@ -0,0 +1,27 @@ +name: "Speed Relic" +description: Move 25% faster. +enabled: true + +obtaining: + # Recipes are left-right, top-bottom + # The first item is the top left, the second is top middle, and so on. The last is bottom right. + recipe: + - talisman:speed_ring + - talisman:speed_ring + - talisman:speed_ring + + - talisman:speed_ring + - nether_star + - talisman:speed_ring + + - talisman:speed_ring + - talisman:speed_ring + - talisman:speed_ring + +general-config: + disabled-in-worlds: [] + # Texture is base64, https://minecraft-heads.com has a list of skulls. + texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDRiYTRhYjRmOTNiODJlNjE0MTI4OTgwMWMzOWUwYmMyNzBjYmU1MTc5ZGY3NmU4NWI1NDMwNmMyNzhjMTdkYSJ9fX0= + +config: + percentage-bonus: 25 \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/talismans/ring/speedring.yml b/eco-core/core-plugin/src/main/resources/talismans/ring/speedring.yml new file mode 100644 index 0000000..50de233 --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/talismans/ring/speedring.yml @@ -0,0 +1,27 @@ +name: "Speed Ring" +description: Move 10% faster. +enabled: true + +obtaining: + # Recipes are left-right, top-bottom + # The first item is the top left, the second is top middle, and so on. The last is bottom right. + recipe: + - talisman:speed_talisman + - talisman:speed_talisman + - talisman:speed_talisman + + - talisman:speed_talisman + - heart_of_the_sea + - talisman:speed_talisman + + - talisman:speed_talisman + - talisman:speed_talisman + - talisman:speed_talisman + +general-config: + disabled-in-worlds: [] + # Texture is base64, https://minecraft-heads.com has a list of skulls. + texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTNjZTc2NjAyZDNmZWM3YzAyNzNkYTYwMDA5MDA3YmU0MTQwYWM5ZmFjMDM0MTQ1MGMwNzU3ZTUzZDc1MTU3NyJ9fX0= + +config: + percentage-bonus: 10 \ No newline at end of file