From 501f5de55a64c756d3e9b082500f2e6aa3292f25 Mon Sep 17 00:00:00 2001 From: GJ Date: Tue, 14 May 2013 11:28:50 -0400 Subject: [PATCH] Fixing everything you guys broke while I was gone... --- .../nossr50/listeners/EntityListener.java | 21 ++++--- .../nossr50/listeners/PlayerListener.java | 7 ++- .../skills/fishing/FishingManager.java | 61 +++++++++---------- .../gmail/nossr50/util/MobHealthbarUtils.java | 7 ++- .../gmail/nossr50/util/skills/SkillUtils.java | 4 +- 5 files changed, 54 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index cca39a329..869e4ec54 100644 --- a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -15,7 +15,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; @@ -302,13 +301,21 @@ public class EntityListener implements Listener { return; } - SpawnReason reason = event.getSpawnReason(); + switch (event.getSpawnReason()) { + case SPAWNER: + case SPAWNER_EGG: + LivingEntity entity = event.getEntity(); + Entity passenger = entity.getPassenger(); - if (reason == SpawnReason.SPAWNER || reason == SpawnReason.SPAWNER_EGG) { - event.getEntity().setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue); - if(event.getEntity().getPassenger() != null) { - event.getEntity().getPassenger().setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue); - } + entity.setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue); + + if (passenger != null) { + passenger.setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue); + } + return; + + default: + return; } } diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index 008e2926e..2533e20eb 100644 --- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java @@ -320,14 +320,15 @@ public class PlayerListener implements Listener { public void onPlayerInteractLowest(PlayerInteractEvent event) { Player player = event.getPlayer(); Block block = event.getClickedBlock(); - ItemStack heldItem = player.getItemInHand(); if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) { return; } + ItemStack heldItem = player.getItemInHand(); McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); + // This shouldn't be possible - this is probably a band-aid for a larger issue somewhere else. if (mcMMOPlayer == null) { return; } @@ -427,6 +428,7 @@ public class PlayerListener implements Listener { ItemStack heldItem = player.getItemInHand(); McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); + // This shouldn't be possible - this is probably a band-aid for a larger issue somewhere else. if (mcMMOPlayer == null) { return; } @@ -532,7 +534,8 @@ public class PlayerListener implements Listener { if (mcMMOPlayer == null) { return; } - else if (mcMMOPlayer.getPartyChatMode()) { + + if (mcMMOPlayer.getPartyChatMode()) { Party party = mcMMOPlayer.getParty(); if (party == null) { diff --git a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java index 5d94cc0eb..96c26f90a 100644 --- a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java @@ -49,7 +49,7 @@ import com.gmail.nossr50.util.skills.CombatUtils; import com.gmail.nossr50.util.skills.SkillUtils; public class FishingManager extends SkillManager { - private static HashMap> enchantableCache = new HashMap>(); + private final HashMap> enchantableCache = new HashMap>(); private final long FISHING_COOLDOWN_SECONDS = 1000L; private int fishingTries = 0; @@ -112,12 +112,7 @@ public class FishingManager extends SkillManager { player.setItemInHand(null); - Creature kraken; - if (Misc.getRandom().nextInt(100) == 0) { - kraken = (Creature) world.spawnEntity(player.getEyeLocation(), EntityType.CHICKEN); - } else { - kraken = (Creature) world.spawnEntity(player.getEyeLocation(), EntityType.SQUID); - } + Creature kraken = (Creature) world.spawnEntity(player.getEyeLocation(), (Misc.getRandom().nextInt(100) == 0 ? EntityType.CHICKEN : EntityType.SQUID)); kraken.setCustomName(AdvancedConfig.getInstance().getKrakenName()); if (!kraken.isValid()) { @@ -418,23 +413,7 @@ public class FishingManager extends SkillManager { return false; } - // When calculating the possible enchantments, we should cache the possible enchantments to minimize - // looping every time someone fishes. - List possibleEnchantments; - - if (enchantableCache.containsKey(treasureDrop.getType())) { // Check if possible enchantments is already cached for this item. - possibleEnchantments = enchantableCache.get(treasureDrop.getType()); - } else { // If not, check which enchantments are possible - possibleEnchantments = new ArrayList(); - - for (Enchantment enchantment : Enchantment.values()) { - if (enchantment.canEnchantItem(treasureDrop)) { - possibleEnchantments.add(enchantment); - } - } - - enchantableCache.put(treasureDrop.getType(), possibleEnchantments); // Cache these enchantments. - } + List possibleEnchantments = getPossibleEnchantments(treasureDrop); // This make sure that the order isn't always the same, for example previously Unbreaking had a lot more chance to be used than any other enchant Collections.shuffle(possibleEnchantments, Misc.getRandom()); @@ -443,20 +422,38 @@ public class FishingManager extends SkillManager { int specificChance = 1; for (Enchantment possibleEnchantment : possibleEnchantments) { - if (!treasureDrop.getItemMeta().hasConflictingEnchant(possibleEnchantment) && Misc.getRandom().nextInt(specificChance) == 0) { - // We need our random enchantment level to fall in the range between getStartLevel() and getMaxLevel() - // so we take a random number in the range of their difference, then add the start level. - final int levelDiff = possibleEnchantment.getMaxLevel() - possibleEnchantment.getStartLevel(); - treasureDrop.addEnchantment(possibleEnchantment, Misc.getRandom().nextInt(levelDiff + 1) + possibleEnchantment.getStartLevel()); - - specificChance++; - enchanted = true; + if (treasureDrop.getItemMeta().hasConflictingEnchant(possibleEnchantment) || Misc.getRandom().nextInt(specificChance) != 0) { + continue; } + + treasureDrop.addEnchantment(possibleEnchantment, Math.max(Misc.getRandom().nextInt(possibleEnchantment.getMaxLevel()) + 1, possibleEnchantment.getStartLevel())); + + specificChance++; + enchanted = true; } return enchanted; } + private List getPossibleEnchantments(ItemStack treasureDrop) { + Material dropType = treasureDrop.getType(); + + if (enchantableCache.containsKey(dropType)) { + return enchantableCache.get(dropType); + } + + List possibleEnchantments = new ArrayList(); + + for (Enchantment enchantment : Enchantment.values()) { + if (enchantment.canEnchantItem(treasureDrop)) { + possibleEnchantments.add(enchantment); + } + } + + enchantableCache.put(dropType, possibleEnchantments); + return possibleEnchantments; + } + /** * Gets the vanilla XP multiplier * diff --git a/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java b/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java index fba006f80..da2225981 100644 --- a/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java +++ b/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java @@ -46,10 +46,11 @@ public final class MobHealthbarUtils { PlayerProfile profile = UserManager.getPlayer(player).getProfile(); - if (profile == null) { - return; + if (profile.getMobHealthbarType() == null) { + profile.setMobHealthbarType(Config.getInstance().getMobHealthbarDefault()); } - else if (profile.getMobHealthbarType() == MobHealthbarType.DISABLED) { + + if (profile.getMobHealthbarType() == MobHealthbarType.DISABLED) { return; } diff --git a/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java b/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java index 192ffdec5..bc5e19aaf 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java @@ -332,11 +332,11 @@ public class SkillUtils { if (!mcMMOPlayer.getAbilityMode(ability) && cooldownOver(playerProfile.getSkillDATS(ability), ability.getCooldown(), player)) { McMMOPlayerAbilityActivateEvent event = new McMMOPlayerAbilityActivateEvent(player, type); mcMMO.p.getServer().getPluginManager().callEvent(event); - + if (event.isCancelled()) { return; } - + int ticks = PerksUtils.handleActivationPerks(player, 2 + (playerProfile.getSkillLevel(type) / AdvancedConfig.getInstance().getAbilityLength()), ability.getMaxTicks()); ParticleEffectUtils.playAbilityEnabledEffect(player);