diff --git a/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java b/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java index da0ec28f..03054204 100644 --- a/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java +++ b/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java @@ -124,6 +124,10 @@ public class DefaultMMOLoader extends MMOLoader { if (config.getKey().equals("climb")) return new ClimbExperienceSource(dispenser, config); + if (config.getKey().equals("eat")) { + return new EatExperienceSource(dispenser, config); + } + if (config.getKey().equals("damagedealt")) return new DamageDealtExperienceSource(dispenser, config); diff --git a/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java b/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java index cc8bb1e0..739ca613 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java @@ -338,7 +338,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc public void refreshVanillaExp() { if (!isOnline() || !MMOCore.plugin.configManager.overrideVanillaExp) return; - + getPlayer().sendExperienceChange(0.01f); getPlayer().setLevel(getLevel()); getPlayer().setExp(Math.max(0, Math.min(1, (float) experience / (float) getLevelUpExperience()))); } diff --git a/src/main/java/net/Indyuce/mmocore/api/player/profess/PlayerClass.java b/src/main/java/net/Indyuce/mmocore/api/player/profess/PlayerClass.java index 5be54c20..ca9f2627 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/profess/PlayerClass.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/profess/PlayerClass.java @@ -27,6 +27,7 @@ import net.Indyuce.mmocore.player.stats.StatInfo; import net.Indyuce.mmocore.skill.ClassSkill; import net.Indyuce.mmocore.skill.RegisteredSkill; import net.md_5.bungee.api.ChatColor; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Particle; diff --git a/src/main/java/net/Indyuce/mmocore/experience/source/DamageDealtExperienceSource.java b/src/main/java/net/Indyuce/mmocore/experience/source/DamageDealtExperienceSource.java index 5b31b7aa..b290b8a6 100644 --- a/src/main/java/net/Indyuce/mmocore/experience/source/DamageDealtExperienceSource.java +++ b/src/main/java/net/Indyuce/mmocore/experience/source/DamageDealtExperienceSource.java @@ -4,15 +4,18 @@ import io.lumine.mythic.lib.api.MMOLineConfig; import io.lumine.mythic.lib.api.event.PlayerAttackEvent; import io.lumine.mythic.lib.damage.DamagePacket; import io.lumine.mythic.lib.damage.DamageType; +import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser; import net.Indyuce.mmocore.experience.source.type.SpecificExperienceSource; import net.Indyuce.mmocore.manager.profession.ExperienceSourceManager; import net.Indyuce.mmocore.api.player.PlayerData; import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import java.util.Arrays; import java.util.Objects; +import java.util.logging.Level; import java.util.stream.Collectors; public class DamageDealtExperienceSource extends SpecificExperienceSource { @@ -43,6 +46,7 @@ public class DamageDealtExperienceSource extends SpecificExperienceSource() { @EventHandler public void onDamageDealt(PlayerAttackEvent e) { + PlayerData playerData = PlayerData.get(e.getPlayer()); for (DamageDealtExperienceSource source : getSources()) { double value = 0; @@ -62,10 +66,13 @@ public class DamageDealtExperienceSource extends SpecificExperienceSource { @@ -36,13 +37,13 @@ public class EatExperienceSource extends SpecificExperienceSource { return new ExperienceSourceManager() { @EventHandler - public void a(FoodLevelChangeEvent e) { - if (!(e.getEntity() instanceof Player) || e.getEntity().hasMetadata("NPC")) - return; - PlayerData playerData = PlayerData.get((OfflinePlayer) e.getEntity()); - for (EatExperienceSource source : getSources()) { - if (source.matchesParameter(playerData, e.getItem())) - source.giveExperience(playerData, e.getFoodLevel(), null); + public void a(PlayerItemConsumeEvent e) { + if(!e.getPlayer().hasMetadata("NPC")) { + PlayerData playerData = PlayerData.get(e.getPlayer()); + for (EatExperienceSource source : getSources()) { + if (source.matchesParameter(playerData, e.getItem())) + source.giveExperience(playerData, 1, null); + } } } }; diff --git a/src/main/java/net/Indyuce/mmocore/experience/source/MineBlockExperienceSource.java b/src/main/java/net/Indyuce/mmocore/experience/source/MineBlockExperienceSource.java index b1442871..eaa280f0 100644 --- a/src/main/java/net/Indyuce/mmocore/experience/source/MineBlockExperienceSource.java +++ b/src/main/java/net/Indyuce/mmocore/experience/source/MineBlockExperienceSource.java @@ -6,6 +6,7 @@ import net.Indyuce.mmocore.experience.dispenser.ExperienceDispenser; import net.Indyuce.mmocore.experience.source.type.SpecificExperienceSource; import net.Indyuce.mmocore.manager.profession.ExperienceSourceManager; import net.Indyuce.mmocore.api.player.PlayerData; +import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; @@ -39,7 +40,8 @@ public class MineBlockExperienceSource extends SpecificExperienceSource newManager() { - return new ExperienceSourceManager() { + return + new ExperienceSourceManager() { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void a(BlockBreakEvent event) { if (event.getPlayer().getGameMode() != GameMode.SURVIVAL) @@ -63,11 +65,13 @@ public class MineBlockExperienceSource extends SpecificExperienceSource