diff --git a/pom.xml b/pom.xml index b645a2101..1ad8b4594 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 1.2.08 + 1.2.09-dev mcMMO https://github.com/TheYeti/mcMMO diff --git a/src/main/java/com/gmail/nossr50/Combat.java b/src/main/java/com/gmail/nossr50/Combat.java index f41f7da0a..38e182d08 100644 --- a/src/main/java/com/gmail/nossr50/Combat.java +++ b/src/main/java/com/gmail/nossr50/Combat.java @@ -16,6 +16,7 @@ */ package com.gmail.nossr50; +import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.*; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -352,17 +353,42 @@ public class Combat Skills.XpCheckSkill(SkillType.ARCHERY, attacker); } } - public static void dealDamage(Entity target, int dmg){ - if(target instanceof Player){ - ((Player) target).damage(dmg); - } - if(target instanceof Animals){ - ((Animals) target).damage(dmg); - } - if(target instanceof Monster){ - ((Monster) target).damage(dmg); - } + + /** + * Attempt to damage target for value dmg with reason CUSTOM + * + * @param target LivingEntity which to attempt to damage + * @param dmg Amount of damage to attempt to do + */ + public static void dealDamage(LivingEntity target, int dmg){ + EntityDamageEvent ede = new EntityDamageEvent(target, EntityDamageEvent.DamageCause.CUSTOM, dmg); + Bukkit.getPluginManager().callEvent(ede); } + + /** + * Attempt to damage target for value dmg with reason cause + * + * @param target LivingEntity which to attempt to damage + * @param dmg Amount of damage to attempt to do + * @param cause DamageCause to pass to damage event + */ + public static void dealDamage(LivingEntity target, int dmg, DamageCause cause) { + EntityDamageEvent ede = new EntityDamageEvent(target, cause, dmg); + Bukkit.getPluginManager().callEvent(ede); + } + + /** + * Attempt to damage target for value dmg with reason ENTITY_ATTACK with damager attacker + * + * @param target LivingEntity which to attempt to damage + * @param dmg Amount of damage to attempt to do + * @param attacker Player to pass to event as damager + */ + public static void dealDamage(LivingEntity target, int dmg, Player attacker) { + EntityDamageEvent ede = new EntityDamageByEntityEvent(attacker, target, EntityDamageEvent.DamageCause.ENTITY_ATTACK, dmg); + Bukkit.getPluginManager().callEvent(ede); + } + public static boolean pvpAllowed(EntityDamageByEntityEvent event, World world) { if(!event.getEntity().getWorld().getPVP()) diff --git a/src/main/java/com/gmail/nossr50/events/McMMOPlayerLevelUpEvent.java b/src/main/java/com/gmail/nossr50/events/McMMOPlayerLevelUpEvent.java new file mode 100644 index 000000000..0483125c2 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/events/McMMOPlayerLevelUpEvent.java @@ -0,0 +1,55 @@ +package com.gmail.nossr50.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import com.gmail.nossr50.datatypes.SkillType; + +/** + * Called when a user levels up in a skill + */ +@SuppressWarnings("serial") +public class McMMOPlayerLevelUpEvent extends Event { + private Player player; + private SkillType skill; + private int levelsGained; + + public McMMOPlayerLevelUpEvent(Player player, SkillType skill) { + this.player = player; + this.skill = skill; + this.levelsGained = 1; // Always 1 for now as we call in the loop where the levelups are calculated, could change later! + } + + /** + * @return Player leveling up + */ + public Player getPlayer() { + return player; + } + + /** + * @return SkillType that is being leveled up + */ + public SkillType getSkill() { + return skill; + } + + /** + * @return The number of levels gained in this event + */ + public int getLevelsGained() { + return levelsGained; + } + + /** Rest of file is required boilerplate for custom events **/ + private static final HandlerList handlers = new HandlerList(); + + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/src/main/java/com/gmail/nossr50/runnables/mcTimer.java b/src/main/java/com/gmail/nossr50/runnables/mcTimer.java index 6b41db742..78572c228 100644 --- a/src/main/java/com/gmail/nossr50/runnables/mcTimer.java +++ b/src/main/java/com/gmail/nossr50/runnables/mcTimer.java @@ -17,6 +17,7 @@ package com.gmail.nossr50.runnables; import org.bukkit.entity.*; +import com.gmail.nossr50.Combat; import com.gmail.nossr50.Users; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.datatypes.PlayerProfile; @@ -60,7 +61,7 @@ public class mcTimer implements Runnable */ if(thecount % 2 == 0 && PP.getBleedTicks() >= 1) { - player.damage(2); + Combat.dealDamage(player, 2); PP.decreaseBleedTicks(); } diff --git a/src/main/java/com/gmail/nossr50/skills/Axes.java b/src/main/java/com/gmail/nossr50/skills/Axes.java index 3561cb178..4c0e0e601 100644 --- a/src/main/java/com/gmail/nossr50/skills/Axes.java +++ b/src/main/java/com/gmail/nossr50/skills/Axes.java @@ -25,6 +25,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.plugin.Plugin; import com.gmail.nossr50.locale.mcLocale; +import com.gmail.nossr50.Combat; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; import com.gmail.nossr50.mcPermissions; @@ -152,7 +153,7 @@ public class Axes { continue; if(targets >= 1 && derp.getWorld().getPVP()) { - target.damage(event.getDamage() / 2); + Combat.dealDamage(target, event.getDamage() / 2, attacker); target.sendMessage(ChatColor.DARK_RED+"Struck by CLEAVE!"); targets--; continue; @@ -161,7 +162,7 @@ public class Axes { else { LivingEntity target = (LivingEntity)derp; - target.damage(event.getDamage() / 2); + Combat.dealDamage(target, event.getDamage() / 2, attacker); targets--; } } diff --git a/src/main/java/com/gmail/nossr50/skills/Fishing.java b/src/main/java/com/gmail/nossr50/skills/Fishing.java index 9249e0617..46c5adff1 100644 --- a/src/main/java/com/gmail/nossr50/skills/Fishing.java +++ b/src/main/java/com/gmail/nossr50/skills/Fishing.java @@ -9,6 +9,7 @@ import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.material.Wool; +import com.gmail.nossr50.Combat; import com.gmail.nossr50.Users; import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.datatypes.PlayerProfile; @@ -671,7 +672,7 @@ public class Fishing { if(le instanceof Player) return; - le.damage(1); + Combat.dealDamage(le, 1, event.getPlayer()); World world = le.getWorld(); /* Neutral Mobs */ diff --git a/src/main/java/com/gmail/nossr50/skills/Repair.java b/src/main/java/com/gmail/nossr50/skills/Repair.java index 19fc55137..dbb9c067f 100644 --- a/src/main/java/com/gmail/nossr50/skills/Repair.java +++ b/src/main/java/com/gmail/nossr50/skills/Repair.java @@ -192,7 +192,7 @@ public class Repair { removeItem(player, rIron); repairItem(player, enchants, enchantsLevel); - durabilityAfter = (short) (player.getItemInHand().getDurability()-getRepairAmount(is, player)); + durabilityAfter = player.getItemInHand().getDurability(); dif = (short) (durabilityBefore - durabilityAfter); if(m.isShovel(is)) dif = (short) (dif / 3); @@ -315,7 +315,7 @@ public class Repair { if(rank == 0) { - if(LoadProperties.mayLoseEnchants()) + if(LoadProperties.mayLoseEnchants) { player.sendMessage(mcLocale.getString("Repair.LostEnchants")); for(Enchantment x : enchants) @@ -328,7 +328,7 @@ public class Repair { boolean failure = false, downgrade = false; - if(LoadProperties.mayLoseEnchants()) + if(LoadProperties.mayLoseEnchants) { for(Enchantment x : enchants) { @@ -341,7 +341,7 @@ public class Repair { { if(enchantsLvl[pos] > 1) { - if(LoadProperties.mayDowngradeEnchants()) + if(LoadProperties.mayDowngradeEnchants) { if(Math.random() * 100 <= getDowngradeChance(rank)) { diff --git a/src/main/java/com/gmail/nossr50/skills/Skills.java b/src/main/java/com/gmail/nossr50/skills/Skills.java index b8dd5db30..6f0bc2755 100644 --- a/src/main/java/com/gmail/nossr50/skills/Skills.java +++ b/src/main/java/com/gmail/nossr50/skills/Skills.java @@ -18,6 +18,7 @@ package com.gmail.nossr50.skills; import java.util.logging.Logger; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -35,6 +36,7 @@ import com.gmail.nossr50.spout.SpoutStuff; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.PlayerStat; import com.gmail.nossr50.datatypes.SkillType; +import com.gmail.nossr50.events.McMMOPlayerLevelUpEvent; import com.gmail.nossr50.locale.mcLocale; @@ -326,6 +328,9 @@ public class Skills skillups++; PP.removeXP(skillType, PP.getXpToLevel(skillType)); PP.skillUp(skillType, 1); + + McMMOPlayerLevelUpEvent eventToFire = new McMMOPlayerLevelUpEvent(player, skillType); + Bukkit.getPluginManager().callEvent(eventToFire); } if(!LoadProperties.useMySQL) diff --git a/src/main/java/com/gmail/nossr50/skills/Swords.java b/src/main/java/com/gmail/nossr50/skills/Swords.java index 204f98363..dec6ab17c 100644 --- a/src/main/java/com/gmail/nossr50/skills/Swords.java +++ b/src/main/java/com/gmail/nossr50/skills/Swords.java @@ -151,7 +151,7 @@ public class Swords continue; if(targets >= 1 && derp.getWorld().getPVP()) { - target.damage(event.getDamage() / 4); + Combat.dealDamage(target, event.getDamage() / 4, attacker); target.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!"); Users.getProfile(target).addBleedTicks(5); targets--; @@ -164,7 +164,7 @@ public class Swords pluginx.misc.addToBleedQue((LivingEntity)derp); LivingEntity target = (LivingEntity)derp; - target.damage(event.getDamage() / 4); + Combat.dealDamage(target, event.getDamage() / 4, attacker); targets--; } } @@ -193,7 +193,7 @@ public class Swords { if(Math.random() * 2000 <= 600) { - Combat.dealDamage(f, event.getDamage() / 2); + Combat.dealDamage((LivingEntity) f, event.getDamage() / 2); defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**"); if(f instanceof Player) ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!"); @@ -201,7 +201,7 @@ public class Swords } else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS)) { - Combat.dealDamage(f, event.getDamage() / 2); + Combat.dealDamage((LivingEntity) f, event.getDamage() / 2); defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**"); if(f instanceof Player) ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!"); @@ -245,7 +245,7 @@ public class Swords } else { - x.damage(2); + Combat.dealDamage(x, 2); } } } diff --git a/src/main/java/com/gmail/nossr50/skills/Taming.java b/src/main/java/com/gmail/nossr50/skills/Taming.java index 66b976709..cdafab982 100644 --- a/src/main/java/com/gmail/nossr50/skills/Taming.java +++ b/src/main/java/com/gmail/nossr50/skills/Taming.java @@ -16,7 +16,6 @@ */ package com.gmail.nossr50.skills; -import org.bukkit.craftbukkit.CraftOfflinePlayer; import org.bukkit.entity.AnimalTamer; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ba0c9f067..ca9a2315d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: mcMMO -main: com.gmail.nossr50.mcMMO -version: 1.2.08 +main: com.gmail.nossr50.mcMMO +version: 1.2.09-dev softdepend: [Spout] author: TheYeti description: mcMMO takes core Minecraft game mechanics and expands them to add an extensive RPG experience, the goal of the project has always been a quality RPG experience. Everything in mcMMO is carefully thought out and is constantly improving. mcMMO adds eleven skills to train in and level in, while also offering a high level of customization for server admins. There are countless features, including custom sounds, graphical elements, and more added when running mcMMO in conjunction with Spout. I carefully read feedback and evaluate the mechanics of mcMMO in every update to provide an ever-evolving experience.