From a6428a40f8d6c0398248a0a91d574c9f8ae02c6e Mon Sep 17 00:00:00 2001 From: Auxilor Date: Thu, 7 Jan 2021 12:42:01 +0000 Subject: [PATCH] Added speed talisman --- .../willfp/talismans/talismans/Talismans.java | 2 + .../talismans/talisman/SpeedTalisman.java | 40 ++++++++++++++++++ .../talismans/util/TalismanChecks.java | 8 +++- .../TalismanEquipEventListeners.java | 42 +++++++++---------- .../talismans/talisman/speedtalisman.yml | 27 ++++++++++++ 5 files changed, 95 insertions(+), 24 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/talisman/SpeedTalisman.java create mode 100644 eco-core/core-plugin/src/main/resources/talismans/talisman/speedtalisman.yml 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 d2f3a8c..278944c 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 @@ -52,6 +52,7 @@ import com.willfp.talismans.talismans.talismans.talisman.RaidTalisman; import com.willfp.talismans.talismans.talismans.talisman.ResistanceTalisman; import com.willfp.talismans.talismans.talismans.talisman.SharpnessTalisman; import com.willfp.talismans.talismans.talismans.talisman.SkeletonTalisman; +import com.willfp.talismans.talismans.talismans.talisman.SpeedTalisman; import com.willfp.talismans.talismans.talismans.talisman.SpiderResistanceTalisman; import com.willfp.talismans.talismans.talismans.talisman.SpiderTalisman; import com.willfp.talismans.talismans.talismans.talisman.StrengthTalisman; @@ -127,6 +128,7 @@ public class Talismans { public static final Talisman HEALING_TALISMAN = new HealingTalisman(); public static final Talisman HEALING_RING = new HealingRing(); public static final Talisman HEALING_RELIC = new HealingRelic(); + public static final Talisman SPEED_TALISMAN = new SpeedTalisman(); /** 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 new file mode 100644 index 0000000..f808e8c --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/talisman/SpeedTalisman.java @@ -0,0 +1,40 @@ +package com.willfp.talismans.talismans.talismans.talisman; + +import com.willfp.talismans.talismans.Talisman; +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.AttributeModifier; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.jetbrains.annotations.NotNull; + +public class SpeedTalisman extends Talisman { + private static final AttributeModifier MODIFIER = new AttributeModifier("speed_talisman", 0.2, AttributeModifier.Operation.ADD_NUMBER); + + public SpeedTalisman() { + super("speed_talisman", TalismanStrength.TALISMAN); + } + + @EventHandler + public void onExpChange(@NotNull final TalismanEquipEvent event) { + Player player = event.getPlayer(); + + if (!event.getTalisman().equals(this)) { + return; + } + + if (event.getType() == EquipType.EQUIP) { + if (this.getDisabledWorlds().contains(player.getWorld())) { + player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).removeModifier(MODIFIER); + } else { + player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).addModifier(MODIFIER); + } + } else { + Bukkit.getLogger().info("bruh"); + player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).removeModifier(MODIFIER); + } + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanChecks.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanChecks.java index a4eb4c6..beac473 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanChecks.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanChecks.java @@ -123,10 +123,12 @@ public class TalismanChecks { * * @param player The player to query. * @param useCache If the cache should be checked. + * @param extra Bonus items. * @return A set of all found talismans. */ public static Set getTalismansOnPlayer(@NotNull final Player player, - final boolean useCache) { + final boolean useCache, + @NotNull final ItemStack... extra) { if (useCache) { Set cached = CACHED_TALISMANS.get(player.getUniqueId()); if (cached != null) { @@ -143,6 +145,8 @@ public class TalismanChecks { rawContents.addAll(Arrays.asList(player.getEnderChest().getContents())); } + rawContents.addAll(Arrays.asList(extra)); + for (ItemStack rawContent : rawContents) { if (rawContent == null) { continue; @@ -155,9 +159,11 @@ public class TalismanChecks { if (state instanceof ShulkerBox) { ShulkerBox shulkerBox = (ShulkerBox) state; contents.addAll(Arrays.asList(shulkerBox.getInventory().getContents())); + continue; } } } + contents.add(rawContent); } for (ItemStack itemStack : contents) { diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/equipevent/TalismanEquipEventListeners.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/equipevent/TalismanEquipEventListeners.java index 7b9585a..115deff 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/equipevent/TalismanEquipEventListeners.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/equipevent/TalismanEquipEventListeners.java @@ -10,14 +10,14 @@ import org.bukkit.Tag; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDropItemEvent; import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import java.util.HashSet; import java.util.Set; public class TalismanEquipEventListeners extends PluginDependent implements Listener { @@ -74,16 +74,12 @@ public class TalismanEquipEventListeners extends PluginDependent implements List * @param event The event to listen for. */ @EventHandler - public void onInventoryDrop(@NotNull final EntityDropItemEvent event) { - if (!(event.getEntity() instanceof Player)) { - return; - } - + public void onInventoryDrop(@NotNull final PlayerDropItemEvent event) { if (event.getItemDrop().getItemStack().getType() != Material.PLAYER_HEAD && !Tag.SHULKER_BOXES.isTagged(event.getItemDrop().getItemStack().getType())) { return; } - refreshPlayer((Player) event.getEntity()); + refreshPlayer(event.getPlayer(), event.getItemDrop().getItemStack()); } /** @@ -101,25 +97,25 @@ public class TalismanEquipEventListeners extends PluginDependent implements List } private void refresh() { - this.getPlugin().getScheduler().runLater(() -> this.getPlugin().getServer().getOnlinePlayers().forEach(this::refreshPlayer), 1); + this.getPlugin().getServer().getOnlinePlayers().forEach(this::refreshPlayer); } - private void refreshPlayer(@NotNull final Player player) { - Set inCache = TalismanChecks.CACHED_TALISMANS.get(player.getUniqueId()); - if (inCache == null) { - inCache = new HashSet<>(); - } + private void refreshPlayer(@NotNull final Player player, + @NotNull final ItemStack... extra) { + Set inCache = TalismanChecks.getTalismansOnPlayer(player, false, extra); - Set newSet = TalismanChecks.getTalismansOnPlayer(player); + this.getPlugin().getScheduler().runLater(() -> { + Set newSet = TalismanChecks.getTalismansOnPlayer(player, false, extra); - newSet.removeAll(inCache); - for (Talisman talisman : newSet) { - Bukkit.getPluginManager().callEvent(new TalismanEquipEvent(player, talisman, EquipType.EQUIP)); - } + newSet.removeAll(inCache); + for (Talisman talisman : newSet) { + Bukkit.getPluginManager().callEvent(new TalismanEquipEvent(player, talisman, EquipType.EQUIP)); + } - inCache.removeAll(newSet); - for (Talisman talisman : inCache) { - Bukkit.getPluginManager().callEvent(new TalismanEquipEvent(player, talisman, EquipType.UNEQUIP)); - } + inCache.removeAll(newSet); + for (Talisman talisman : inCache) { + Bukkit.getPluginManager().callEvent(new TalismanEquipEvent(player, talisman, EquipType.UNEQUIP)); + } + }, 1); } } diff --git a/eco-core/core-plugin/src/main/resources/talismans/talisman/speedtalisman.yml b/eco-core/core-plugin/src/main/resources/talismans/talisman/speedtalisman.yml new file mode 100644 index 0000000..bf475f0 --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/talismans/talisman/speedtalisman.yml @@ -0,0 +1,27 @@ +name: "Speed Talisman" +description: Move 5% 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: + - sugar + - sugar + - sugar + + - sugar + - ender_eye + - sugar + + - sugar + - sugar + - sugar + +general-config: + disabled-in-worlds: [] + # Texture is base64, https://minecraft-heads.com has a list of skulls. + texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODYyNGJhY2I1ZjE5ODZlNjQ3N2FiY2U0YWU3ZGNhMTgyMGE1MjYwYjYyMzNiNTViYTFkOWJhOTM2Yzg0YiJ9fX0= + +config: + percentage-bonus: 5 \ No newline at end of file