diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/CurrencyType.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/CurrencyType.java
index b8c7eb796..6a007fefa 100644
--- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/CurrencyType.java
+++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/CurrencyType.java
@@ -8,7 +8,7 @@ public enum CurrencyType
Coins(" Coins", Material.DOUBLE_PLANT),
Gems(" Gems", Material.EMERALD),
Gold(" Gold", Material.GOLD_NUGGET);
-
+
private String _prefix;
private Material _displayMaterial;
diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEvent.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEvent.java
index 79059c454..bd5346696 100644
--- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEvent.java
+++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEvent.java
@@ -16,7 +16,8 @@ public class UtilEvent
L_BLOCK,
R,
R_AIR,
- R_BLOCK
+ R_BLOCK,
+ ANY
}
public static boolean isAction(PlayerInteractEvent event, ActionType action)
@@ -39,6 +40,9 @@ public class UtilEvent
if (action == ActionType.R_BLOCK)
return (event.getAction() == Action.RIGHT_CLICK_BLOCK);
+ if (action == ActionType.ANY)
+ return event.getAction() != Action.PHYSICAL;
+
return false;
}
diff --git a/Plugins/Mineplex.Core/.classpath b/Plugins/Mineplex.Core/.classpath
index 8171cd881..b60bc08f6 100644
--- a/Plugins/Mineplex.Core/.classpath
+++ b/Plugins/Mineplex.Core/.classpath
@@ -12,7 +12,7 @@
-
+
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java b/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java
index 41410dfd6..3e77154fb 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java
@@ -295,6 +295,11 @@ public class DonationManager extends MiniDbClientPlugin
_coinQueue.clear();
}
+ public void rewardGold(Callback callback, String caller, Player player, int amount)
+ {
+ rewardGold(callback, caller, player.getName(), ClientManager.Get(player).getAccountId(), amount);
+ }
+
public void rewardGold(Callback callback, String caller, String name, int accountId, int amount)
{
rewardGold(callback, caller, name, accountId, amount, true);
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java
index 4ed2807d8..726778aa9 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java
@@ -162,6 +162,11 @@ public class ClanInfo
return getAllyMap().containsKey(other);
}
+ public boolean isAlly(ClanInfo other)
+ {
+ return isAlly(other.getName());
+ }
+
public boolean isSelf(String other)
{
return this.getName().equals(other);
@@ -169,7 +174,7 @@ public class ClanInfo
public boolean isNeutral(String other)
{
- return (!isAlly(other) && !isSelf(other));
+ return (!isAlly(other) && !isSelf(other) && !isEnemy(other));
}
public long getTimer()
@@ -451,6 +456,11 @@ public class ClanInfo
return _enemyData != null;
}
+ public boolean isEnemy(String clanName)
+ {
+ return hasEnemy() && clanName != null && clanName.equals(_enemyData.getEnemyName());
+ }
+
public void adjustEnergy(int energy)
{
_energy += energy;
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java
index 3c70a4d80..928480fae 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java
@@ -3,5 +3,5 @@ package mineplex.game.clans.clans;
public enum ClanRole
{
NONE, RECRUIT, MEMBER, ADMIN, LEADER
-}
+}
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java
index d15868492..fd38941fa 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java
@@ -174,6 +174,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat
ItemFactory itemFactory = new ItemFactory(plugin, blockRestore, _condition, damageManager, energy, fire, _projectileManager, webServerAddress, itemIgnore);
SkillFactory skillManager = new SkillFactory(plugin, damageManager, this, _combatManager, _condition, _projectileManager, disguiseManager, blockRestore, fire, new Movement(plugin), teleport, energy, webServerAddress);
skillManager.RemoveSkill("Dwarf Toss", "Block Toss");
+ skillManager.removeSkill("Whirlwind Axe");
_classManager = new ClassManager(plugin, _clientManager, donationManager, skillManager, itemFactory, webServerAddress);
StatsManager statsManager = new StatsManager(plugin, _clientManager);
@@ -249,6 +250,12 @@ public class ClansManager extends MiniClientPlugin implements IRelat
return x <= FIELD_RADIUS && z <= FIELD_RADIUS;
}
+ public boolean canUnclaimChunk(ClanInfo stealer, ClanInfo owner)
+ {
+ return owner.getClaims() > owner.getClaimsMax()
+ && !owner.isAdmin() && !owner.isAlly(stealer);
+ }
+
public ClanInfo getClan(Player player)
{
return _clanMemberMap.get(player.getName());
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java
index dc78f331e..1bd247212 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java
@@ -703,6 +703,12 @@ public class ClansCommand extends CommandBase
UtilPlayer.message(caller, F.main("Clans", F.elem("Clan " + cB.getName()) + " cannot have any more allies."));
return;
}
+
+ if (cA.isEnemy(cB.getName()))
+ {
+ UtilPlayer.message(caller, F.main("Clans", "You cannot form an alliance with an enemy clan."));
+ return;
+ }
if (cB.isRequested(cA.getName()))
{
@@ -806,16 +812,16 @@ public class ClansCommand extends CommandBase
if (cB.isSelf(cA.getName()))
{
UtilPlayer.message(caller, F.main("Clans", "You prefer to think of yourself positively..."));
- return;
}
-
- if (cB.isNeutral(cA.getName()))
+ else if (cB.isEnemy(cA.getName()))
+ {
+ UtilPlayer.message(caller, F.main("Clans", "You are currently enemies with " + F.elem("Clan " + cB.getName()) + "."));
+ }
+ else if (cB.isNeutral(cA.getName()))
{
UtilPlayer.message(caller, F.main("Clans", "You are already neutral with " + F.elem("Clan " + cB.getName()) + "."));
- return;
}
-
- if (cB.isAlly(cA.getName()))
+ else if (cB.isAlly(cA.getName()))
{
//Task
Plugin.getClanDataAccess().neutral(cA, cB, caller.getName(), true);
@@ -824,8 +830,6 @@ public class ClansCommand extends CommandBase
UtilPlayer.message(caller, F.main("Clans", "You revoked alliance with " + F.elem("Clan " + cB.getName()) + "."));
cA.inform(F.name(caller.getName()) + " revoked alliance with " + F.elem("Clan " + cB.getName()) + ".", caller.getName());
cB.inform(F.elem("Clan " + cA.getName()) + " has revoked alliance with you.", null);
-
- return;
}
}
@@ -1043,11 +1047,7 @@ public class ClansCommand extends CommandBase
public boolean unclaimSteal(Player caller, ClanInfo clientClan, ClanInfo ownerClan)
{
- if (ownerClan.getClaims() > ownerClan.getClaimsMax())
- {
- //Nothing Extra
- }
- else
+ if (!_manager.canUnclaimChunk(clientClan, ownerClan))
{
return false;
}
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java
index d15574122..e3b90efd3 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java
@@ -180,8 +180,7 @@ public class GoldManager extends MiniPlugin
public void deductGold(Callback resultCallback, Player player, int amount)
{
- _donationManager.RewardGoldLater("GoldManager", player, -amount);
- _donationManager.updateGoldQueue(resultCallback, player);
+ _donationManager.rewardGold(resultCallback, "GoldManager", player, -amount);
}
public void cashIn(Player player, GoldToken token)
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java
index 8e4439376..0e13253bc 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java
@@ -20,6 +20,8 @@ import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.game.clans.clans.ClansManager;
+import mineplex.game.clans.items.generation.Weight;
+import mineplex.game.clans.items.generation.WeightSet;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
@@ -28,9 +30,11 @@ import org.bukkit.Sound;
import org.bukkit.block.Biome;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
+import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
+import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockBurnEvent;
import org.bukkit.event.block.BlockDamageEvent;
@@ -39,6 +43,8 @@ import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
+import org.bukkit.event.entity.EntitySpawnEvent;
+import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerInteractEvent;
@@ -50,6 +56,7 @@ public class Gameplay extends MiniPlugin
private ClansManager _clansManager;
private BlockRestore _blockRestore;
private DamageManager _damageManager;
+ private WeightSet _foodDecrease; // Weighted probability sets for food decrease event outcomes
private HashMap _bucketWater = new HashMap();
@@ -60,6 +67,7 @@ public class Gameplay extends MiniPlugin
_clansManager = clansManager;
_blockRestore = blockRestore;
_damageManager = damageManager;
+ _foodDecrease = new WeightSet(new Weight(50, true), new Weight(50, false));
}
@EventHandler
@@ -87,6 +95,21 @@ public class Gameplay extends MiniPlugin
UtilInv.Update(event.getPlayer());
}
+ /**
+ * Decreases the hunger rate decrease speed by arbitrarily canceling a portion of decrease events.
+ * @param event
+ */
+ @EventHandler(ignoreCancelled=true)
+ public void foodChangeLevel(FoodLevelChangeEvent event)
+ {
+ Player player = (Player) event.getEntity();
+
+ if (event.getFoodLevel() < player.getFoodLevel()) // Hunger is decreasing for player
+ {
+ event.setCancelled(_foodDecrease.generateRandom());
+ }
+ }
+
@EventHandler
public void BucketFill(PlayerBucketFillEvent event)
{
@@ -211,6 +234,37 @@ public class Gameplay extends MiniPlugin
event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5, 0.5, 0.5), ItemStackFactory.Instance.CreateStack(Material.ENDER_CHEST));
}
+ @EventHandler
+ public void disableEnderPearls(PlayerInteractEvent event)
+ {
+ if (!isRightClick(event.getAction()))
+ return;
+
+ if (event.hasItem() && event.getItem().getType() == Material.ENDER_PEARL)
+ {
+ event.setCancelled(true);
+ UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot use ender pearls!"));
+ }
+ }
+
+ @EventHandler
+ public void disableFlintNSteel(PlayerInteractEvent event)
+ {
+ if (!isRightClick(event.getAction()))
+ return;
+
+ if (event.hasItem() && event.getItem().getType() == Material.FLINT_AND_STEEL)
+ {
+ event.setCancelled(true);
+ UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot use flint & steel!"));
+ }
+ }
+
+ private static boolean isRightClick(Action action)
+ {
+ return action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK;
+ }
+
@EventHandler
public void IronDoor(PlayerInteractEvent event)
{
@@ -417,6 +471,19 @@ public class Gameplay extends MiniPlugin
event.SetCancelled("Spawn Fall");
}
+ /**
+ * Cancel the spawning of all Witches.
+ * @param event
+ */
+ @EventHandler
+ public void cancelWitchSpawns(EntitySpawnEvent event)
+ {
+ if (event.getEntityType() == EntityType.WITCH)
+ {
+ event.setCancelled(true);
+ }
+ }
+
@EventHandler
public void Repair(PlayerInteractEvent event)
{
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java
index 28670c413..8926bb09c 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java
@@ -33,7 +33,7 @@ public class AlligatorsTooth extends LegendaryItem
if (isInWater(wielder))
{
// Player gain water breathing while under water with legendary equipped
- grantPotionEffect(wielder, PotionEffectType.WATER_BREATHING, 0, 20);
+ grantPotionEffect(wielder, PotionEffectType.WATER_BREATHING, 0, 50);
if (isHoldingRightClick())
{
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/BankPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/BankPage.java
index 45ec9a154..5e00d6962 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/BankPage.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/BankPage.java
@@ -87,7 +87,7 @@ public class BankPage extends ShopPageBase
private void buildTransferGemsCooldown()
{
- StoreGoldButton button = new StoreGoldButton(this);
+ DisplayButton button = new DisplayButton();
String title = ChatColor.RED + C.Bold + "Conversion Cooldown!";
String purchaseString = ChatColor.RESET + C.cWhite + "You have already converted gems into coins today";
ShopItem shopItem = new ShopItem(Material.REDSTONE_BLOCK, title, new String[] {" ", purchaseString, " "}, 0, true, true);
@@ -112,7 +112,7 @@ public class BankPage extends ShopPageBase
int playerGold = getPlayerGold();
int goldCost = TOKEN_VALUE;
- StoreGoldButton button = new StoreGoldButton(this);
+ DisplayButton button = new DisplayButton();
String title = ChatColor.RED + C.Bold + "Missing Gold!";
String playerGoldString = ChatColor.RESET + F.value("Your Gold", playerGold + "g");
String purchaseString = ChatColor.RESET + C.cWhite + "You don't have enough gold";
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/DisplayButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/DisplayButton.java
new file mode 100644
index 000000000..f2e04bb5e
--- /dev/null
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/shop/bank/DisplayButton.java
@@ -0,0 +1,24 @@
+package mineplex.game.clans.shop.bank;
+
+import org.bukkit.Sound;
+import org.bukkit.entity.Player;
+import org.bukkit.event.inventory.ClickType;
+
+import mineplex.core.shop.item.IButton;
+import mineplex.game.clans.economy.GoldManager;
+
+public class DisplayButton implements IButton
+{
+
+ public DisplayButton()
+ {
+
+ }
+
+ @Override
+ public void onClick(Player player, ClickType clickType)
+ {
+ // Display button doesn't activate any on click events
+ }
+
+}
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java
index 1e9d7892b..5b3417ccd 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java
@@ -6,6 +6,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Entity;
+import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockBreakEvent;
@@ -14,6 +15,7 @@ import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.entity.EntityTargetEvent;
+import org.bukkit.event.hanging.HangingBreakByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.plugin.java.JavaPlugin;
@@ -51,6 +53,22 @@ public class Spawn extends MiniPlugin
}
}
+ /**
+ * Prevent {@link ItemFrame}s from being broken inside Spawn.
+ * @param event
+ */
+ @EventHandler
+ public void onItemFrameDestroyed(HangingBreakByEntityEvent event)
+ {
+ if (event.getEntity() instanceof ItemFrame)
+ {
+ if (isInSpawn(event.getEntity().getLocation()))
+ {
+ event.setCancelled(true);
+ }
+ }
+ }
+
@EventHandler
public void onRespawn(PlayerRespawnEvent event)
{
@@ -78,7 +96,7 @@ public class Spawn extends MiniPlugin
@EventHandler
public void onEntityTarget(EntityTargetEvent event)
{
- if (isInSpawn(event.getTarget().getLocation()))
+ if (event.getTarget() != null && isInSpawn(event.getTarget().getLocation()))
{
event.setCancelled(true);
}
diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Brute.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Brute.java
index 573fa3ff8..63a98526a 100644
--- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Brute.java
+++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Brute.java
@@ -10,8 +10,9 @@ import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import mineplex.minecraft.game.classcombat.Skill.Skill;
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
+import mineplex.minecraft.game.classcombat.Skill.Global.BowDeficiencySkill;
-public class Brute extends Skill
+public class Brute extends BowDeficiencySkill
{
public Brute(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels)
{
@@ -43,25 +44,10 @@ public class Brute extends Skill
event.SetBrute();
}
- @EventHandler
- public void BowShoot(EntityShootBowEvent event)
- {
- if (getLevel(event.getEntity()) == 0)
- return;
-
- event.getProjectile().setVelocity(event.getProjectile().getVelocity().multiply(0.75));
- }
-
@EventHandler
public void CancelEnergy(EnergyEvent event)
{
if (getLevel(event.GetPlayer()) > 0)
event.setCancelled(true);
}
-
- @Override
- public void Reset(Player player)
- {
-
- }
}
diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/BowDeficiencySkill.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/BowDeficiencySkill.java
new file mode 100644
index 000000000..9f5978423
--- /dev/null
+++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/BowDeficiencySkill.java
@@ -0,0 +1,57 @@
+package mineplex.minecraft.game.classcombat.Skill.Global;
+
+import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
+import mineplex.minecraft.game.classcombat.Skill.Skill;
+import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
+import mineplex.minecraft.game.core.damage.CustomDamageEvent;
+
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.entity.EntityShootBowEvent;
+
+/**
+ * The BowDeficiencySkill provides a reduction in overall arrow velocity and damage to owners.
+ * @author MrTwiggy
+ *
+ */
+public class BowDeficiencySkill extends Skill
+{
+
+ public BowDeficiencySkill(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int maxLevel)
+ {
+ super(skills, name, classType, skillType, cost, maxLevel);
+ }
+
+ /**
+ * Reduce outgoing arrow velocity by bow deficiency owners.
+ * @param event
+ */
+ @EventHandler
+ public void BowShoot(EntityShootBowEvent event)
+ {
+ if (getLevel(event.getEntity()) == 0)
+ return;
+
+ event.getProjectile().setVelocity(event.getProjectile().getVelocity().multiply(0.75));
+ }
+
+ /**
+ * Reduce damage output of arrows shot by bow deficiency owners.
+ * @param event
+ */
+ @EventHandler
+ public void onArrowDamage(CustomDamageEvent event)
+ {
+ // Check to see if arrow was shot by owner of this Skill.
+ if (event.GetProjectile() == null || getLevel(event.GetDamagerEntity(true)) == 0)
+ return;
+
+ event.AddMod("BowDeficiencySkill", -2.0d);
+ }
+
+ @Override
+ public void Reset(Player player)
+ {
+
+ }
+}
diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Knight.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Knight.java
index eff3aec2f..d837b2732 100644
--- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Knight.java
+++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Knight.java
@@ -8,8 +8,9 @@ import mineplex.core.energy.event.EnergyEvent;
import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
import mineplex.minecraft.game.classcombat.Skill.Skill;
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
+import mineplex.minecraft.game.classcombat.Skill.Global.BowDeficiencySkill;
-public class Knight extends Skill
+public class Knight extends BowDeficiencySkill
{
public Knight(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels)
{
@@ -20,15 +21,6 @@ public class Knight extends Skill
"25% reduction in Arrow Velocity."
});
}
-
- @EventHandler
- public void BowShoot(EntityShootBowEvent event)
- {
- if (getLevel(event.getEntity()) == 0)
- return;
-
- event.getProjectile().setVelocity(event.getProjectile().getVelocity().multiply(0.75));
- }
@EventHandler
public void CancelEnergy(EnergyEvent event)
@@ -36,10 +28,4 @@ public class Knight extends Skill
if (getLevel(event.GetPlayer()) > 0)
event.setCancelled(true);
}
-
- @Override
- public void Reset(Player player)
- {
-
- }
}
diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Mage.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Mage.java
index 38c119541..96afcc79a 100644
--- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Mage.java
+++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Mage.java
@@ -1,14 +1,20 @@
package mineplex.minecraft.game.classcombat.Skill.Mage;
+import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;
+import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityShootBowEvent;
+import org.bukkit.metadata.FixedMetadataValue;
+import org.bukkit.metadata.MetadataValue;
import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
import mineplex.minecraft.game.classcombat.Skill.Skill;
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
+import mineplex.minecraft.game.classcombat.Skill.Global.BowDeficiencySkill;
+import mineplex.minecraft.game.core.damage.CustomDamageEvent;
-public class Mage extends Skill
+public class Mage extends BowDeficiencySkill
{
public Mage(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels)
{
@@ -20,18 +26,5 @@ public class Mage extends Skill
});
}
- @EventHandler
- public void BowShoot(EntityShootBowEvent event)
- {
- if (getLevel(event.getEntity()) == 0)
- return;
-
- event.getProjectile().setVelocity(event.getProjectile().getVelocity().multiply(0.75));
- }
-
- @Override
- public void Reset(Player player)
- {
-
- }
+
}
diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java
index 1e24bc023..b215765e1 100644
--- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java
+++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillFactory.java
@@ -40,6 +40,7 @@ import org.bukkit.plugin.java.JavaPlugin;
public class SkillFactory extends MiniPlugin implements ISkillFactory
{
+
private DamageManager _damageManager;
private IRelation _relation;
private CombatManager _combatManager;
@@ -581,6 +582,11 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
System.out.println("Skill Factory: Removed " + remove.GetName() + " from SkillMap.");
}
+
+ public void removeSkill(String skillName)
+ {
+ RemoveSkill(skillName, null);
+ }
@Override
public List GetGlobalSkillsFor(IPvpClass gameClass)
diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/redis/RedisConfig.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/redis/RedisConfig.java
index cd841fc6f..913db74ef 100644
--- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/redis/RedisConfig.java
+++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/redis/RedisConfig.java
@@ -16,7 +16,7 @@ public class RedisConfig
// The connections managed by this configuration
private List _connections;
-
+
/**
* Class constructor
* @param connections