From 59f8e0f2b66fdbd1a9ce8b2d666ad02ec9570873 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Fri, 20 Aug 2021 18:44:51 +0100 Subject: [PATCH] Added alchemy, armory, and fishing --- .../com/willfp/ecoskills/skills/Skills.java | 8 +-- .../ecoskills/skills/skills/SkillAlchemy.kt | 60 +++++++++++++++++++ .../ecoskills/skills/skills/SkillArmory.kt | 2 +- .../ecoskills/skills/skills/SkillFishing.kt | 30 ++++++++++ .../core-plugin/src/main/resources/config.yml | 45 ++++++++++++++ 5 files changed, 140 insertions(+), 5 deletions(-) create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillAlchemy.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillFishing.kt diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/skills/Skills.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/skills/Skills.java index 6007b51..3fc75bd 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/skills/Skills.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/skills/Skills.java @@ -2,11 +2,13 @@ package com.willfp.ecoskills.skills; import com.google.common.collect.ImmutableSet; import com.willfp.eco.core.config.updating.ConfigUpdater; +import com.willfp.ecoskills.skills.skills.SkillAlchemy; import com.willfp.ecoskills.skills.skills.SkillArmory; import com.willfp.ecoskills.skills.skills.SkillCombat; import com.willfp.ecoskills.skills.skills.SkillEnchanting; import com.willfp.ecoskills.skills.skills.SkillExploration; import com.willfp.ecoskills.skills.skills.SkillFarming; +import com.willfp.ecoskills.skills.skills.SkillFishing; import com.willfp.ecoskills.skills.skills.SkillMining; import com.willfp.ecoskills.skills.skills.SkillWoodcutting; import org.bukkit.NamespacedKey; @@ -31,10 +33,8 @@ public class Skills { public static final Skill WOODCUTTING = new SkillWoodcutting(); public static final Skill EXPLORATION = new SkillExploration(); public static final Skill ARMORY = new SkillArmory(); - /* - public static final Skill FISHING = new Skill(PLUGIN, "fishing"); - public static final Skill ALCHEMY = new Skill(PLUGIN, "alchemy"); - */ + public static final Skill FISHING = new SkillFishing(); + public static final Skill ALCHEMY = new SkillAlchemy(); @ApiStatus.Internal public static void registerNewSkill(@NotNull final Skill skill) { diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillAlchemy.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillAlchemy.kt new file mode 100644 index 0000000..6d042f3 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillAlchemy.kt @@ -0,0 +1,60 @@ +package com.willfp.ecoskills.skills.skills + +import com.willfp.eco.core.events.EntityDeathByEntityEvent +import com.willfp.ecoskills.api.PlayerSkillExpGainEvent +import com.willfp.ecoskills.getStatLevel +import com.willfp.ecoskills.skills.Skill +import org.bukkit.Bukkit +import org.bukkit.Material +import org.bukkit.attribute.Attribute +import org.bukkit.enchantments.Enchantment +import org.bukkit.entity.Player +import org.bukkit.entity.Projectile +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.block.BlockBreakEvent +import org.bukkit.event.enchantment.EnchantItemEvent +import org.bukkit.event.entity.EntityDamageByEntityEvent +import org.bukkit.event.inventory.BrewEvent +import java.util.* + +class SkillAlchemy : Skill( + "alchemy" +) { + private val rewards: MutableMap + + init { + rewards = EnumMap(org.bukkit.Material::class.java) + } + + override fun postUpdate() { + rewards.clear() + for (string in this.config.getStrings("xp-rewards", false)) { + val split = string.split(":") + val material = Material.getMaterial(split[0].uppercase()) ?: continue + rewards[material] = split[1].toDouble() + } + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + fun handleLevelling(event: BrewEvent) { + var player: Player? = null + + for (viewer in event.contents.viewers) { + if (viewer is Player) { + player = viewer + break + } + } + + if (player == null) { + return + } + + val type = event.contents.ingredient?.type ?: return + + val toGive = rewards[type] ?: return + val gainEvent = PlayerSkillExpGainEvent(player, this, toGive) + Bukkit.getPluginManager().callEvent(gainEvent) + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillArmory.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillArmory.kt index 63652d6..2aebbf2 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillArmory.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillArmory.kt @@ -13,7 +13,7 @@ import java.util.* class SkillArmory : Skill( "armory" ) { - @EventHandler(priority = EventPriority.HIGH) + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) fun handleLevelling(event: EntityDamageByEntityEvent) { val player = event.entity if (player !is Player) { diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillFishing.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillFishing.kt new file mode 100644 index 0000000..ebfc255 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/skills/SkillFishing.kt @@ -0,0 +1,30 @@ +package com.willfp.ecoskills.skills.skills + +import com.willfp.ecoskills.api.PlayerSkillExpGainEvent +import com.willfp.ecoskills.skills.Skill +import org.bukkit.Bukkit +import org.bukkit.attribute.Attribute +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.entity.EntityDamageByEntityEvent +import org.bukkit.event.player.PlayerFishEvent +import java.util.* + +class SkillFishing : Skill( + "fishing" +) { + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + fun handleLevelling(event: PlayerFishEvent) { + val player = event.player + val expToDrop = event.expToDrop + + if (player !is Player) { + return + } + + val xp = expToDrop * this.config.getDouble("xp-per-experience-dropped") + val gainEvent = PlayerSkillExpGainEvent(player, this, xp) + Bukkit.getPluginManager().callEvent(gainEvent) + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 34fd2d5..5a49da9 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -291,6 +291,20 @@ skills: gui-item: fishing_rod # The maximum obtainable level max-level: 50 + + # The experience to give for each in-game experience dropped + xp-per-experience-dropped: 3.5 + + # The level/skill increases to give on levelup + level-up-rewards: + - "defense:1" + - "wisdom:1" + - "eye_of_the_depths:1" + + rewards-messages: + - " &f+1 %ecoskills_defense_name%" + - " &f+1 %ecoskills_wisdom_name%" + - " &6Eye Of The Depths %ecoskills_eye_of_the_depths_numeral%" alchemy: gui-position: row: 4 @@ -299,6 +313,37 @@ skills: gui-item: brewing_stand # The maximum obtainable level max-level: 50 + + # The level/skill increases to give on levelup + level-up-rewards: + - "wisdom:1" + - "speed:1" + - "potionmaster:1" + + rewards-messages: + - " &f+1 %ecoskills_wisdom_name%" + - " &f+1 %ecoskills_speed_name%" + - " &6Potionmaster %ecoskills_potionmaster_numeral%" + + # The experience to give for each brewing ingredient + xp-rewards: + - "nether_wart:6" + - "redstone:6" + - "glowstone_dust:6" + - "fermented_spider_eye:6" + - "gunpowder:6" + - "dragon_breath:42" + - "sugar:14" + - "rabbit_foot:22" + - "glistering_melon_slice:22" + - "spider_eye:8" + - "pufferfish:14" + - "magma_cream:12" + - "golden_carrot:22" + - "blaze_powder:12" + - "ghast_tear:12" + - "turtle_shell:80" + - "phantom_membrane:34" armory: gui-position: row: 4