diff --git a/src/main/java/net/Indyuce/mmocore/api/player/CombatRunnable.java b/src/main/java/net/Indyuce/mmocore/api/player/CombatRunnable.java index b7092169..501853d3 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/CombatRunnable.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/CombatRunnable.java @@ -5,20 +5,16 @@ import org.bukkit.scheduler.BukkitRunnable; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.event.PlayerCombatEvent; -import net.Indyuce.mmocore.manager.ConfigManager; public class CombatRunnable extends BukkitRunnable { private final PlayerData player; private long lastHit = System.currentTimeMillis(); - private ConfigManager config; public CombatRunnable(PlayerData player) { this.player = player; - config = MMOCore.plugin.configManager; - - config.getSimpleMessage("now-in-combat").send(player.getPlayer()); + MMOCore.plugin.configManager.getSimpleMessage("now-in-combat").send(player.getPlayer()); Bukkit.getPluginManager().callEvent(new PlayerCombatEvent(player, true)); runTaskTimer(MMOCore.plugin, 20, 20); } @@ -29,9 +25,9 @@ public class CombatRunnable extends BukkitRunnable { @Override public void run() { - if (lastHit + (config.combatLogTimer * 100) < System.currentTimeMillis()) { + if (lastHit + (MMOCore.plugin.configManager.combatLogTimer * 1000) < System.currentTimeMillis()) { Bukkit.getPluginManager().callEvent(new PlayerCombatEvent(player, false)); - config.getSimpleMessage("leave-combat").send(player.getPlayer()); + MMOCore.plugin.configManager.getSimpleMessage("leave-combat").send(player.getPlayer()); close(); } } diff --git a/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttribute.java b/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttribute.java index 4bd44049..4bf8ddaa 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttribute.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttribute.java @@ -2,6 +2,7 @@ package net.Indyuce.mmocore.api.player.attribute; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.logging.Level; @@ -10,13 +11,17 @@ import org.bukkit.ChatColor; import org.bukkit.configuration.ConfigurationSection; import net.Indyuce.mmocore.MMOCore; -import net.Indyuce.mmocore.api.player.stats.StatType; import net.mmogroup.mmolib.api.stat.modifier.StatModifier; public class PlayerAttribute { private final String id, name; private final int max; - private final Map buffs = new HashMap<>(); + + /* + * used to store stats using StatType, but attributes also need to access non + * basic MMOCore stats hence the string maps keys + */ + private final Map buffs = new HashMap<>(); public PlayerAttribute(ConfigurationSection config) { Validate.notNull(config, "Could not load config"); @@ -30,10 +35,11 @@ public class PlayerAttribute { if (config.contains("buff")) for (String key : config.getConfigurationSection("buff").getKeys(false)) try { - StatType stat = StatType.valueOf(key.toUpperCase().replace("-", "_").replace(" ", "_")); + String stat = key.toUpperCase().replace("-", "_").replace(" ", "_"); buffs.put(stat, new StatModifier(config.getString("buff." + key))); } catch (IllegalArgumentException exception) { - MMOCore.log(Level.WARNING, "[PlayerAttributes:" + id + "] Could not load buff '" + key + "': " + exception.getMessage()); + MMOCore.log(Level.WARNING, + "Could not load buff '" + key + "' from attribute '" + id + "': " + exception.getMessage()); } } @@ -53,11 +59,7 @@ public class PlayerAttribute { return max; } - public Set getStats() { - return buffs.keySet(); - } - - public StatModifier getBuff(StatType stat) { - return buffs.get(stat); + public Set> getBuffs() { + return buffs.entrySet(); } } diff --git a/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java b/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java index c7420a1d..ac81a5cc 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java @@ -156,7 +156,7 @@ public class PlayerAttributes { public void update() { PlayerAttribute attribute = MMOCore.plugin.attributeManager.get(id); int total = getTotal(); - attribute.getStats().forEach(stat -> data.getStats().getInstance(stat).addModifier("attribute." + attribute.getId(), attribute.getBuff(stat).multiply(total))); + attribute.getBuffs().forEach(buff -> data.getStats().getInstance(buff.getKey()).addModifier("attribute." + attribute.getId(), buff.getValue().multiply(total))); } public String getId() { diff --git a/src/main/java/net/Indyuce/mmocore/api/player/stats/PlayerStats.java b/src/main/java/net/Indyuce/mmocore/api/player/stats/PlayerStats.java index 3fedbad1..82995af4 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/stats/PlayerStats.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/stats/PlayerStats.java @@ -36,7 +36,11 @@ public class PlayerStats { } public StatInstance getInstance(StatType stat) { - return map.getInstance(stat.name()); + return getInstance(stat.name()); + } + + public StatInstance getInstance(String stat) { + return map.getInstance(stat); } /* diff --git a/src/main/java/net/Indyuce/mmocore/gui/AttributeView.java b/src/main/java/net/Indyuce/mmocore/gui/AttributeView.java index c7823f69..3245bbee 100644 --- a/src/main/java/net/Indyuce/mmocore/gui/AttributeView.java +++ b/src/main/java/net/Indyuce/mmocore/gui/AttributeView.java @@ -1,5 +1,7 @@ package net.Indyuce.mmocore.gui; +import java.util.Map.Entry; + import org.bukkit.Sound; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.event.inventory.InventoryClickEvent; @@ -8,7 +10,6 @@ import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.attribute.PlayerAttribute; import net.Indyuce.mmocore.api.player.attribute.PlayerAttributes.AttributeInstance; -import net.Indyuce.mmocore.api.player.stats.StatType; import net.Indyuce.mmocore.gui.api.EditableInventory; import net.Indyuce.mmocore.gui.api.GeneratedInventory; import net.Indyuce.mmocore.gui.api.PluginInventory; @@ -59,15 +60,14 @@ public class AttributeView extends EditableInventory { Placeholders holders = new Placeholders(); holders.register("name", attribute.getName()); - holders.register("buffs", attribute.getStats().size()); + holders.register("buffs", attribute.getBuffs().size()); holders.register("spent", inv.getPlayerData().getAttributes().getInstance(attribute).getBase()); holders.register("max", attribute.getMax()); holders.register("current", total); holders.register("attribute_points", inv.getPlayerData().getAttributePoints()); - for (StatType stat : attribute.getStats()) { - StatModifier buff = attribute.getBuff(stat); - holders.register("buff_" + stat.name().toLowerCase(), buff); - holders.register("total_" + stat.name().toLowerCase(), buff.multiply(total)); + for (Entry entry : attribute.getBuffs()) { + holders.register("buff_" + entry.getKey().toLowerCase(), entry.getValue()); + holders.register("total_" + entry.getKey().toLowerCase(), entry.getValue().multiply(total)); } return holders; } diff --git a/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java b/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java index b9263aa3..7983906d 100644 --- a/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java +++ b/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java @@ -93,7 +93,7 @@ public class PlayerListener implements Listener { @EventHandler(priority = EventPriority.HIGH) public void g(PlayerRegenResourceEvent event) { if (event.getResource() == PlayerResource.HEALTH) { - EntityRegainHealthEvent bukkitEvent = new EntityRegainHealthEvent(event.getPlayer(), event.getAmount(), RegainReason.REGEN); + EntityRegainHealthEvent bukkitEvent = new EntityRegainHealthEvent(event.getPlayer(), event.getAmount(), RegainReason.CUSTOM); Bukkit.getPluginManager().callEvent(bukkitEvent); event.setCancelled(bukkitEvent.isCancelled()); event.setAmount(bukkitEvent.getAmount()); diff --git a/src/main/java/net/Indyuce/mmocore/manager/AttributeManager.java b/src/main/java/net/Indyuce/mmocore/manager/AttributeManager.java index 7d0ea990..a8327f3c 100644 --- a/src/main/java/net/Indyuce/mmocore/manager/AttributeManager.java +++ b/src/main/java/net/Indyuce/mmocore/manager/AttributeManager.java @@ -33,7 +33,7 @@ public class AttributeManager extends MMOManager { String path = key.toLowerCase().replace("_", "-").replace(" ", "-"); map.put(path, new PlayerAttribute(config.getConfig().getConfigurationSection(key))); } catch (IllegalArgumentException exception) { - MMOCore.log(Level.WARNING, "[PlayerAttributes] Could not load '" + key + "': " + exception.getMessage()); + MMOCore.log(Level.WARNING, "Could not load attribute '" + key + "': " + exception.getMessage()); } }