From b0bfd8b2d3870af85864403c1afbbd0823edc1c2 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sat, 21 Aug 2021 09:52:55 +0100 Subject: [PATCH] Began adding modifiers --- .../willfp/ecoskills/api/StatModifier.java | 98 +++++++++++++++++++ .../com/willfp/ecoskills/EcoSkillsItem.kt | 32 ++++++ .../ecoskills/skills/skills/SkillFarming.kt | 12 +-- 3 files changed, 135 insertions(+), 7 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoskills/api/StatModifier.java create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsItem.kt diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/api/StatModifier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/api/StatModifier.java new file mode 100644 index 0000000..5c7bee1 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/api/StatModifier.java @@ -0,0 +1,98 @@ +package com.willfp.ecoskills.api; + +import com.willfp.eco.util.NamespacedKeyUtils; +import com.willfp.ecoskills.stats.Stat; +import org.bukkit.NamespacedKey; +import org.bukkit.inventory.EquipmentSlot; +import org.jetbrains.annotations.NotNull; + +public class StatModifier { + /** + * The key. + */ + private final NamespacedKey key; + + /** + * The key. + */ + private final NamespacedKey slotKey; + + /** + * The stat. + */ + private final Stat stat; + + /** + * The amount. + */ + private final int amount; + + /** + * The slots. + */ + private final EquipmentSlot[] slots; + + /** + * Create a stat modifier. + * + * @param key The key. + * @param stat The stat. + * @param amount The amount. + * @param slot The slots. (Empty is the same as all). + */ + public StatModifier(@NotNull final NamespacedKey key, + @NotNull final Stat stat, + final int amount, + @NotNull final EquipmentSlot... slot) { + this.key = key; + this.slotKey = NamespacedKeyUtils.create(key.getNamespace(), key.getKey() + "_slot"); + this.stat = stat; + this.amount = amount; + this.slots = slot; + } + + /** + * Get the key. + * + * @return The key. + */ + public NamespacedKey getKey() { + return key; + } + + /** + * Get the slot key. + * + * @return The key. + */ + public NamespacedKey getSlotKey() { + return slotKey; + } + + /** + * Get the stat. + * + * @return The stat. + */ + public Stat getStat() { + return stat; + } + + /** + * Get the amount. + * + * @return The amount. + */ + public int getAmount() { + return amount; + } + + /** + * Get the slots. + * + * @return The slots. + */ + public EquipmentSlot[] getSlots() { + return slots; + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsItem.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsItem.kt new file mode 100644 index 0000000..8258a92 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsItem.kt @@ -0,0 +1,32 @@ +package com.willfp.ecoskills + +import com.willfp.eco.util.NamespacedKeyUtils +import com.willfp.ecoskills.api.StatModifier +import com.willfp.ecoskills.effects.Effect +import com.willfp.ecoskills.skills.Skill +import com.willfp.ecoskills.stats.Stat +import org.bukkit.NamespacedKey +import org.bukkit.entity.Player +import org.bukkit.inventory.EquipmentSlot +import org.bukkit.inventory.ItemStack +import org.bukkit.persistence.PersistentDataAdapterContext +import org.bukkit.persistence.PersistentDataContainer +import org.bukkit.persistence.PersistentDataHolder +import org.bukkit.persistence.PersistentDataType + +private val modifierKey: NamespacedKey = NamespacedKeyUtils.create("ecoskills", "modifiers") + +fun ItemStack.addStatModifier(modifier: StatModifier) { + val meta = this.itemMeta ?: return + + val container = meta.persistentDataContainer + + val context = container.adapterContext + + val modifiers = container.getOrDefault(modifierKey, PersistentDataType.TAG_CONTAINER, context.newPersistentDataContainer()) + + modifiers.remove(modifier.key) + modifiers.remove(modifier.slotKey) + modifiers.set(modifier.key, PersistentDataType.INTEGER, modifier.amount) + modifiers.set(modifier.slotKey, PersistentDataType.STRING, modifier.slots.map { slot -> slot.name }.toTypedArray().joinToString { "," }) +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillFarming.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillFarming.kt index 2817344..3123824 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillFarming.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillFarming.kt @@ -35,13 +35,11 @@ class SkillFarming : Skill( val type = event.block.type val player = event.player - if (event.block.blockData !is Ageable) { - return - } - - val data = event.block.blockData as Ageable - if (data.age < data.maximumAge) { - return + if (event.block.blockData is Ageable) { + val data = event.block.blockData as Ageable + if (data.age < data.maximumAge) { + return + } } val toGive = rewards[type] ?: return